Hallo Community, habe ein analoges Modellbau-Servo an meinen PIC angehängt. Funktioniert zwar, aber die Drehbewegung ist ruckartig und springt in etwa 7 Grad-Schritten. Das kann ich nicht gebrauchen; ich möchte einen "weichen" Servolauf über die vollen 90 Grad (Bahnschranken). Das Problem dabei ist: Das Servo verarbeitet ja nur 50Hz (20 ms)-PWM mit einer Dutyrate zwischen 1 und 2 ms. Der PIC gibt mir am PWM-Ausgang einen Vollkreis in 256 Schritte aufgelöst. Da ich nur 90 Grad brauchen kann, bleiben 256:4 = 64 Schritte übrig. Diese 64 Schritte müßte ich jetzt in dem PWM-Puls unterbringen, der ja zwischen 1 ms und 2 ms breit ist. Das ergibt folgende Parameter: PWM1_Set_Duty(13) = 1 ms, die Nullstellung, also 0 Grad. PWM1_Set_Duty(19) = 1.5 ms, das sind 45 Grad. PWM1_Set_Duty(25) = 2 ms, also 90 Grad. Den Parameter im PWM1_Set_Duty(xx)-Befehl kann ich nur als "unsigned short" (ja, ist ABSI-C) übergeben. Damit ergeben sich 12 Schritte für die 90 Grad und das ist sehr sehr grob. Habt Ihr irgendeine Idee, wie ich da was verbessern kann? Wird's mit einer Assembler-Routine statt des PWM1_Set_Duty(xx)-Befehls (aus der C-Library meines Entwicklungssystems) feiner abstufbar? Damit der PIC überhaupt 50Hz am PWM-Pin hergibt, hab ich den internen Oszillator mit 500kHz aktiviert und da bekomm ich eben die 8 Bit Auflösung, 256 Stufen und nicht mehr. Bin ja ein ziemlicher Neuling auf dem Gebiet und rauf mich da durch; vielleicht geht das Ganze doch etwas eleganter?? Vielen Dank vorab für Eure Tipps, Kritik und Meinungen und noch viel Spaß am Löten Rudi aus Wien ps: technische Details zu den Servos siehe "http://www.rn-wissen.de/index.php/Servos"
Benjamin R. schrieb: > Welcher PIC? Typenbezeichnung bitte. > Taktfreuquenz? Diese Fragen klingen schlau, sind aber unerheblich. Eine PWM mit 8 Bit: Rudi Herwig schrieb: > in 256 Schritte aufgelöst liefert genau das beschriebene, egal auf welchem Prozessor. Auch eine dedizierte Hardware kann aus 8 Bit nicht mehr herausholen. Und wenn die 20 ms stimmen, ist der Takt schon richtig. Eine bessere Auflösung erfordert eine PWM mit mehr als 8 Bit. MfG Klaus
Klaus schrieb: > Eine bessere Auflösung erfordert eine PWM mit mehr als 8 Bit. Oder man greift da ein bisschen mit Software ein. Eine Möglichkeit ist, nur die Pulsdauer mit dem Timer zu erzeugen, d.h. 2 ms entsprechen 256 Steps. Die 20 ms sind schließlich relativ unkritisch, d.h. die kann man ungefähr erzeugen, indem man den Timer ein paar Mal rund laufen läßt und dann für den High-Puls per PreSet oder Compare, was auch immer der PIC (welcher?) hat, einen wohl definiertes Intervall erzeugt.
Mike schrieb: > Oder man greift da ein bisschen mit Software ein Da das "Servosignal" gar keine wirkliche PWM ist, ist das der richtige Weg. Es hat sich aber wohl so festgesetzt, daß man das mit dem PWM Modul macht, das ich etwas anderes garnicht erwähnt habe. MfG Klaus
@Klaus Hallo Klaus, das ist eine Spitzen Idee! Super, da wär ich nicht drauf gekommen. Hab sowieso noch einen Interrupt frei und da kann ich das leicht realisieren. Was täte ich ohne Euch und das Forum ;-)) Vielen Dank auch an Mike!! lg Rudi
Normalerweise benutzt man für Servos den Compare Mode. Gibt eine Strategie, die in der ISR zwischen Mode 1000 und 1001 umschaltet. Ergibt perfekte Signale, ohne Jitter. Aber einfach den Pin in der ISR setzen ist auch gut genug.
Hallo Leute, es ist nicht ganz richtig, was Ihr da schreibt. Man kann sehr wohl einen PWM-Puls feiner auflösen als mit 256 bit. 1.: Man nehme einen PIC mit PWM-Unterstützung. Dessen PWM hat eine Auflösung von 10 bit, ist aber wegen der zusätzlichen 2 bit etwas schwer zu handhaben. Geht aber. 2.: Man benutze den Timer1 für die Darstellung der Pulsbreite. Timer1 hat eine Auflösung von 16 bit. Diese können natürlich nicht voll ausgenutzt werden. Wenn der Timer1 mit der Prozessor-Taktfrequenz angestoßen wird (z.B. mit 1 µs), dann ist die Auflösung der Pulsbreite tatsächlich 1 µs! Damit dürfte der Servo nicht mehr ruckeln. Die andere Frage ist die nach der Stellgeschwindigkeit. Bei 20 ms Wiederholtakt sind natürlich nur 50 Änderungen je Sekunde möglich. Die 20 ms sind kein unbedingtes Muss. Probiert es aus, ob Euer Servo auch mit 10 ms Wiederholtakt noch richtig läuft. Wenn das klappt, habt Ihr schon gewonnen. Dann sind es 100 Änderungen je Sekunde, und jeder step darf dann nur halb so groß sein wie bei den 20 ms. Das Ruckeln müßte dann wesentlich weniger werden. Ich selber will einen kleinen Kran per Servo drehen lassen, bin aber über das Gedankliche noch nicht hinausgekommen. Viel Erfolg beim Ausprobieren!
Hi PIC PWM ist für Servos ungeeignet. Man nimmt dafür die CCP Funktion. With a CCP module, set the pin high manually at the beginning of your pulse, then use the Compare mode to turn it off at the end of your period. That way you can go off and do other things with your micro. Alles klar ;-) Gruß Thomas
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.