Grüß euch,
ich habe gestern begonnen ein neues Programm für den Mikrocontroller am Grid Tie Inverter zu schreiben. In Grundzügen funktioniert das ganze schon, aber noch sehr schlecht. Ich habe die aktuelle Version hier angehängt. Für Vorschläge zur Verbesserung bin ich dankbar!
Die Idee hinter meiner Software:
Timer2 löst alle 128µs einen Interrupt aus. Das ist schnell genug um den Netzsinus mit 50Hz (20ms) oft genug abzutasten. Vom Timer2 werden auch noch andere Intervalle abgeleitet (100ms, 10ms und 1ms). Derzeit benutze ich nur das 100ms Intervall.
checkNetSine() sucht nach den Maxima und Minima im Sinus. Sobald diese vorhanden sind wird stateSineMaximum auf 1 gesetzt (als bei Zeiten wo der Netzsinus weit genug von der Nullinie entfernt ist). Jedesmal wenn das zutrifft wird cntSineMaxima erhöht. Da cntSineMaxima alle 100ms wieder gelöscht wird sollte dieser Zählerwert im Normalfall irgendwas zwischen 100 und 1000 beinhalten (wenn Netz vorhanden). Sonst nicht. Als Schwellwert habe ich 50 festgelegt. Das funktioniert recht zuverlässig.
Timer1 arbeitet als PWM Generator. Die Frequenz ist fix mit 50kHz eingestellt. Die Puls/Pausenzeit wird durch Verändern des Wertes OCR1A eingestellt.
doMPP() sollte die MPP Regelung durchführen.
Nun zu den auftretenden Problemen:
*) die ADC Wandlungen funktionieren recht unzuverlässig finde ich. Ich habe eine Mittelung mit dem vorhergehenden Messwert implementiert. Es gibt aber trotzdem noch relativ viele Fehlmessungen.
*) die MPP Regelung ist viel zu sprunghaft und flippt manchmal aus.
*) Debugging ist schwierig weil kein Display vorhanden ist und keine Verbindung zum PC zum Debuggen besteht.
Vielleicht hat von euch jemand Verbesserungsvorschläge. Zumindest in Grundzügen arbeitet das Programm aber schon.