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

Pridružen-a: Čet 27 Nov 2003 12:21 Prispevkov: 13 Aktiv.: 0.05 Kraj: MB
|
Objavljeno: Pon Sep 20, 2004 1:33 pm Naslov sporočila: PWM in PIC16F877 |
|
|
Cisto na kratko... Zacel sem z ukontrolerjem F84 in uspel narediti PWM regulacijo, sedaj pa bi rad presedlal na resno "zverino" (F877), in se tam igrati z PWM-jem...
No po preletavanju in citanju datasheeta imam obcutek da je zadeva precej bolj zakomplicirana...
Skrbijo, bolje receno ne razumem najbolj kako uporabit PWM/CAPTURE/COMPARE module, katere timerje je potrebno uporabit, kako se lotit zadeve, na kaj je potrebno pazit itd.
Pa ne mi zdaj pridigat o tem kaj je pwm npr.
Zelel bi cisto prakticen primer kako se lotit zadeve in na kaj pazit...
Gre za podobno regulacijo kot se je lotil ze Silvo (16f84), vendar z omenjenim malckom... No podobno zadevo sem ze spravil skupaj, zdaj me pa zanima kako naj isto naredim z "starejsim bratom"...
Drejc |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Sep 20, 2004 1:54 pm Naslov sporočila: |
|
|
Citiram: |
No po preletavanju in citanju datasheeta imam obcutek da je zadeva precej bolj zakomplicirana... |
Stvar ni komplicirana. Le, da stvar ne morem opisat v par besedah. Te dni sem zelo na kratko s časom zaradi gužve v službi. Bom probal pripravit kak enostaven primer do konca tedna. A vezel bom raje 16F628 ki ga lahko direk dam na testno ploščo. Sama PWM se pa praktično ne razlikuje. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
ma73 Član

Pridružen-a: Ned 04 Jan 2004 21:56 Prispevkov: 49 Aktiv.: 0.21
|
Objavljeno: Sre Sep 22, 2004 10:54 pm Naslov sporočila: |
|
|
Silvo, to bi bilo pa res zelo lepo od tebe, če bi nam pokazal kakšen primer o PWM za PIC, prosim daj še za nas laike malo več komentarja
Imaš še mogoče kakšen primerček za I2C...
lp |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Sep 23, 2004 8:37 am Naslov sporočila: |
|
|
O samem I2C je bilo na forumu že kar precej napisanega. Odtipkaj v Iskanje "i2c" . Sicer lahko pogledaš na primer tale primer. Gre za čisto assemblersko rutino, za oscilator 4Mhz ter jo lahko uporabiš praktično na vsakem pic-u. Z samo vgrajeno I2C perifierijo v 16F877 pa še nisem delal. Slaba lastnost tega je, da je pač vezana na točno določen pin.
Glede PWM pa bom poskušal, če ne prej nekaj napisat čez vikend. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Sep 23, 2004 10:44 am Naslov sporočila: |
|
|
Sem sedaj imel malo časa. Vzorec je napisan za 16F628, katerega lahko direkt dam na testno ploščo, tako, da lahko zadevo testiram. Za ostale pica v glavnem ni razlke. Zraven vsake vrstice sem napisal komnetar, tako da z razumevanjem ne bi smelo biti problema.
Koda: |
;--------------------------------------
;primer PWM
;uporabljen mikrokontroler pic16f628
;
;--------------------------------------
list P=16F628
#include "d:\asm\p16F628.inc"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _LVP_OFF & _XT_OSC
cblock 0X20
TMP
endc
org 0X0
goto GLAVNI
org 0x5
GLAVNI
bsf STATUS,RP0 ;bank 1
bcf TRISB,3 ;PWM pin pri 16F628 je RB3 -pin najprej dolocimo kot izhod
movlw .19 ;primer vrednosti PWM perioda=(PR2+1)*4*Tosc
movwf PR2 ;== (19+1)*4* 0.25uS==20uS==50kHz
bcf STATUS,RP0 ;bank0
movlw b'1010' ;PWM duty c=(CCPR1L LSB)*TMR2 vrednost preddelilnika
movwf CCPR1L ;resolucija je 10 bitna CCPR1L (8bitov) ter dva LSB bita v
;CCP1CON 5:4
movlw b'00000100' ;vkljucimo TIMER2 bit2 (preddelilnik 1:1) bit 0:1
movwf T2CON
movlw b'00001100' ;vklucimo PWM mode. To storimo tako, da postavimo bita
movwf CCP1CON ;3:2 registra CCP1CON bit 5:4 sta LSB
;izracun za dani primer (oscilator 4Mhz)
;(19+1)*4*0.25uS==20uS==50000Hz
;Frekveca 50kHz (20uS)
;duty cycle =b'101000'==40*0.24uS*1=10uS
ZANKA
nop
goto ZANKA
END ;eof
|
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Drejc Član

Pridružen-a: Čet 27 Nov 2003 12:21 Prispevkov: 13 Aktiv.: 0.05 Kraj: MB
|
Objavljeno: Pet Sep 24, 2004 1:15 pm Naslov sporočila: |
|
|
No osebni bi zadevo rad implementiral na cisto klasicni zarnici, ki je prikljucena na mrezo... No ob tem se mi postavlja par vprasanj...
Glede na to da se regulacija izvaja z "prehodom nule" je PWM perioda bistveno daljsa, kot jo navajas v tvojem primeru. V situacijah z mrezo je perioda vedno enaka 10 ms, duty cycle pa tako spreminjas med 0 in 10 ms (0 in 100%)...
Ta primer ki si ga opisal (v kolikor si jaz zadevo pravilno razlagam...) je uporaben za elektromotorje najbrz, kjer so frekvence regulacije precej visje... Jaz pa pri regulaciji MORAM upostevat faktor mreze, posledicno prehoda skozi nulo in posledicno se prekinitve, ki se ob tem sprozi (vsakih 10 msekund)...
Glede na 4M quartz bi bilo precej tesko doseci periodo 10ms, zato je en pristop znizat frekvenco externe ure (tezko s kvarcem ker je takt relativno nizek, netocno z RC elementi), s tem doseci takt in uro 10 ms in prilagoditi vrednosti registrov da dobimo PWM periodo. Ce bi imel npr. quartz frek. 10kHz, s tem periodo 100us, potem bi glede na formulo lahko prisli do: Pwm per=(24+1)*4* 100uS=10000us=10ms.
Ce pa se lotim se duty cycla, bi ga pa recimo prav tako spreminjal po koraku npr. 33%, 33*100uS*1=3,3mS, pa nato 66*100us*a=6,6mS in nato 99…
Kako torej speljat zadevo z prekinitvijo? V prejsnjem programu sem imel zadevo implemetirano tako da sem v rutini za prekinitve gledal za katero vrsto prekinitve gre in nato z zamikom (tmr0) reguliral svetilnost… Kako naj postopam pri omenjenem pic-u???
Drejc |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Sep 24, 2004 2:44 pm Naslov sporočila: |
|
|
Citiram: |
No osebni bi zadevo rad implementiral na cisto klasicni zarnici, ki je prikljucena na mrezo... No ob tem se mi postavlja par vprasanj... |
Za zelo nizko frekvenco po moje ne bi bila potrebna vgrajena PWM ampak bi lahko generiral lastno, saj je pri tem dovolj procesorskega časa. Nekje na forumu ali na Filemanager je ravno en tak primer IR regulatorja svetlobe. Zadevo sem izvedel z 16F84.
Kako je to po moje najenostavneje narediti?. Vključiš zunanjo prekinitev na pinu RB0/INT. Na tem pinu tipaš prehod skozi "0" zato lahko uporabiš kar optokopler na katerega dovedeš polnovalen usmerjen signal brez glajenja. Ko se izvede prehod skozi "0" se sproži prekinitev. V prekinitveni rutini napišeš eno časovno rutino katera z željenim časovnim zamikom pošlje na izhod nekaj S dolg impulz toliko, da prime tricac (seveda, če boš na izhodu uporabil triac). _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
LoLek Član

Pridružen-a: Sre 25 Feb 2004 12:46 Prispevkov: 343 Aktiv.: 1.45
|
Objavljeno: Sre Apr 13, 2005 4:05 pm Naslov sporočila: |
|
|
Da ne odpiram nove teme: mene pa zanima kakšna je optimalna frekvenca PWM signala za vodenje DC motorja preko H-mostiča? Nekje sem slišal, da je frekvenca 50Hz, ampak meni tako nizka frekvenca dela probleme, ker imam 20MHz oscilator na PIC-u. (20MHz rabim za CAN vodilo, da deluje na 125kbps) |
|
Nazaj na vrh |
|
 |
Gavran Član


Pridružen-a: Pon 26 Maj 2003 12:16 Prispevkov: 415 Aktiv.: 1.75 Kraj: Posavje
|
Objavljeno: Čet Apr 14, 2005 8:42 pm Naslov sporočila: |
|
|
Frekvenco izbereš glede na moč motorja, izbrane izhodne transistorje in mesto, kjer bo motor deloval. Za večje moči in IGBT transistorje bi izbral nekje med 1 in 5 KHz, razen če mora motor biti tih (stikalno frekvenco boš slišal na motorju). Pri manjši moči in MOSFET transistorji bi šel nekje do 20KHz. To frekvenco bi izbral tudi, če mora biti delovanje tiho, vendar bi v primeru uporabe IGBT transistorjev moral izbrati ultrafast varianto ali pa jih predimenzionirati. |
|
Nazaj na vrh |
|
 |
LoLek Član

Pridružen-a: Sre 25 Feb 2004 12:46 Prispevkov: 343 Aktiv.: 1.45
|
Objavljeno: Pet Apr 15, 2005 12:35 am Naslov sporočila: |
|
|
Imam od texas instruments H-bridge in v datasheetu piše, da je 2kHz optimalna frekvenca. To sem nastavil in deluje v redu. Hvala za odgovor. |
|
Nazaj na vrh |
|
 |
aleks Neznanec

Pridružen-a: Pon 11 Apr 2005 10:29 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Sre Maj 04, 2005 10:29 am Naslov sporočila: |
|
|
Tud jaz da ne odpiram nove teme sem začetnik u pic programiranju, pa me zanima, če ma kdo že nareto al pa kak predlog kak bi naredu pwm s pic 16f84
rabim za krmiljenje motorja prek MOSFETa. |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sre Maj 04, 2005 10:48 am Naslov sporočila: |
|
|
PIC16F84 nima vgrajene PWM periferije, zato se bo potrebno zadeve lotiti drugače. V vsakem primeru je najbolje uporabiti časovnik TMR0. Sam bi v koliko ne bi bila potrebna prevelika frekvneca uporabil še prekinitev, ki bi jo sprožil TMR0. _________________ lp
Silvo |
|
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: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|