Steuermuster für Wellenpaketsteuerung

OP #3464001
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
Gast #3464074
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.
OP #3464499
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.
Gast #3464512
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...
OP #3464545
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.
Gast #3464611
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren