Hallo, ich möchte eine PWM erzeugen und zwar möchte ich bei der berechnung der Leistung vergleichen ob die neue Leistung höher ist als die alte und Falls ja sollte die PWM um 1 schritt erhöht werden. Nun wird aber die PWM um 3 schritte erhöht und dann um 3 reduziert.Und das ständig wegen der While schleife. Ich nehme an da die PWM funktioniert, dass es an dem PWM code liegt. Ich komme aber nicht auf die Lösung. Ich wäre dankbar für eure Hilfe.
void Init_Timer_0(void) { TCCR0 = (1 << WGM00)|(1 << WGM01)|(1 << CS00)|(1 << COM01); //Fast PWM-Modus, Teiler auf 1, //Toggel des Pins B3 OCR0 = 0; } int main(void) { Init_Timer_0(); while(1) { P_zelle = U_zelle*I_bat; // Die P_zeller wird anhand anderer anhänge aufgerufen, die restliche programm teile habe ich nicht mit eingeführt da es ein bisschen zu komplex wäre if(P_zelle > P_zelle_alt) { OCR0++; } else if (P_zelle < P_zelle_alt) { OCR0--; } P_zelle_alt = P_zelle; }
Poco schrieb: > Leistung vergleichen ob die neue Leistung höher ist als die alte und > Falls ja sollte die PWM um 1 schritt erhöht werden. Nun wird aber die > PWM um 3 schritte erhöht und dann um 3 reduziert.Und das ständig wegen > der While schleife. Ich nehme an da die PWM funktioniert, dass es an dem > PWM code liegt. Ich komme aber nicht auf die Lösung. Dein Timer muss von 0 bis 255 zählen, bis er einen PWM Zyklus durch hat. Dafür braucht er Zeit. Wenn dein Code in der Hauptschleife in dieser Zeit 3 Messungen macht und daher zum Schluss kommt, dass OCR jeweils um 1 zu erhöhen ist, dann startet der nächste PWM Zyklus (an dem sich die Veränderung am PWM Pin das erste mal extern bemerkbar macht) mit einem um 3 erhöhten Wert. Du misst einfach zu schnell. Die PWM kann nicht so schnell reagieren wie du misst und als Folge der Messung den PWM Wert jedesmal erhöhst.
Also müsste ich die frequenz des Zählers ändern oder die frequenz der durchlaufs der schleife?
Schon mal ein Flussdiagramm dafür gezeichnet? Dann wird Dir klar was mein Vorredner meinte. BR
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.