Benutzer-Werkzeuge

Webseiten-Werkzeuge


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

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
projects:4e4th:4e4th:start:msp430g2553_experimente:servotester [2014-07-16 00:24] – [Wie lange dauert das dann?] mkaprojects:4e4th:4e4th:start:msp430g2553_experimente:servotester [2018-05-02 17:58] (aktuell) – [Servotester für analoge Servos im Modellbau] mka
Zeile 2: Zeile 2:
  
  
-So ein [[http://de.wikipedia.org/wiki/Servo|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.+So ein [[http://de.wikipedia.org/wiki/Servo|analoges Servo]] ist genügsam. 4 bis 5V Versorgungsspannung (4 Accu-Zellen) und ein ähnlicher Pegel für den Puls am Steuereingang 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 ===== ===== 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: [[projects:4e4th:4e4th:start:msp430g2553_experimente:|Grundlegende  Experimente mit einer MCU]]). +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: [[projects:4e4th:4e4th:start:msp430g2553_experimente:|Grundlegende  Experimente mit einer MCU]]). Der Widerstand **R1 = 0Ω** in diesem Experiment ist nur eine Drahtbrücke
  
 {{:projects:4e4th:4e4th:start:msp430g2553_experimente:servo-up-schema.png?200|Anschluß der Servos}}{{:projects:4e4th:4e4th:start:msp430g2553_experimente:servotester.jpg?200|Testaufbau}} {{:projects:4e4th:4e4th:start:msp430g2553_experimente:servo-up-schema.png?200|Anschluß der Servos}}{{:projects:4e4th:4e4th:start:msp430g2553_experimente:servotester.jpg?200|Testaufbau}}
Zeile 12: Zeile 12:
 ===== Testprogramm für 8 Servos ===== ===== Testprogramm für 8 Servos =====
  
-Am Steuereingang werden [[http://de.wikipedia.org/wiki/Pulsweitenmodulation|Rechteckpulse]] im 50Hz Takt erwartet, also ca. alle 20ms. Annähernd Vollausschlag in die eine Richtung liegt vor bei einem [[http://www.electronicsplanet.ch/Roboter/Servo/intern/intern.htm|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. +Am Steuereingang werden [[http://de.wikipedia.org/wiki/Pulsweitenmodulation|Rechteckpulse]] im 50Hz Takt erwartet, also ca. alle 20ms. Annähernd Vollausschlag in die eine Richtung liegt vor bei einem [[http://www.electronicsplanet.ch/Roboter/Servo/intern/intern.htm|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-Timing 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 .  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 . 
Zeile 59: Zeile 59:
   DECIMAL   DECIMAL
   VARIABLE RESTDAUER   VARIABLE RESTDAUER
-  : REST  restdauer @ 0 DO LOOP key? ;+  : REST    restdauer @ 0 DO LOOP ;
   : P2SET   true p2dir c!   zero p2 c!  zero p2sel c! ;   : P2SET   true p2dir c!   zero p2 c!  zero p2sel c! ;
-  : NEU   13072 restdauer !   p2set ;+  : NEU     13072 restdauer !   p2set ;
      
   \ erzeuge Puls der Breite x an Pin p vom Port adr.   \ erzeuge Puls der Breite x an Pin p vom Port adr.
   : SUBREST    ( n -- ) negate restdauer +! ;   : SUBREST    ( n -- ) negate restdauer +! ;
-  : PULS    ( x p adr -- )    +  : PULS       ( x p adr -- )    
      2dup >r >r  cset    \ H-Pegel      2dup >r >r  cset    \ H-Pegel
      dup subrest  0 DO LOOP \ Pulsbreite warten      dup subrest  0 DO LOOP \ Pulsbreite warten
Zeile 81: Zeile 81:
     2000 us p2.6 puls     2000 us p2.6 puls
     2000 us p2.7 puls     2000 us p2.7 puls
-    rest UNTIL key drop ;+    rest  key? UNTIL key drop ;
   : TEST1   : TEST1
     BEGIN neu     BEGIN neu
Zeile 92: Zeile 92:
     1000 us p2.6 puls     1000 us p2.6 puls
     1000 us p2.7 puls     1000 us p2.7 puls
-    rest UNTIL key drop ;+    rest  key? UNTIL key drop ;
          
   : RUN  ( -- )  5 0 do test1 test2 loop ; \ druecke mehrmals eine Taste wenns lauft.   : RUN  ( -- )  5 0 do test1 test2 loop ; \ druecke mehrmals eine Taste wenns lauft.
Zeile 121: Zeile 121:
     key? UNTIL key drop ;      key? UNTIL key drop ; 
  
-Rregelmäßige wiederkehrende Ereignisse sind am Oszilloskop ganz gut zu triggern. Mit dem Voltcraft USB-DSO ging das mit dem automatischen Trigger auf die Motoraktion, ermöglicht durch einen geringen Widerstand in der Versorgungsleitung eines Servos. 3Ω zwischen Vss und dem Servo reichten schon aus, um einen erkennbaren Spannungsabfall hinter dem Widerstand bei jeder Servoaktion hervorzurufen+{{ :projects:4e4th:4e4th:start:msp430g2553_experimente:servofahrtest1-nocur.jpg?300|Servofahrtest}} Regelmäßige wiederkehrende Ereignisse sind am Oszilloskop ganz gut zu triggern. Mit dem Voltcraft USB-DSO ging das mit dem automatischen Trigger auf die Servoaktion. Dazu wurde im Aufbau die Drahtbrücke R1 gegen einen kleinen Widerstand ausgetauscht**R1 = ** zwischen Vss und dem Servo reichten schon aus, um einen gut erkennbaren kurzen Spannungsabfall von 5V auf 3V  hinter dem Widerstand hervorzurufen bei jeder Servoaktion - grüne Kurve im Bild, Kanal2 (CH2). Die gelbe Kurve (CH1) zeigt die Pulsserien die an den Servo gingen. 
-  + 
 +Anhand der kleinen Puls-Pausen kann man identifizieren welche Pulsserie gerade abgelaufen war. Der kürzeren Pause gingen die 1 ms Pulse voraus (rechts im Bild), und der längeren die 2 ms Pulse, (links im Bild). Mit jeder Pulsserie fuhr der Motor in die andere Richtung. Man erkennt wie die Spannung einbrach, wenn der Motor startete, und sich dann einpendelte wenn er lief. Nach **20 bis 21 Pulsen** bleib der Motor stehen, aber es gab auch danach noch kurze Regelpulse der Servoelektronik. Bei den 1ms Steuer-Pulsen waren es immer nur wenige nachlaufende Regelpulse, im Bild waren es 7 Stück. Bei den 2ms-Pulsen waren es immer viele, über die ganze Steuerpulsserie hinweg. Ich deute das so, dass der Motor auf dieser Seite noch nicht am mechanischen Anschlag war, sondern in einer Position davor gehalten wurde. Der Servo brummte dabei auch leise, was er in der anderen Endstellung nicht tat. So kann man abzählen das dieser Servo nach 20 Pulsen, die alle 20ms kamen, einen vollen Fahrweg machte, also **400 ms** benötigte, ungefähr eine 1/2 Sekunde. 
 + 
 +==== Anmerkung ==== 
 +Ein anderer Ansatz, die Servos praktisch gleichzeitig anzusteuern, wurde auch ausprobiert. Die Pulsbreite wurde in einer Variablen abgelegt, zehn davon in einem Feld. Diese wurden zyklisch herunter gezählt, um beim Nulldurchgang den zugehörigen Puls zu beenden. Dieses Verfahren, Software-Zähler mit preset zu bauen und diese zu pollen, war aber in high level Forth zu langsam. Damit konnten nur ca. 3 verschiedene Positionen am Servo eingestellt werden. Es wurde also eine viel zu geringe zeitliche Auflösung erzielt. Hier kommt man also an eine Grenze des 4e4th Forth auf dieser MCU.  
 + 
 +Im Rahmen der grundlegenden Experimente wurde darauf verzichtet hier assemblierten, interrupt-getriebenen Code auszuarbeiten, der schnell genug für diesen Ansatz wäre. Denn es ging um das Prinzip der Servoansteuerung, und durchaus auch darum solche Grenzen zu erfahren.  
projects/4e4th/4e4th/start/msp430g2553_experimente/servotester.txt · Zuletzt geändert: 2018-05-02 17:58 von mka