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.
@Benedikt K. Dane, jetzt hab ich´s begriffen. Genau sowas habe ich gesucht. Danke an alle fürs mithelfen :) Mudla
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.
benedikt wrote: >Keine Ahnung wie sich das Prinzip nennt, aber sowas wie bei DDS >angewendet wird: Erinnert mich an dithering.
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?
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.