Forum: Mikrocontroller und Digitale Elektronik Netzsynchronisation für Triggerschaltung


von ehrnsperger (Gast)


Lesenswert?

Hallo,

ich habe eine Triggerschaltung für TOV-Prüfung (Temporary Overvoltage) 
entwickelt und nach DIN muss die Triggerung bei 90° stattfinden. Um die 
Schaltung auch für andere Prüfungen verwenden zu können haben wir uns 
entschlossen alle Werte beliebig einstellen zu können.

Bei der Netzsynchronisation hackts nun.
Meine ursprüngliche Idee funktioniert leider nicht.

Hier die Idee:
Ein Timmer (555) erzeugt eine frequenz von 18kHz, diese Frequenz geht 
direkt auf einen Eingang des µC (PIC16F9876 28Pin mit 20Mhz Quarz).
Ein Optokoppler liefert mir beim Netznulldurchgang ein Hight Signal 
(Fließt ein Strom durch die Diode habe ich LOW) Wegen der Diode nur zur 
pos. Halbwelle der Netzspannung.

Zusammengefasst kann man sagen dass der PIC in der zugewiesenen Zeit mit 
der 555er Zählen sollte bis ein eingestellter Wert erreicht ist. Dadurch 
würde sich dann eine passende verschiebung zur Netzfrequenz ergeben. 
Durch die mögliche Veränderung des Wertes hätte man eine schöne 0-360° 
Einstellmöglichkeit. (20ms von 18kHz sind 360)

Allerdings zählt der PIC einfach nicht, anscheinend kann er nicht so 
schnell zählen. Hat wer eine Idee was ich machen könnte bzw. gibts da 
nen Baustein oder stimmt was mit meinem PIC nicht?
Das Programm hat ca 8200 Zeilen.

MFG

von ehrnsperger (Gast)


Lesenswert?

Keiner eine Ahnung bzw. keiner schon mal probiert?

von Peter D. (peda)


Lesenswert?

Was soll der Unsinn, nen 555 an nen MC anzuschließen, der hat doch 
selber haufenweise Timer.
Und am Quarz sind die auch deutlich stabiler als ne alte 555 Gurke.

Zu Deinem SW-Problem:
Zeile 42

(ohne Code kann keiner hellsehen)


Peter

von ehrnsperger (Gast)


Angehängte Dateien:

Lesenswert?

Hmm da magst du schon recht haben.
In der angehängten Datei ist meine programmierung eines timers (in 
diesem fall Tp=50ms also 20hz)

recht höher als 500hz komm ich irgendwie nicht?

ne ahnung wie ich auf so ca. 18kHz käme?

von Peter D. (peda)


Lesenswert?

ehrnsperger schrieb:
> In der angehängten Datei ist meine programmierung eines timers (in
> diesem fall Tp=50ms also 20hz)

Oje, PIC-Assembler, das ist mir zu kompliziert.
Da kann ich leider nicht helfen.


> recht höher als 500hz komm ich irgendwie nicht?
>
> ne ahnung wie ich auf so ca. 18kHz käme?

Mit Polling in der Mainloop wird das wohl nix.
Ein Timer kann mit dem CPU-Takt zählen, also 5MHz.
Dann setzt Du nen Interrupthandler für den Überlauf auf.
Falls die Zeit einstellbar sein soll, häng ein Poti an nen ADC-Engang 
und der liefert dann den Reloadwert zum Starten des Timers.


Ich hab mal sowas ähnliches gemacht mit nem ATtiny25, allerdings in C 
geschrieben.
Der hat dann gleich die Periodendauer gestoppt und automatisch zwischen 
50Hz und 60Hz umgeschaltet. Quasi ne SW-PLL.
D.h. ein Potiwert hat immer die gleiche Phasenverschiebung ergeben.


Peter

P.S.:
Nen PIC16F9876 finde ich nicht.

von ehrnsperger (Gast)


Lesenswert?

sorry .. PIC16F876

von ehrnsperger (Gast)


Lesenswert?

Ja ich tu mich leider auch ziemlich schwer in assembler..
Dass der Zähler nicht richtig zählt macht mich schon sehr stutzig..

von chris (Gast)


Lesenswert?

Was soll der shit ?

von gast (Gast)


Lesenswert?

chris wird wohl zeit dass du wieder in die schule gehst und deutsch 
lernst.. weisst du was eine ellipse ist? (tipp - ist ein rhetorisches 
mittel)

von chris (Gast)


Lesenswert?

Leider verstehe ich assembler, aber ich verstehe nicht, wie man so was 
programmieren kann. Naja, erzähl mal, wie der Timer initialisiert ist, 
usw,
und auf was du da eigentlich testen willst, und wiso du den test mit 
carry und nicht mit Z Flag machst ? Noch wichtiger, wiso kein Interrupt 
und
nur ein Polling, was unter aller säue ist.

von Gerhard. (Gast)


Lesenswert?

Hallo,

vielleicht hilft das folgende:

vor ein paar Jahren experimentierte ich mit uC Phasenanschnittsteurung 
fuer einen TRIAC zur Motorsteuerung. Assembler war nicht notwendig und 
alles wurde in C geschrieben. Bei mir wurde ein PIC18F452 eingestezt; 
ein PIC16F876 sollte aber kein Problem sein. Bei mir ist uebriegens die 
Netzfrequenz 60Hz.

Hier die Beschreibung der Hardware:

100HZ (120HZ) Interrupt auf INT (RB0).
TIMER1 intern vom 16MHZ Quartz mit 1MHZ (1us) getaktet.
(Quarz / 4, Prescaler 1:4)
MIT dem COMPARE MODE Interrupt die gewuenschte Phasendifferenz 
einstellen (10us bis 20000us (20ms).

Bevor die Interrupts global enabled werden, natuerlich TIMER1 auf 0 
setzen und den COMPARE Wert entsprechend fuer den Startup einstellen. 
Wenn das nicht gemacht wird, kann natuerlich ein ungewuenschter 
Ausgangspuls vorkommen.

Wenn der COMPARE interrupt aktiv ist, den TRIAC (oder Deine HW) mit 
einem PORT Ausgang ansteuern und den Timer auf Null setzen. Ausser der 
COMPARE  ISR und Netz ISR(100Hz) funktioniert das ganze vollautomatisch 
und der uC kann 99.999% schlafen oder mit dem User Interface aktiv sein.

Mit diesem Konzept kann man also relativ vom Nulldurchgang der 
Netzspannung jede gewuenschte Zeitverzoegerung oder Phasendifferenz mit 
Quarzgenaugigkeit in 1us Schritten fein einstellen.

Jedenfalls hat dieses Konzept bei mir 100% zuverlaessig funktioniert.

mfg,
Gerhard

von ehrnsperger (Gast)


Lesenswert?

Vielen Dank für deine Hilfe, genau so möcht ichs auch machen. bekomm 
allerdings die programmierung nicht richtig hin..

schau morgen nochmal wie ichs mache und dann werd ich mir was anderes 
überlegen müssen..

von Gerhard. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

anbei ein paar Unterlagen um Dir etwas auf die Beine zu helfen;-)

mfg,
Gerhard

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.