PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : phasenanschnitt von umwälzpumpe mit pic12F629



paul725
03.04.2007, 17:06
hello Leute,
Ich schreibe Diplomarbeit jetzt. Mit pic12f529 durch
Phasenanschnittverfahren steuert Ich die Leistung der umwälzpumpe.
Hardware ist schon da, mit Triac den Strom der Pumpe sperren oder durch lassen .

Der problem ist , dass Ich einen Programm mit Assembler schreiben muß.
die Funktion ist beurteilung des netzspannungnulldurchgangs und des Triacstromnulldurchgangs,welcher Nulldurchgang kommt eher, und Messung die Zeit dazwischen.

wenn jemand Erfahrung hat,gebe mir Hilfe bitte!

vielen Dank!

PICture
04.04.2007, 11:56
Hallo paul725!

Ich habe mir mal einen Timer mit PIC12F629 gebaut um irgendwas für eingegebene Zeit einschalten. Als Takt habe ich die verdoppelte Netzfrequenz (100Hz) aus dem Netztrafo nach dem Gleichrichter benutzt, die durch Smitt-Trigger Inverter 74HC14 in Rechteck gewandelt wurde. Diese Rechteckige Spannung habe ich als externe Interruptquelle benutzt und der PIC ist mit internem RC Oscillator gelaufen. Du brauchst nur den Rechteck softwaremässig um feste Zeit verschieben, damit seine Flanken im Nulldurchgang der Netzspannung liegen. Mit dem R habe ich die max. Amplitude (5V) und mit dem Trimmpoti P den Tastverhältniss des Rechtecks auf 50% eingestelt.

MfG

1N4007 1N4007 .-----.
+->|-+--------+->|-+--------+----|7805 |-+--------> +5V
| | | |+ | '-----' |
| | .-. === --- | ---
| | R | | /-\ 100µ --- 100n | --- 100n
<---. ,-+ | 1k| | | | | |
)|( | '-' | | |
220V )|( | | | | | |
)|,------|--+-----|----+--------+-------+----+
50Hz )|( | | |
)|( | | .-. |\ |\ |\
<---' '-+ | | P | |<-----| >O-| >O-| >O--------------> INT
| | | 470| | |/ |/ |/ 100Hz
| | | '-'
| | | | 74HC14
+->|-+ +-----+-------------------------------+---> GND
1N4007 |
===
GND

paul725
04.04.2007, 16:19
vielen dank, PICture!

Ihre Schaltung ist ganze interessant. und Ich benutze Time1 um die Zeit zu messen.Aber jetzt ist meine schwerigkeit in assembler programmierung für pic12f629. Ich benutze Pollingverfahren um die Nulldurchgang zu abfagen.

Polling
;; ---------------------------------------------------------
SIGN_POS
btfsc _Inull ; Abfrage _Inull = 0?
goto SIGN_POS ; NEIN: -> SIGN_POS
; weiter im Programm ; JA: Programm fortsetzen
;; ---------------------------------------------------------

in diese möglichkeit kann nur ein Nulldurchgang abfagen. das bedeutet,erst netzspannung Nulldurchgang dann Triacstrom Nulldurchgang oder erst Triacstrom Nulldurchgang dann netzspannung Nulldurchgang. Das kann nicht beide Nulldurchgänge gleichzeitig abfragen. Das ist der Problem.

Ich bin erstmal mit Assembler für PIC12f629 Programmierung. deswegen habe ich schwerigkeit . wenn Sie Programmierung Erfahrung haben,geben mir mehr Hilfe oder Vorschlag Bitte! vielen Dank noch mal!

Mobius
04.04.2007, 19:05
Wirklich gleichzeitig wirst du sie nie abfangen können, da der PIC ja nur einen Prozessor innen drin hat. Du wirst immer mehr oder weniger Verzugszeiten wegen deinem Code bekommen, wobei diese aber bei einer Taktfrequenz von und über 1MHz zu 100Hz (also alle Nulldurchgänge bei Wechselstrom) verschwindend gering werden.
Aber nur nebenbei :).

Ja, das mit einem blockierenden Pooling zu lösen ist unmöglich (ich gehe mal davon aus, dass du keine Interrupts verwendest). Du brauchst eine andere Art von Polling, eine die dem Gedankengang folgt: Ist ein Ereigniss da, dann handle sie ab, ansonsten gehe weiter.

schleife:
btfss eingang1
call nulldurchgang_bei_1
btfss _eingang2
call nulldurchgang_bei_2
goto schleife

nulldurchgang_bei_1:
...
return

nulldurchgang_bei_2:
...
return
Das Problem bei diesem ist, dass du theoritsch jederzeit einen Nulldurchgang verpassen könntest, sollte dein Prozess, der diesen Abhandelt zu lange braucht.

Eine andere Möglichkeit wäre, wenn du den einen Zustand per Pooling abhandelst und den zweiten auf einen I/O-Pin Interrupt legst. Aber auch da ist es natürlich auch möglich, dass du durch den Interrupt den zweiten, gepollten Nulldurchgang verpasst, wenn der Interrupt zu lange dauert, oder wenn bei fast gleichzeitig auftreten, da der Interrupt das Hauptprogramm unterbricht.

Eine dritte Möglichkeit, die mri so auf die Schnelle einfällt wäre, dass du beide Nulldurchgänge auf I/O-Interrupts legst, aber in diesem nur jewels einen Bit setzt. Dadurch wird das Interrupt sehr schnell abgehandelt und danach musst du nur im Hauptprogramm nur noch dafür sorgen, dass du die Bits auswertes und auf einen oder zwei erkannten Nu
lldurchgänge reagierst.
Mit dieser Möglichkeit ist es dir nicht möglich einen Nulldurchgang zu "übersehen", aber dadurch, dass du nicht "augenblicklich" darauf reagierst, kommen natürlich kleine Verzugszeiten zwischen erkennen und regieren hinzu.

MfG
Mobius

€dit: Aso, ich verstehe grad die Fragestellung :). Also, wenn du _nur_ die Zeit zwischen den beiden Nulldurchgängen erkennen willst, ist das einfacher zu lösen, als ich es oben hingeschrieben habe.
Weil du musst ja nichts anderes machen, als erkennen, welches der beiden NUlldurchgänge zuerst kommt und danach den Timer zu starten und es zu stoppen, sobald der zweite Nulldurchgang erkannst wird.
Dafür wären methode 1 oder 3 am besten geeignet, also, dass du entweder beide Eingänge hintereinander abfragst und als reaktion darauf den Timer startest, stoppst, etc, oder das gleiche, nur ins Interrupt verschoben.

PICture
05.04.2007, 09:03
Hallo paul725!

Wenn es um Nulduchgänge der Netzspannung geht, habe ich mir noch eine einfache Schaltung erinnert. Die steigenden Flanken den Impulsen liegen kurz vor und die fallenden kurz nach dem Nulldurchgang. Der Nulldurchgang der Netzspannung liegt genau in der Mitte. Diese Schaltung habe ich als Takt für Steuerung eines Triacs verwendet. Die Ermittlung eines Nulldurchgangs vom Strom kann ich mir nur kompliziert vorstellen.

Eigentlich aus Deinen Beiträgen bin ich nicht ganz schlau (geht es um Steuern oder Messen?) und könnte Dir bei Programmierung des PICs nur bei für mich klaren Problemen vielleicht helfen. :)

Algemein, durch polling des GPIO Ports, kannst Du mehrere Pins quasi gleichzeitig überwachen und auf bestimmte Änderung auf bestimmtem Pin entsprechend reagieren.

MfG


+-------+-->+5V
| |
| .-.
| | |Rc
| | |1k
| '-' 0 0 0
| |
| +--> _|_|_|_
Rb 10k | |
___ | |/ 100Hz
+--+------+--|___|------------| T
| | | | |>
| | V | |
| | - | |
| .-. | .-----. | |
+->|-+ | |R +---+-|7805 |-+ |
| | | |1k |+ | '-----' | |
<---. ,-+ | '-' === --- | --- |
)|( | | /-\ --- | --- |
230V )|( | | | | | | |
)|,---------+------+---+----+----+-------+
50Hz )|( | |
)|( | ===
<---' '-+ | GND
| |
+->|-+

jogsen
05.04.2007, 10:03
Hallo,

da es noch keinen Ansatz zur Erkennung des I-Nulldurchganges gibt, hier mal meine Idee.

Eine Anschlussleitung des Motors durch einen Stromsensor (z.B Stromwandler 5 A Best.Nr.: 20860) legen. An den Anschlüssen des I-Wandlers einen 50 Ohm Widerstand zur Umwandlung des erzeugten Stromes in eine Spannung.
Diese Spannung mithilfe des Komperators im PIC mit einer manuell einstellbaren Spannung vergleichen.
Wenn Spannung vom I-Wandler größer als die manuell eingestellte ist dann Bit setzen.
Wie lange dieses Bit gesetzt ist kann man mittels Timer messen und das Strommaxima herausfinden. Der Nullpunkt des Stromes wird zwischen 2 Maximas (Minima == neg. Maxima) liegen.
Ob nur der Strom der Spannung voreilt oder nacheilt hängt nur von der Art des Verbrauchers ab. Dieser Motor wird wahrscheinlich ein Motor bleiben, und nicht irgendwann gegen eine kapazitve Last ausgetauscht werden.

Tschau

PICture
05.04.2007, 10:24
Hallo jogsen!

Coole Idee, weil sie sehr einfach zu realisieren ist!

Übrigens, nur Bestellnummer reicht zum Bestellen leider nicht. :)

MfG

jogsen
06.04.2007, 00:21
Hallo,

http://www.csd-electronics.de/

anbei der Link.

Bei der zu erwartenden Spannung von wenigen Millivolt vom Stromsensor(je nach Motorleistung), sollte die manuelle Referenz schon etwas genauer sein.

Tschau