Beitrag
von eax » 22 Okt 2019, 21:23
Bei (sehr) langsamer Fahrt wird der Geschwindigkeitsregler für die Motoren schnell instabil, das hat im Wesentlichen zwei Gründe:
Erstens passt der ursprünglich vorgesehene Motortreiber (IC2, L293D) mit der Beschaltung und Ansteuerung leider sehr schlecht zu den Motoren des Bots, weshalb sie bei kleiner Drehzahl kaum Leistung erbringen können. Im alten ct-Bot-Code gibt es besondere Optimierungen um das Problem zu lindern, diesem neuen Code fehlen die Optimierungen, hier wir ein Standard PID-Regler verwendet.
Zweitens ist die Kalibrierung des PID-Reglers nicht auf den ursprünglichen Motortreiber abgestimmt, weil ich auf einen neueren (DRV8835) umgestiegen bin, hier ist mit ein wenig Feintuning der Parameter Kp, Ki und Kd vielleicht noch einiges rauszuholen.
set speed setzt die gewünschten Geschwindigkeiten für die beiden Räder in Prozent, d.h. eine Hintergrundtask kümmert sich darum, diese gewünschte Geschwindigkeit einzuregeln. Das ist sozusagen das komfortable User-Interface. Mit set motor kann man den PWM-Duty-Cycle für die Motoren auch manuell setzen, allerdings muss man dafür mit config task sctrl 0 die Hintergrundtask des Geschwindigkeitsreglers deaktivieren, sonst werden die Werte jede Millisekunde wieder vom Regler überschrieben, der im Hintergrund läuft.
Ich weiß, die Dokumentation ist noch höchst unvollständig, da bin ich noch nicht wirklich dazu gekommen, etwas aufzuschreiben... unter anderem auch deshalb, weil ich erstmal schauen wollte, ob sich der neue Ansatz denn überhaupt bewährt.
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben