Programmieren mit einem Servomotor?
Hey,
ich bin recht neu im Gebiet des Programmierens und daher an meinem ersten Projekt, was einen Servomotor involviert. Da sich eine Klappe öffnen soll, wurde mir der Servomotor VSD-1 von modelcraft (mit einem Hebel) anstatt dem Parallax Standard Servo (mit einem Propeller) gegeben. Ich benutze den Parallax Mikrocontroller BS2sx mit der Sprache PBasic 2,5. Nun kann man auf der Parallax Website Programme für den Standard Servo runterladen, um diesen zu testen. Ich habe diese runtergeladen und an meinem Motor ausprobiert, jedoch tut sich nichts. Nun ist meine Frage, ob man dieses Programm nicht auf meinen Motor übertragen kann oder ob mein Motor einfach nicht mehr funktioniert.
Anbei sind Bilder meines Servomotors und des runtergeladenen Programmes.
Vielen Dank schon mal im voraus :)
3 Antworten
Servo rochtig angeschlossen (rot +5V, schwarz gnd, orange am Ausgang)
Und was macht Pulsout für ein Ausgangssignal? Wenn das PWM ist, kannst Du damit keinen Servo ansteuern. Servos haben Signalzeiten von 1ms = 0° bis 2ms = vollausschlag, gefolgt von einer Pausezeit auf 20ms hoch...
Bei anderen Sprachen, wo ein Servo angesteuert wird, wird eine Bibliothek geladen, die den Befehl in das Timing umsetzt. Ka wie es bei dem Programm ist...
(Ich guck mir da mal Beispiele an... )
Hab weiter recherchiert... Pulsout sendet einen einfachen Puls von der Länge in x*µSekunden (X= Pulsangabe*µs Pulsdauer des Controller)... Der Parallax-Servo benutzt ebenso diese Steuerzeiten. Hast also erst mal alles richtig gemacht... Ich hatte es in den Erklärungen erst falsch verstanden..
Der VSD1 hat eine Pulslänge vonn 800µs = 0° / 1500µs / 90° (Neutralstellung) / 2200µs = 180°...
Du schreibst jetzt Steuerzeiten von 500, 750 und 1000... Jetzt kommt der Kaken an der Sache. Der BS2 hat eine Pulsdauer von 2µs... 500*2µs= 1000µs (also 1ms)
Der BS2sx hat aber nur 0,8µs Pulsdauer... 500*0,8µs=400µs und 1000*0,8µs=800µs... Dein längster Puls entspricht also nur 800µs, das ist 0° bei dem Servo.
1000 ist also das minimum für 0°, für 90° musst Du also 1500µs senden, macht bei 0,8µs pro Puls 1875 als Wert. Und für 2200µs Pulsdauer musst Du 2750 senden... Dann sollte es klappen
Von der Sprache habe ich keine Ahnung. Sieht aber aus wie ein C-Derivat.
Was ich aus dem Code sehe ist, dass der Ausgang "P12" angesteuert wird.
Blöde Frage. Hängst du am richtigen Ausgang? Passt die Spannungsversorgung vom Motor?
Hey, ja ist am richtigen angeschlossen und die Spannungsversorgung müsste auch passen :) Da ich erst kürzlich mit dem Programmieren angefangen hab, ist mein Verständnis demnach noch recht klein, daher blöde Frage zurück: Was genau ist ein C-Derivat?
Eine Unterart der Sprache C. Als Derivat bezeichnet man generell Ableitungen.
C-Derivat
Es eine Art von Basic, was man auch an der Endung .vb2 erkennen kann.
Am besten messen, was die Signalleitung macht.
Am besten nimmt man dazu ein Oszilloskop. So was hat natürlich nicht jeder, geht auch anders.
Hast Du ein Multimeter, schalte es auf Frequenzmessung. Hat das Multimeter keine Frequenzmessung (Hz), dann kannst Du es auch auf Wechselspannung (AC) schalten. Passiert nichts, die Leitung ist immer auf Plus oder Minus, zeigt das Mulktimeter (fast) Null an, liegen Pulse an, wird ein deutlicher Wert angezeigt. Der hängt von Frequenz und Pulslänge ab, die Höhe des Wertes hat keine Aussagekraft, nur dass Du da was misst sagt Dir, dass da Pulse anliegen.
Alternativ kannst Du auch 2 LEDs benutzen, die kriegt man ja für wenige cents. Hier braucht man noch einen Vorwiderstand, 1kΩ passt ganz gut, soll ja nur was anzeigen und nichts beleuchten. Die LEDs verbindest Du "Antiparallel". Das bedeutet, dass Du das kurze Bein der einen mit dem Langen Bein der anderen verbindest. Das dann in Reihe zum Widerstand:
o---------,
|
,--o--,
| |
| |
LED V - LED
- ^
| |
'--o--'
|
|
.-.
1kΩ | |
| |
'-'
|
o-------'
Am besten zwei verschiedene Farben verwenden, z.B. rot und grün.
Die eine leuchtet bei Plus, die andere bei Minus. Liegen Pulse an, leuchten beide bzw. eine leuchtet hell und die andere "glimmt". So kannst Du leicht sehen, ob da eine Spannung an liegt und ob da Impulse drauf sind. Mit 1kΩ kannst Du gut zwischen 5V und 12V prüfen.
Die Übertragung bei diesen Servosystemen hat sich seit über 80(!) Jahren nicht geändert. Damals gab es nur große und teure Radioröhren, man musste also mit möglichst wenig Aufwand Signale übertragen.
Dazu wird ein Impulsgeber verwendet, der funktioniert wie ein Treppenhaus Licht Automat. Ein Poti stellt die Länge des Impulses ein, genau wie beim Treppenhaus wo man die Leuchtdauer einstellen kann. Nur hier stellt man zwischen 1ms und 2ms Laufzeit ein.
Über einen Multiplexer (ganz früher mechanisch) werden die Potis der Reihe nach an den Impulsgeber durchgeschaltet. Man erhält also eine Folge von Impulsen deren Länge von den Potis (Hebelstellungen der Fernbedienung) abhängt. Der Trick ist, dass am Empfänger jedes mal wenn sich ein Impuls ausschaltet der nächste Impuls auf den jeweils nächsten Servo geschaltet wird. So kann man auf einem Funkkanal (Morsesender) mehrere analoge Kanäle übertragen.
Synchronisiert wird das in dem nach dem letzten Poti eine Pause von mindestens 4ms eingehalten wird. Auch das kann man mit simpler Elektronik (also sozusagen 1/2 Radioröhre) leicht erkennen. Kommt 4ms lang kein Puls, wird sofort auf den ersten Servo geschaltet.
Da die Pulse 1 bis 2ms lang sind und man früher etwa 10 Kanäle vorgesehen hat, beträgt die Umlaufzeit des Systems um die 20ms, je nachdem wie viel Zeit alle Pulse zusammen (Plus die >4ms Pause) brauchen. Daher gibt man jedem Servo nach dem Puls am besten 20ms Pulspause bevor man den Puls wiederholt. Denn das erwarten die klassichen Servos.
Bei modernen Servos wie Du einen hast schaltet sich der Servo ab, wenn er keine Pulse bekommt. Daher tut sich nichts wenn da was nicht stimmt. Klassische "dumme" Servos drehen sich dann immer in ihre 0-Position. Fällt der Funkkontakt zu einem Modellflugzeug aus, geht das dann "Nase runter", "Quer- und Seitenruder auf Linksanschlag", das Flugzeug stürzt zwangsweise ab. Daher schalten sich "schlaue" Servos ab damit das Flugzeug während der Funkstörung erst mal so weiter fliegt wie bisher anstatt sofort abzuzstürzen.
Ups, Sry.
Bei den LEDs hab ich mich vertan. Das gilt nur für Wechselstrom was die anzeigen.
Bei Dir musst Du die abwechselnd zwischen Steuerleitung und Plus und dann Minus anschließen.
Nur wenn die leuchten/glimmen wenn Du die sowohl zwischen Steruerleitung→Plus und Steuerleitung →Minus anschließt, dann hast Du Pulse.
Ich hatte da leider an den Trick den man bei alten RS232 Datenleitungen macht gedacht. Die schalten zwischen Plus und Minus, nicht Plus und Masse wie bei Dir!
Also der Parallax Standardservo wird mit PWM gesteuert. Deshalb kan er mit Pulsout angesteuert werden. Der VSD-1 (finde dazu keine Daten) wird wohl das normale Servopulsmuster (wie oben beschrieben) benötigen. Deshalb reagiert er wohl nicht auf Pulsout...