Servo ansteuern leicht gemacht

Die Ansteuerung des Servos ist deutlich einfacher als beim Galileo, trotzdem wenden wir etwas mehr Code auf, um den Ablauf verständlicher zu gestalten.

Stellenmarkt
  1. Projektleiter (w/m/d)
    youknow GmbH, Dortmund
  2. Teamleiter Lösungen Justiz (w/m/d)
    Dataport, Altenholz/Kiel, Hamburg
Detailsuche

Zur Erinnerung: Ein Servo wird gesteuert, indem ein elektrischer Impuls mit einer definierten Dauer an den Servo geschickt wird. Die Länge steht für die anzusteuernde Position, dabei entspricht der kürzeste erkannte Impuls 0 Grad, der längste 180 Grad.

Beim Galileo war es nicht möglich, derart kurze Schaltzeiten direkt zu realisieren, weshalb wir per PWM tricksen mussten. Beim Edison hingegen sind diese Schaltzeiten möglich. Deswegen ist die Funktion für die Servoansteuerung auch recht einfach:

  1. void servo(int deg) {
  2.  
  3. unsigned long t = map_deg_to_time(deg);
  4. unsigned long b, a;
  5. unsigned long period = 20000;
  6.  
  7. a = time();
  8. b = time();
  9.  
  10. gpio->write(1);
  11. while(t > (b - a)) {
  12. b = time();
  13. }
  14. gpio->write(0);
  15. while(period > (b - a)) {
  16. b = time();
  17. }
  18. }

Golem Karrierewelt
  1. Hands-on C# Programmierung: virtueller Zwei-Tage-Workshop
    13./14.09.2022, virtuell
  2. Kubernetes Dive-in-Workshop: virtueller Drei-Tage-Workshop
    11.-13.10.2022, Virtuell
Weitere IT-Trainings

Die aufgerufene Funktion map_deg_to_time() rechnet die übergebene Gradzahl in die benötigte Zeitdauer um. Dann wird der Pin, über den der Servo angesteuert wird, auf High (=1) geschaltet. Als nächstes wird die ermittelte Zeitdauer abgewartet. Ist sie verstrichen, wird der Pin wieder auf Low (=0) geschaltet, das Signal beendet. Zum Schluss wird erneut eine kurze Zeitspanne abgewartet. Das verhindert, dass ein zweiter Aufruf der Funktion zu früh erfolgt, und das Signal vom Servo womöglich falsch oder gar nicht interpretiert wird.

Der eine oder andere wird sich fragen, warum wir die Zeitdauer so umständlich herunterzählen, statt zum Beispiel usleep() zu nutzen. Auf diese Weise verringern wir die Möglichkeit, dass uns das Betriebssystem während der Wartedauer in die Quere kommt - allerdings auf Kosten der Performance des gesamten Systems.

Eine kleine Optimierungsmöglichkeit für die Servo-Ansteuerung wäre es, statt von Pixel in Grad in Zeitdauer direkt von Pixel in Zeitdauer umzurechnen, außerdem vermeiden wir so sich aufaddierende Rundungsfehler. Der Zwischenschritt macht unser Vorgehen aber transparenter und verständlicher.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Der Edison beeindrucktStromverbrauch und Fazit 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10. 9
  11. 10
  12.  


derdiedas 21. Nov 2014

Na ja - das Edison/Arduino Gespann ist nun so viel kleiner nicht. Das reine Edison Modul...

_speedy_ 21. Nov 2014

und vom USB-Stick? Von SD wäre natürlich genial und vielleicht besser Intel hier ja noch...

Zwangsangemeldet 20. Nov 2014

Irgendwie ist die Betonung des Sprechers im Video ... hmm, naja, seltsam. *Sehr* seltsam...



Aktuell auf der Startseite von Golem.de
Hacking
Der Bad-USB-Stick Rubber Ducky wird noch gefährlicher

Mit einer neuen Version des Bad-USB-Sticks Rubber Ducky lassen sich Rechner noch leichter angreifen und neuerdings auch heimlich Daten ausleiten.

Hacking: Der Bad-USB-Stick Rubber Ducky wird noch gefährlicher
Artikel
  1. Kilimandscharo: Tanzania Telecommunications bringt Glasfaser auf 3.720 Meter
    Kilimandscharo
    Tanzania Telecommunications bringt Glasfaser auf 3.720 Meter

    Der Campingplatz Horombo Hut bietet Glasfaser-Internet auf 3.720 Meter Höhe. Bald soll auch der höchste Berggifel des Kilimandscharo versorgt werden..

  2. Sprachanschlüsse: Telekom erhöht die Preise
    Sprachanschlüsse
    Telekom erhöht die Preise

    Wer nur telefonieren will, muss bei der Telekom etwas mehr zahlen. Das betrifft die Call-Start-Tarife.

  3. E-Mountainbike Graveler 29 Zoll: Aldi verkauft Mountain-E-Bike von Prophete
    E-Mountainbike Graveler 29 Zoll
    Aldi verkauft Mountain-E-Bike von Prophete

    Aldi bietet ein sportliches E-Bike für knapp 1.000 Euro an. Das Graveler 29 Zoll ist für unwegsames Gelände und die Stadt gedacht und dabei recht leicht.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • 10%-Gaming-Gutschein bei eBay • Grafikkarten zu Tiefpreisen (Palit RTX 3090 Ti 1.391,98€, Zotac RTX 3090 1.298,99€, MSI RTX 3080 Ti 1.059€) • PS5 bei Amazon • HP HyperX Gaming-Maus 29€ statt 99€ • MindStar (ASRock RX 6900XT 869€) • Bester 2.000€-Gaming-PC [Werbung]
    •  /