Hi Leute, Ich hätte da mal eine Frage und hoffe, dass ihr mir eventuell einen Tipp geben könnt. Folgendes: Ich habe in einer Simulation einen einfachen Schaltregler gebaut und ihn mit Hilfe eines PID-Reglers etwas optimiert. Der Widerstand R1 ist die Last und kann auch problemlos variabel sein. Der PID-Regler macht was er soll und die Spannung wird von 12V auf konstante 5V gehalten. Nun war meine Überlegung, wie ich dies in C auf einem Mikrocontroller umsetze. Das einlesen der Werte und auch die Programmierung des PID-Reglers sollte keine Probleme verursachen. Mein Problem liegt in der berechneten Stellgröße y. Ich würde z.B. einen digitalen Pin als Ausgang benutzen und gewissermaßen ein PWM generieren um den MOSFET anzusteuern. Ich habe aber nicht die geringste Ahnung was ich da machen müsste oder ab welcher Stellgröße ich den Ausgang auf HIGH setze. Um es vorne herein zu sagen, ich habe es bis jetzt noch nicht programmiert und bin auch nicht in der Lage es hier schnell zu erproben. Es ist jetzt also kein praktisches Problem, sondern eine Überlegung von mir bei der ich nicht weiter komme ^^ ich danke für jede Hilfe
Du berechnest aus deinem Reglerausgang den Duty-Cycle für dein PWM und schreibst den Duty-Cycle in das Register welches für dein Hardware PWM vorgesehen ist. Wie du Timer und PWM mit dem Atmega zum laufen bekommst steht im AVR-GCC-Tutorial. Viele Grüße Christian
Ich weiß schon was du meinst, aber ich bin mir nicht sicher wie ich den Duty-Cycle berechnen soll. Ich kann ja wahrscheinlich nur positive Stellgrößen auswerten. Bzw. gibt es Richtlinien, wie den Duty-Cycle richtig skaliere? (Also ich muss ja eine Art y_max definieren) wirft Hirn auf mich :D
Martin L. schrieb: > Ich weiß schon was du meinst, aber ich bin mir nicht sicher wie ich den > Duty-Cycle berechnen soll. Ist eigentlich recht einfach. Denn ein Duty Cycle ist dem Prinzip nach einfach nur eine Prozentzahl. 0% bedeutet alles aus 100% bedeutet komplett ein. Das man diese Prozentzahl aufgrund technischer Gegebenheiten dann noch in eine andere Zahl verwandelt, weil die PWM anstelle von 0 bis 100 nun mal beispielsweise bei einer 8-Bit PWM Werte von 0 bis 255 haben will, ist eine andere Geschichte. Konzeptionell sind das einfach nur Prozentzahlen. > Bzw. gibt es Richtlinien, wie den Duty-Cycle richtig skaliere? (Also ich > muss ja eine Art y_max definieren) weniger als 0% geht nicht, den 'weniger aus' als aus kann etwas nicht sein. mehr als 100% geht nicht, denn 'mehr ein' als 'komplett ein' geht nun mal auch nicht. Das Gaspedal deines Autos kann entweder komplett Nicht-gedrückt sein (0%) oder es ist komplett durchgedrückt (100%) oder es ist in irgendeiner Stellung dazwischen. Aber weniger als 0 und mehr als 100 kann nicht sein. Ob du dann diese Prozent als Millimeter reingedrückter Weg beim einstellen des Gaspedals ausdrückst oder als Winkel um den das Pedal reingedrückt wurde, ist zweitrangig. Erst mal hast du eine Gasstellung die sich zwischen 0% und 100% bewegt. Und genau das spuckt dann auch der PID Regler aus, der die Geschwindigkeit konstant halten soll. Verringert sich die Geschwindigkeit, dann gibt er mehr Gas und erhöht den Gaswert von 23% auf 25%, egal wie das dann technisch umgesetzt wird. Liegt die tatsächliche Geschwindigkeit über dem Soll, dann verringert sich der Gaswert von 25% auf 23%, wieder: egal ob das dann noch in Millimeter oder Grad oder was auch immer umgemünzt wird. Das interessiert den PID Regler nicht. Für ihn existert einfach nur ein Stellglied, das er von 0% bis 100% einstellen kann und welches aufgrund dieser Einstellung etwas mit der Ausgangsgröße macht. Der Rest ist dann: Abstimmung der Konstanten im Regler, so dass der Regler zwar schnell ausregelt aber auch noch nicht ins Schwingen kommt.
Dann habe ich es mir wirklich zu schwer gemacht. ^^ ..man bin ich blöd. Das ist ja wirklich die einfachste Methode. Klar wenn y=0 dann PWM = 0 und wenn y >= 1 dann PWM = 255. Und eine Schrittweite von ca. 0,004 ist wahrscheinlich ausreichend. Bin schon fast schockiert, dass ich nicht selber darauf gekommen bin. ...zumal ich so oft etwas mit PWM mache. Zeit für ein Bier :D vielen Dank nochmal für eure Hilfe. Jetzt muss ich mich doch nicht mehr in den Schlaf weinen :D lg SBond
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.