Forum: Mikrocontroller und Digitale Elektronik Heizelement mit Sharp S202S02 schalten


von Stephan W. (stipo)


Lesenswert?

Nabend zusammen,

im moment bin ich etwas verwirrt, wie ich den Sharp S202S02 ansteuern 
muss an welchem ein Heizelement (250W/230V) angeschlossen ist.

Ich habe einige Beiträge hier im Forum gelesen dazu. Unter anderem steht 
da in fast allen drinne, das man eine Schwingungspaketsteuerung 
realisieren soll.

Nur mal so zum wissen, ob ich es verstanden habe. 
Schwingungspaketsteuerung bedeutet, das von den 50Hz Netzfrequenz (100 
Nulldurchgänge) immer nur ein teil zB 50 Nulldurchgänge das Relais 
angezogen ist.
Das ergäbe dann eine Schaltfrequenz von 25Hz.

Wie steuere ich das nun am besten an?
Folgendes habe ich bis jetzt. Es läuft ein Timer0_Overflow Interrupt.
Bei 8MHz des Atmega8 und einem Prescaler von 1024 wird der Interrupt ca 
alle 30ms ausgelöst.

Soweit denke ich mal, dürfte das alles noch passen.

Wie geht es da nun weiter. Ich meine aus den Posts gelesen zu haben, das 
eine PWM schlecht sein soll.
Erreichen möchte ich, das von den 100 Nulldurchgängen pro Sekunde 70 
oder so das Relais schaltet. In den restlichen 30 dann eben aus. So habe 
ich das ja verstanden.

Hier mal was ich mir denke und mal eine kleine Rechnung.
Wenn ich 70 Nulldurchgänge lang das Relais anziehen möchte, dann muss 
ich in der annahme das die 28ms in der ISR stimmen, 25 ISR durchgänge 
das Relais angezogen lassen und dann den Rest der Sekunde (1000ms) aus 
lassen.

Hoffe das ist nicht alles zu verwirrend geschrieben :)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stephan W. schrieb:
> Ich meine aus den Posts gelesen zu haben, das
> eine PWM schlecht sein soll.

Das funktioniert mit dem Sharp sowieso nicht, da er eine 
Nulldurchgangserkennung hat - er schaltet ein, wenn die LED leuchtet und 
ein Nulldurchgang erkannt wird. Bis zum Rest der Halbwelle ist er dann 
aktiviert.
Dein Ansatz ist doch schon ganz ok. Du musst dich dank der o.a. 
Nulldurchgangserkennung eigentlich gar nicht um Halbwellen kümmern, 
sondern nur noch um die absoluten Zeiten. Bei einem gewünschten 
Verhältnis von 70:30 Ein/Aus den Sharp also 70% der Zeit anschalten und 
die restlichen 30% aus.
Du könntest 1% als eine Vollwelle definieren (20mSec), dann kommt also 
raus 70*20mS = 1400 mSec 'Anzeit' und 30*20mSec = 600mSec 'Auszeit.

Eine langsame PWM wäre auch denkbar. Der Timer läuft z.B. in 2000 mSec 
einmal durch (100%) . Ein OCR Register könnte dann daraus das 
Schaltsignal für den Sharp gewinnen.

von Stephan W. (stipo)


Lesenswert?

Matthias Sch. schrieb:
> Das funktioniert mit dem Sharp sowieso nicht, da er eine
> Nulldurchgangserkennung hat - er schaltet ein, wenn die LED leuchtet und
> ein Nulldurchgang erkannt wird. Bis zum Rest der Halbwelle ist er dann
> aktiviert.
Das weis ich. Genau deshalb hab ich den Typen auch gewählt, da der mir 
den Nulldurchgang selbst schalten kann. Beim S202S01 müsste ich das ja 
auch noch regeln.


> Dein Ansatz ist doch schon ganz ok. Du musst dich dank der o.a.
> Nulldurchgangserkennung eigentlich gar nicht um Halbwellen kümmern,
> sondern nur noch um die absoluten Zeiten. Bei einem gewünschten
> Verhältnis von 70:30 Ein/Aus den Sharp also 70% der Zeit anschalten und
> die restlichen 30% aus.
> Du könntest 1% als eine Vollwelle definieren (20mSec), dann kommt also
> raus 70*20mS = 1400 mSec 'Anzeit' und 30*20mSec = 600mSec 'Auszeit.
Hier komme ich nun nicht ganz mit, was Du da meinst. 1400mSec sind doch 
mehr als 1Sekunde. Somit werden doch nicht die 100 Nulldurchgänge (50Hz) 
des Netzes beschnitten. Oder liege ich da falsch. Müsste es so heisen, 
das von sagen wir mal 10 Minuten Heizzeit 7 Minuten das Heizelement an 
ist und 3 Minuten abgeschalten, egal zu welchem Zeitpunkt dann die der 
50Hz Netzfrequenz abgeschalten wird?


> Ein OCR Register könnte dann daraus das Schaltsignal für den Sharp gewinnen.
Das mit dem OCR Register musst Du mir mal noch genauer erklären. Da 
steigen ich nun gerade garnicht durch, was Du damit meinst.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stephan W. schrieb:
> Hier komme ich nun nicht ganz mit, was Du da meinst. 1400mSec sind doch
> mehr als 1Sekunde. Somit werden doch nicht die 100 Nulldurchgänge (50Hz)
> des Netzes beschnitten. Oder liege ich da falsch.

Nein, mein Ansatz war willkürlkich gewählt, da ich, um eine Schieflage 
der Netzbelastung zu vermeiden, immer mit Vollwellen gerechnet habe, die 
ja 20mS lang sind.
Um einfach rechnen zu können, habe ich jetzt angenommen, jede Vollwelle 
entspricht einem Prozent deiner gewünschten Einschaltdauer. Es käme bei 
100% ED also 100*20mS = 2000 mS raus, 2 Sekunden pro kompletter 'PWM' 
Periode.  50% entssprächen dann 1 Sekunde aus, 1 Sekunde an - durchaus 
zulässig für deine träge Last.
Für eine Controllersteuerung ist es praktisch, ein PWM Register zu 
benutzen, da dann die gesamte SSR Ansteuerung im Hintergrund laufen 
kann, das Puls/Pausenverhältnis wird in diesem Fall durch ein OCR 
Register bestimmt. Ein Beispiel: Der 8-bit Timer0 eines AVR zählt von 0 
bis 255 und springt dann wieder auf 0. PWM Modus sei aktiviert und die 
Ausgänge des PWM freigegeben. Das OCR Register sei mit 128 besetzt. In 
dem Moment, wo der Timer die 128 erreicht, wird dann 'automagisch' der 
Ausgang OCR0A auf high geschaltet. Sobald der Timer überläuft ( bei 
255->0) wird der Ausgang wieder auf low gesetzt - fertig ist die PWM. ( 
siehe Datenblatt jedes AVR mit Timer PWM)
Die Kunst bei der Programmierung der Schwingungspaketsteuerung besteht 
nun darin, Timerwert und Netzperioden unter einen Hut zu bringen. Du 
könntest

1. den Timer mit der Netzfrequenz laufen lassen ( per T0 oder T1 Eingang 
und einem Optokoppler) Vorteil ist, das du dich um praktisch nix kümmern 
musst, was Periodendauer usw. betrifft und dich voll auf die PWM 
Programmierung konzentrieren kannst. Nachteil ist der erhöhte 
Hardwareaufwand.
2. Den Timer sehr langsam laufen lassen, so das z.B. jeder Zählimpuls 10 
oder 20mSec lang ist. Vorteil: Keine Hardware nötig, das SSR geht mehr 
oder weniger direkt an den AVR, sonst nix. Nachteil: Ha, probier erstmal 
einen Timer so langsam laufen zu lassen. Vermutlich wäre da ein 16-bit 
Timer besser und es erfordert ein bisschen Rechnerei, um auf vernünftige 
Werte zu kommen.
Gibt bestimmt noch andere Wege, die Forenteilnehmer haben da garantiert 
noch andere Rezepte auf Lager. Bsp. ein 'Timer Overflow' Getriebe, was 
einen schnellen Timer runterteilt. Da muss dann allerdings auch die PWM 
Steuerung 'zu Fuss' gemacht werden.

von dh (Gast)


Lesenswert?

hi, das spiel heißt (zero crossing detector) nulldurchgang erkennung.ein 
microcontroller zählt die Nulldurchgänge und führt entsprechend ein 
befehl aus.Nulldurchgang detektor, microcontroller atmega8 und 
programiersprache bascom.viel spaß

von ... (Gast)


Lesenswert?

Matthias Sch. schrieb:
> Gibt bestimmt noch andere Wege, die Forenteilnehmer haben da garantiert
> noch andere Rezepte auf Lager. Bsp. ein 'Timer Overflow' Getriebe, was
> einen schnellen Timer runterteilt. Da muss dann allerdings auch die PWM
> Steuerung 'zu Fuss' gemacht werden.

Ein 1 Byte Zähler, der z.B. mit 1 Hz Takt oder langsamer immer in der 
Runde läuft, beim Nulldurchgang die Heizung einschaltet und beim 
Erreichen eines Vergleichswertes wieder aus, sollte auch zu Fuß 
irgendwie hinzukriegen sein, ohne den ATmega8 auszureizen  - selbst in 
BASCOM.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Matthias Sch. schrieb:
> In
> dem Moment, wo der Timer die 128 erreicht, wird dann 'automagisch' der
> Ausgang OCR0A auf high geschaltet. Sobald der Timer überläuft ( bei
> 255->0) wird der Ausgang wieder auf low gesetzt

Das ist natürlich genau umgekehrt, sorry. Der PWM Ausgang wird low, wenn 
der OCR Wert erreicht ist, bei positiver Logik. Damit ist die PWM Dauer 
direkt proportional zum OCR Wert.

von spess53 (Gast)


Lesenswert?

Hi

>Das ist natürlich genau umgekehrt, sorry. Der PWM Ausgang wird low, wenn
>der OCR Wert erreicht ist, bei positiver Logik. Damit ist die PWM Dauer
>direkt proportional zum OCR Wert.

Damit kommst du aber mit der PWM nicht auf Null. Bei OCR=0 ist die PWM 
immer noch einen Timertakt eingeschaltet.

MfG Spess

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

spess53 schrieb:
> Damit kommst du aber mit der PWM nicht auf Null. Bei OCR=0 ist die PWM
> immer noch einen Timertakt eingeschaltet.

Das ist richtig für den 'Fast PWM Mode' beim ATMega8 - das Datenblatt 
nennt einen 'Small Glitch' der am Ausgang auftritt, wenn OCR = 0 ist. 
Anscheinend kann das aber mit dem 'Phase Correct Mode' in Timer 1 und 
Timer 2 vermieden werden:
'The extreme values for the OCR1x Register represent special cases when 
generating a PWM waveform output in the phase correct PWM mode. If the 
OCR1x is set equal to BOTTOM the output will be continuously low and if 
set equal to TOP the output will be continuously high for non-inverted 
PWM mode. For inverted PWM the output will have the opposite logic 
values. '

von spess53 (Gast)


Lesenswert?

Hi

>Das ist richtig für den 'Fast PWM Mode' beim ATMega8 - das Datenblatt
>nennt einen 'Small Glitch' der am Ausgang auftritt, wenn OCR = 0 ist.

Der 'Small Glitch' ist soweit mich mich erinnere 1 Timertakt. D.h. die 
On-Zeit ist im 'non-inverting mode' gleich OCR+1. Der Glitch lässt sich 
auch bei Fast-PWM vermeiden, indem man den 'inverting mode' benutzt und 
den OCR-Wert umrechnet.

MfG Spess

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.