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
Nächste ÜberarbeitungBeide Seiten der Revision
projects:4e4th:4e4th:start:msp430g2553_experimente:servotester [2014-07-15 23:53] – [Experiment zum Fahrweg für ein Servo] mkaprojects:4e4th:4e4th:start:msp430g2553_experimente:servotester [2014-07-18 02:36] – [Anmerkung] mka
Zeile 6: Zeile 6:
  
  
-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 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 98: Zeile 98:
 ===== Experiment zum Fahrweg ===== ===== 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.+An einem einzelnen Servo lässt sich mit einem weiteren kleinen Programm zeigen, wie sich der Servo bei vollem Fahrweg verhält. Wird von 1 ms auf 2 ms Pulsbreite umgeschaltet, fährt der Servo einen vollen Weg. Schaltet man von 2 ms auf 1 ms zurück, fährt er zurück. Hört man mit den Pulsen zu früh auf, bleibt der Servo unterwegs einfach stehen
  
 +==== Wieviele Pulse sind für einen vollen Weg des Servos nötig? ====
 +
 +  \ Erste Annäherung: Beobachten bis der volle Weg offensichtlich da ist.   
 +  : FAHRTEST1    
 +    100 10 DO 
 +       key? IF key drop leave THEN  i .
 +       i 0 DO neu 1000 us p2.0 puls rest LOOP 
 +       i 0 DO neu 2000 us p2.0 puls rest LOOP 
 +    LOOP ;
 +
 +Dazu kann der Aufbau unverändert benutzt werden. Sobald man den Eindruck hat das der Servo den vollen Fahrweg zurück gelegt hat, drückt man eine Taste und das Experiment stoppt. Die zuletzt ausgegebene Zahl ist die Anzahl der Pulswiederholungen. Nach einigen Durchgängen bekommt man ein ganz gutes Gefühl dafür. Bei meiner Anordnung kam ich so auf geschätzte 20 bis 23 Pulse. Rund 40 Pulse ergaben einen Rhythmus von praktisch gleich langem Hin- und Herfahren und still stehen.
 +
 +==== Wie lange dauert das dann? ====
 +
 +  \ Beobachten von vollen Wegen am Oszilloskop.
 +  : FAHRTEST2  
 +    BEGIN
 +       40 0 DO neu 1000 us p2.0 puls rest LOOP  100 ms
 +       40 0 DO neu 2000 us p2.0 puls rest LOOP  200 ms
 +    key? UNTIL key drop ; 
 +
 +{{ :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 = 3Ω** 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