Servus, bei einer Wellenpaketsteuerung währe es ja besser, anstatt eine einfache PWM steuerung zu verwenden, optimale Pulsfolgen zu erzeugen. Z.B. für 50% Leistung nicht 50 Halbwellen ein und 50 Halbwellen aus sondern jeweils jede zweite Vollwelle zu nutzen. Oder bei 25% Positive Halbwelle ein, eine Vollwelle pause, negative Halbwelle ein. Gibt es hier irgendwelche weiterführenden Infos dazu? Lassen sich solche Muster rechnerisch ermitteln oder ist hier eine Look Up Table das Mittel der Wahl? Grüße Oliver
Oliver P. schrieb: > Lassen sich solche Muster rechnerisch ermitteln Ja, natürlich. Sogar mit weniger Rechenzeitaufwand als ein table lookup erfordert. Ein klassischer Einsatzfall für den sehr effizient implementierbaren Bresenham-Algorithmus. Zur Erklärung des Prinzips lasse ich die Halbwellenproblematik erstmal weg. Du brauchst also erstmal ein Ereignis, welches bei jeder Vollwelle einmal eintritt. Und deinen Sollwert für den duty factor, dargestellt als Bruch aus zwei ganzen Zahlen. 50% wird also z.B. als 1/2 dargestellt, 25% als 1/4 usw. Den Zähler des Bruches nennen ich Z, den Nenner N. Außerdem benötigst du noch eine Zählvariable V Die Sache fängt damit an: V = N-1; Von nun ab machst du in jedem Event folgendes: V -= Z; if (V < 0) { V += N; Freischalten(); } else { Sperren(); } Die Halbwellenproblematik kann man da auch noch recht elegant einbauen. Aber das überlasse ich dir selber. Nur zwei Tipps: 1) Natürlich brauchst du dafür ein Halbwellen-Event statt eines Vollwellen-Events. 2) Richtig Nachdenken zur Entwurfszeit spart viele Takte zur Laufzeit. Die Halbwellengeschichte läßt sich einbauen, ohne die Routine selber zu erweitern.
Super! das hilft mir weiter. Bei c-haters Version liegt die eigentliche Schwierigkeit bei der Umwandlung des Dezimalbruchs in den echten Bruch mit dem kleinsten Nenner. Ich erinner mich dunkel dass das damals in der Schule schon problematisch war :-) Danke für eure Hilfe!
Oliver P. schrieb: > einer Wellenpaketsteuerung währe Noch die Leistung zu betrachten und ob es Dein Energieversorger so mitmacht. Zu viel Gleichstrom auf der Leitung mögen manche Trafos nicht.
Oliver P. schrieb: > Bei c-haters Version liegt die eigentliche Schwierigkeit bei der > Umwandlung des Dezimalbruchs in den echten Bruch mit dem kleinsten > Nenner. Nunja, in deiner Vorgabe war eigentlich nix von einem Dezimalbruch zu sehen...
Leistungsmäßig wären das 12kW an 3 Phasen. Im Moment ist es aber erst mal nur ein Gedankenspiel. Der Leistungsschalter soll ein 3-Phasen SSR mit ZC Funktion sein von dem ich noch gar nicht weiß wie es sich unter den geplanten Einsatzbedingungen verhält. Die Steuerung muss auch nicht sonderlich fein arbeiten. Eine 5% Abstufung wäre ausreichend. Da bleibt genug Spielraum krumme Halbwellenverteilungen auszugleichen. Vll. funktioniert das ganze an der geplanten Last (Blankdraht Durchlauferhitzer) wegen evtl. auftretender Erdströme aber auch gar nicht. EDIT: So gesehen sind die Prozentangaben ja Dezimalbrüche. 50% -> 0,5 25% -> 0,25 usw. Im Normalfall hat man die Sollwertvorgabe ja nicht als echten Bruch vorliegen.
:
Bearbeitet durch User
Oliver P. schrieb: > So gesehen sind die Prozentangaben ja Dezimalbrüche. 50% -> 0,5 25% -> > 0,25 usw. Im Normalfall hat man die Sollwertvorgabe ja nicht als echten > Bruch vorliegen. Das liegt doch nur an der Gestaltung der Eingabe. Nehmen wir mal ein per ADC befragtes Poti an: Natürlich kannst du da draußen auf die Skalenbeschriftung Prozentangaben drucken, lesen tust du aber immer nur Integers von der ADC. Begreifst du jetzt, wo deine Denk-Blockade ist? Du verwechselst die Repräsentation für den (gewöhnlich dummen) User mit dem, was das Programm tatsächlich zu tun hat...
>Begreifst du jetzt, wo deine Denk-Blockade ist?
Ehrlich gesagt noch nicht.
Ich arbeite intern z.B. mit einem 8Bit Wert der als Sollwert für die
Wellenpaketsteuerung dient. Der kommt z.B. von einem PI-Regler.
Diesen Wert muss ich jetzt in einen Bruch bestehend aus Zähler und
Nenner umwandeln und zwar nicht in irgend einen Bruch sondern in den mit
dem kleinst möglichen Nenner. Also 128 in Z=1 und N=2 und nicht etwa in
Z=6 und N=12 was ja das selbe wäre.
Oliver P. schrieb: > Ehrlich gesagt noch nicht. > Ich arbeite intern z.B. mit einem 8Bit Wert der als Sollwert für die > Wellenpaketsteuerung dient. Der kommt z.B. von einem PI-Regler. > Diesen Wert muss ich jetzt in einen Bruch bestehend aus Zähler und > Nenner umwandeln und zwar nicht in irgend einen Bruch sondern in den mit > dem kleinst möglichen Nenner. Nein. 1) ist es dem Bresenham scheißegal, ob er mit 1/2 arbeitet oder z.B. mit 128/256. Das Ergebnis wird EXAKT das gleiche sein. Oder anders ausgedrückt: Es ist überhaupt nicht nötig, den kleinsten Nenner zu suchen. 2) was auch immer ein wie beschissen auch immer implementierter Regler ausrechnet: Das Ergebnis muß in irgendeinen Integer-Datentyp mit einem genau definierbaren Maximum passen, denn auch die Ansteuerung eines Aktors ist gewöhnlich auf Integer-Datentypen beschränkt. Nun kann man aber bei feststehendem Maximum jeden denkbaren Wert auch als Bruch beschreiben. Nämlich Wert/Maximum. Jetzt klarer?
>Jetzt klarer?
Jep!
Jetzt ist der Groschen gerutscht. Danke für die Geduld :-)
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.