PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem bei Servo Ansteuerung



gudion
14.01.2011, 18:56
Hallo,

ich habe mich bei meiner Servo Ansteuerung für die Timer Methode entschieden (http://www.rn-wissen.de/index.php/Servoansteuerung)

Bei dem ganzen hat sich der Servo hin und wieder kurz gedreht, zuletzt gar nicht mehr
Nach dem drehen hat er immer eine weile gebrummt und danach das board neu gestartet, als hätte er die stromzufuhr kurz gekappt (versorgung über 9V batterie)

So sieht die Ansteuerung aus:
Timerinitialisierung

Config Timer0 = Timer , Prescale = 1024 'timer für servos
Timer0 = 230 '224 bis 239
Config Porta.0 = Output
Porta.0 = 0
On Timer0 Isr_servo

Meine Rechnung dazu:
16 mhz / 1024 / 1000 ergibt 15,...
daraus ergibt sich der bereich für den timer
timer1 ist schon anderweidig vergeben, daher kann ich den nicht nehmen
(der Timer wird per Tastendruck aktiviert)

Die Isr


Isr_servo:
If Aktiv = 2 Then
Print "Ende"
Else
If Aktiv = 0 Then
Porta.0 = 1 'und port anschalten
Aktiv = 1
Print "An"
Else
Porta.0 = 0 'dann port wieder ausschalten
Disable Timer0
Aktiv = 2
Print "aus"
Waitms 20
End If
End If
Return

das ganze mit oder ohne die 20ms wartezeit
das board meldet ordentlich "An", "aus" und "Ende" nacheinander, danach der oben beschriebene effekt

abgesehen davon das Disable bei Timern offenbar nicht funktioniert (sonst gäbs kein "Ende") weiß einer woran es liegt?

Dirk
14.01.2011, 19:41
Den Code im RN-Wissen solltest du dir noch mal genau ansehen!

Nur ein paar Sachen, die so nicht klappen:
1. Dein Timer läuft mit ca. 600Hz, d.h. die ISR wird alle ~1,7ms aufgerufen. Das wäre im Prinzip "fast" die Servo-Mittelstellung. Aber warum "disablest" du dann den Timer? Es müssen viele identische Impulse folgen, damit das Servo in eine Stellung fährt.
2. Alle 20ms muss der Impuls wiederholt werden. Das geht nicht mit einem Waitms in der ISR! Eine ISR muss so schnell wie möglich ablaufen. Warten darf man nicht in der ISR. Sieh dir das Beispiel aus dem RN-Wissen genau an!
3. Wenn das Servo "brummt" dann arbeitet es gegen einen Anschlag und verbraucht dabei extrem viel Strom. Der bringt dann dein Board zum Reset, weil dort die Versorgungs-Spannung einbricht. Das sieht dann so aus, dass das Board "neu startet".

Gruß Dirk