proiect micro alex luca

12
 FACULTATEA DE ELECTRONICA,TELECOMUNICATII SI TEHNOLOGIA INFORMATIEI PROIECT LA MICROCONTROLERE Generarea PWM Student: Luca Alexandru-Ioan, grupa 5402B

Upload: livia-scutaru

Post on 17-Jul-2015

39 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Proiect Micro Alex Luca

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

Page 2: Proiect Micro Alex Luca

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

Page 3: Proiect Micro Alex Luca

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

Page 4: Proiect Micro Alex Luca

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

Page 5: Proiect Micro Alex Luca

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

Page 6: Proiect Micro Alex Luca

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

Page 7: Proiect Micro Alex Luca

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

Page 8: Proiect Micro Alex Luca

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

Page 9: Proiect Micro Alex Luca

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

Page 10: Proiect Micro Alex Luca

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

Page 11: Proiect Micro Alex Luca

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

Page 12: Proiect Micro Alex Luca

5/14/2018 Proiect Micro Alex Luca - slidepdf.com

http://slidepdf.com/reader/full/proiect-micro-alex-luca 12/12

 

12