Benutzer-Werkzeuge

Webseiten-Werkzeuge


projects:4e4th:4e4th:start:msp430g2553_experimente:servotester

Dies ist eine alte Version des Dokuments!


Servotester für analoge Servos im Modellbau

So ein analoges Servo ist genügsam. 4 bis 5V Versorgungsspannung (4 Accu-Zellen) und irgendein Pegel ähnlicher Pegel für den Puls am Seuereingang genügt bereits. Weder die Versorgung noch der Pegel müssen genau sein. Im Modell sinkt die Versorgungsspannung mit nachlassender Ladung der Akkus ja auch.

Aufbau

Die Schaltung ist ganz unkompliziert. Der Portpin kann direkt an den Steuereingang eines Servos angeschlossen werden. Die Servos benötigen jedoch ihre eigene Stromversorgung, wenn im Experiment die MCU auf dem MSP430-LaunchPad verwendet wird. (Siehe auch: Grundlegende Experimente mit einer MCU).

Anschluß der ServosTestaufbau }

Testprogramm für 8 Servos

Am Steuereingang werden Rechteckpulse im 50Hz Takt erwartet, also ca. alle 20ms. Annähernd Vollausschlag in die eine Richtung liegt vor bei einem Puls von 1ms Breite, in die andere Richtung bei 2ms. Das ließe sich mit der PWM-Funktion der MCU machen, doch dann wäre bei zwei Servos Schluß, da nur zwei Timer da sind. Für eine ganze Reihe Servos muss ein Software-Timer her. Das Timing ist ja eher gemütlich, und so geht das bequem in high level Forth.

Im Testprogramm erhalten die Servos ihren Puls einfach nacheinander. Auf diese Weise passen bis zu 9 Servo-Pulse in die 50Hz Wiederholrate, also die 20 ms Lücke die ein Servo erwartet. Das ist schnell genug für viele Modellbau Zwecke denke ich, zumal die Stellzeit so eines Servos für eine volle Fahrt vom linken zum rechten Anschlag ja im Bereich 500ms liegt .

Der Sortware-Trick besteht darin, die Warteschleife für die Lücke um die Pulszeiten, die schon abgelaufen sind, zu verkürzen. Dann kommt der erste Puls wieder rechtzeitig, und es entsteht für jeden Servo ein 50Hz Puls-Signal. Im übrigen wird einfach nur ein Portpin an und wieder ausgeschaltet. Die Pulsbreite wird ganz simpel durch eine leere Schleife generiert. Die Durchlaufzahl wurde ausprobiert, und ein Korrekturfaktor ermittelt. Damit wird dann die Angabe in µs in die Schleifenumläufe umgerechnet. So kann man die gewünschte Pulsbreite in Mikrosekunden vorgeben. Der Korrekturfaktor ist natürlich abhängig von der Taktfrequenz der MCU. Meine lief mit dem internen Taktgenerator von ca. 8MHz.

2 Servos, 1ms Puls gefolgt von 2ms Puls, 50Hz Wiederholung; Kanal 0 und 1 2 Servos, 1ms Puls gefolgt von 2ms Puls, 50Hz Wiederholung; Kanal 0 und 22 Servos, 1ms Puls gefolgt von 2ms Puls, 50Hz Wiederholung; Kanal 0 und 7 Ablaufschema der Pulse, Kanäle 0...7

Da ich nur ein 2-Kanal-Oscilloskop hatte, mussten die Kanäle paarweise verglichen werden. Man kann trotzdem ganz gut sehen wie die PWM-Kanäle zeitlich wandern. Das Ablaufschema der Pulse zeigt wie man sich das vorstellen kann, könnte man alle gleichzeitig darstellen.

Quellcode in Forth

\ PWM Pulse fuer 8 analoge Servos 

: ?  ( adr -- ) @ . ;   \ hilft testen

BIN \ 76543210 
      10000000 CONSTANT BIT7 
      01000000 CONSTANT BIT6 
      00100000 CONSTANT BIT5 
      00010000 CONSTANT BIT4 
      00001000 CONSTANT BIT3 
      00000100 CONSTANT BIT2 
      00000010 CONSTANT BIT1 
      00000001 CONSTANT BIT0 

HEX
FFFF CONSTANT TRUE
29 CONSTANT P2OUT  \ alias P2
2A CONSTANT P2DIR
2E CONSTANT P2SEL 

BIT0 P2 2CONSTANT P2.0  
BIT1 P2 2CONSTANT P2.1  
BIT2 P2 2CONSTANT P2.2  
BIT3 P2 2CONSTANT P2.3  
BIT4 P2 2CONSTANT P2.4  
BIT5 P2 2CONSTANT P2.5  
BIT6 P2 2CONSTANT P2.6  
BIT7 P2 2CONSTANT P2.7  


DECIMAL
VARIABLE RESTDAUER
: REST  restdauer @ 0 DO LOOP key? ;
: P2SET   true p2dir c!   zero p2 c!  zero p2sel c! ;
: NEU   13072 restdauer !   p2set ;

\ erzeuge Puls der Breite x an Pin p vom Port adr.
: SUBREST    ( n -- ) negate restdauer +! ;
: PULS    ( x p adr -- )    
   2dup >r >r  cset    \ H-Pegel
   dup subrest  0 DO LOOP \ Pulsbreite warten
   r> r> cclr ;        \ L-Pegel
: us  31 / 20 * ;   ( Der Korrekturfaktor muss experimentell ermittelt werden. )

: TEST2
  BEGIN neu
  2000 us p2.0 puls
  2000 us p2.1 puls
  2000 us p2.2 puls
  2000 us p2.3 puls
  2000 us p2.4 puls
  2000 us p2.5 puls
  2000 us p2.6 puls
  2000 us p2.7 puls
  rest UNTIL key drop ;
: TEST1
  BEGIN neu
  1000 us p2.0 puls
  1000 us p2.1 puls
  1000 us p2.2 puls
  1000 us p2.3 puls
  1000 us p2.4 puls
  1000 us p2.5 puls
  1000 us p2.6 puls
  1000 us p2.7 puls
  rest UNTIL key drop ;
  
: RUN  ( -- )  5 0 do test1 test2 loop ; \ druecke mehrmals eine Taste wenns lauft.

Experiment zum Fahrweg

An einem einzelnen Servo lässt sich mit einem weiteren kleinen Programm zeigen, wie sich der Servo bei vollem Fahrweg verhält. Wird von 1ms auf 2ms Pulsbreite umgeschaltet, fährt der Servo einen vollen Weg. Schaltet man von 2ms auf 1ms zurück, fährt er zurück.

projects/4e4th/4e4th/start/msp430g2553_experimente/servotester.1405461223.txt.gz · Zuletzt geändert: 2014-07-15 23:53 von mka