Ich arbeite zurzeit an einem kleinen Fahrzeug, dessen zwei Motoren über eine doppelte H-Brücke angesteuert werden. Die Geschwindigkeit wird über PWM geregelt (Pins: 3,5,6,9). Ich arbeite mit einem Arduino Nano.
Zusätzlich benötigt das Fahrzeug noch zwei Servos (Pins: 10,11), diese steuere ich über die normale Servo-Library an.
Problem:
Das PWM für die Motoren kommt mit der Servo-Library irgendwie durcheinander. Sobald ich die Library in das Programm einbinde, funktionieren die Motoren nicht mehr. Entferne ich die Library wieder, dann funktionieren die Motoren einwandfrei.
Ich habe schon versucht (für die Servos) softwaretechnisch ein 50Hz PWM zu modellieren. Das funktioniert auch, allerdings kommt dann der Arduino Nano mit der Programmdurchlaufzeit und Timer-Interrupt-Zeit durcheinander (ausführlich getestet).
Wie kann ich die 4 normalen PWM Ausgänge und die beiden Servos gleichzeitig ansteuern?
Ich wäre sehr froh, wenn mir jemand helfen kann...
MfG Clemens
Frage vorweg: Wofür 4 PWM-Ausgäng für die zwei H-Brücken?
Dort sollte eigentlich pro Motor 1 PWM reichen.
Hast Du Dir angeschaut, auf welchem Timer welcher PWM-Pin sitzt und welchen Timer die Servo-Library benutzt?
Durch's reine Einbinden kann man den Servo-Timer nämlich für nichts Anderes mehr benutzen - Der kümmert Sich ja um die Servo-Impulse.
Denke, wenn Du Deine PWM-Pins auf einen anderen Timer legst - wird Das schon besser klappen.
Die Sache mit der Programm-Durchlaufzeit glaube ich Dir trotzdem nicht - wenn Nichts zu tun ist (was bei 50Hz recht oft der Fall ist), muß man auch Nichts machen - ergo ist loop() unglaublich schnell.
Und wenn was zu machen ist, ist's das Umschalten EINES Pins - auch Das sollte den Arduino nicht direkt zusammen brechen lassen.
Denke, in Deinem Versuch stecken zu viele delay() drin
Wie Dem auch sei: Nimm für Deine PWMs andere Pins, Die auf einem anderen Timer hängen.
Welchen Timer die Servo-Lib benutzt, sollte in den Referenzen auffindbar sein.