 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Peter Član


Pridružen-a: Sre 30 Jun 2004 12:55 Prispevkov: 375 Aktiv.: 1.58 Kraj: Pod krvavcem nekje
|
Objavljeno: Čet Mar 01, 2007 8:08 am Naslov sporočila: Atmega8 in fazno krmiljenje triaca |
|
|
Zadeva je sledeča hotel sem si izdelati večkanalni dimmer. Med samim testiranjem sem se lotil postopnega programiranja. Najprej sem izdelal program, ki krmili le en izhod do tu mi deluje vse OK. Potem pa hočem dodati še en kanal tu pa nastopi problem. koda za en kanal je taka:
to je samo prekinitev katera mi dela probleme ostali del pograma deluje brez problema
Tim0_isr: 'Timer0 ISR, called if T0 overflows
Count = Count + 1 '** Start counter (No. of interrupts)
'** counts each time T0 overflows
If Count > Td Then '** If the count > AD0 / 3 then send
Count = 0 '** pulses & set count to 0
Stop Timer0 '** Stop Timer 0
'** Send 3 pulses to the Triac
Set Portb.2 '** Turn Portb.2 on (high), PIN 3
Waitus 100 '** Wait 100 u/s
Reset Portb.2 '** Turn Portb.2 off (low), PIN 3
Waitus 100 '** Wait 100 u/s
Set Portb.2 '** Repeat for 3 pulses
Waitus 100
Reset Portb.2
Waitus 100
Set Portb.2
Waitus 100
Reset Portb.2
Waitus 100
End If
End If
Ko sem dodal zanko ko preverja vrednost moči in s tem kdaj naj vključi drugi kanal stvar ne dela.
Tim0_isr: 'Timer0 ISR, called if T0 overflows
Count = Count + 1 '** Start counter (No. of interrupts)
If Count > Td Then 'Td števec ki šteje kdaj vklučimo triac
Count = 0 '** pulses & set count to 0
Stop Timer0 '** Stop Timer 0
end if
if moc0=td then
Set Portb.2 '** Turn Portb.2 on (high), PIN 3
end if
Waitus 100
Reset Portb.2
Waitus 100
if moc1=td1 then
Set Portb.3
end if
Waitus 100
Reset Portb.3
Waitus 100
_________________ Vse se da pokvarit, le če se dovol časa ukvarjaš z njo!!! |
|
Nazaj na vrh |
|
 |
bostjang Član

Pridružen-a: Tor 03 Jan 2006 15:29 Prispevkov: 3469 Aktiv.: 14.65 Kraj: Postojna
|
Objavljeno: Čet Mar 01, 2007 12:05 pm Naslov sporočila: |
|
|
Upam, da sem prav razumel program. Za drugič pa priporočam daljšo razlago. Tdu zaradi drugih.
Torej:
Counter resetiraš ob prehodu skozi ničlo, potem ti pa šteje prekinitve časovnika.
Ko doseže vrednost Td vključiš triak.
Kot vidim iz programa, hkrati z vključitvijo resetiraš Counter in ustaviš časovnik. Kot vidim je tukaj napaka, saj s tem motiš ostale kanale.
Counter bi moral šteti nedvisno, tudi časovnik bi moral delati ves čas. Za ugotavljanje kdaj je Counter dosegel Td, določenega kanal, pa uporabiti primerjavo = in ne <, da ne bi prožil triaka do konca polperiode.
Druga možnost je ločen Counter za oba (vse) kanala. Vsekakor pa ne smeš izklopiti časovnika, če je skupen za oba (vse) kanala.
|
|
Nazaj na vrh |
|
 |
CarpeDiem Član


Pridružen-a: Pon 16 Feb 2004 17:24 Prispevkov: 333 Aktiv.: 1.41 Kraj: Vrhnika
|
Objavljeno: Čet Mar 01, 2007 5:27 pm Naslov sporočila: |
|
|
Kako si izvedel detekcijo prehoda napetostnega nivoja skozi ničlo.
|
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.46 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Čet Mar 01, 2007 6:33 pm Naslov sporočila: |
|
|
Pripneš kakšno shemo? Kajti tudi mene zanima
|
|
Nazaj na vrh |
|
 |
Peter Član


Pridružen-a: Sre 30 Jun 2004 12:55 Prispevkov: 375 Aktiv.: 1.58 Kraj: Pod krvavcem nekje
|
Objavljeno: Čet Mar 01, 2007 9:32 pm Naslov sporočila: |
|
|
No tu pripenjam novi kos programa, ki sem ga napisal za krmiljenje triakov.
Ko se pojavi signal na pinu portd.4 sproži prekinitev. Prekinitev se proži na padajočo fronto in se pojavi enkrat na periodo.
Zadeva pa je taka, če dam pogoj, da gledam samo TD za regulacijo moči tudi če prožim več kanalov zadeva deluje, če pa uporabim različne spremenljivke za moč pa stvar ne deluje, tako kot je na spodnjem primeru.
Config Int0 = Falling
Config Timer0 = Timer , Prescale = 1
'********** Prekinitvena rutina Int0
Int0_prek:
Start Timer0 'poženemo Timer0
Return 'Se vrnemo od tam kjer smo prišli
'********** Prekinitvena rutina Tim0
Tim0_prek:
Count = Count + 1 'Povečujemo števec za 1
Count1 = Count
Gosub Triac
If Count > Td Then 'Preverjamo če je števec manši od Td
Count = 0 'Resetiramo števec
Stop Timer0 'ustavimo Timer0
End If
Return 'Se vrnemo od tam kjer smo prišli
Triac:
If Count1 > Moc0 Then
Reset Portc.3 'Prižgemo izhod
End If
If Count1 > Moc1 Then
Reset Portc.4 'Prižgemo izhod
End If
If Count1 > Moc2 Then
Reset Portc.5
End If
Waitus 200
Set Portc.3
Set Portc.4 'Ugasnemo izhod
Set Portc.5 'na katerem je triac
Waitms 10 'počakamo da mine pol periode
If Count1 > Moc0 Then
Reset Portc.3 'Prižgemo izhod
End If
If Count1 > Moc1 Then
Reset Portc.4 'Prižgemo izhod
End If
If Count1 > Moc2 Then
Reset Portc.5
End If
Waitus 200
Set Portc.3
Set Portc.4 'Ugasnemo izhod
Set Portc.5 'na katerem je triac
Return
To pa je primer ko stvar deluje vendar moč za vse kanale enaka
Tim0_prek: 'Prekinitvena rutina Tim0
Count = Count + 1 'Povečujemo števec za 1
If Count > Td Then 'Preverjamo če je števec manši od Td
Count = 0 'Resetiramo števec
Stop Timer0 'ustavimo Timer0
Reset Portb.0 'Prižgemo izhod
Reset Portb.1
Reset Portb.2
Waitus 100 'na katerem je triac
Set Portb.0 'Ugasnemo izhod
Set Portb.1
Set Portb.2
Waitms 10 'počakamo da mine pol periode
Reset Portb.0 'Prižgemo izhod
Reset Portb.1
Reset Portb.2
Waitus 100 'na katerem je triac
Set Portb.0 'Ugasnemo izhod
Set Portb.1
Set Portb.2
End If
Return 'Se vrnemo od tam kjer smo prišli
Opis: |
|
 Download |
Ime datoteke: |
zc_sch.gif |
Velikost datoteke: |
4.96 KB |
Downloadano: |
82 krat |
_________________ Vse se da pokvarit, le če se dovol časa ukvarjaš z njo!!! |
|
Nazaj na vrh |
|
 |
CarpeDiem Član


Pridružen-a: Pon 16 Feb 2004 17:24 Prispevkov: 333 Aktiv.: 1.41 Kraj: Vrhnika
|
Objavljeno: Čet Mar 01, 2007 11:12 pm Naslov sporočila: |
|
|
Zanimivo narisana shema. Bom preveč tečen, če prosim še za vrednosti elementov? Ker tole bom vsekakor preizkusil.
Glede sheme:
Še ena varijanta
|
|
Nazaj na vrh |
|
 |
Peter Član


Pridružen-a: Sre 30 Jun 2004 12:55 Prispevkov: 375 Aktiv.: 1.58 Kraj: Pod krvavcem nekje
|
Objavljeno: Pet Mar 02, 2007 8:02 am Naslov sporočila: |
|
|
Pripenjam še vednosti elementov
OK1 CNY17F III
Q1 BC547X
D1 1N4007
R1 2*27k / 1W
R2 1M / 0,25W
R3 10k /0,25W
C1, 2 100nF
In pa link do strani
http://www.hoelscher-hi.de/hendrik/english/dimmer.htm
_________________ Vse se da pokvarit, le če se dovol časa ukvarjaš z njo!!! |
|
Nazaj na vrh |
|
 |
tibi Član

Pridružen-a: Tor 16 Dec 2003 11:08 Prispevkov: 253 Aktiv.: 1.07 Kraj: bukovje
|
Objavljeno: Pet Mar 02, 2007 8:38 am Naslov sporočila: |
|
|
Kaj pa če bi hotel regulacijo v trifaznem sistemu? Princip bi verjetno ostal isti uporabil bi 3 vezja detekcije "0" zamenjal upor R1 in kontroliral vsako fazo posebej??
L.P.
|
|
Nazaj na vrh |
|
 |
Peter Član


Pridružen-a: Sre 30 Jun 2004 12:55 Prispevkov: 375 Aktiv.: 1.58 Kraj: Pod krvavcem nekje
|
Objavljeno: Pet Mar 02, 2007 8:52 am Naslov sporočila: |
|
|
Zakaj bi pa potreboval regulacijo 3 faznega sistema?
Ja trifazni sistem kot vemo ima faze zamaknjene za 120°. Mikrokrmilnik pa ima samo 2 zunanja prekinitvena vhoda. Tako, da bi tezko gledal kdaj preidejo vse tri faze skozi nič.
_________________ Vse se da pokvarit, le če se dovol časa ukvarjaš z njo!!! |
|
Nazaj na vrh |
|
 |
tibi Član

Pridružen-a: Tor 16 Dec 2003 11:08 Prispevkov: 253 Aktiv.: 1.07 Kraj: bukovje
|
Objavljeno: Pet Mar 02, 2007 9:37 am Naslov sporočila: |
|
|
No primer če bi rabil trifazno regulacijo moči. Npr. kak grelnik... Ja vem da so faze zanaknjene enako vendar nikoli ne veš vrstni red. Tako mislim da bi bilo ninimalno kontrolirati 2 fazi.
|
|
Nazaj na vrh |
|
 |
bostjang Član

Pridružen-a: Tor 03 Jan 2006 15:29 Prispevkov: 3469 Aktiv.: 14.65 Kraj: Postojna
|
Objavljeno: Pet Mar 02, 2007 12:05 pm Naslov sporočila: |
|
|
Premisli malo, kaj se dogaja v primeru različnih moči.
Čakanje pol periode bi moralo biti ločeno za vsak kanal.
Jaz bi primerjanje za proženje realiziral z =, Count bi pa resetiral na koncu polperiode. Seveda brez čakanja. Še raje bi pa prožil v prekinitvi, v glavnem programu bi pa počel kar bi hotel.
P.S.: Kateri pin proži prekinitev mi nič ne pove, če ne vem, kaj je priključeno nanj. Bistveno je, kateri signal proži katero prekinitev.
|
|
Nazaj na vrh |
|
 |
vili Član

Pridružen-a: Ned 30 Maj 2004 16:37 Prispevkov: 64 Aktiv.: 0.27 Kraj: Ljubljana
|
Objavljeno: Pet Mar 02, 2007 12:13 pm Naslov sporočila: |
|
|
Kako se pa sinhroniziraš na omrežje? Sam sem poskušal vendar mi pri določenih stopnjah osvetlitve žarnica utripa. Če spremenim zakasnitev 10ms za malenkost to odpravim. Kako pa bi se mikrokontroler sam popravljal da ne bi bilo utripanja?
|
|
Nazaj na vrh |
|
 |
Peter Član


Pridružen-a: Sre 30 Jun 2004 12:55 Prispevkov: 375 Aktiv.: 1.58 Kraj: Pod krvavcem nekje
|
Objavljeno: Pet Mar 02, 2007 12:40 pm Naslov sporočila: |
|
|
bostjang
Če bi pozorno prebral poste bi videl, da prekinitev prožim z detekcijo ničle skozi nič na portu PORTD.4. V tej zanki samo startamo timer0, ki šteje impulze, ki pa jih primerjamo z nastavleno močjo in, ko je ta zadeva enaka ali večja šele lahko prožim izhode, ki pa prožijo triace.
Vili jaz uporabljam 8MHz kvarc in pa preskaler je 1 za timer0 pri tako hitrem pocesiranju ni bojazni da bi mi luč utripala. Sam triac pa prožim preko optokoplerja MOC3021 ki ima vgrajen svetlobno krmiljen diac sam sklop pa predstavlaj solid state rele
_________________ Vse se da pokvarit, le če se dovol časa ukvarjaš z njo!!! |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 765 Aktiv.: 3.23 Kraj: Povir / Ljubljana
|
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|