pic phasenabschnittsteuerung

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 31 10 2024  22:30:01      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
pic phasenabschnittsteuerung
Suche nach: pic (2056)

    







BID = 171525

ffs_hiwi

Gesprächig



Beiträge: 153
Wohnort: Reinbek
 

  


hallo,
ich habe eine pahasenabscnittsteuerung mit einem pic 16f84 mit 16Mhz und einem tsop ir empfänger für das steuern mit rc5 codes programmiert. an rb0 ist die ac leitung für das zerocrossing angeschlossen. an rb1 hängt der triac.
das programm benutzt keine pullups und einen timer0 vorteiler von 256, sodass im bereich der werte 101-255 von timer0 genau eine halbwelle liegt, also 10ms bei 50hz.
ich aktivieer den interupt, wenn zerocrossing aktiv ist, also beim übergang von low auf high wird der ausgelöst.
daraufhin aktiviere ich den tmr0 interrupt, der mit der dimmer varaiable gefüllt ist und nach dem zerocrossing in der halbwelle (also von 0-10ms entspricht 101-255) den triac für 30mikrosekunden zündet. hier wird der tmr0 interrupt auch wieder deaktiviert.
die zündung in der 2. halbwelle wird berechnet, ist in diesem listing nicht vorhanden, ebenso nicht die ir steuerung.
das ganze funktioniert soweit sehr gut.
selten gibts aber ein problem, dass der zeitpunkt nicht richtig stimmt. habe mir das auf dem oszi angesehen und festgestellt, dass (besonders bei reset oder einschalten)
eine zündung genau im zerocrossing stattfindet, die "echte" aber dann nicht. kann das an undefinierten registern von INTCON liegen beim reset? ich teste ja im interruptservice, ob es der zerocrossing war, wenn nicht gehts in die zündung.
anbei das listing


#include <P16f84A.INC>

__CONFIG _PWRTE_ON & _WDT_OFF & _HS_OSC


w_copy Equ 0x20 ; Backup für Akkuregister
s_copy Equ 0x21 ; Backup für Statusregister
Dimmer Equ 0x22
CounterA EQU 0x23
CounterB EQU 0x24

org 0
goto Init

; die Interruptserviceroutine

org 4
movwf w_copy ; w retten
swapf STATUS, w ; STATUS retten
movwf s_copy ;
BTFSC INTCON,INTF;Was it RB0?
Goto Zero_Crossing ;Yes? jump to z_Cross
bcf INTCON, T0IE ; Timer0 interrupt nicht mehr erlauben
BCF INTCON,T0IF ;Clear the TMR0 overflow
BSF PORTB,1 ; triac on
movlw D'16' ;warte 30mikrosekunden
movwf CounterB
movlw D'148'
movwf CounterA
loop decfsz CounterA,1
goto loop
decfsz CounterB,1
goto loop
BCF PORTB,1 ;triac off
Goto Int_end
Zero_Crossing
BCF INTCON,INTF ;Clear the RB0/Int flag.
MOVFW Dimmer
movwf TMR0 ;Load TMR0 w/ the value in 'Dimmer'
bsf INTCON, T0IE ; Timer0 interrupt erlauben

Int_end
swapf s_copy, w ; STATUS zurück
movwf STATUS
swapf w_copy, f ; w zurück mit flags
swapf w_copy, w
retfie

Init

bsf STATUS, RP0 ;bank1
movlw B'11000111' ; Vorteiler zum Timer0, 256:1
movwf OPTION_REG
movlw B'00000001'
movwf TRISB
bcf STATUS, RP0 ; auf Bank 0 zurückschalten
movlw d'130' ;es sind bei diesem timing werte von etwa 100-254 möglich
movwf Dimmer
movwf TMR0
bcf INTCON,INTF
BCF INTCON,T0IF ;Clear the TMR0 overflow interupt
bsf INTCON, INTE ; Rb/int interrupt erlauben
bsf INTCON, GIE ; Interrupt erlauben

main_loop

goto main_loop

end

[ Diese Nachricht wurde geändert von: ffs_hiwi am  9 Mär 2005 12:52 ]

BID = 173407

ManniHorsti

Stammposter



Beiträge: 337
Wohnort: Rheine

 

  

Hallo ffs_hiwi,

kann es vielleicht sein, dass es gar nicht an Deinem Programm
liegt, sondern an den Eigenschaften eines TRIACs, dass Deine Schaltung nicht sicher zündet. Beim Nulldurchgang, kann man einen TRIAC nämlich nicht zünden. Es muss schon eine Mindestspannung vorhanden sein, ehe er zündet, und es muss schon ein Mindeststrom erreicht sein, ehe man die Zündspannung am Gate zurücknimmt, damit er auch eingeschaltet bleibt (wichtig bei Spulen). Ich würde Dein Programm dahin gehend ändern, das die Zündspannung, bzw.Zündstrom am Gate für die fast ganze Halbwelle anliegt, falls Deine Elektronik das hergibt, oder ich würde auch bei geforderter Volllast, immer etwas später zünden.

Gruß Manni



[ Diese Nachricht wurde geändert von: ManniHorsti am 13 Mär 2005 21:21 ]

BID = 173615

Henne02

Stammposter

Beiträge: 493
Wohnort: Aachen
Zur Homepage von Henne02

@ManniHorsti:

PhasenABschnitt nicht PhasenANschnitt. Mit Triacs geht das sowieso nicht.

Grüße, Hendrik

BID = 173663

ffs_hiwi

Gesprächig



Beiträge: 153
Wohnort: Reinbek

hi, danke für die antworten.
ist natürlich kein triac , sondern ein mosfet am ausgang.
ich denke aber ,dass es an der sotfware liegt, den wen ich den output am oszi anschaue, sieht alles ganz normal aus, das heißt per infrarotfernbedienung wandert der "zündzeitpunkt" , geht aber gegen null oder schon manchmal beim reset oder einschalten rammelt er sich da fest.
die mcu hängt aber nicht im interrupt fest, das habe ich schon probiert. die ausgangsstufe ist zunächst mal uninteressant, die ist mit einem CoolMos von Siemens aufgebaut und geht auch schon, ich muss eben erst ein sauberes ausgangssignal erzeugen.also wenn noch ideen da sind, bitte gerne posten.
gruss ralf

BID = 173845

ManniHorsti

Stammposter



Beiträge: 337
Wohnort: Rheine

Hallo,

welches ist das kürzeste Intervall, dass Du mit Deinen Registereinstellungen erreichen kannst, und wo genau rammelt
sich der Zündzeitpunkt fest ?

Manni

BID = 174070

ffs_hiwi

Gesprächig



Beiträge: 153
Wohnort: Reinbek

hallo,
ganz genau kann ich das jetzt nicht sagen, da ich die ausgabe auf die serielle schnittstelle rausgenommen hatte, das baue ich wieder ein und test das in den nächsten tagen, es muss aber nahe 255 sein. auf dem oszillogramm sieht das so aus: "zündzeitpunkt" (ich hatte dich sicher verwirrt , da im quelltext was vom triac steht, ist aber tatsächlich keiner drin) wandert gegen null (zum zeropunkt) ,d h. das TMR0 geht gegen 255 kurz vor erreichen das mullpunktes - ich schätze <1ms - (osszi ist ziemlich unscharf) springt dieser punkt dann auf null. wenn ich rechne: bei meinem prescaler und taktfrequenz habe ich für eine halbwelle etwa 100 schritte , was 10ms bei 50Hz entspricht. (255-100 entspricht etwa 10ms)
ich fange zum test in der software bei etwa 130 an.
da liegt denn auch der zündzeitpunkt am ende der halbwelle-genau richtig. wandert er dann geegn null, gibts das erwähnte phänomen.
ich werde also deinen tipp aufnehmen und dne genauen wert des kritischen punktes ermitteln und weiter berichten.
gruss

BID = 174131

Henne02

Stammposter

Beiträge: 493
Wohnort: Aachen
Zur Homepage von Henne02

Lässt sich vielleicht Deine ZC-Detection von dem Zünden in dessen Nähe beeindrucken?

Wie siht denn deren Signal aus?

Grüße, Hendrik

BID = 174168

ffs_hiwi

Gesprächig



Beiträge: 153
Wohnort: Reinbek

Hallo henne02,
das habe ich auch schon gedacht und statt das signal vom netz zu nehmen (könnte ja eine phasenverschiebung geben)
habe ich einen sauberen sinus von einem hp-generator eingespeist. das signal ändert sich nicht, ich beobachte es auf dem 2. kanal des osszis.
Ich habe nun den MPLB debugger mal angeworfen und das
programm step by step durchgeführt, dabei das register tmr0 beobachtet und dabei folgendes festgestellt:
das tmr0 register wird nahezu bei jedem step incrementiert, wenn es denn nun zufällig bei 0xfb steht wenn der interrupt durch zerorossing ausgelöst wird , zählt es innerhalb der interruproutine weiter hoch, und läuft über.
da beim zc noch kein timerinterrupt aktiviert ist, passiert nichts dachte ich , in der beschreibung von microchip zum 16f84 steht , dass in jedem fall , egal wie das optionregister steht das TOIF Flag (Timeroverflow) beim überlauf gnadenlos immer gesetzt wird.
ok.
die zc routine enabled den timerinterupt und dann passiert folgendes:
das programm verbleibt sofort in der interruptroutine, weil ja offensichtlich das TOIF schon gesetzt ist.
ich habe jetzt noch 2 befehle eingefügt, die in der zc routine das flag löscht und den timer zurücksetzt bevor der aktuelle dimmer wert in den timer geschrieben wird.
funktioniert im debugger nun richtig.
ausserdem darf der dimmer wert nicht größer werden als 250, da die interruptroutine 5 taktzyklen benötigt, andernfalls gibts vorher einen tmr0überlauf.
das würde auch erklären, dass beim einschalten manchmal der zündzeitpunkt auf null steht.
ich probiere das heute abend mal in der schaltung aus und berichte.
wenn jemand interesse an dem fertigen sourcecode hat bitte melden (arbeitet zur zeit mit der fernbedienung beo4 von bang und olufsen), geht aber auch für rc5 codes.
gruss ralf

BID = 174290

ManniHorsti

Stammposter



Beiträge: 337
Wohnort: Rheine

Was macht Dein Programm, wenn gar keine
Leistung mehr gefordert ist ? Fängst Du Leistung Null ab ?
Port auf 0 Interrupts sperren, und gibst den Interrupt erst
mit geforderter Leistung wieder frei ?

Gruß Manni

BID = 175285

ffs_hiwi

Gesprächig



Beiträge: 153
Wohnort: Reinbek

hallo manni,
zunächst funktioniert es jetzt, also war der fehler, dass das TMRO register ständig incremtiert wird und natürlich das TOIE Flag gesetzt wird , auch dann, wenn der Interupt TMR0 deaktiviert ist.
deine frage ist natürlich ein sehr kluge frage.
bisher gabs keine probleme, da bei minimalem "zündzeitpunkt" nahe dem nullpunkt der Phase auch die Leistung null ist , das geht nur dann gut , wenn ohmsche lasten dran sind und daher auch keine phasenverschiebung auftritt, bei induktiven lasten und auch elektronischen trafos gibts eine verschiebung und dann könnte das ganze wohl nur vernünftig geregelt werden, wenn der interrupt gesperrt wird, das werde ich noch einbauen müssen.
gruss und dank ralf

BID = 175499

ManniHorsti

Stammposter



Beiträge: 337
Wohnort: Rheine

Ist doch schön, wenn es dann tut, oder ... ?

Gruß Manni


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 23 Beiträge im Durchschnitt pro Tag       heute wurden bisher 17 Beiträge verfasst
© x sparkkelsputz        Besucher : 182264271   Heute : 4165    Gestern : 4669    Online : 484        31.10.2024    22:30
2 Besucher in den letzten 60 Sekunden        alle 30.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0397219657898