Ich habe im Moment einen Knoten im Kopf und komm nicht auf die Lösung. Ich habe einen 9V Trafo, dahinter einen Einweggleichrichter. Ich erhalte dahinter also immer nur die Positive Halbwelle. Auf die Pulse möchte ich mich synchronisieren und zwar so das ein Attiny84 zu jeder Halbwelle jeweils einen Lastwiderstand zuschaltet. 1. Halbwelle = Lastwiderstand 1; 2 Halbwelle Lastwiderstand 2 bei 4 beginnt es wieder mit 1.. Jetzt das eigentliche Problem, die Schaltung löst einen Trigger am AVR (INT0) aus, jedoch erst wenn die Halbwelle "schon" Bei 4 Volt ist. Mann könnte zwar noch zwei V näher an den Nulldurchgang gehen, bringt aber nichts. Ich will die Last am Besten schon kurz vor der positiven Halbwelle zuschalten. Im Moment warte ich nach dem Trigger einfach 18ms, schalte die Last zu, warte nochmal 15ms und warte auf den nächsten Trigger. Klappt ja auch, aber ich schalte halt nur jede zweite Halbwelle die Lasten zu, das muss doch bei jeder gehen. Is eigentlich n Zehnzeiler von Programm her, aber ich finde keine bessere Lösung, evtl hat ja einer von euch n Denkanstoß!?
Ich würde einen analogen Komparator (OP-Amp) verwenden, um aus den halben Sinuswellen ein Rechtecksignal zu erzeugen. Dann können die positiven Flanken ausgewertet werden (externer Interrupt). In der ISR musst du dann nur eine Variable hochzählen, bzw. zurücksetzen. Der rest ist dann lediglich das Ansteuern der Controllerpins.
Detlef Kunz schrieb: > Dein Problem ist, das eine Halbwelle nur 10ms lang ist ;) Wenn es denn ein Zeitproblem ist dann nimm den Trigger. Messe/Bercehner die Zeit die Du zu spät bist. Reagiere einfach erst eine Halbwell minus der Fehlzeit später. So verlierst Du die erste Halbwelle, aber dann bist Du in Sync. Das Ganze könntest Du auch noch mit einer PLL-Funktion verbinden falls die 50Hz zu sehr schwanken ... aber das glaube ich nicht. Wobei mir diese Lösung jetzt zu kompliziert erscheint. Kann man das nicht mit einer Capture/Compare Funktion machen? Es müsste doch Möglich sein einen Ausgang ohne Prozessor, nur abhängig von einem Einganspin, zu schalten ...
Ingo schrieb: > Im Moment warte ich nach dem Trigger > einfach 18ms, schalte die Last zu, warte nochmal 15ms und warte auf den > nächsten Trigger. Klappt ja auch, aber ich schalte halt nur jede zweite > Halbwelle die Lasten zu, das muss doch bei jeder gehen. Nachdem dein µC einen Trigger erkannt und 18ms später die Last auf der Halbwelle eingeschaltet hat, sollte der vollbrachte Schaltvorgang ihn doch nicht dran hindern, sich aus der selben Halbwelle auch wieder einen Trigger rauszufischen und nicht erst bei der darauf folgenden pos. Halbwelle wieder einen Blick auf die Realität tun. Ein vernünftiger Nulldurchgangsdetektor - statt eines Flankentriggers auf die Halbwelle - wäre natürlich auch nicht schlecht. In der Application Note AVR182 von Atmel wird ein minimalistischer Ansatz mit zwei hochohmigen Widerständen direkt an der Primärseite des Trafos verwendet, um einen Bezugszeitpunkt für die Steuerung zu gewinnen. Die Spannung ist so hoch, das der Zeitfehler durch die Schwellenspannung unkritisch ist.
Also mein Trigger ist ein Rechtecksignal. Leider läuft der AVR aufm int OSC, somit schwankt der Takt und meine Synchroniesierung läuft weg, schon ausprobiert...
Hmm, nagut offensichtlich zählst Du die negativen Halbwellen nicht mit, also kommt die "zweite" erst nach 20ms. Du hast einen 50Hz-Takt. Nimm einen Timer, der einen 18ms Takt erzeugt und immer vom INT0 zurückgesetzt wird. Die Ausgänge schaltest Du mit dem Timer-Interrupt. Das ganze denke ich mir so: Der Timer zählt hoch und wird irgendwann vom INT0 rückgesetzt (syncronisiert). Daraufhin hat er deine 18ms Zeit und löst dann einen TimerInterrupt aus. Dann zählt er er wieder hoch, wird dann aber vom nächsten INT0 syncronisiert, worauf er wieder 18ms Zeit bis zum nächsten Timerinterrupt hat.
Also, ich kenne mich auf dem Gebiet jetzt nicht wirklich aus, aber ich glaube das könnte funktionieren. Dein Problem ist ja das Du exakt wenn die Spannung wieder minimal von 0 gestiegen ist eine Aktion ausführen möchtest. Einen Nulldurchgang in dem Sinn gibt es ja nicht. Das Signal liegt lange auf Null und steigt dann an. Dein Komparator hat auf jeden Fall eine kleine "Spannungslücke" von ein paar Millivolt ... Die entsprechende Zeit der Halbwelle verlierst Du auf jeden Fall. Die kannst Du zwar sehr klein machen aber nie auf 0 bringen. Die von mir erwähnte Zeitberechnung kann theoretisch auf 0 kommen. Die Zeit-Methode verliert aber die erste Halbwelle. Das mag nicht wichtig sein, weis ich aber nicht ... Jetzt weis ich nicht ob es geht, aber Du hast Zähleingänge und Compare-Ausgänge an dem Tin84. Du könntest die Zähleingänge nutzen und das Compare-Register des Ausgangs auf 1 stellen. Wenn dann ein Impuls am Takteingang rein kommt zählt das Register herunter und der Compare Ausgang wird aktiviert. Gleichzeitig wird ein Interrupt ausgelöst. Du könntest dann in einer ISR-Routine Register ändern und so vorbereiten das der nächste Impuls einen anderen Ausgang schaltet. Für zwei Ausgänge müsste das Funktionieren. T0 und T1 als Eingänge, OC0A und OC0B als Ausgänge. Wenn Du jetzt noch OC1A und OC1B als Ausgänge nutzen kannst in dem Du die Register umprogrammierst, könnte es funktionieren ... so etwas habe ich aber noch nie gemacht ... weis also nicht ob es geht.
Es ist softwaretechnisch nicht schwer, aus einem Signal 000000111111000000000011111100000000001111110000 die Frequenz und die Pulsweise high und Pulsweise low zu ermitteln. Und wenn man dann die Mitte vom high bzw low als Punkt der höchsten Spannung identifiert, ist 5ms dahinter der Nulldurchgang. v v v Mitte high 000000111111000000000011111100000000001111110000 ^ ^ ^ ^ ^ ^ Nulldurchgang Auf diese Art lockt man mit einer digitalen PLL auf die ca 50Hz, und weiß, wann der nächste Nulldurchgang kommen wird, selbst wenn der nächste Flankenwechsel später kommt. Starte einen ausreichend hochauflösenden Timerinterrupt Warte auf 1 Zähle H wie lange 1 (bis Flankenwechsel auf 0 kommt) Zähle L wie lange 0 (bis Flankenwechsel auf 1 kommt) Nun kennt man H high-zeit und L low-Zeit, damit die Periodendauer H + L, der nächste Nulldurchgang nach 1->0 ist in (L+H/2)-3*(H+L)/4 der darauffolgende Nulldurchgang in (L+H/2)-1*(H+L)/4 Die Zählerwerte H und L werden kontinuierlich angepasst. Bei zu grossen Abweichungen (kommen keine 45-65 Hz mehr raus) wurde die Zählererfassung jedoch gestört du man verwirft die Werte.
Hai! Ingo schrieb: > Jetzt das eigentliche Problem, die Schaltung löst einen > Trigger am AVR (INT0) aus, jedoch erst wenn die Halbwelle > "schon" Bei 4 Volt ist. Mann könnte zwar noch zwei V näher > an den Nulldurchgang gehen, bringt aber nichts. Ich will > die Last am Besten schon kurz vor der positiven Halbwelle > zuschalten. Nun... und was befindet sich "kurz vor der positiven Halbwelle"? Bingo! Die negative Halbwelle! Also: Einweggleichrichter raus, Potenzialverschiebung (mit Spannungsteiler?) basteln, Komparator rein, Referenzspannung des Komparators einstellbar machen (PWM und Filter); Richtungs- erkennung (Anfang oder Ende der Halbwelle) implementieren (per Software oder zweitem Komparator). Waere zumindest mein Ansatz. Damit kannst Du den "Zuendwinkel" fast zwischen -90° und +90° einstellen. Grusz, Rainer
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.