🇩🇪
Zitat von: Ottmar in 06.02.2024, 17:49:10 CETMir fällt da so sporadisch eine Lösung ein, unter Verwendung eines Schieberegisters, diverser Takte, eines Zählers, (Anzahl Servos x Vergleichsregister + Zustandbits)@Ottmar, was verstehst Du unter Schiebregister? Ich denke da mehr an einen Ringpuffer, wo man die einzelnen Daten einliest und der Reihe nach abarbeitet.
Zitat von: Ottmar in 06.02.2024, 11:14:03 CETWie verteilst Du dann die unterschiedlichen Impulszeiten für die Position/Bewegungsrichtung der Servos?Ich verwende ein Select Byte um den ausgewählten Servo zu bestimmen, Ein Sollwert Byte um von den ausgewählten die Soll Position zu erhalten, ein Counter Byte der von dem Timer Hoch gezählt wird.
Zitat von: pic18 in 06.02.2024, 15:50:21 CETich habe mir mal ein Datenblatt vom Servo angeschaut,Also i.d.R. ist es so das man etwas über die 90° gehen kannst und somit der Bereich von ca. 0,8-2,2ms "angefahren" werden kann. Wie gesagt habe ich noch nicht bei mir geschaut welche Impulse genau der PIC ausgibt. Auch gibt es wohl billig Servos (und ich habe ein billigen) die sehr von der "norm" abweichen können.
1ms entsp. -90°
1,5ms entsp. 0°
2ms entspr. +90°
kannst Du auch über -90° bzw. +90° fahren, oder ist dieser Bereich begrenzt?
was passiert eigentlich wenn kein PWM Signal am Servo anliegt, aber Betriebsspannung?
Um nicht unnötig viele Interrups auszulösen ist zu überlegen, ob man den Startwert (1ms) und den Endwert (20ms) anders festlegt. Z.B die Timereinstellung verstellt, oder einen anderen Timer nimmt. Dann hat man mehr Zeit für andere Aufgaben. Die Interruptroutine sollte so kurz wie möglich gehalten werden, am Besten in Assembler schreiben.
Zitat von: vloki in 06.02.2024, 16:38:16 CETMir ist es nicht bekannt das Servos die Position auch halten wenn es nur ein "Puls als Kommando" kommt. Wie lange ist der Puls? Wannkommt die wiederholung uzsw.? Ich weiß das der Servo i.d.R. schneller einlesen kann als 50Hz und man somit die Pause verkürzen kann. Dies nutze ich indirket wenn ich weniger als 10 Servos nutze bzw. wenn nicht alle Rechtsausschlag haben: alle Servos links 1+1+1+1+1+1+1+1+1+1 => nach 10 ms kriegt Servo1 neuen impuls.Zitat von: pic18 in 06.02.2024, 15:50:21 CETwas passiert eigentlich wenn kein PWM Signal am Servo anliegt, aber Betriebsspannung?Dann bleibt der Servo einfach so wie er ist. (sofern er nicht durch eine äußere Kraft verstellt wird)
Eigentlich bräuchte man nicht wirklich ein PWM Signal, wenn der Servo die Position auch halten kann.
Es reicht dann ein einzelner Puls als Kommando.
Die Pseudo/Software-PWM von z.B. einem Arduino kann sogar richtig störend werden,
wenn der Servo wegen dem Jitter dann die ganze Zeit rumzittert.
Zitat von: Ottmar in 06.02.2024, 17:49:10 CETIch denke an die 10 Servos die ^Cobra verwendet. Geht das so einfach mit PWM, wenn jedes Servo für sich angesteuert werden soll?Wie bereits oben erwähnt Vergleiche ich immer den Counter mit dem Sollwert von dem ausgewählten Servo. muss noch erprobiert werden ob es so geht. Bin aber keiner der was "fertiges" aus dem internet holt sondern selbst ein Weg finden. - meistens mit Steinen und Hinfallen
Mir fällt da so sporadisch eine Lösung ein, unter Verwendung eines Schieberegisters, diverser Takte, eines Zählers, (Anzahl Servos x Vergleichsregister + Zustandbits).