Hallo Michael,
es geht um einen Spannungswandler mit dem ich eine ordentliche konstante
Spannung erzeugen möchte.
Es funktionier schon halbwegs, aber irgendwas stimmt an der Schaltung
nicht und die PWM-Regelung im Controller ist auch nicht so gut.
Ich hab das hier mal aufgebaut und die Werte ausgeben lassen.
In dem Bild im Anhang ist es grafisch aufbereitet worden und man erkennt
gleich das etwas mit der Regelung des PWM-Signals nicht stimmt.
Mein Programm schaltet den Mosfet mit Masse kurz wenn die On-Zeit 100%
erreicht, das tut der Batterie weh wenn da jemand so zieht.
grün = PWM
rot = Eingangsspannung 3-4V
gelb = Ausgangsspannung 10V
Ich hät mir den Quellcode aber mal etwas besser durchlesen sollen.
1 | // Run PID calculations once every PID timer timeout
|
2 | if(gFlags.pidTimer)
|
3 | {
|
4 | referenceValue = Get_Reference();
|
5 | measurementValue = Get_Measurement();
|
6 |
|
7 | inputValue = pid_Controller(referenceValue, measurementValue, &pidData);
|
8 |
|
9 | Set_Input(inputValue);
|
10 |
|
11 | gFlags.pidTimer = FALSE;
|
12 | }
|
Der Abschnitt hat Verständnisprobleme bei mir verursacht:
1 | /*! \brief Set control input to system
|
2 | *
|
3 | * Set the output from the controller as input
|
4 | * to system.
|
5 | */
|
6 | void Set_Input(int16_t inputValue)
|
7 | {
|
8 | ;
|
9 | }
|
Setze den Ausgang des Controllers als Eingang zum System.
Damit meinten die nicht den mikro-Controller sonder die PID-Methode.
Ich füttere jetzt einfach meinen PWM-Timer mit dem "inputValue".
Hatst du (oder jemand anderes) diese Regelung mal in einem Projekt
verwendet?
Einfrage hab ich aber noch!
Was mach ich mit pid_Reset_Integrator
Wann muss ich den Integrationsanteil zurücksetzen?
Ist das eine Art Anti-Wind-Up Schutzschaltung oder gibt es da eine
Regel?
1 | *! \brief Resets the integrator.
|
2 | *
|
3 | * Calling this function will reset the integrator in the PID regulator.
|
4 | */
|
5 | void pid_Reset_Integrator(pidData_t *pid_st)
|
6 | {
|
7 | pid_st->sumError = 0;
|
8 | }
|