Detekcija prolaska mrežnog signala kroz nulu na ATMEGA 328p

Rasprava o AVR mikrokontrolerima, AVR projekti i drugo vezano za AVR...

Moderators: pedja089, stojke369, trax, InTheStillOfTheNight

Post Reply
Stalkermd5
Posts: 6
Joined: 03-03-2012, 16:50

Detekcija prolaska mrežnog signala kroz nulu na ATMEGA 328p

Post by Stalkermd5 »

Pozdrav svima,

htio bih napraviti sistem koji detektuje prolazak mrežnog signala kroz nulu na ATMEGA 328p.
Otprilike imam viziju kako bi to izgledalo. Npr. trajanje signala od 50 [Hz] je T = 1/f. Dakle, moram podesiti TIMER, i to bih otprilike znao odraditi (pročitao sam odličan tutorijal na ovom forumu o podešavanju TIMER-a ("Tartufi")). "Regulirani" signal sa izlaza MCU bih vodio na GATE tiristora.

Međutim, šta i kako dalje. Nemam viziju kako bi kod izgledao, pa bih vas srdačno zamolio da mi date par uputa.

Unaprijed zahvaljujem na odgovoru

PS
Novi sam u svijetu MCU, ali svim silama se trudim da naučim što brže i efikasnije. :)
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Detekcija prolaska mrežnog signala kroz nulu na ATMEGA 3

Post by InTheStillOfTheNight »

Meni nije baš jasno zašto bi netko radio zero crossing detector mikrokontrolerom, kad to mozes napraviti sa nekoliko analognih komponenata?
InTheStillOfTheNight
Stalkermd5
Posts: 6
Joined: 03-03-2012, 16:50

Re: Detekcija prolaska mrežnog signala kroz nulu na ATMEGA 3

Post by Stalkermd5 »

Htio bih napraviti light dimmer sa atmega 328p....

Pozdrav
Cosa
Napredujem
Napredujem
Posts: 177
Joined: 09-08-2009, 10:55
Location: Hrvatska

Re: Detekcija prolaska mrežnog signala kroz nulu na ATMEGA 3

Post by Cosa »

Poput tebe i ja sam počeo razrađivati ideju dimmera s atmel kontrolerom, ali ja ću koristiti attiny13.

Što se tiče prolaska kroz nulu možda bi najbolje bilo kao Ivica http://www.ivica-novakovic.from.hr/Lightdimmer.htm koristiti vanjski prekid za zero crossing.
Sad sam pročitao u knjizi "50 things to do with PIC" da se na ovaj način (otpornikom) može postići preciznost detekcije od 50uS. Analognim komponentama je vjerojatno još preciznije, ali zbog nedostatka mjesta na pločici je možda malo nepraktično.

Inače, meni je problem kako napiasati program da bude kompatabilan sa većinom Ir protokola (RC5, RC6, Nec, Sony ...). Probao sam dosta Ir uređaja, ali niti jedan nije radio tako dobro sa svim daljincima poput ovoga od Ivice.
buco-1
Napredujem
Napredujem
Posts: 105
Joined: 24-10-2010, 21:22

Re: Detekcija prolaska mrežnog signala kroz nulu na ATMEGA 3

Post by buco-1 »

Projekt sličnog naziva s AT90S2343 (starije verzije današnjih tinny mcu-a) rađen je na ovom forumu 2006 godine u sklopu učenja programiranja u assembleru za AT/Mega MCU-e. Tad je to bilo uglavnom pojedinačno zanimanje, pa je išlo na email ili PM a nešto malo i preko ovog foruma.

Napisan je kompletan program za light dimmer, pa tako i rutine za IR kontrolu, prolazak kroz nulu itd... Veći dio koda napisao je dečko koji (koliko vidim) nije više tu, a program je ipak njegovo vlasništvo. Ja sam mu samo pomagao oko assemblera.

P.S. Ovdje je često problem što se gotovo stalno, iz dana u dan, ponavljaju pitanja koja su već odavno odrađena na ovom forumu. Mnoga od njih su načelno, parcialno isl... obrađivana u samim principama programiranja ili rada MCU-a.
Today's scientists have substituted mathematics for experiments, and they wander off through equation after equation, and eventually build a structure which has no relation to reality.
- Nikola Tesla
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Detekcija prolaska mrežnog signala kroz nulu na ATMEGA 3

Post by InTheStillOfTheNight »

@Buco, to je bilo davno i tih postova se ne sjećam pa bi me zanimalo koliko je precizno odrađen prolazak kroz 0 i kojom metodom ste radili...

Pošto se radi o svega 50 Hz to se može napraviti na puno načina, pa je dovoljan i običan ADC i poluvalno ispravljen napon.

Ovo mi nikada nije trebalo, pa bi me čisto informativno zanimalo s kojom preciznošću se radi detekcija prolaska kroz 0, te kojom metodom?
InTheStillOfTheNight
buco-1
Napredujem
Napredujem
Posts: 105
Joined: 24-10-2010, 21:22

Re: Detekcija prolaska mrežnog signala kroz nulu na ATMEGA 3

Post by buco-1 »

InTheStillOfTheNight wrote:to je bilo davno i tih postova se ne sjećam pa bi me zanimalo koliko je precizno odrađen prolazak kroz 0 i kojom metodom ste radili...
HW je radio Robert, mislim nešto slično s mnogim light dimmerima s neta. Mislim da je neko djelilo, poluvalno s 1Mohm otpornikom i pulldown otpornikom u AT90S.
Neznam više ni gdje se uopće nalazi ta dokumentacija i izvorni kod. Imam je samo... morao bih je naći.

Mislim da je išlo detekcijom nule na pinu. S obzirom da se radilo o nekoj vrsti učenja o programiranju u assembleru čak je PWM odrađen emulaciom a ne HW-skim implemetom. No podešavanjem timera, emulirani, (HW-ski implemeti timera su korišteni za RC5 kod), dobila se veoma dobra linearnost svijetla žarulje, kako mi je rekao. Mislim da je tyristor bio tic 216 a IR prijamnik tsop 48.

Ja nikad nisam bio složio taj HW-er, samo sam pomago dečku oko assemblera jer ga je to zanimalo. On je pisao program a ja sam ti bio kao neki pomagač, vodić. Nisam se mješao u realizaciju na idejnoj razini već na način postavljanja strukture programa, potprograma, korištenja naredbi i slično.

Znam da je počelo tako jer ga je zanimalo dali se ono (light dimmer) što prodaje i.novaković za PIC može napraviti s Atmelovim MCU-ima. A onda sam ga ja, sram me bilo, nagovorio da pokuša u assembleru. :D

Pozdrav
Today's scientists have substituted mathematics for experiments, and they wander off through equation after equation, and eventually build a structure which has no relation to reality.
- Nikola Tesla
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: Detekcija prolaska mrežnog signala kroz nulu na ATMEGA 3

Post by InTheStillOfTheNight »

Ček buco, ako je to rađeno samo detekcijom nule na pinu onda uopće nije precizno... AVR ima nizak prag nule, ali ipak ako podjelis (220 * korijen 2) sa bilo kakvim djelilom i detekciju radiš sa AVR nulom to bi na "oko" ispalo da takva nula nije nula nego recimo 30V???

Po tome bi daleko bolji nači bio detekcija nule ADC-om. Uzorak je svakih 30 uS, a za 50 Hz perioda je 20mS, no nije ADC ono što bih ja odabrao...

No ako malo bolje razmislim, uopće neme potrebe zamarati se sa programom. Jednostavno treba napraviti djelilo sa poluvalno ispravljenog napona 220V takvo da djelila uopće nema :ohno:
Pa zaboga uzmimo obični 1 MOhm otpornik i jednu zener diodu recimo 4v7. Detekcija nule čitanjem pina će biti u najgorem slučaju tek kada napon mreže bude na recimo 2V... :)
InTheStillOfTheNight
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Detekcija prolaska mrežnog signala kroz nulu na ATMEGA 3

Post by Kukinjos »

Ja sam radio ovaj:
http://www.dextrel.net/diyzerocrosser.htm
Prednosti su mu što uopće nije osjetljiv na smetnje iz mreže, nema pomaka faze, impuls mu je 1mS, ništa se ne grije, galvanski je izoliran, nema kritičnih elemenata. Vrijedi pročitat objašnjenje. Radio sam sa Atmega 8 i interruptom na timeru1, radi nekog testa s induktivnim opterećenjima. Pokazao se jako stabilnim.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Detekcija prolaska mrežnog signala kroz nulu na ATMEGA 3

Post by Kukinjos »

Evo gledam kod, timer 0. :?

Code: Select all

$regfile = "m8def.dat"
$crystal = 8000000
'______________________________________________________________________________
'
'HARDVERSKE POSTAVKE
'______________________________________________________________________________

Config Portd.5 = Output                                     'TRIAC gate
Config Pinc.0 = Input                                       '+ dugme
Config Pinc.1 = Input                                       '- dugme
Config Portb.0 = Output                                     'LED port


Portc.0 = 1                                                 'pullup za tipku +
Portc.1 = 1                                                 'pullup za tipku -

Gt Alias Portd.5                                            'Gate Trigger alias
Down Alias Pinc.0                                           '- tipka alias
Up Alias Pinc.1                                             '+ tipka alias
Led Alias Portb.0                                           'LED alias

'______________________________________________________________________________
'
'SOFTVERSKE POSTAVKE
'______________________________________________________________________________

Dim Pulse As Bit                                            '1- impuls na gate, 0-gasi TRIAC
Dim P As Byte                                               'duzina impulsa na gateu = 32uS * P
Dim B As Word                                               'kut vodenja TRIAC-a
Dim D As Word                                               'trenutni kut u odnosu na Z/C
Dim Tick As Byte                                            'Z/C tick bit 10mS za 50Hz

Dim E As Eram Word                                          'zadnja postavna vrijednost kuta vodenja TRIAC-a
Dim F As Word                                               'pomocna variabla vrijed. kuta vodenja

'______________________________________________________________________________
'
'POSTAVKE KUTA I TIMERA
'______________________________________________________________________________

Const Max_a = 305                                           'maksimalno kasnjenje * 32uS
Const Min_a = 0                                             'minimalno kasnjenje * 32uS
Const Ptick = 8                                             'duzina impulsa okidanja * 32uS
Const Ltick = 20                                            'hartbeat LED period * 10mS

If E > Max_a Then E = Max_a / 2                             'ako je vrijednost u eepromu prevelika
                                                             'namjesti je na 1/2 maksimalne
F = E                                                       'upisi pocetnu vrijednost u pom. var.
B = F                                                       'upisi pocetnu vrijednost kao postavnu

Tick = Ltick                                                'init vrijednosti hartbeat LED-a
P = Ptick                                                   'init vrijednosti okidnog imp.
Pulse = 0                                                   'init TRIAC ugasen
'______________________________________________________________________________
'
'PODESAVANJE INTERRUPTA
'______________________________________________________________________________

Config Int0 = Falling                                       'INT0 - Zero Crossing
On Int0 Int0_int                                            'Inicijaliziraj pin INT0

Config Timer0 = Timer , Prescale = 1                        'TIMER0 32uS tik (8MHz / 256)
On Timer0 T0_int                                            'Inicijaliziraj TIMER0

'______________________________________________________________________________
'
'START PROGRAMA
'______________________________________________________________________________

Set Gt                                                      'iskljuci TRIAC

Enable Int0                                                 'dopusti Z/C interrupt
Enable Timer0                                               'dopusti timer0 interrupt
Enable Interrupts                                           'globalno dopusti interrupte
'______________________________________________________________________________
'
'GLAVNA PETLJA
'______________________________________________________________________________

Do

If Down = 0 Then                                            'ako je pritisnut -

 If B > Min_a Then Decr B                                   'smanji kut
 Waitms 10                                                  'i pricekaj malo

End If


If Up = 0 Then                                              'ako je pritisnut +

 If B < Max_a Then Incr B                                   'povecaj kut
 Waitms 10                                                  'i pricekaj malo

End If



If Up = 1 And Down = 1 And Led = 1 And F <> E Then E = B    'ako nije pritisnuto nista
                                                             'upisi trenutni kut u EEPROM
                                                             'samo ako je razlicit od stvarnog
F = B                                                       'obrisi flag za razlicitost

Loop

End                                                         ' end program

'______________________________________________________________________________
'
'INTERRUPT RUTINE
'______________________________________________________________________________


Int0_int:

Set Gt                                                      'iskljuci TRIAC kod Z/C
D = Max_a + 1                                               'kako bi brojanje bilo tocno dodaj 1
Start Timer0                                                'pokreni timer za kut okidanja

If Tick = 0 Then                                            'ako je hartbeat 0

   Tick = Ltick                                             'vrati pocetnu vrijednost
   Toggle Led                                               'i upali ili ugasi LED

   Else

   Decr Tick                                                ' inace smanji za 1

   End If

Return


'______________________________________________________________________________

T0_int:

If Pulse = 1 Then                                           'ako je postignut zeljeni kut okidanja
   Reset Gt                                                 'ukljuci TRIAC
   Decr P                                                   'i smanji brojac vodenja TRIJAC-a

      If P = 0 Then                                         'ako je dostignuto vrijeme vodenja TRIAC-a
         Stop Timer0                                        'zaustavi timer
         Set Gt                                             'iskljuci TRIAC
         P = Ptick                                          'postavi brojac vodenja TRIAC-a na pocetnu vrijednost
         Pulse = 0                                          'TRIAC iskljucen
      End If

   Else                                                     'ako nije postignut zeljeni kut okidanja
      Decr D                                                'smanji brojac kuta za 1
      If D = B Then                                         'provjeri jeli postignut zeljeni kut okidanja
         Pulse = 1                                          'ako je ukljuci TRIAC
      End If
End If

Return


Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
buco-1
Napredujem
Napredujem
Posts: 105
Joined: 24-10-2010, 21:22

Re: Detekcija prolaska mrežnog signala kroz nulu na ATMEGA 3

Post by buco-1 »

InTheStillOfTheNight wrote:No ako malo bolje razmislim, uopće neme potrebe zamarati se sa programom. Jednostavno treba napraviti djelilo sa poluvalno ispravljenog napona 220V takvo da djelila uopće nema :ohno:
U pravu si oko tematike prolaska kroz nulu. To stoji.

Nije se čovjek ni zamarao preciznosti, nije bilo potrebe. Koristio je žarulju od 100-tinjak W.
Nije problem u shemu dodati diodu, čak i običnu (1n4148, ba513) jer će svaki "normalni" cmos-sos mcu prebacit nulu tek ispod praga 0.8 - 0.6V, a ako radi na 3V3 i niže. Tako da bi greška od prolaza nulom bila na margini šuma samog MCU-a. Nebi bilo loše isprobat.

S obzirom da žarulja 100W nije motor +/- destak volti pomaka neće posebno jako utjecat na jačinu emitirane svijetlosti kod obične wolframove žarulje. Tu je važnije odrediti pravilne dužine impulsa i pauze otvaranja gate-a.
Pošto ta žarulja emitira svjetlost grijanjem niti, a ne ko ledica, treba uzeti i te stvari u obzir.
Iako, koliko sam skužio, stvar je određena eksperimentalno a ne: i2c/qf+2(-1,00007)*5... itd.. (da ne pišem cjelu formulu). :shock: Khm! I da, onda se rezultat pomnoži s vremenom i hm? :?

Ne branim nikog, čisto komentar a i nebih želo da se banalizira problem, no on je kod takvih stvari relativan. Možemo imati savršen prolazak koz nulu a zeznuti impulse/pauze itd...
Kao što je i navedeno; HW-er je korišten u svrhu učenja nekih stvari o assembleru.
Kukinjos wrote:Prednosti su mu što uopće nije osjetljiv na smetnje iz mreže, nema pomaka faze, impuls mu je 1mS, ništa se ne grije, galvanski je izoliran, nema kritičnih elemenata.
Odlično izgleda!
Samo, to je malo puno predobro za ono što smo mi radili. Sav ostali sklop, osim mcu-a, onog light dimmera nema toliko djelova.
U oba slučaja svaki je ZC odradio svoje onoliko kvalitetno koliko i treba.
Today's scientists have substituted mathematics for experiments, and they wander off through equation after equation, and eventually build a structure which has no relation to reality.
- Nikola Tesla
Post Reply