Sunteți pe pagina 1din 26

PWM (Pulse Width Modulation): Teorie și aplicații

PWM (modulație în durata de impulsuri) este un semnal foarte folosit în aplicațiile sistemelor încorporate
(embedded systems) deoarece reușește să răspundă la 2 cerințe esențiale ale acestui domeniu: un preț scăzut al
echipamentelor folosite și capacitatea de a comanda diferite sisteme continuale (continue în timp și în valoare)
cu comenzi digitale (de tip ON/OFF).

Sistemele încorporate sunt bazate pe existența unui microcontroler și sunt concepute pentru a putea fi
construite și comercializate în masă (la nivel de milioane de exemplare). Din această cauză prețul de
comercializare al microcontrolerelor trebuie să fie cât mai mic.

Să luăm exemplul comenzii unui motor sau al unui LED: este evident că avem nevoie de o comandă analogică,
cu valori cuprinse între un minim și un maxim astfel încât să putem controla viteza de rotație a motorului sau
intensitatea luminoasă a unui LED. Aceasta ar presupune ca microcontrolerul să fie dotat cu un DAC
(Digital-to-Analog Converter) sau CAN (Convertor Analog-Numeric).

Acest lucru este posibil, dar costul de fabricație al microcontrolerului ar fi sensibil mai mare.

PWM reprezintă soluția care permite comanda variabilă a sistemelor continuale dar cu semnale de comandă
digitale, fapt care elimină din arhitectura microcontrolerului modulul DAC (CAN), scăzând prețul de
comercializare al sistemelor încorporate.

Cum se realizează acest lucru va fi prezentat în cele ce urmează.

1. Cum arată un semnal PWM

Fig. 1: Exemple de semnale modulate în durata de impulsuri: Tpwm = constant, DC = variabil

În figura de mai sus este reprezentat un semnal PWM (semnalul este periodic cu o perioadă constantă Tpwm).
Semnalul are o amplitudine constantă (12 V în cazul nostru, corespunzător tensiunii normale a unei baterii auto),
are o anumită perioadă de timp în care comanda este ON (12 V) și o alta în care semnalul este OFF (0 V).
DC provine de la „Duty Cycle”, numit alteori și „Duty Time” (DT), și este măsurat întotdeauna ca procent din
perioada Tpwm a semnalului periodic.

Astfel, dacă DC = 20% (primul grafic), atunci semnalul este ON pe o durată de 20% din Tpwm și este OFF pentru
restul de 80% din Tpwm.

Se observă că un semnal de tip PWM are 2 parametri care pot fi variabili:

- Tpwm, perioada semnalului


- DC (DT), procentul din perioadă cât semnalul este ON (activ)

Dacă în Fig. 1 avem un semnal PWM cu o perioadă constantă Tpwm și cu un DC variabil (20%, 50%, 80%), in Fig.
2 reprezentăm un semnal PWM cu un DC constant (25%) dar cu perioade diferite:

Fig. 2: Exemple de semnale modulate în durata de impulsuri: Tpwm = variabil, DC = constant (25%)

Pulse-width modulation (PWM) este de fapt un semnal periodic dreptunghiular a cărei durată de activare
(duty cycle DC) este modulată, rezultând o variație a valorii medii a semnalului.

Fig. 3
Dacă considerăm un semnal PWM f(t) cu o valoare minima (OFF) ymin, și o valoare maximă (ON) ymax și
un “duty cycle” D (vezi figura 3), valoarea medie a semnalului va fi:

Cum f(t) este un semnal dreptunghiular, cu valorile


- ymax pentru și
- ymin pentru .
Expresia valorii medii devine

Această expresie, în cazul semnalului digital al unui microcontroller, poate fi simplificată considerând
ymin = 0 și atunci
.

Din această relație se observă cum valoarea medie a semnalului PWM ( ) este direct proporțională cu
valoarea D (duty cycle).
Astfel, dacă:

- D[%] = 0% 🡺 D = 0 🡺 = 0
- D[%] = 40% 🡺 D = 0.4 🡺 = 0.4 * ymax
- D[%] = 100% 🡺 D = 1 🡺 = ymax

2. Care este principiul de utilizare a PWM


Reținem că PWM este un semnal pur digital dar care se folosește pentru a controla sisteme
comandate în mod normal cu semnale de comandă analogice.
Cum este posibil acest lucru este explicat în cele ce urmează.
Pentru a conduce sisteme continuale este necesar sa furnizăm semnale de control continue în timp. În
practica reglării numerice aceasta se face folosind convertoare numeric-analogice (CNA). Această
opțiune este relativ scumpă, iar în practica sistemelor embedded este evitată.
PWM s-a impus ca o metodă de generare a unor semnale de control pentru instalații continuale folosind
ieșiri numerice, disponibile în număr mare pe orice micrcontroller.
De fapt, analiza Fourier ne oferă răspunsurile la problematica de mai sus.
Semnalul PWM x(t) periodic se poate reprezenta (sintetiza) astfel:

[
𝑥𝑃𝑊𝑀(𝑡) = 𝐶0 + ∑ 𝐶𝑛 cos 𝑐𝑜𝑠 ( 𝑛• ω𝑃𝑊𝑀 • 𝑡) + 𝑆𝑛 sin 𝑠𝑖𝑛 ( 𝑛• ω𝑃𝑊𝑀 • 𝑡)
𝑛=1
]
unde .
Formulele de calcul ale coeficienților în acest caz sunt date de:

=
care reprezintă așa-numita componentă continuă a semnalului, și

Prin înțelegem iar este perioada semnalului periodic xPWM(t).


Ceea ce subliniază dezvoltarea în serie Fourier a semnalului PWM xPWM(t) este faptul că semnalul este
compus dintr-o sumă infinită de semnale sinusoidale centrate pe valoarea medie C0.

Vom trasa caracteristicile de frecvență (Bode) pentru sistemul cu funcția de transfer


1 1
𝐻(𝑠) = 1∙𝑠+1 = 𝑇∙𝑠+1 , 𝑇 = 1 𝑠𝑒𝑐

În diagrama Bode de mai sus, am reprezentat caracteristica de frecvență a instalației aperiodice.


Frecvența (pulsația) de frângere este dată de ecuația
1
ω𝑜 • 𝑇 = 1 → ω𝑜 = 𝑇
= 1[𝑟𝑎𝑑/𝑠𝑒𝑐]

−1
1. Să considerăm ω𝑃𝑊𝑀 = ω0/10 = 10 [𝑟𝑎𝑑/ sec 𝑠𝑒𝑐 ] . Se observă cum caracteristica de
frecvență a instalației va lăsa sa treacă la ieșire primele 16 frecvențe din dezvoltarea Fourier.

2. Dacă vom mări frecvența PWM-ului, de ex. la valoarea , mai puține


frecvențe se vor regăsi la ieșirea instalației, adică în zona de trecere a frecvențelor (dreptunghiul
cu linie punctată).
3. Dacă vom mari valoarea frecvenței PWM la , de zece ori mai mare ca
frecvența naturală a sistemului comandat, vom observa că instalația va filtra practic aproape toate
frecvențele din dezvoltarea Fourier, la ieșire regăsindu-se numai componenta continuă, care se
folosește pentru comandă (frecvența PWM este rejectată de 10 ori, -20 db/dec).
4. De obicei, se alege pentru frecvența PWM o frecvență de 100 de ori mai mare decât frecvența
principală (cea mai mică) a sistemului de condus, adică în cazul nostru
ω𝑃𝑊𝑀 = 100[𝑟𝑎𝑑/ sec 𝑠𝑒𝑐 ] , atunci sistemul condus cu PWM se va comporta aproape identic
cu cel condus cu semnal analogic:
Concluzii:
1. PWM se poate folosi ori de câte ori avem nevoie de semnale de comandă (de ieșire) de tip
analogic.
2. Semnalul PWM este de natură pur digitală (de tip ON/OFF), dar el are parametri care pot fi aleși
astfel ca efectul comenzii PWM asupra sistemului continual să fie identic cu cel al comenzii
analogice aplicate aceluiași sistem.
3. DC (duty cycle) se folosește pentru a controla amplitudinea (valoarea) semnalului analogic.
Aceasta poate lua valori între 0 (ymin) și ymax dacă DC ia valori între 0% (0) și 100% (1).
4. TPWM se folosește (ajustează) astfel încât sistemul condus să poată rejecta toate armonicele
semnalului PWM, lăsând numai componenta de regim staționar (valoarea medie) să acționeze
asupra sistemului condus. De obicei TPWM = 0.01 * T, unde T este constanta de timp principală
(cea mai mare) a sistemului.

3. Cum se implementează un sistem de reglare cu PWM?


Principial, PWM se implementează pentru a emula un CAN care lipsește în aplicațiile embedded.
Schema generală a unui sistem de reglare cu comandă PWM este prezentată mai jos.

Algoritmul de reglare numeric, de ex. un PID, va modula unul dintre parametrii generatorului PWM.
Cum amplitudinea PWM este un parametru fixat tehnologic (amplitudine TTL pentru semnal numeric:
0/5V) parametrii folosiți în modulație sunt Pulse Width (latimea impulsului, de unde și numele PWM),
precum si perioada (frecventa) impulsului PWM. Comanda regulatorului se scalează pentru a oferi un
factor de umplere 0%...100% către generatorul PWM.
4. Cum se alege perioada de eșantionare pentru un SRA bazat pe PWM?
Teoretic, când implementăm un SRA pe un sistem embedded, algoritmul de reglare se calculează din
modelul dinamic al instalației tehnologice pe baza unei anumite perioade de eșantionare. Din p.d.v. al
implementării, practic nu există nici o legătură între perioada PWM (TPWM) și perioada de eșantionare
Te.
Constructiv, generatorul PWM se informează la începutul perioadei de valoarea factorului de umplere,
după care generează semnalul PWM. Procesul se repetă cu o periodicitate dictată de TPWM.
Se pot face anumite considerații:
1. Cazul TPWM > Te
În acest caz, sistemul de reglare citește valorile erorii și calculează comanda cu o frecvență mai mare
decât a PWM-ului. Se observă că anumite valori ale comenzii sunt calculate inutil de către regulator,
deoarece valoarea PWM nu se schimba decât la momente multiplu al perioadei PWM.
2. TPWM < Te

În acest caz, PWM se informează inutil câteodată despre valoarea factorului de umplere (duty cycle),
care se modifică cu o frecvență mai mică.
Rezultă că cel mai favorabil caz este acela în care Te = T PWM. În acest caz, fiecare comandă calculată de
regulator va influența, cu o întârziere constantă, valoarea PWM.

Trebuie precizat faptul că semnalul de tip PWM generat de microcontrolere se actualizează în termeni de
DutyCycle sau Tpwm la începutul fiecărui ciclu de PWM (momente reprezentate prin săgeți distribuite
egal în timp la intervale Tpwm).
Pe de altă parte, programul (task-ul) care actualizează noua valoare PWM se execută cu o perioadă de
eșantionare Te. Aceasta înseamnă ca noul DutyCycle se va furniza la intervale egale de timp Te
(momente reprezentate prin săgeți distribuite egal în timp la intervale Te).
Evident, noua valoare a DutyCycle pentru semnalul PWM se va actualiza efectiv la primul moment
Tpwm după un moment Te (săgețile roșii în figură).
Se observă o variație a momentelor la care comanda de ieșire PWM se poate modifica efectiv (jitter)
față de momentele k*Te la care comenzile se calculează, fapt care poate influența negativ calitatea
reglării.
Valoarea acestui jitter este cuprinsă între minim 0 secunde (Tpwm simultan cu Te) și maximTpwm
secunde (la următorul ciclu PWM).
Din această cauză (dar și din motive dinamice de control) Tpwm trebuie ales cât mai mic posibil în
comparație cu Te (perioada de eșantionare).

5. Cum se implementează PWM pe un microcontroler


Generarea unui semnal de tip PWM se realizează pe un microcontroler folosind
- Un timer pe un număr de biți predefinit (de obicei pe 8 biți), care are la intrare un semnal de ceas
cu o anumită frecvență. Acesta numără crescător de la 0 (valoarea minimă) la 255 (valoarea
maximă), după care, la următorul impuls de ceas, va porin din nou din zero (se va reseta).
- Un registru cu scriere paralelă cu o lungime (număr de biți) egală cu cea a timerului (DutyCycle
Register)
- Un element de comparație care compară valoarea crescătoare în timp din timer cu cea înscrisă în
registrul cu scriere paralelă:
o Cât timp valoarea din timer este mai mică sau egală decât valoarea din registru, atunci
ieșirea este ON (1 logic, valoare maximă HIGH pentru logica TTL a microcontrolerului,
adică 5 V sau 3.3 V)
o Cât timp valoarea din timer este mai mare decât valoarea din registru, atunci ieșirea este
OFF (0 logic, valoare minimă LOW pentru logica TTL a microcontrolerului, adică 0 V)
Schema de principiu a unui semnal PWM generat cu Timere și Comparatoare
Funcționare TIMER (8b)
- TIMER (8b) numără de la 0 la 255 (= 28-1) cu frecvența generatorului de ceas (Fosc)
- Când s-a ajuns la valoarea maximă 255, la următorul impuls de ceas Timer (8b) generează OVF
(Overflow) și are din nou valoarea 0. Ciclul de numărare se reia.
- Semnalul OVF va seta la „1” logic valoarea PWM (sau 5 V/ 3.3 V fizic)
Generare semnal PWM:
1. TIMER (8b) < DutyCycle Register 🡺 Reset (R) = 0 🡺 PWM_signal = 1
2. TIMER (8b) == DutyCycle Register 🡺 Reset (R) = 1 🡺 PWM_signal = 0
3. TIMER (8b) 🡺 OVF 🡺 Set (S) = 1 🡺 PWM_signal = 1, reia de la pasul 1.
Soluția generală prezentată mai sus are un singur dezavantaj: frecvența PWM Fpwm este ajustabilă
numai prin frecvența Fosc, anume:
Fpwm = Fosc/ 256
Tpwm = Tosc * 256
Fosc este ajustabilă prin divizoare de frecvența aplicate asupra generatorului de ceas, deci nu avem decât
un număr restrâns de valori.
Diferența față de cazul original, fără regstrul PR, este faptul că perioada este determinată de valoarea
înscrisă în registrul PR, care este
0 <= PR <= 255
Cu alte cuvinte,
Fpwm = Fosc/ (PR + 1) >= Fosc/ 256
Tpwm = Tosc * (PR + 1) <= Tosc * 256
Se observă că, pentru o anumită frecvență de ceas Fosc, putem avea maxim 256 de posibile valori
diferite pentru Fpwm sau Tpwm
Fosc/ 256 <= Fpwm <= Fosc
Tosc <= Tpwm <= Tosc * 256

Modelul Simulink care implementează această arhitectură este:


Modul CCP_PWM implementat cu numărător (Simulink object)
Modul CCP_PWM implementat cu numărător propriu
Problema 1: Cum influențează Fosc frecvența PWM Fpwm?
Folosim implementarea în Simulink a generatorului PWM cu numărător pe 8 biți (PR = 255).
Vom studia influența frecvenței de ceas (Fosc) asupra Fpwm (Tpwm)
Se observă din experiment cum Fosc influențează direct proporțional Fpwm, fiind singura posibilitate de
a modifica Fpwm deoarece PR = 255 = fix, deci:
Fpwm = Fosc/256
Ca să modificăm frecvența PWM, atunci trebuie să modificăm Fosc.
Din păcate, aceasta se poate modifica numai prin alegerea frecvenței de ceas și a valorilor divizoarelor
de frecvență (prescaler).
Am ales pentru primul modul CCP_PWM1 o valoare Tosc1 = 0.1 s 🡺 Fosc = 10 Hz
Am ales pentru al doilea modul CCP_PWM2 o valoare Tosc2 = 0.2 s 🡺 Fosc = 5 Hz
Programul MATLAB de setare a parametrilor este:

Tclock1=0.1;
Tclock2=0.2;
Tclock=min(Tclock1,Tclock2);
Tsample=Tclock/2;
Model Simulink PWM implementat cu Counter_8b
Problema 2: Cum influențeaza PR (regstrul de perioadă) frecvența Fpwm?
Pentru a studia efectul registrului de perioadă PR asupra frecvenței PWM (Fpwm), vom folosi pentru
ambele modele CCP_PWM aceeași frecvență de ceas, dar vom folosi 2 valori diferite pentru PR:
PR1 = 255 (Fpwm1 = Fosc/ 256 = Fosc/ (4*64))
PR2 = 191 (Fpwm2 = Fosc/ 192 = Fosc/ (3*64)
Fpwm2/ Fpwm1 = 4/3 🡺 Tpwm1/Tpwm2 = 4/3 🡺 3*Tpwm1 = 4*Tpwm2
Experimentul are arhitectura Simulink de mai jos:
Se observă, atât la semnalele PWM cât și la cele de numărare, că la 3/6 cicluri PWM1 (Count1) avem
4/8 cicluri PWM2 (Count2)
Problema 3: Care este rezoluția modulului CCP_PWM fără registru de perioadă (PR = 255)
Prin „rezoluție” a unui generator PWM pe un număr de biți (8 în cazul nostru) înțelegem care este
modificarea procentuală a PWM în cazul în care numărătorul se incrementează cu 1 bit
TIMER = TIMER + 1 🡺 PWM = PWM + ∆𝑃𝑊𝑀

Pentru un numărător (counter) pe 8 biți, acesta poate avea 256 de valori distincte, de la 0 la 255.
Totodată această numărare trebuie să acopere o gamă PWM de la 0% (când TIMER = 0) la 100% (când
TIMER = 255)
Atunci rezoluția PWM în [procente pe bit] va fi:
100 [%] %
𝑅𝑒𝑧𝑃𝑊𝑀 = ∆𝑃𝑊𝑀 = 255 [𝑏𝑖𝑡]
= 0. 3922 𝑏𝑖𝑡

Rezoluția PWM în [Volți pe bit] va fi:


5 [𝑉] 𝑉
𝑅𝑒𝑧𝑃𝑊𝑀 = ∆𝑃𝑊𝑀 = 255 [𝑏𝑖𝑡]
= 0. 0196 𝑏𝑖𝑡

Aceasta înseamnă ca semnalul PWM generat de modulul CCP_PWM se poate modifica în multipli de
[%]
0. 3922 𝑏𝑖𝑡
, adică poate avea valori din mulțimea:

PWM_8b = {0%, 0.3922%, 0.7844%, 1.1766%, 1.5688%, ....., 99.6188%, 100%}


Dacă dorim să furnizăm o comanda de 3.718 V cu un PWM cu valoarea HIGH = 5V, atunci valoarea
DutyCycle se calculează cu formula:

Valoare [V] DutyCycle DCR


5 V ......................... 100 % ......... 255 (= PR) [bit]
3.718 V ................... X % ......... Y (= DCR) [bit]
X = 3.718 * 100 / 5 = 74.36 % = 0.7436
PWM_DC = DCR = 0.7436 * 255 = 189.6180
Cum DCR (DutyCycle Register) poate lua numai valori întregi, cea mai bună aproximație este:
DCR = 190
Valoarea reală a semnalului PWM de curent continuu oferit de modulul CCP_PWM este:
5 [𝑉]
𝑉𝑎𝑙𝑃𝑊𝑀 = 190 [𝑏𝑖𝑡] • 255 [𝑏𝑖𝑡]
= 3. 7255 𝑉

Aceeași valoare se poate obține dacă vom calcula rezoluția în [Volți pe bit]:
Y [bit] = 3.718*255/5 = 189.6180 = 190
190 [𝑏𝑖𝑡]
𝑉𝑎𝑙𝑃𝑊𝑀 = 5 [𝑉] • 255 [𝑏𝑖𝑡]
= 3. 7255 𝑉

Se observă că nu putem genera valoarea exactă de 3.718 V tocmai din cauza acestei rezoluții finite.
Rezultă clar cum cea mai bună soluție ar fi să alegem o rezoluție cât mai bună (adică mai mică!).
Aceasta se face folosind un numărător pe un număr de biți cât mai mare.
Problema 4: Care este rezoluția modulului CCP_PWM cu registru de perioadă PR (PR <= 255)
În acest caz avem de-aface cu un compromis: valoarea Fpwm se poate alege prin valoarea PR, în schimb
rezoluția (∆𝑃𝑊𝑀) va fi mai mare, deoarece PR <= 255
100 [%] 100 [%] %
𝑅𝑒𝑧𝑃𝑊𝑀 = ∆𝑃𝑊𝑀 = 𝑃𝑅 [𝑏𝑖𝑡]
≥ 255 [𝑏𝑖𝑡]
= 0. 3922 𝑏𝑖𝑡

5 [𝑉] 5 [𝑉] 𝑉
𝑅𝑒𝑧𝑃𝑊𝑀 = ∆𝑃𝑊𝑀 = 𝑃𝑅 [𝑏𝑖𝑡]
≥ 255 [𝑏𝑖𝑡]
= 0. 0196 𝑏𝑖𝑡

În exemplul de mai sus (Problema 2), folosind PR = 191, vom avea:


5 [𝑉] 5 [𝑉] 𝑉
𝑅𝑒𝑧𝑃𝑊𝑀 = ∆𝑃𝑊𝑀 = 𝑃𝑅 [𝑏𝑖𝑡]
= 191 [𝑏𝑖𝑡]
= 0. 026178 𝑏𝑖𝑡

Dacă dorim să furnizăm o comanda de 3.718 V cu un PWM cu valoarea HIGH = 5V, atunci valoarea
DutyCycle se calculează cu formula:
Valoare [V] DutyCycle DCR
5 V ......................... 100 % ......... 191 (= PR) [bit]
3.718 V ................... X % ......... Y (= DCR) [bit]
Y [bit] = 3.718 * PR / 5 = 3.718/5*191 = 142.0276 = 142 = DCR
142 [𝑏𝑖𝑡]
𝑉𝑎𝑙𝑃𝑊𝑀 = 5 [𝑉] • 191 [𝑏𝑖𝑡]
= 3. 7172 𝑉

Se observă că avem o valoare mai bună decât cea obținută în cazul anterior (cu o rezoluție mai bună),
dar aceasta este doar o întâmplare.
Pentru a vizualiza acest lucru, vom reprezenta grafic rezoluțiile oferite de modulul PWM în ambele
situații (PR = 255 și PR = 191)
Rezoluția mai bună este vizibilă prin raportul 4/3 = 255/191, adică la 3 incremente ale numărătorului cu
PR = 191 se observă 4 incremente ale numărătorului cu PR = 255.
Cu alte cuvinte, putem folosi un PR < 255, dar nu trebuie micșorată prea mult valoarea PR deoarece
rezoluția se înrăutățește (devine mai mare).

rez1=5/255;
rez2=5/191;
val1=[0:255]*rez1;
val2=[0:191]*rez2;
val2=[val2,ones(1,64)*5];
stairs([0:255]',[val1;val2;ones(1,256)*3.718]')
grid;

Problema 5: Cum se implementează CCP_PWM cu PIC18


Scheme de principiu implementate pe Timer2 și Timer 4 pe PIC18F87J11

- Timerele pentru PWM sunt TMR2 și TMR4.


- Ambele timere sunt pe 8 biți și sunt cu scriere/ citire paralelă.
- Ambele timere TMRx, x= 2, 4, sunt sincronizate cu un ceas (clock) cu frecvența Fosc/4, unde
Fosc este frecvența furnizată la ieșirea multiplexorului din Fig. 3-1 și este furnizată către unitatea
central CPU. La microcontrolerele avansate pe 8 biți PIC18 un ciclu instrucțiune se desfășoară
pe parcursul a 4 cicluri de ceas, adică Fcy = Fosc/4 sau, dacă lucrăm cu perioade, Tcy = 4*Tosc
- Ambele timere TMRx sunt prevăzute cu
o divizoare de frecvență la intrarea de ceas a timerelor (TMRx_Prescaler)
▪ TMRx_Prescaler = 1, 4 sau 16, programabil prin soft
o divizoare de frecvență la ieșirea de ‘Reset’ (TMRx_Postscaler).
▪ TMRx_Postscaler = 1, 2, 3, ….., 15, 16, programabil prin soft
▪ Postscaler-ul afectează doar frecvența de generare a întreruperilor, nu și frecvența
de generare a semnalului ‘Reset’ către modulele PWM.
▪ TMR2 poate trimite ieșirea sa (‘Reset’) și către interfețele seriale (MSSPx, Master
Synchronous Serial Port).
o Regiștri de “perioadă PWM” PRx cu posibilitatea de citire/ scriere
o Comparatoare pe 8 biți pentru compararea TRMx cu PRx
- Funcționalitatea este simplă:
o Semnalele ‘Reset’ se generează de către comparatoare când TMRx = PRx și se aplică
timerelor TMRx dar se trimit și către modulele PWM corespunzătoare.
o La aplicarea semnalului ‘Reset’, TMRx = 0 și ulterior TMRx se incrementează la fiecare
‘Rising edge’ al semnalului de ceas.

a. Simulink pentru simularea unui PWM implementat cu numărătoare/ timere


Structura modelului Simulink este:
1. Un numărător pe 8 biți care este sincronizat cu o frecvență de ceas (clock) (în figură cu albastru).
Frecvența este un parametru ajustabil și va influența frecvența de generare a PWM-ului.
2. Un semnal sinusoidal care modulează mărimea de comparare (valoare DutyCycle, prag,
threshold) a comparatorului (în figură cu verde). Se shift-ează valoarea sinusoidală cu 1, și apoi
se multiplică cu 128, obținând un prag care se modifică sinusoidal între 0 și 255, valoarea
maximă a numărătorului pe 8 biți.
3. Un comparator (în figură cu mov), care generează semnalul PWM în funcție de cum este
valoarea numărătorului în comparație cu valoarea de prag.
b. Modulul PWM al PIC18

S-ar putea să vă placă și