Hallo Leute. Ich hab mal eine Frage zu PWM Signalen: Hintergrund: Ich brauche für meinen Segler einen Mischer der ein Servo quasi umpolt, muss sich halt andersrum drehen. Es gibt so ein Teil von Graupner, ist nur leider superschwer zu besorgen. Einfachste Lösung: selber bauen. zur Frage: Der AVR kann ja bekanntermassen prima mit PWM Signalen rummachen. Nur wie nutzen RC-Servos PWM Signale? Und wie kann ich diese inverieren? Danke für Eure Hilfe.
kann man machen, muss man aber nicht. Wenn du nicht sowieso einen MC an Board hast, gehts auch ganz einfach konventionell: Du brauchst ein Monoflop 3ms, getriggert mit der steigenden Flanke. Dazu eine Ausgangsmimik, die dir ein Ausgangssignal liefert, wenn der Eingangspegel 0 und der MF-Pegel noch 1 ist. So wird aus einem 1ms-Signal eins mit 2ms und aus einem 2ms-Signal eins mit 1ms. Controller geht natürlich auch.
Hi, Das Signal kommt etwa mit 30-70Hz (meist 40-50Hz), die Länge der On-Zeit bestimmt die Stellung. 1,5ms ist neutral, die Endstellungen sind etwa 0,5 und 2,5s. Ist nun klar wie's geht? Gruß, Norbert
Danke für die Antworten. Machmal habe ich das Gefühl, das viele Leute den Ganzen Tag vor diesem Forum sitzen und F5 drücken um den unwissenden zu helfen. Find ich toll! Ich würds am liebsten mit AVR machen. Norbert, hast du ne Anhung wie ich das ganze in Codevision mit C++ abbilden kann?
Hallo Loki, einen schönen Beitrag zur Erklärung der Servosignale gibt es z.B. hier: http://www.sprut.de/electronic/modell/allgemein/index.htm Wie Norbert schon geschrieben hat, geht das Umkehren vom 1.5ms (Graupner, andere Anlagen ev. geringfügig anders) aus. Wenn das Eingangssignal geringer als 1.5ms ist, muss das Ausgangssignal um diesen betrag VERLÄNGERT werden und umgekehrt. Als Formel: (Nullsignal - Eingangssignal) + Nullsignal Baispiel: Eingangssignal Ausgangssignal Pulslänge Pulslänge 1.5ms 1.5ms 1ms 2ms (1.5ms -1ms + 1,5ms) 2ms 1ms Funktionsbersich wie bereits von Norbert ca. 0.5 -2.5 ms. Ein paar Codeteile zum handlich der Servoisignale findest Du auch auf meiner Seite: http://www.mikrocontroller-projekte.de Viel Erfolg, und poste doch das Ergebnis dann mal hier. Ciao, Klaus
Hi, Einfach beschrieben würde ich es so machen: Eingang an externen interrupt, trigger auf rising. wenn signal low dann enable int in der isr timer starten und flag setzen und zurück innerhalb von max 0,5ms das flag auswerten, dann warten bis der Pin wieder low ist. timer auslesen - voila, Wert gemessen. Wertneu = Betrag(1,5ms-Wert) Timer mit 256-Wertneu laden Ausgang high, timer starten. Beim Overflow Ausgang wieder low. Der Timer muß natürlich bis 2,5ms zählen können. Also bei 4MHz prescaler 64. Dann zählt er alle 16µs bis 4ms. Um etwas Sicherheit zu bekommen, könnte man noch prüfen, ob zwei Werte nicht zu arg voneinander abweichen. Wenn ja, alten Wert beibehalten, wenn der nächste dann in die selbe Richtung geht - ok. Gruß, Norbert
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.