Forum: Mikrocontroller und Digitale Elektronik Phanenanschnitt über timer als delay


von Sven (Gast)


Lesenswert?

Hallo.
ich bin grad fast am verzweifeln an einer phasenanschnittsteuerung.
früher hatte ich in der software folgendes gemacht, sobald ein INT
(Nulldurchgang) ausgelöst wurde:

for (int i = 0; i < Time;i++)
  _delay_us(30);

danach hab ich den triac gezündet.
Nun kann ihc das leider nicht mahr machen, da die Software
umfangreicher geworde ist und der code nur zeit verschwendet. Dann hab
ich mir gedacht ich mach die verzögerung einfach durch einen timer.
Also hab ich obrigen code einfach durch folgendes ersetzt:

TCCR1B = (1<<CS11) | (1<<CS10);
TCNT1 = 65000;
TIMSK |= (1<<TOIE1);

SIGNAL (SIG_OVERFLOW1)
{
  TIMSK &= ~(1<<TOIE1);
  TriacZunden();
}

das ganze funktionert aber nicht...der Triac züdet bei manchen werten
von TCNT1 garnicht, bei manchen nach kurzerzeit und bei wieder anderen
sofort...und dass völlig durcheinander.
normal müsste dass doch genauso möglich sein als die erste
veriante...oder hab ich da n denkfehler ?

Gruß

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Nimm den CTC-Mode!
(Ich gehe von eime AVR aus, der diesen Modus unterstützt.)

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>bei manchen werten von TCNT1 garnicht

Zeitabstand zu kurz?

von Michael Wilhelm (Gast)


Lesenswert?

Die besten Ergebnisse beim Phasenanschnitt habe ich mit dem Input
Capture gemacht. Die Zeitabstände zwischen den Nulldurchgängen steht
dann im Input Capture Register. Danach kannst du gemäss deiner Vorgaben
den Triac zünden.

MW

von TravelRec. (Gast)


Lesenswert?

Die besten Ergebnisse habe ich mit einer Vollwellenerfassung über
Doppeloptokoppler gemacht. Dessen Ausgang habe ich mit dem
Analog-Comparator verschaltet. Somit erhalte ich immer zu exakt der
gleichen Zeit (also nicht wie beim Portpin temperaturabhängig und
hysteresebehaftet) 2 Flanken und somit 2 Interrupts (abfallende und
ansteigende Halbwelle, je 0,5 ms um den absoluten Nullpunkt). Dadurch
lassen sich Zünd und Löschzeitpunkte sehr genau bestimmen. Der Timer
zum Messen der Zündzeit läuft durch und erzeugt seinerseits zyklisch
einen Interrupt zum Zeitvergleich. Der Prozessor langweilt sich dann in
der Main und "wartet" auf die auflaufenden Interrupts.

von Michael Wilhelm (Gast)


Lesenswert?

@ TravelRec,

die Nullpunkterkennung baue ich wie folgt auf:
Phase -> Vorwiderstand -> Gleichrichter -> Optokoppler
Die Durchbruchspannung des Koplers klemmt die maximale Spannung am
Gleichrichter auf ca. 1,5 V, sodass da kein spannungsfestes Teil
eingebaut werden muss. Und der Vorwiderstand bestimmt den Strom durch
den Koppler. Das mit den Doppeloptokoppler ist auch eine Lösung,
erscheint mir aber teurer. Meine ersten Versuche mit 2 Kopplern
scheiterten damals an der Exemplarstreuung.

MW

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.