Prioritäten der PWM Pins

Ja das wird das beste sein. Ohne dass man die Signale wirklich sieht, kann man da nur spekulieren.

Falls irgendwann noch Vergleichsdaten von Uno, Due oder Teensy benötigt werden sollten, klinke ich mich hier noch mal ein. Erstmal wünsche ich viel Erfolg bei der Suche.

Hallo zusammen,
Vorbehaltlich der anstehenden Messungen, habe ich noch eine Frage:
Ich habe hier:

https://playground.arduino.cc/Code/MegaServo

http://arduino-info.wikispaces.com/Timers-Arduino

gelesen, dass man mit der MegaServo-Lib bis zu 48 Servos ansteuern kann. Timer 0 und Timer 2 sind wohl für andere Dinge reserviert. Also stehen mir 4 HW-Timer (1, 3, 4 und 5) zur Verfügung. Hatte ich erwähnt, dass ich einen MEGA2560 verwende? D.h.

Servo1 (ESC1) -> Pin 11 Timer 1
2 -> 2 3
3 -> 6 4
4 -> 46 5

Aber was bedeutet „not pins xxxxx“ oder „losing PWM on Pin xxx“ bzw. was ist damit gemeint?

Gruß Willi

KUCKY:
Aber was bedeutet „not pins xxxxx“ oder „losing PWM on Pin xxx“ bzw. was ist damit gemeint?

Die betreffenden Timer werden dann von der Servolib verwendet. Sie würden alternativ gebraucht, um an diesen Pins die PWM zu erzeugen. Dafür stehen sie dann halt nicht mehr zur Verfügung.

Das bedeutet nicht, dass die Servolib normale Arduino PWM macht. Sie schaltet die Pins mit digitalWrite, wie man im Quelltext sieht.

Hallo Willi,
das ist nach wie vor eine Library, die die Pulse per Interrupts erzeugt, und nicht direkt von der Timer-HW. Nur dadurch kann man überhaupt so viele Servos ansteuern. Für das Timing werden zwar die HW-Timer genutzt, aber die eigentlichen Impulse werden dann in Interrupts erzeugt, die von den Timern ausgelöst werden. Die PWM-Pinzuordnung der TImer ist daher irrelevant. Da die Timer für die Interrupterzeugung genutzt werden, funktioniert der HW-PWM (analogWrite() ) dann nicht mehr.
Timer0 und Timer2 werden nicht verwendet, da das nur 8-Bit Timer sind, und für Servos die Auflösung da nicht reicht. Ausserdem wird Timer 0 bereits vom Arduino für millis() und micros() genutzt.

Grundsätzlich ist es schon möglich die Impulse direkt von der TimerHW ( ohne Interrupts ) erzeugen zu lassen. Das ist dann im Prinzip so wie das analogWrite() und dementsprechend auch an bestimmte Pins gebunden. Allerdings nutzt analogWrite leider nicht die mögliche höhere Auflösung der 16-Bit Timer ( Timer 1,3,4,5 beim Mega ) und ist deshalb für eine Servo-Ansteuerung ungeeignet ( auch wegen der falschen Wiederholfrequenz). Man müsste dazu also diese Timer direkt entsprechend konfigurieren.

Ihr seit ja schnell. Ich verwende doch nicht analogWrite sondern WriteMicroseconds zwischen 1000 und 2000.

Das "losing PWM on ..." sagt ja nur, dass du deswegen analogWrite auf den genannten anderen Pins nicht mehr benutzen kannst.

Verstanden, danke.

Hier noch ein paar Fundstücke, vielleicht hilft das weiter:

PWMServo is much more tolerant of interrupt latency that Servo. Libraries which disable interrupts are incompatible with Servo, but these can be used with PWMServo.

Quelle: Servo Arduino Library, connecting RC Servo Motors to Teensy

Das scheint diese Historie zu haben
http://arduiniana.org/libraries/pwmservo/
aktuelle Code hier

Soweit ich das überblicke auf dem Mega nur für drei Servos. Könnte man aber sicher erweitern, wenn man sich mit den Timern auskennt.

Oder man nimmt gleich einen Teensy: kleiner, schneller, mehr Timer, aber 3,3 Volt. ::slight_smile:

Vielen Dank für Eure Hilfe.
Wir haben nun die einzelnen PWM´s mit einen 4 Kanal Ozzi geprüft. Keine Auffälligkeiten oder nennenswerte Abweichungen. Dann Muss es wohl an der Hardware legen. Die PWM Ausgänge auf meiner PCB habe ich auch mal vertauscht. Da hier alles beim Alten blieb, gehe ich davon aus, dass mein Code stimmt.
Ich habe die Propeller und die Motoren getauscht, keine Verbesserung. Das letzte sind nun die ESC´s. Versuche ich heute.

Gruß Willi

P.S. Den PID Regler habe ich auf 0, 0, 0 gesetzt.

Habe wohl den Fehler gefunden. So wie sich jetzt darstellt ist ein ESC "anders". Werde jetzt mal versuchen den ESC zu testen. Das müsste doch mit der SimonK Software gehen, oder?

Gruß Willi

Was verstehst du unter SimonK Software ? Die FW oder gibt es da eine Programmiersoftware? Ich hab BLheli drauf, da geht es glaube ich nicht.

Was will dein Regler für Signale haben? 2ms oder Oneshot oder was?

Moin,
sorry jetzt erst gelesen. Ich meinte SimonK Firmware natürlich. 1 - 2ms
Gruß
Willi

Die wird angesteuert wie ein Servo. Ich glaube aber, die frisst höhere Frequenzen. Du musst also nicht die 20ms (50Hz) einhalten. einige wenige us LOW reichen und dann den 1-2ms Impuls.