proiect micro alex luca
TRANSCRIPT
5/14/2018 Proiect Micro Alex Luca - slidepdf.com
http://slidepdf.com/reader/full/proiect-micro-alex-luca 1/12
FACULTATEA DE
ELECTRONICA,TELECOMUNICATII SI
TEHNOLOGIA INFORMATIEI
PROIECT LA
MICROCONTROLERE
Generarea PWM
Student: Luca Alexandru-Ioan,
grupa 5402B
5/14/2018 Proiect Micro Alex Luca - slidepdf.com
http://slidepdf.com/reader/full/proiect-micro-alex-luca 2/12
1.Enunt: Sa se conceapa la nivel de program, un sistem cu microcontroler de tip PIC,care sa genereze periodic forma de unda complexa.
>--------2s-------< >-------------3s-----------< >--------4s------< >------8s------<
PWM (Pulse Width Modulation - modularea factorului de umplere al unui
semnal) permite controlul circuitelor analogice din domeniul digital. Un controller PWM
este in esenta un convertor digital-analog (DAC) pe un singur bit. Această modula ie vineț
în sprijinul multor aplica ii deoarece înseamnă consum mic, eliminarea zgomotelor iț ș aplica ii cu cost redus.ț
2
5/14/2018 Proiect Micro Alex Luca - slidepdf.com
http://slidepdf.com/reader/full/proiect-micro-alex-luca 3/12
2.Principiul de functionare:
Modularea foloseste variatia factorului de umplere a unei forme de undadreptunghiulara pentru a genera la iesire o tensiune analogica. Considerand o forma de
unda dreptunghiulara f(t) cu o valoare minima ymin si o valoare maxima ymax si factorul
de umplere D valoarea medie a formei de unda e data de relatia:
Cum f(t) este o forma de unda dreptunghiulara valoarea sa maxima se atinge pentru
0<t<D*T.
Tipuri de PWM
Modulatie Delta
Modulatie Delta-Sigma
Multe circuite digitale pot genera semnale PWM. Majoritatea microcontrollerelor dispun
de aceasta facilitate. Pentru a implementa o asemenea facilitate ele se folosesc de unnumărator care este incrementat periodic (conectat direct sau indirect la o unitate de ceas)
si care este resetat la sfarsitul fiecărei perioade a PWM-ului. Cand valoarea
3
5/14/2018 Proiect Micro Alex Luca - slidepdf.com
http://slidepdf.com/reader/full/proiect-micro-alex-luca 4/12
numaratorului este mai mare decat valoarea de referinta, iesirea PWM (output-ul) trece
din starea inalta in stare joasa (sau invers).
3.Referinte cod:
Pentru triunghi si trapez am calculat panta crescatoare/descrescatoare in 10 puncte. Pentru ca o panta are 1 secunda=> 1 punct corespunde a 100ms. Deasemeneafiecare punct are o variatie a factorului de umplere, asfel ca pentru 1 punct avem nevoie
de 10 stari( i stari in 1 logic si N-i stari in 0 logic). Rezulta astfel ca pentru fiecare din
cele 10 stari ale unui punct ii corespunde o intarziere de 10ms( de aceea am ales in cod o
bucla de temporizare de 10ms). Suplimentar, pentru trapez, mai avem o perioada de 1secunda( baza mica trapez) in care semnalul sta in 1 logic.
La dreptunghi am folosit un contor (n=4), pentru a ingloba intr-o bucla intarzierea
de 1secunda, rezultand asfel un semnal dreptunghiular cu durata de 4 secunde.
La sinusoida, cum panta crescatoare/descrescatoare o vom genera timp de 4
secunde, si avem 10 puncte de cuantizare/panta=> ca 400ms va sta in fiecare punct al
sinusului. Tinand cont de faptul ca punctele sinusului, generate intr-un tabel excel, suntnumere reale, pentru a le rotunji, am inmultit formula de generare a punctelor sinusului
cu 32. Astfel am aproximat in coloana C a fisierului excel, valorile sinusului si, plecand
de la acestea, observam ca daca avem o intarziere tot de 10ms pentru fiecare tranzitie,atunci obtinem perioada de aproximativ 4 secunde.
Valorile corespunzatoare celor 20 puncte in care vom cuantiza sinusul, le-am
obtinut introducand urmatoarea formula in coloana B a documentului excel:
=32*sin(A1*pi/20). Dupa cum am mai spus in coloana C sunt valorile rotunjite ale col.B
A B C
1 5.003386 5
2 9.883697 10
3 14.52088 15
4 18.80088 19
5 22.61841 23
6 25.87955 26
7 28.50411 28
8 30.4275 30
9 31.60243 31
10 31.99999 32
11 31.6104 31
12 30.44324 30
13 28.52723 28
14 25.9095 26
15 22.65443 23
16 18.8421 19
17 14.56628 15
18 9.932157 10
4
5/14/2018 Proiect Micro Alex Luca - slidepdf.com
http://slidepdf.com/reader/full/proiect-micro-alex-luca 5/12
19 5.053718 5
20 0.050965 0
Pentru generarea sinusului, am incarcat in memoria de program aceste valori
obtinute in coloana C, tocmai pentru ca ele sunt constante si ca pot fi incarcate usor in
acumulator ori de cate ori avem nevoie de ele. Subrutina val_crt o vom apela deci ori decate ori vrem sa incarcam o anumita valoare pentru generarea unui punct al sinusului.
val_crt va returna constanta data de PCL (program counter octetul de low) la care vomadauga numarul de ordine al punctului ce trebuie generat ( pastrat de registrul n). Astfel
se permite incarcarea cu valoarea corespunzatoare la fiecare pas cuantizat pe care trebuie
sa-l generam in vederea obtinerii sinusului.Pentru implementarea practica, am ales microcontroller-ul PIC16F84 si un
oscilator de 4MHZ(astfel incat 1 ciclu masina=1micro-secunda). La pinii portului B am
conectat led-uri in vederea observarii PWM-ului pentru cele 4 forme indicate mai sus.Am ales sa transmit cele 4 forme de reprezentat pe pini diferiti ai portului B,
astfel:
-pe pinul 4 al portului B am generat PWM dreptunghiular
-pe pinul 5 al portului B am generat PWM triunghiular -pe pinul 6 al portului B am generat PWM trapezoidal
-pe pinul 7 al portului B am generat PWM sinusoidal
Formele de unda sunt furnizate la sfarsitul codului.
4.Codul:
#include p16f84a.inc
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSCn equ 0x0c ; n reprezinta factorul de umplere al unui punct de;pe caracterostica unui semnali equ 0x0d ; i variaza pana la valoarea maxima n, pentru timpulcare sta in 1 si variaza pana la N-i pentru timpul stat in 0d1 equ 0x0e ; d1,d2,d3 sunt utilizati la contoareled2 equ 0x0f ;intarzierilord3 equ 0x10
nr equ 0x11 ; nr se foloseste la generarea sinusului si;reprezinta numarul de puncte in care am cuantificat panta;crescatoare/descrescatoare a sinusului. p equ 0x12 ; p pastreaza valorile sinusului returnate inprogram ;cu ajutorul instructiunii RETLW. N equ D'10' ; N este numarul de puncte cuantizate al unei pante pct equ d'32' ; pct reprezinta valoarea maxima pe care o ia;sinusul nostru, adica la 90 de grade. Un punct de pe sinussta ;in 1 logic p iteratii si in 0 logic pct-p iteratii.
org 0x00goto mainorg 0x13
mainbsf STATUS,RP0 ;ne pozitionam in B1
5
5/14/2018 Proiect Micro Alex Luca - slidepdf.com
http://slidepdf.com/reader/full/proiect-micro-alex-luca 6/12
movlw b'00001111' ; setam porturile 4,5,6,7 de OUTmovwf TRISBbcf STATUS,RP0 ;revenim in B0clrf PORTB ;punem in 0 toate iesirile portului B
;GENERAREA TRIUNGHIULUI-panta crescatoare
movlw d'1'movwf nclrf i
loopn_cbsf PORTB,5
loopi_cCALL delay10ms ; stai n*10ms in 1 logicincf i,1movf n,0subwf i,0 ;i-n=wbtfss STATUS,Z ;Daca rezultatul este 0, inseamna ca
;trecem la generarea restului de N-i stari in 0 logic
goto loopi_cloopi2_c
movf i,0;sublw N;btfsc STATUS,Z;stam in 0 logic cat timp i-N e diferit de 0goto endloopi_c; cand i-N este 0, inseamna ca am generat
1 ;punct pe panta crescatoare si il pregatim pe urmatorulbcf PORTB,5CALL delay10msincf i,1goto loopi2_c
endloopi_c ; aici obligatoriu i-ul trebuie sters pentru o noua
;iteratie, iar n-ul incrementat, adica crestem factorul de;umplere pentru urmatorul punct de pe panta crescatoare.clrf iincf n,1movf n,0sublw Nbtfss STATUS,Zgoto loopn_c
;generare panta descrescatoare- este acelasi lucru ca pentru;panta crescatoare, doar ca generat in sens invers
movlw d'1'movwf nclrf i
loopn_dbcf PORTB,5
loopi_dCALL delay10msincf i,1movf n,0subwf i,0; i-n=wbtfss STATUS,Zgoto loopi_d
6
5/14/2018 Proiect Micro Alex Luca - slidepdf.com
http://slidepdf.com/reader/full/proiect-micro-alex-luca 7/12
loopi2_dmovf i,0sublw Nbtfsc STATUS,Zgoto endloopi_dbsf PORTB,5
CALL delay10msincf i,1goto loopi2_d
endloopi_dclrf iincf n,1movf n,0sublw Nbtfss STATUS,Zgoto loopn_dbcf PORTB,5 ; s-a incheiat generarea triunghiului,
astfel ;ca pot lasa bitul 5 al portului B in 0 logic deoarece nu
mai am ;intentia de a genera altceva pe el
;GENERARE TRAPEZ-asemanator cu triunghiul doar ca vom sta un;timp suplimentar in maxim.Acesta e generat pe pinul 6 al;portului B.
movlw d'1'movwf nclrf i
loopn_c2bsf PORTB,6
loopi_c2CALL delay10ms
incf i,1movf n,0subwf i,0;i-n=wbtfss STATUS,Zgoto loopi_c2
loopi2_c2movf i,0; i=1sublw N;btfsc STATUS,Zgoto endloopi_c2bcf PORTB,6CALL delay10msincf i,1goto loopi2_c2
endloopi_c2clrf iincf n,1movf n,0sublw Nbtfss STATUS,Zgoto loopn_c2
7
5/14/2018 Proiect Micro Alex Luca - slidepdf.com
http://slidepdf.com/reader/full/proiect-micro-alex-luca 8/12
; Deosebirea fata de triunghi consta in aceasta secventa in care"punem" semnalul in 1 logic timp de 1s
bsf PORTB,6CALL delay1sbcf PORTB,6CALL delay10ms ; lasam un delay de 10ms inainte de panta
;descrescatoare;panta descrescatoare a trapezului
movlw d'1'movwf nclrf i
loopn_d2bcf PORTB,6
loopi_d2CALL delay10msincf i,1movf n,0subwf i,0; i-n=w
btfss STATUS,Zgoto loopi_d2
loopi2_d2movf i,0sublw Nbtfsc STATUS,Zgoto endloopi_d2bsf PORTB,6CALL delay10msincf i,1goto loopi2_d2
endloopi_d2
clrf iincf n,1movf n,0sublw Nbtfss STATUS,Zgoto loopn_d2bcf PORTB,6
;GENERARE SEMNAL DREPTUNGHIULAR- il vom genera timp de 4s pe;pinul 4 al portului B
movlw d'4'movwf n
loopdrept ;va repeta bucla de 4 ori. 4*1ms=4msbsf PORTB,4CALL delay1sdecfsz n,1goto loopdreptbcf PORTB,4 ;revenim in 0 dupa cele 4ms.nop
;GENERARE SINUS- panta crescatoare
8
5/14/2018 Proiect Micro Alex Luca - slidepdf.com
http://slidepdf.com/reader/full/proiect-micro-alex-luca 9/12
movlw d'10'movwf nrmovlw d'1'movwf imovlw d'0'movwf n ; n il punem in 0 astfel ca la primul apel al
functie val_crt, PCL+n sa ia prima valoare.loopnsin_c
movf n,0 ;w=0call val_crt ; la intoarcerea din acest apel el va avea
;incarcat in acumulator valoarea n corespunzatoarea punctelor;sinusului calculate aparte.
movwf p ; din acumulator salvam aceasta valoare in p,;pentru ca ea reprezinta tocmai factorul de umplere alpunctului ;de pe caracteristica sinusului
bsf PORTB,7 ; de aici programul e asemanator cu ce am;facut la trapez/triunghiloopisin_c
CALL delay10msincf i,1movf p,0subwf i,0btfss STATUS,Z ; stai p valori in 1 logicgoto loopisin_c
loopisin2_cmovf i,0sublw pctbtfsc STATUS,Z ; stai i-pct valori in 0 logicgoto endloopisin_cbcf PORTB,7
call delay10msincf i,1goto loopisin2_c
endloopisin_cmovlw d'1'movwf iclrf pincf n,1decfsz nr,1 ; genereaza un numar de 10 cuante pentru
panta ;crescatoaregoto loopnsin_c
;GENERARE sinus- panta descrescatoare facuta analog cu prima;parte, doar ca valorile lui p sunt in oglinda.(sinusul e fct;para)
movlw d'9'movwf nr ; restul de 9 puncte de pe panta descrescatoaremovlw d'1'movwf i
loopnsin_dmovf n,0call val_crtmovwf p
9
5/14/2018 Proiect Micro Alex Luca - slidepdf.com
http://slidepdf.com/reader/full/proiect-micro-alex-luca 10/12
bsf PORTB,7loopisin_d
CALL delay10msincf i,1movf p,0subwf i,0
btfss STATUS,Zgoto loopisin_d
loopisin2_dmovf i,0sublw pctbtfsc STATUS,Zgoto endloopisin_dbcf PORTB,7call delay10msincf i,1goto loopisin2_d
endloopisin_d
movlw d'1'movwf iclrf pincf n,1decfsz nr,1goto loopnsin_dbcf PORTB,7 ; dupa sinus stergem pinul 7 al portului B
val_crt ; aici pastram pct. sinusului pentru o accesare;facila.
addwf PCL
retlw d'5'retlw d'10'retlw d'15'retlw d'19'retlw d'23'retlw d'26'retlw d'28'retlw d'30'retlw d'31'retlw d'32'retlw d'31'retlw d'30'retlw d'28'retlw d'26'retlw d'23'retlw d'19'retlw d'15'retlw d'10'retlw d'5'retlw d'0'
; Intarzieri-ele nu sunt foarte precise si sunt facute doar;pentru a evidentia comportarea unui semnal PWM
10
5/14/2018 Proiect Micro Alex Luca - slidepdf.com
http://slidepdf.com/reader/full/proiect-micro-alex-luca 11/12
delay1smovlw d'100'movwf d3
loopd3CALL delay10msdecfsz d3,1
goto loopd3RETURN
delay10msmovlw d'10'movwf d1
loopd1movlw d'199'movwf d2
loopd2nopnopdecfsz d2,1
goto loopd2nopdecfsz d1,1goto loopd1RETURNnopEND
5.Formele de unda obtinute:
11
5/14/2018 Proiect Micro Alex Luca - slidepdf.com
http://slidepdf.com/reader/full/proiect-micro-alex-luca 12/12
12