Hallo Leute,
ich habe eine Schaltung mit AVR MEGA644P und H-Brücke (diskret).
Per Poti gebe ich 1:1 den PWM-Sollwert für den Motor vor.
In der Software wird dann darauf gefahren mittels voreingestellten
Incrementierungszeiten des OCR-Registers, sodass der Motor langsam
beschleunigt/abbremst.
Jetzt möchte ich noch eine Regelung haben. Das ist wichtig.
Ich kann bereits die Gegen EMK messen, ich erhalte hier Werte zwischen 0
- ca. 350. (0 = stillstand, 350 = vollgas, OCR = 255).
Wenn ich den Motor drehen lasse, und mit der Hand festhalte, sehe ich
auch, dass die Werte hoch gehen, bzw. runter wenn er schneller dreht als
eingestellt (quasi bergab rollt, ich ihn zzgl. von außen beschleunige).
Ich habe auch einen Regler programmiert
Ich habe allerdings 0 wirklich NULL Bezug zum ganzen. Ich weiß nicht wie
ich das anstellen soll.
Als Sollwert hätte ich jetzt die Vorgabe vom Poti, also den PWM-Soll
genommen!? Dann habe ich aber Probleme, den Rest zu verarbeiten, da ich
0 Bezug habe zwischen Soll-Wert und Gegen-EMK Wert.
Ich würde mich sehr freuen wenn mir jmd. echt helfen könnte.
Später soll das einfach so laufen, dass ich einen PWM-Wert am Poti
einstelle (wie jetzt auch), er darauf den Motor dreht, und wenn ich ihn
belaste soll er "schneller" werden, wenn ich ihn per Hand zzgl.
schneller drehe, soll er "langsamer" werden.
Wenn du die Skalierung der EMK oder des Potis erstmal weglässt, wäre der
Vorversuch, die IST Grösse, nämlich die Höhe der Gegen EMK, auf den
Sollwert, nämlich den Wert vom Poti, zu regeln.
Also z.B. Poti = 128, und die Gegen EMK wird auf 128 geregelt.
1
inlinevoidset_regler_soll(uint16_t_w)
2
{
3
w=_w;
4
}
Wofür mag das sein?
Als Tipp schau dir mal Application Note AVR221 bei Microchip an, das ist
ein netter kleiner PID Regler in C.
Matthias S. schrieb:> Wenn du die Skalierung der EMK oder des Potis erstmal weglässt,> wäre der> Vorversuch, die IST Grösse, nämlich die Höhe der Gegen EMK, auf den> Sollwert, nämlich den Wert vom Poti, zu regeln.>> Also z.B. Poti = 128, und die Gegen EMK wird auf 128 geregelt.inline> void set_regler_soll(uint16_t _w)> {> w = _w;> }> Wofür mag das sein?> Als Tipp schau dir mal Application Note AVR221 bei Microchip an, das ist> ein netter kleiner PID Regler in C.
Die EMK ist nicht skaliert, dass ist der reine Wert mit 5V Reference vom
ADC. Das ist nur invertiert (1024 - ADCW), sodass das bei 0 anfängt und
größer wird und nicht bei 1024 anfängt und kleiner wird. Poti ist /4
gerechnet um 0-255 zu haben.
Ich verstehe leider tzd. den Zusammenhang nicht. Die
Grundgeschwindigkeit gebe ich mit dem Poti vor, die ändert sich auch
öfters (wird später dann digital über i2c gesendet vom master
controller). Damit habe ich meinen Sollwert, oder nicht?
Dann habe ich den Gegen EMK-Wert, womit ich 0 anfangen kann da mir jeder
Bezug dazu fehlt. Auf den Wert regeln macht doch keinen Sinn, oder? Ich
kann ja nicht sagen, dass wenn ich Poti = 128 habe das der gegen EMK von
128 entspricht. Das tut es ja nicht. Wenn ich belaste wird der Wert
größer, also muss mehr Gas gegeben werden, das ist ja auch invertiert
dann quasi wie ich das sehe?!
Ich bin einfach aktuell noch planlos. Die Note schaue ich mir an.
Es ist einfach: Wenn du die Geschwindikeit des Motors regeln möchtest,
musst du diese messen. Ohne jede Rückmeldung vom Motor wirds nichts,
denn wie du ja schon bemerkt hast, ist die Gegen EMK kein geeigneter
Messwert dafür. Du solltest also überlegen, wie du die Geschwindigkeit
messen kannst (Sensor etc.) und damit einen Timer toren.
Einen Timer brauchst du sowieso, denn ein PID Regler muss regelmässig
aufgerufen werden, damit er richtig und stetig regeln kann.
Bau also erstmal eine Geschwindigkeitsmessung ein und bring die zum
Laufen.
Matthias S. schrieb:> Es ist einfach: Wenn du die Geschwindikeit des Motors regeln> möchtest,> musst du diese messen. Ohne jede Rückmeldung vom Motor wirds nichts,> denn wie du ja schon bemerkt hast, ist die Gegen EMK kein geeigneter> Messwert dafür. Du solltest also überlegen, wie du die Geschwindigkeit> messen kannst (Sensor etc.) und damit einen Timer toren.>> Einen Timer brauchst du sowieso, denn ein PID Regler muss regelmässig> aufgerufen werden, damit er richtig und stetig regeln kann.> Bau also erstmal eine Geschwindigkeitsmessung ein und bring die zum> Laufen.
Hallo,
Time habe ich bereits, alle x ms wird der Regler aufgerufen.
Das soll später für eine Modellbahnsteuerung sein. Da ist es nicht
möglich, eineen Geschwindigkeitsmesser einzubauen. Das mache andere
Decoder ja auch das diese eine Lastregelung drin haben. Ich verstehe
leider den Bezug noch nicht.