Forum: Mikrocontroller und Digitale Elektronik Steuermuster für Wellenpaketsteuerung


von Oliver P. (mace_de)


Lesenswert?

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

von Jens H. (nase71)


Lesenswert?


von c-hater (Gast)


Lesenswert?

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.

von Oliver P. (mace_de)


Lesenswert?

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!

von oszi40 (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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...

von Oliver P. (mace_de)


Lesenswert?

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
von c-hater (Gast)


Lesenswert?

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...

von Oliver P. (mace_de)


Lesenswert?

>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.

von c-hater (Gast)


Lesenswert?

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?

von Oliver P. (mace_de)


Lesenswert?

>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
Noch kein Account? Hier anmelden.