Hallo, ich habe folgendes Problem mit einem Servo. Ich soll mit einem Mikrontroller und einem Servo (bzw 2) eine automatische Spiegelsteuerung mit Memoryfunktion relalisieren. Über 2 (bzw. 4) Tasetr wird die Position des Spiegels eingestellt. Anschließend kann diese über eine Speichertaste gespeichert werden. Wenn ich den Servo nun an eine andere Stelle fahre und die gespeicherte Position aufrufe rast der Servo in die Stellung. Mein Problem ist und dass der Servo in der gleichen Geschwindigkeit an die Stelle fährt wie wenn ich ihn manuell fahre. Vielleicht könnt ihr mir da helfen. ;----------------------------------------------------------------------- - ;Initialisierungsteil für allgemeine Konstanten ;----------------------------------------------------------------------- - Periode_low EQU 0E0H ;legt die Periodendauer fest 20ms Periode_high EQU 0B1H ;45536 = 0B1E0H PWMANL EQU 024H ;Compare Wert 2ms => 18 ms PWMANH EQU 0FAH ;Compare Wert F830H CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp INIT ;----------------------------------------------------------------------- - ;Interrupt-Vektoren ;----------------------------------------------------------------------- - ORG 000BH call SPRUNG1 reti ;----------------------------------------------------------------------- - ;Initialisierungsteil für On-Chip Peripherie ;----------------------------------------------------------------------- - ORG 100H ;Programmstart bei 100H INIT: mov TMOD,#00000001B ;Timer 0 Initialisierung 16-Bit mov IEN0,#10010010B ;Interrupt Freigabe mov T2CON,#00010001B ;Timer2 Einstellung:Timer mit f=f(osz)/12 ;Mode 0 ->Reload bei Ueberlauf mov CCEN,#00001000B ;Compare Mode des CC1 freigeben mov CRCL,#Periode_low ;Low Byte von Compare Reload Capture mov CRCH,#Periode_high ;High Byte von Compare Reload Capture mov CCH1,#PWMANH ;Pulsweitenmodulation Anfangswert mov CCL1,#PWMANL setb TR0 ;Timer0 läuft los ;----------------------------------------------------------------------- - ;Programmschleife ;----------------------------------------------------------------------- - PWM: jmp PWM SPRUNG1: jnb P1.7,ABFRAGE jmp ISRTIMER0 ABFRAGE: mov R2,#08h mov R5,#02h mov A,CCL1 SCHLEIFE: cjne A,3, zaehlen jmp ENDE zaehlen: jc hoch dec CCL1 dec A jmp INNER hoch: inc CCL1 inc A jmp INNER INNER: djnz R2, SCHLEIFE ENDE: mov A,CCH1 cjne A,4, zaehleng jmp RUNDE zaehleng: jc hochg dec CCH1 dec A jmp RUNDE hochg: inc CCH1 inc A jmp RUNDE RUNDE: mov R6,#0F0h RUNDE1: mov R7,#0A5h Runde2: djnz R7, RUNDE2 djnz R6, RUNDE1 djnz R5, RUNDE jmp ABFRAGE ENDE1: ;mov CCL1,R3 ;mov CCH1,R4 ISRTIMER0: jb P1.2,TASTE3 ;T2 abwaerts nicht betätigt clr C mov A,CCL1 ;Inhalt von CCL1 subb A,#16 ;oberes Nibble um 1 erniedrigen mov CCL1,A ;Neuer Comparewert LB jnc TASTE3 ;High-Byte wird nicht verändert mov A,CCH1 ;Inhalt von CCH1 dec A ;Inhalt um 1 erniedrigen mov CCH1,A ;Neuer Comparewert HB TASTE3: jb P1.3,ISRENDE ;T3 aufwaerts nicht betätigt clr C mov A,CCL1 ;Inhalt von CCL1 add A,#16 ;oberes Nibble um 1 erniedrigen mov CCL1,A ;Neuer Comparewert LB jnc ISRENDE ;High-Byte wird nicht verändert mov A,CCH1 ;Inhalt von CCH1 inc A ;Inhalt um 1 erniedrigen mov CCH1,A ;Neuer Comparewert HB ISRENDE: jnb P1.5,Speichern ret Speichern: mov R3,CCL1 mov R4,CCH1 ret end Kommentare sidn ab un zu fehlerhaft. Danke schon mal im vorraus Gruß Benedict
Die Regelgeschwindigkeit des Servos haengt mit einem internen Regelalgorithmus zusammen. Es gibt 2 Wege. 1) Selbst die Rampe vom Alten zum neuen Wert rechnen und so ausgeben 2) Widerstand als Strombegrenzung in die Speisung
> 2) Widerstand als Strombegrenzung in die Speisung
Scheint mir eher ungünstig. Damit wird die Sache lastabhängig, und die
Elektronik funktioniert vermutlich beim Bewegen nicht mehr richtig, weil
die Spannung zu weit absackt. Das hängt dann auch noch davon ab, welche
Servos man einsetzt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.