Forum: Mikrocontroller und Digitale Elektronik RC-Servo PWM Signal invertieren


von Loki Daelis (Gast)


Lesenswert?

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.

von crazy horse (Gast)


Lesenswert?

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.

von Norbert (Gast)


Lesenswert?

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

von Loki Daelis (Gast)


Lesenswert?

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?

von Klaus L. (Gast)


Lesenswert?

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

von Norbert (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.