PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PIC + SERVO + RS232



04.05.2005, 16:57
Hallo Leute,

wie stell ich es an (aufbau einer schnellen Schleife) das mein Servo immer Aktuallisiert wird ohne immer di eZeit zu verlieren beim RS232 Eingang?

Mein Programmcode bis jetzt "easy" :-)


'************************************************* ***************
'* Name : SERVO via RS232 *
'* Author : Sommer Ulli *
'* Notice : Copyright (c) 2005 Sommer Ulli *
'* : All Rights Reserved *
'* Date : 11.04.2005 *
'* Version : 1.0 *
'* Notes : PROTON+ Compiler *
'* : *
'************************************************* ***************

Include "PROTON_4.INC"

POS1 var Word
last var Word
count1 var Word


SERIALL:
HSERIN 500,MOVE,[Wait ("PIC2,"),dec POS1,10,13]
last = POS1 * 4
goto MOVE

MOVE:
Count1 = 0
for Count1 = 0 to 40
delayms 5
low PORTD.0
SERVO PORTD.2,800 + last
next Count1
high PORTD.0
goto SERIALL]


Also ich Warte bis von meinen PC-Programm PIC2, kommt, lese dananach die Position und gehe dann zum Servo stellen über.

Der Bug ist der das die Servo Rutine immer laufen müsste um einen hohen Haltemoment am Servo zu bekommen.
Grund ist der, das der Servo Befehl in dieser Schleife 40 mal ausgeführt wird und somit 40 * 5ms lang den Impulse stehen lässt dach Seriell einlesen will (da geht der Imp. auf Ausgang auf Low da keine durchlauf) und mir somit der Servo einbricht (keine ausregelung da kein Impulse).

Wie schreibe ich eine Schleife oder mache ich das ganze das dies nicht passiert? Ich sende vom PC mit var Zeiten 5 - 1Sec kein Problem desto schneller wird das ganze aber ich will ja damit nicht den Programmdurchlauf davon abhängig machen.

Ich hoffe ich hab es einigermassen erklären können.

Danke für eue Hilfe Ulli

Ciclope
04.05.2005, 17:44
Hallo,


nutze doch die IRQ !!!! In der ISR läßt du deinen Servo ansteuern.

Gruß

Sommer
04.05.2005, 23:05
Hi,

ja daran hab ich auch schon gedacht aber ich hab keinen Plan wie ich des machen soll unter Proton+?

Sollte mir jemand helfen könne vielen Dank

By Ulli

Smi
07.05.2005, 01:54
Ich habe heute meine servosteuerung fertiggestellt mit einer genau 20,009ms schleife die eine pulweite mit 100 stellmöglichkeiten von 0,600ms bis 2,700 ms kann.das ganze für bis zu 12 servos.

Smi
07.05.2005, 02:01
Ach ja ich benutze timer 2 fur die schleife bei 4mhz
1000000:16:125:10 is bei mir 50 Hz und das sind 20 ms
als main wird ein counter hochgezähl der aller 5 µs die servos abfagt und bei ereichen des stellwertes diese abschaltet.
der init macht die wieder an in 5µs abständen.und nimm nich das return beim init
wies in c geht keine ahnung ich progge asm

Sommer
08.05.2005, 10:51
Hi,

du lässt ihn abschalten?

Das Problem ist bei mir das die Abschaltung zu lange ist wenn die Daten eingelsen werden und der Servo dabei keine Ausregelung hat und man ihn drehen kann.

Das ganze dauer ein paar ms je nach dem wann er die daten bekommt.

Kannst du den ablauf deines Programmes mal genau darstellen wie du vorgehst vieleicht kann ich was daraus übernehemen.

Bye Ulli

Smi
09.05.2005, 12:59
Servos steuertz man mit puslen sekunde0 pulse 5v 1,5 ms danach 0v abgeschaltet bis 20 ms und von vorn.
Nehme timer 2 mit vt 16 und der zahlt bis 125 und das durch 10 Nt sind genau 50 hz pulse aller 20 ms .

Sommer
09.05.2005, 23:54
Hi,

die Pulse und die Ansteuerung sind auch das Problem nicht.
Nur die Pause beim Auslesen der RS232 ohne RxD Ansynchrone Übergabe machen die Pause teils länger.

Hab es nun mit I2C gelöst geht wie Feuerwehr *g* ohen das der SErvo langsamer oder verzögert wird.

Bye Ulli

Smi
11.05.2005, 22:30
ich hab 10 ms zeit für die übertragung das reicht aus