Hallo!
Ich versuche gerade folgendes zu realisieren:
Ich habe eine Platine mit 8 SSR (Solid State Relais) und einem
PIC18F458. Ich möchte mit diesen Relais eine Schwingungspaket-Steuerung
realisieren.
Mein Problem ist jedoch die Formel, mit der ich das Tastverhältnis
ausrechnen kann, damit bei zB. 33% immer 1 Welle schaltet, dann 2 Wellen
nicht mehr, dann wieder 1 schalten ....
Habe leider bei Google nichts gefunden, und selbst bin ich auch noch
nicht draufgekommen.
Hat jemand von euch einen Tipp für mich?
Grüße
Mudla
Keine Ahnung wie sich das Prinzip nennt, aber sowas wie bei DDS
angewendet wird:
Du addierst den gewünschten Wert in jedem taktauf. Ist das Ergebnis >=
100% wird der Ausgang eingeschaltet und 100% abgezogen, ansonsten ist er
aus.
Für denen Fall sähe das dann so aus:
1. Takt: 33,3%, aus
2. Takt: 66,7%, aus
3. Takt: 100% -> 0%, an
usw.
Bei 50Hz hast du doch 50 Perioden pro Sekunde. Das bedeutet, dass jede
Periode 2% entspricht. (Bezogen auf eine Sekunde)
Oder anders wenn man über die Nulldurchgänge argumentiert. Pro Periode 2
Nulldurchgänge. Also jeder Nulldurchgang entspricht 1%.
Ich würde dir aber raten immer ganze Perioden durchzulassen sonst ist
das Signal nicht mehr mittelwertfrei (gleichstromfrei). Wenn ein Trafo
davor hängt wird der dann unsymmetrisch magnetisiert und kann in die
Sättigung geraten.
Ich hoffe der kleine Denkanstoß bringt dich weiter.
Gruß
Mandrake
Danke für die schnelle Antwort, aber die Lösung funktioniert leider
nicht wie gewünscht. Was ist zB be 30%? Da wird dann nur jede 4. Welle
geschaltet, was dann 25% entspricht. Und ausserdem ist dieses Verfahren
nur unter 50% anwendbar, wo auch mein größter Knackpunkt liegt.
Einerseits ist das Problem, daß ich nur in 2%-Schritten regeln kann
(Netzbedingt, 50Hz), und andererseits muss ich auch zB 84% richtig
aufteilen können.
Ich könnte ja eine Tabelle machen, in der ich die 50 Tastraten eintrage,
aber ich würde es lieber mit Formeln machen.
Mudla
Mudla schrieb:
> Danke für die schnelle Antwort, aber die Lösung funktioniert leider> nicht wie gewünscht. Was ist zB be 30%? Da wird dann nur jede 4. Welle> geschaltet, was dann 25% entspricht.
Nein, spiels mal durch:
1. Takt: 30%, aus
2. Takt: 60%, aus
3. Takt: 90%, aus
4. Takt: 120% -> 20%, an
5. Takt: 50%, aus
6. Takt: 80%, aus
7. Takt: 110% -> 10%, an
8. Takt: 40%, aus
9. Takt: 70%, aus
10. Takt: 100% -> 0%, an
Somit ist die Last in 3 von 10 Takten an, was genau den 30% entspricht.
> Und ausserdem ist dieses Verfahren> nur unter 50% anwendbar, wo auch mein größter Knackpunkt liegt.
Nein, spiels auch hier mal durch, z.B. mit 90%:
1. Takt: 90%, aus
2. Takt: 180% -> 80%, an
3. Takt: 170% -> 70%, an
4. Takt: 160% -> 60%, an
5. Takt: 150% -> 50%, an
6. Takt: 140% -> 40%, an
7. Takt: 130% -> 30%, an
8. Takt: 120% -> 20%, an
9. Takt: 110% -> 10%, an
10. Takt: 100% -> 0%, an
Somit ist die Last in 9 von 10 Takten an.
Um in 1%-Schritten zu regeln brauchst Du halt 100 Halb- oder
Vollsinuswellen.
Auf eine Art von PWM gemünzt würde das bedeuten, daß Deine
(Pseudo-)PWM-Periodendauer folglich 0,5s oder gar 1s dauert. Bei
Heizungsregelungen ist das vollkommen ausreichend - aber da Du nichts
weiter zur Anwendung gesagt hast, kann ich nur mutmaßen.
Also, für die Ein- zu Ausschaltdauer mußt Du einfach die Anzahl der
Halb- bzw. Vollwellen mitzählen. Wo liegt da das Problem?!?
Soll die (Pseudo-)PWM-Periodendauer kürzer sein, geht das nur auf Kosten
der Auflösung. Aber selbst dann kann man die gröbere Auflösung wieder
über mehrere (Pseudo-)PWM-Perioden mitteln - wenn man's denn gescheit
macht.
Möglicherweise suchst Du ja aber nach einem Algorithmus, der Dir bei
beliebigen Tastverhältnissen der (Pseudo-)PWM, die eingeschalteten Halb-
bzw. Vollwellen dann auf die Gesamtperiodendauer einigermaßen
gleichmäßig zu verteil versucht?! D.h. z.B. bei 2% Einschaltdauer eine
Halb-/Vollwelle am Anfang der (Pseudo-)PWM-Periode und eine weitere
Halb-/Vollwelle nach Ablauf von 50% der (Pseudo-)PWM-Periodendauer
anstatt beide Halb-/Vollwellen unmittelbar hintereinander einzuschalten.
Da wird es dann schon schwieriger aber auch nicht unmöglich. Eine Lösung
dazu habe ich z.Z. aber nicht greifbar.
Raimund Rabe schrieb:
> Möglicherweise suchst Du ja aber nach einem Algorithmus, der Dir bei> beliebigen Tastverhältnissen der (Pseudo-)PWM, die eingeschalteten Halb-> bzw. Vollwellen dann auf die Gesamtperiodendauer einigermaßen> gleichmäßig zu verteil versucht?! D.h. z.B. bei 2% Einschaltdauer eine> Halb-/Vollwelle am Anfang der (Pseudo-)PWM-Periode und eine weitere> Halb-/Vollwelle nach Ablauf von 50% der (Pseudo-)PWM-Periodendauer> anstatt beide Halb-/Vollwellen unmittelbar hintereinander einzuschalten.
Genau das macht das von mir beschriebene Verfahren:
Die Periodendauer ist so kurz wie möglich, bei 50% liegt sie bei 2
Takten, bei 1% bei logischerweise 100 Takten, bei krummen Werten wie 3%
bei 33 bzw. 34 Takten usw.
Benedikt K. schrieb:
> Raimund Rabe schrieb:>> Möglicherweise suchst Du ja aber nach einem Algorithmus, der Dir bei>> beliebigen Tastverhältnissen der (Pseudo-)PWM, die eingeschalteten Halb->> bzw. Vollwellen dann auf die Gesamtperiodendauer einigermaßen>> gleichmäßig zu verteil versucht?! D.h. z.B. bei 2% Einschaltdauer eine>> Halb-/Vollwelle am Anfang der (Pseudo-)PWM-Periode und eine weitere>> Halb-/Vollwelle nach Ablauf von 50% der (Pseudo-)PWM-Periodendauer>> anstatt beide Halb-/Vollwellen unmittelbar hintereinander einzuschalten.>> Genau das macht das von mir beschriebene Verfahren:> Die Periodendauer ist so kurz wie möglich, bei 50% liegt sie bei 2> Takten, bei 1% bei logischerweise 100 Takten, bei krummen Werten wie 3%> bei 33 bzw. 34 Takten usw.
Kann Dir nur zustimmen Benedikt.
Leider hatte ich meinen Post gerade geschrieben (mit Unterbrechungen
durch Kunden hier, die ich 'bedienen' mußte) als ihr schon eure ersten
Antworten gegeben hattet. Das mit dem DDS-Prinzip hätte mir eigentlich
auch einfallen müssen, wo ich doch ein kleiner Fan dieses Verfahrens
bin. ;-)
Aber wie immer - das Naheliegende fällt einem immer als Letztes ein.
Solltest Du nennenswert Leistung stellen und auch noch ein kommerzielles
Gerät entwickeln wirst Du mit Flicker ein Problem bekommen.
http://www.voigt-trafo.de/documents/emission-netzrueckwirkung.pdf
Wenn nicht, aber trotzdem große Leistung wird die Norm nicht dein
Problem sein - möglicherweise jedoch das Flackern deiner Lampen nerven.
Hi!
Ein kommerzielles Gerät sollte es schon werden, aber für den
italienischen Markt. Und die Leistung ist eh begrenzt, da die SSR, die
ich verwende, nur für 1A ausgelegt sind, dh max 250W.
Ich will hier keine Schleichwerbung machen, aber schau mal unter
http://www.daitec.it/daitec/produkte/steuerungen-remote-io.html, das
Modbus-RIO-Modul.
Ja, sieht nett aus.
Im Text steht: "Das Modul verfügt über 8 Relais-Ausgänge (250VAC/6A),
welche auch Schwingungspaket-Steuerung (250VAC/1A) unterstützen;"
Kann aber eigentlich nicht sein, wenn Du erst am Entwickeln bist :)
Apropos, entwickelt ihr hier in Deutschland? Wenn ja, wo?
EDIT:
jeder Kanal für sich hat vielleicht nur 250VA, aber 8 Kanäle die
gleichzeitig gesteuert werden, macht ... 2kVA!
Wäre nicht das erste mal, daß ein Produkt beworben wird, was noch nicht
einmal entwickelt ist, bzw. nocht nicht alle Features enthält, die man
angepriesen hat ...
Naja, die Platine ist ja schon entwickelt, das was du auf der Page
siehst, ist ein Foto vom 1. fertigen Teil. Den Text habe ich kurz vor
meinem letzten Post eingefügt. Nur mit der Programmierung war das noch
ein wenig ein Problem. Jetzt haben wir jedenfalls die Wellensteuerung
implementiert, und dann fehlt nur noch die PWM, ist aber kein Problem,
das sie schon vom PIC gemacht wird. Ist nur noch zu programmieren
(Modbus).
Wir haben unseren Betrieb hier in Südtirol (Italien), liefern aber auch
ins Ausland. Solltest du Interesse haben, melde dich bitte via eMail.
Ja, es ist ist ja quasi eine Form von Fehlerverteilung über mehrere
Takte.
Ich denke es ist eine Variante der Delta-Sigma Modulation:
http://de.wikipedia.org/wiki/Delta-Sigma-Modulation
PS: Damit kann man alles mögliche "dithern" wie z.B. Frequenz durch
periodisches Umschalten zwischen 2 Teilerfaktoren, oder die Auflösung
einer PWM Stufe durch periodisches Umschalten zwischen 2 PWM Werten zu
erhöhen. Manche µC haben mittlerweile sowas hardwaremäßig eingebaut, da
man dadurch immer mit der maximal möglichen Frequenz arbeitet.
Delta Sigma war mir auch in den Sinn gekommen (aus 1 bit PC Sound
zeiten),
war mir aber nicht sicher.
Hab so auf Atari ST Graustufenbilder auf dem SW-Monitor angezeigt.
Das wäre ja quasi was wie Spread Spektrum (zumindest was die Frequenz
angeht).
Wenn man das SNR (höhö) verbessern möchte, kann man ja auch noch
Noise-Shaping implementieren.
Ist dann quasi ein DAC mit 50Hz Samplefrequenz. Dann fehlt nur noch ein
Tiefpassfilter für die Abtastfrequenz und fertig ist die 100kVA
ShakerEndstufe zum Simulieren von Erbeben im mHz-Bereich :)
Ich bin mir jetzt nicht ganz sicher, ob ich das so verstanden habe, aber
so könnte es Funktionieren.
Nach dem Motto Bilder sagen mehr als Worte habe ein kleines Programm
gebastelt. Darf ich überhaupt ausführbare Dateien hochladen ?
Eine Impulsgruppensteuerung verwende ich auch.
Jedoch sieht dies hier besser aus.
Könnte mir jemand mal einen Beispielcode posten?
Ich würde das gerne mal in Bascom nachprogrammieren ;)
Zur Zeit habe ich eine Wertetabelle aus der ich herauslesen kann ob ich
den triac einschalte, oder nicht.(Ich zähle die Netznulldurchgänge)
Die ganze Geschichte ist doch recht aufwändig. Wenn ich das
Programmplatzsparender hin bekommen wäre dass super.
Gruß Anselm
@Anselm
Ich nehme mal an du zählst die Nulldurchgänge in einer
Interruptroutine.
Leider kenn ich mich in Basic nicht mehr aus, QBasic-Zeiten
sind schon lange her.
Und ich hab auch noch nix zum ausprobieren.
Will mir demnächst eine kleine Steuerung für meine
Schrottige thermische Solaranlage
bauen und da möchte ich auch die Pumpendrehzahl variieren können.
var Zähler
var SollLeistung
var NullZähler
Interruptroutine Nulldurchgänge
Nullzähler=NullZähler+1
wenn NullZähler < 2 verlasse Interruptroutine Nulldurchgänge
dann
Zähler=Zähler+SollLeistung
wenn ZählerNulldurchgänge >= 100 dann
Triac_an
Zähler=0
sonst
Triac_aus
Interruptroutine Nulldurchgänge ende
Das Problem ist von einem zum anderen Nulldurchgang ist keine
komplette Sinuswelle. Und wann trifft der Interrupt wirklich ein
kurz vor oder nach dem Nulldurchgang, oder besser wann würde
der Controller den Triac zünden?
Eigentlich (mit einem Nullspannungsschalter) muss die Steuerpannung
ja kurz vor oder während des Nulldurchgangs anliegen (oder weg sein
das der Triac abschaltet).
meine Nulldurchgangserkennung löst kurz davor aus, ich muss nur ein wait
einfügen dait es klappt. und nur alle 2 durchgänge die berechnung zu
machen ist auch okay ;)
hallo,
das Thema ist zwar schon länger unberührt, aber vielleicht...
Ich habe auch vor sowas zu bauen, aber in 2-Kanal Ausführung mit relativ
großen Lasten.
Hat Jemand eine Idee wie man es schafft, dass die Triacs soweit als
möglich abwechselnd einschalten, und nur bei Einschaltdauer_Kanal_A +
Einschaltdauer_Kanal_B >100% gleichzeitig eingeschaltet werden müssen?