Eine wichtige Frage hätte ich noch zu Deiner Zeichnung. Was bedeutet dieses "stupsi" und "tupsi" oder wo kommt das her?
Eine wichtige Frage hätte ich noch zu Deiner Zeichnung. Was bedeutet dieses "stupsi" und "tupsi" oder wo kommt das her?
Das ist im Posting erwähnt (dachte ich). Die Dauer zwischen zwei Interrupts des Motorencoders nenne ichZitat von jojo45
t ime u nits p er s ensor i nterrupt
und dessen Sollwert ist eben das stupsi. Sprich: es ist eine inverse Geschwindigkeit (hihi - das ist jetzt sicher nicht klarer).
Eine Geschwindikgeit ist ein bestimmter Weg pro so und soviel Zeiteinheiten, eine Drehzahl ist ein bestimmter Winkel pro so und soviel Zeiteinheiten. Um die Motordrehzahl zu messen - damit kann ich über die Geriebeuntersetzung die Fahrzeuggeschwindigkeit errechnen (bei vernachlässigtem Schlupf) - halte ich die Anzahl der Zeiteinheiten (time units) von 50 µs fest, die zwischen zwei Interrupts vergehen. Diese 50 µs Zeitscheiben kommen von (m)einer standardmässigen Borduhr - einem Timer.
Ciao sagt der JoeamBerg
Das ist mir jezt schon klarer, danke.
Mich würde die Sache mit dem berechneten Fahrprofil noch interessieren, wo vorher ein Trapez mit einer festen Beschleunigungs- und Bremsrampe berechnet wird und dann nur proportional die Geschwindigkeit geregelt wird.
Ein grosse Forteil von diesen Forgang ist das auf jeden Zeitpunkt eine neue Abweichung berechtnet werden kan. Eine PID Regelung benotigt immer eine minimale feste "Sampletime". Eine reine P-Regelung nicht. Ihre µ kan mehrmals pro ms die Abweichung (Schleppfehler) nachrechnen, und entsprechend die PWM-wert anpassen. Ihre Rampe muss so gewahlt werden das die mechanic folgen kan (100% PWM gibt auch eine bestimmte rampe, die darfen sie nicht ueberschreiten). Alles andere ist reine Mathematic. Forbild : rampe hochfahren = max 1 impuls/ms². Max speed ist 100 impulsen/ ms. Ihre theoretische soll pos ist dan nach 100 ms : 0.5*a*t² = 0.5*1*100²= 5000 impulsen. Ab dan wird es lineair : nach 200 ms wird es dan 5000+t*v = 5000+100*100 = 15000 impulsen. Sag mal das wir pos 20000 impulsen anfahren wollen. Dan mussen wir ab 15000 impulsen wieder abbremsen mit -1m/s², dan wird die soll-speed nach 300 ms wieder 0 sein. Auf diese weise lasst sich jeden ms eine exacte soll-pos berechnen. Jetzt soll-ist = schlepp fehler. Konstante * schleppfehler = PWM (reine P-regelung).
Perfekt! Ich werde es mal versuchen!
Wenn der Schleppfehler zu groß wird, dann kann ich ja auch einen Fehler ausgeben.
Was ist nun, wenn ich eine hängende/schwebende Last habe? Funktioniert das ohne Integralanteil?
In diesen Fall stellt sich eine permanente Schleppfehler ein. Der Motor bekommt dan auch dauernd eine PWM-wert, die das versucht zuruck zu regeln. Noch ein Tipp : in ein bestimmtes PWM Bereich beim anfahren lauft der motor noch nicht (tot-zone"). Wen sie rund das 0-punkt regelen wollen, mussen sie ein Sprung programmieren, sodas diese totzone ueberbruckt werd :
In Praxis kann das so aussehen (Totzone van +15% bis -15% PWM, PWM von -100% bis +100%):
If (soll_PWM>0) PWM=soll_PWM+15;
If(soll_PWM<=0)PWM=soll_PWM-15;
So etwas hat bei meine Balance roboter sehr gut functioniert.
Angenommen, die Beschleunigung ist zu hoch gewählt, dann stellt sich doch sowieso ein zu hoher Schleppfehler ein, mit dem ich die Bewegung anhalten kann?(100% PWM gibt auch eine bestimmte rampe, die darfen sie nicht ueberschreiten)
Lesezeichen