mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Netzsynchronisation für Triggerschaltung


Autor: ehrnsperger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ehrnsperger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keiner eine Ahnung bzw. keiner schon mal probiert?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ehrnsperger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ehrnsperger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry .. PIC16F876

Autor: ehrnsperger (Gast)
Datum:

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

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll der shit ?

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gerhard. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ehrnsperger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Gerhard. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

mfg,
Gerhard

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.