Fazova regulacia - PIC

Robim stmievac velmi velmi podobny tomuto: hypex.sk/index.php?action=Ko … Dimmer.htm

Akurat bez DMX protoklu a miesto AVR-ka pojde PIC-ko. Lenze absolutne mi nie je jasna ta fazova regulacia a ani tomu kodu (dokonca s popisom) nejak nerozumiem. Vedeli by ste ma niekto usmernit kde sa o tom dozviem viac, lebo ujo google trosku sklamal,… Dakujem.

dhservis.cz/dalsi/stmivac.htm#sit

tak uz ti to je jasne ? pouziva to aj tu dhservis.cz/dalsi_1/stmivac_do.htm

Waw, DAKUJEM. Vyzera to velmi dobre :slight_smile: Budem cez vikend studovat, ked sa zaseknem, ozvem sa :smiley: Dakujem este raz :slight_smile:

Ak som teda spravne pochopil, tak ak ma ist npr 50% vykonu, tak potrebujem kladnu aj zapornu polperiodu zredukovat na polovicu, to znamena ze po polcase vypnut triak. Hovorim to spravne ?

no z hladiska toho ze vypnut tyristor alenbo triak nieje len tak… tak radsej vyuzi prirodzenej vlastnosti sinusu… a triak za zavrie sam precjhodom sinusovky nulou… cize odpoved na tvoju otazku je ze tiak zapnes v polovici pol periody. akurat to budes musiet troska odrusit…zopnutie vykonu pri maxime napetia.

Ahaaa, dobry napad. A keby som tam pouzil nejaky MOSFET ? Tak to mozem regulovat tak ze spinam v nule a rozopinam pri napati, vsak ? A nepotrebovalo by odrusenie, ci ?

Každý přechodový děj vytváří rušící složky, tedy i vypínání mosu v amplitudě. Pokud nechceš rušit, spínej v nule a vynechávej celé periody/půlperiody.

Myslim ze to rusenie nebude az taky problem. Urobim to tak, ze pouzijem triak s optoclenom, pricom pri znulovani vypnem triak a zapnem ho v pozadovanom case. Nech si to rusi kolko chce :smiley: Aj tak mame debilnych susedov, tak nech im skace obraz :smiley: :smiley: :smiley: :smiley:

Triak se při průchodu nulou vypne sám :wink:. Na sepnutí ti stačí krátký pulz (např. >2us pro BT136) a pak můžeš optočlen vypnout.

aha, dakujem take som nevedel. Ale naco by som to robil ? vypne sa mi hned pri skoku do prerusenia, co je 200us pred prechodom nulou.

Třeba bys tak mohl snížit spotřebu :wink:. Sepnout optočlen, počkat 5us a zas ho vypnout by nemusel bejt moc velkej problém. Předpokládám, že přerušení 200us před nulou zařídíš odpočtem od minulé nuly. To budeš moct vynechat a třeba i v závislosti na stavbě programu ušetřit timer :wink:.

tak to nie je nejaka velka spotreba na to procaku :smiley: 200us je vymyslene tak, ze optoclen, ktory snima sinus pre prerusenie zhasina pri urcitej urovni napatia, teda je tam akoby 400us nula. Ked berieme v uvahu, ze je zhasinanie a zapalovanie, tak delene 2 a mame 200us. Inymi slovami prerusenie nastava 200us pred nulou - riesene hardwareovo.
Uz to je cele poskladane, aj s AD prevodom, funguje to nadherne, idem to urobit este na 2 kanaly a navrhnut DPS :slight_smile: Ked chces, poslem ti program.

Dík, ale pic není zrovna můj šálek kávy :smiley:. Když bych něco takového tvořil, tak bych si s tím pohrál a udělal to se spínáním v nule.
Každopádně někoho to tu zajímat může :wink:.

Heh, dalsi pruser :smiley: Nejde mi to urobit na 2 kanaly. Nejaky napad ako by sa to dalo urobit tak, aby to fungovalo zo spinaim v nejakej casti amplitudy ale na dvoch pinoch ?

definuj dva kanaly…nema lby byt problem vypocitat oneskorenie pre iny kanal…

2 kanaly, teda ze vykonaju sa 2 AD prevody a od najblizsej nuly sa pre PORTB,1 a PORTB,2 vyrataju casy kedy sa zapnu. Dufam ze sa vyjadrujem zrozumitelne :smiley:

a naco je ten ad prevod… ozaj hod sem kod … a co si predstavujes pod tym ze to nechodi ?

Jednoduchsie to bude popisat:
Program vykonava stale dookola 2 AD prevody a vysledky uklada do registrov DIMM1 a DIMM2
Prerusenie nastava 200 - 700 us pred prichodom sinusu v sieti do nuly (v zavislosti ci mam zapojeny odpor voci zemi) a vypinaju sa triaky.
Podla toho, ake cislo je ulozene v registri DIMM1 a DIMM2 ostavaju vypnute 0 - 9 ms a nasledne sa zapinaju a vychadza sa z prerusenia.

Tak by to malo byt, ale neviem ako presne mam odratavat ten cas vypnutia dvoch triakov naraz.

Aaaaaa, uz to je vyriesene :smiley: :smiley: :smiley:
Kazdy dekrement musi trvat 39us a musi to robit kym nema obe registre na nule.
kodik :wink:

[code]RIADENIE
MOVLW 0
SUBWF DIMM1
BTFSC STATUS,2
GOTO $+5
DECFSZ DIMM1
GOTO $+4
INCF DIMM1
BSF GATE1
BSF STAT,0

SUBWF DIMM2
BTFSC STATUS,2
GOTO $+5
DECFSZ DIMM2
GOTO $+4
INCF DIMM2
BSF GATE2
BSF STAT,1

MOVLW .19
MOVWF C1
DECFSZ C1
GOTO $-1

BTFSS STAT,0
GOTO RIADENIE
BTFSS STAT,1
GOTO RIADENIE[/code]

Trosku zmena :smiley: Funguje to skvele ked zapojim osobitne jeden, alebo druhy kanal. Ked som ich vsak dnes zapojil obe, tak sa navzajom ovplyvnuju, teda ze dviham prvy a s urcitym odstupom sa zacne dvihat aj druhy s naopak, nechapem kde je problem,…

[code]LIST P=16F88

#include <p16f88.inc>

__CONFIG _CONFIG1, _WDT_OFF & _CP_OFF & _DEBUG_OFF & _CCP1_RB3 &_DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _INTRC_IO
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF

C1 EQU 21h
C2 EQU 22h
C3 EQU 23h
F2 EQU 24h
S2 EQU 25h
P2 EQU 26h
W2 EQU 27h

DIMM1 EQU 28h
DIMM2 EQU 29h

STAT EQU 2Ch

#DEFINE GATE1 PORTB,1
#DEFINE GATE2 PORTB,2

ORG 00h
GOTO START

ORG 04h

BCF GATE1
BCF GATE2
BCF PORTA,2

MOVF W2
movf STATUS,W
clrf STATUS ; Banka 0
movwf S2 ; STATUS
movf PCLATH,W
movwf P2 ; PCLATH
movf FSR,W
movwf F2 ; FSR

BCF INTCON,1
;PROGRAM----------------------
CALL CAKAJ200us

MOVLW 0
MOVWF STAT

RIADENIE
MOVLW 0
SUBWF DIMM1
BTFSC STATUS,2
GOTO $+5
DECFSZ DIMM1
GOTO $+4
INCF DIMM1
BSF GATE1
BSF STAT,0

SUBWF DIMM2
BTFSC STATUS,2
GOTO $+5
DECFSZ DIMM2
GOTO $+4
INCF DIMM2
BSF GATE2
BSF STAT,1

MOVLW .20
MOVWF C1
DECFSZ C1
GOTO $-1

BTFSS STAT,0
GOTO RIADENIE
BTFSS STAT,1
GOTO RIADENIE

;PROGRAM----------------------
MOVLW B’10010000’ ; povoleni zpet pozadovanych preruseni
MOVWF INTCON

MOVFW W2
movf F2,W ; FSR
movwf FSR
movf P2,W ; PCLATH
movwf PCLATH
movf S2,W ; Status
movwf STATUS

RETFIE

START

BANKSEL OSCCON ;PRVA BANKA

MOVLW B’01110010’ ; 8MHz, takt stabilny, takt - FOSC
MOVWF OSCCON

MOVLW B’00000011’ ;Digitalne porty - A
MOVWF ANSEL

MOVLW B’00000000’ ;PULL-UP enable, nabezna hrana prerusenia na RB0, hodinovy signal pre TMR0-INT, x, preddelicka na TMR0, 1:2
MOVWF OPTION_REG

MOVLW B’01000000’ ;radenie sprava, casovanie AD /2 od takt.fr. uC , AVdd-AVss
MOVWF ADCON1

MOVLW B’00000001’
MOVWF TRISB ;B-port ako vystupny
MOVLW B’10100011’
MOVWF TRISA

MOVLW B’10010000’ ;Globalne prerusenia - ON, periferie - ON, TMR0 - OFF, RB0 - ON, RB4-7 - OFF
MOVWF INTCON

CLRF STATUS ;NULTA BANKA

CLRF PORTB
CLRF PORTA

PROGRAM ;//////////////////////////////////////////////

BSF PORTA,2

MOVLW B’11000001’ ; zapnuti AD
MOVWF ADCON0

BSF ADCON0,2
BTFSC ADCON0,2 ;cakanie na ukoncenie prevodu
GOTO $-1

MOVFW ADRESH ;Adresl do pracovneho reg.
MOVWF DIMM1

;-----------------------------------------

MOVLW B’11001001’ ; zapnuti AD
MOVWF ADCON0

BSF ADCON0,2
BTFSC ADCON0,2 ;cakanie na ukoncenie prevodu
GOTO $-1

MOVFW ADRESH ;Adresl do pracovneho reg.
MOVWF DIMM2

GOTO PROGRAM
;///////////////////////////////////////////////////////////

CAKAJ200us
MOVLW .130
MOVWF C1
DECFSZ C1
GOTO $-1
RETURN

END[/code]

Tam bude niekde problem s tym AD prevodom, lebo ked dam miesto toho prevodu kod:

[code]MOVLW .230
MOVWF DIMM1
MOVLW .220
MOVWF DIMM2

GOTO PROGRAM[/code]
alebo aj hociake ine cisla, tak to berie vpohode a robi jak ma vsetko.
Vidite tam pri AD niekto problem ??? Ja absolutne nie :frowning:

Chybi ti tam “Počkat minimální požadovanou dobu (vzorkovací doba) pro ustálení vstupu” , tzn pockat mezi vyberem kanalu a spusteni AD prevodu
a pokud mas ADFM = 0 tak je to razeni z leva a hohnotu ctes z ARDESH coz mas dobre ale v komentari mas “radenie sprava”, jinak jestly mas dobre nastaveny casovani AD tak v prevode problem nevidim

EDIT: uz sme s tebou jednou resily AD prevod ,se koukni , doufam ze nas netahas za nos