decharteau
27.05.2010, 13:58
hallo Zusammen, ich habe das Forum heute entdeckt, und will auch beitragen
ich beschäftige mich seit einige Moment mit einem Projekt im Rahmen des Studium. es geht um die Spannung- und Stromregler bei schaltnetzteil. Nach analyse der schaltung soll ich PID und PI Regler jeweil für Spannung- und Strom digitale entwerfen und in µC implementieren. Da ich neu im Bereich µC programmierung und digitale Regelung bin, habe erst ein PID Regler als Spannungsregler in C programmiert. kompiliert schon ok, execute auch und ADC und DAC getestet. Die Algo habe ich von der seite RN. Aber weiß nicht ob meine Anfangsbedingungen ok sind . ealt habe ich global und auf 0 definiert. esum=0 am anfang. weiß nicht ob ich auch y zu 0 setzt oder so lassen.
mein D-Anteil funktioniert nicht richtig. ich auch nicht warum. hat jemand ein idee dafür?
das ganzediese (PID Regler) habe ich noch am Netzgerät getstet. könnte jemand mir sagen worauf man achten soll beim test am Netzgerät. muss ich beim test am gerät den Istwert initialisieren oder so lassen.
2 . Punkt
ok mit dem PID Regler. ja weiß ich schon wie man ein Regler programmiert. jetzt will ich nur ein Programm für spannung und stromregler. mir fällt das Konzept oder gutes Algo wie ich das ding machen kann. ich weiß schon, dass es eine kaskaderegelung ist. der stromregler soll schneller sein. dh wenn der U_regler ein Abtastzeit von z.B 100 ms wie im Programm ( das ist noch nicht richtig definiert nur um programm funktionfähig zu bringen) ist dis Abtastzeit der Stromregler 10ms.
ich habe vor der stromregler in einem Interrupt zu schreiben, dr alle 10ms kommt und führ folgende aktion.
ISR_PI_Berechnung( parameter)
{
ADCCON= // starten
ADCCP= // kanal auswählen
value1= (ADCDAT )
ADCCON= // starten
ADCCP= // kanal auswählen
value2= (ADCDAT )
e= value1 - value2;
esum= esum+e;
y=kp*e + ki*Ta*esum
}
im Main wie oben rufe ich diese Routine.
verständnisproblem.
wenn ich so verfahre. wird jede 10ms den Strom geregelt. Aber im prinzip soll der Stromregler nur aktiv sein, wenn der aktuele Strom die Begrenzung erreicht oder größe diese ist. sons läuft der spannungsregler.
hat jemand schon solche Sache programmiert?ich suche eine richtige Strukture und möglicherweise Beispielprogram oder ähnlicher Aufgabe mit gute erklärungen.
ich dringen auf Ihre Beiträge und freue mich schon bald Ihnen zu lesen.
ich beschäftige mich seit einige Moment mit einem Projekt im Rahmen des Studium. es geht um die Spannung- und Stromregler bei schaltnetzteil. Nach analyse der schaltung soll ich PID und PI Regler jeweil für Spannung- und Strom digitale entwerfen und in µC implementieren. Da ich neu im Bereich µC programmierung und digitale Regelung bin, habe erst ein PID Regler als Spannungsregler in C programmiert. kompiliert schon ok, execute auch und ADC und DAC getestet. Die Algo habe ich von der seite RN. Aber weiß nicht ob meine Anfangsbedingungen ok sind . ealt habe ich global und auf 0 definiert. esum=0 am anfang. weiß nicht ob ich auch y zu 0 setzt oder so lassen.
mein D-Anteil funktioniert nicht richtig. ich auch nicht warum. hat jemand ein idee dafür?
das ganzediese (PID Regler) habe ich noch am Netzgerät getstet. könnte jemand mir sagen worauf man achten soll beim test am Netzgerät. muss ich beim test am gerät den Istwert initialisieren oder so lassen.
2 . Punkt
ok mit dem PID Regler. ja weiß ich schon wie man ein Regler programmiert. jetzt will ich nur ein Programm für spannung und stromregler. mir fällt das Konzept oder gutes Algo wie ich das ding machen kann. ich weiß schon, dass es eine kaskaderegelung ist. der stromregler soll schneller sein. dh wenn der U_regler ein Abtastzeit von z.B 100 ms wie im Programm ( das ist noch nicht richtig definiert nur um programm funktionfähig zu bringen) ist dis Abtastzeit der Stromregler 10ms.
ich habe vor der stromregler in einem Interrupt zu schreiben, dr alle 10ms kommt und führ folgende aktion.
ISR_PI_Berechnung( parameter)
{
ADCCON= // starten
ADCCP= // kanal auswählen
value1= (ADCDAT )
ADCCON= // starten
ADCCP= // kanal auswählen
value2= (ADCDAT )
e= value1 - value2;
esum= esum+e;
y=kp*e + ki*Ta*esum
}
im Main wie oben rufe ich diese Routine.
verständnisproblem.
wenn ich so verfahre. wird jede 10ms den Strom geregelt. Aber im prinzip soll der Stromregler nur aktiv sein, wenn der aktuele Strom die Begrenzung erreicht oder größe diese ist. sons läuft der spannungsregler.
hat jemand schon solche Sache programmiert?ich suche eine richtige Strukture und möglicherweise Beispielprogram oder ähnlicher Aufgabe mit gute erklärungen.
ich dringen auf Ihre Beiträge und freue mich schon bald Ihnen zu lesen.