Documente Academic
Documente Profesional
Documente Cultură
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.
Î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.
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:
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
=
care reprezintă așa-numita componentă continuă a semnalului, și
−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.
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).
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 𝑏𝑖𝑡
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:
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 𝑏𝑖𝑡
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;