- Ce este SPWM (Modularea lățimii impulsurilor sinusoidale)?
- Cum funcționează invertorul SPWM
- Componente necesare pentru a construi invertorul SPWM
- Construcția circuitului invertorului SPWM
- Program Arduino pentru invertor SPWM
- Testarea circuitului invertorului TL494 PWM
Circuitele invertorului sunt deseori necesare acolo unde nu este posibil să obțineți sursa de curent alternativ din rețea. Un circuit invertor este utilizat pentru a converti puterea de curent continuu în curent alternativ și poate fi împărțit în două tipuri, care sunt invertoarele cu undă sinusoidală pură sau invertoarele cu undă pătrată modificată. Aceste invertoare cu undă sinusoidală pură sunt foarte scumpe, unde invertoarele cu undă pătrată modificate sunt ieftine. Aflați mai multe despre diferitele tipuri de invertoare aici.
Într-un articol anterior, v-am arătat cum să nu faceți un invertor de undă pătrată modificat, abordând problemele asociate acestuia. Deci, în acest articol, voi face un invertor de undă sinusoidală pură folosind Arduino și voi explica principiul de funcționare al circuitului.
Dacă realizați acest circuit, vă rugăm să rețineți că acest circuit nu are feedback, nu are protecție la supracurent, nu are protecție împotriva scurtcircuitului și nici protecție la temperatură. Prin urmare, acest circuit este construit și demonstrat numai în scopuri educaționale și nu este absolut recomandat să construiți și să utilizați acest tip de circuit pentru aparate comerciale. Cu toate acestea, le puteți adăuga la circuitul dvs., dacă este necesar, circuite de protecție utilizate în mod obișnuit, cum ar fi
Protecția la supratensiune, protecția la supracurent, protecția împotriva polarității inverse, protecția împotriva scurtcircuitului, controlerul Hot Swap etc. au fost deja discutate.
ATENȚIE: Dacă realizați acest tip de circuit, vă rugăm să fiți foarte atenți la tensiunea înaltă și vârfurile de tensiune generate de semnalul de comutare la intrare.
Ce este SPWM (Modularea lățimii impulsurilor sinusoidale)?
După cum sugerează și numele, SPWM standuri pentru S inusoidal P ulse W Suprafață M odulation. După cum probabil știți deja, un semnal PWM este un semnal în care putem schimba frecvența pulsului, precum și timpul de oprire și de oprire, care este, de asemenea, cunoscut sub numele de ciclu de funcționare. Dacă doriți să aflați mai multe despre PWM, îl puteți citi aici. Deci, modificând ciclul de funcționare, modificăm tensiunea medie a impulsului. Imaginea de mai jos arată că-
Dacă luăm în considerare un semnal PWM care comută între 0 - 5V care are un ciclu de funcționare de 100%, vom obține o tensiune medie de ieșire de 5V, din nou dacă luăm în considerare același semnal cu un ciclu de funcționare de 50%, vom avea obțineți tensiunea de ieșire de 2,5 V, iar pentru ciclul de funcționare de 25%, este jumătate din asta. Aceasta rezumă principiul de bază al semnalului PWM și putem trece la înțelegerea principiului de bază al semnalului SPWM.
O tensiune sinusoidală este în primul rând o tensiune analogică care își modifică magnitudinea în timp și putem reproduce acest comportament al unei unde sinusoidale prin schimbarea continuă a ciclului de funcționare al undei PWM, imaginea de mai jos arată acest lucru.
Dacă vă uitați la schema de mai jos, va vedea că există un condensator conectat la ieșirea transformatorului. Acest condensator este responsabil pentru netezirea semnalului AC de la frecvența purtătoare.
Semnalul de intrare utilizat va încărca și descărca condensatorul în funcție de semnalul de intrare și de încărcare. Deoarece am folosit un semnal SPWM de înaltă frecvență, acesta va avea un ciclu de funcționare foarte mic, care este de aproximativ 1%, acest ciclu de funcționare de 1% va încărca puțin condensatorul, următorul ciclu de funcționare este de 5%, acest lucru se va încărca din nou condensatorul un pic mai mult, următorul impuls va avea un ciclu de funcționare de 10% și condensatorul se va încărca puțin mai mult, vom aplica semnalul până vom ajunge la un ciclu de funcționare de 100% și de acolo, vom coborî înapoi la 1%. Aceasta va crea o curbă foarte netedă ca o undă sinusoidală la ieșire. Deci, oferind valori adecvate ale ciclului de funcționare la intrare, vom avea o undă foarte sinusoidală la ieșire.
Cum funcționează invertorul SPWM
Imaginea de mai sus arată secțiunea principală de conducere a invertorului SPWM și, după cum puteți vedea, am folosit două MOSFET-uri cu canal N în configurație jumătate de punte pentru a acționa transformatorul acestui circuit, pentru a reduce zgomotul de comutare nedorit și pentru a proteja MOSFET Am folosit diode 1N5819 paralele cu MOSFET-urile. Pentru a reduce orice vârfuri dăunătoare generate în secțiunea porții, am folosit rezistențe de 4,7 ohmi paralele cu diodele 1N4148. În final, BD139 și BD 140 tranzistori sunt configurate într - un push-pull configurațiepentru a conduce poarta MOSFET-ului, deoarece acest MOSFET are o capacitate de poartă foarte mare și necesită un minim de 10V la bază pentru a porni corect. Aflați mai multe despre funcționarea amplificatoarelor Push-Pull aici.
Pentru a înțelege mai bine principiul de lucru al circuitului, l-am redus la un punct în care această secțiune a MOSFET-ului este ACTIVATĂ. Când MOSFET este pe curent, curge mai întâi prin transformator și apoi este împământat de MOSFET, astfel un flux magnetic va fi, de asemenea, indus în direcția în care curge curentul, iar miezul transformatorului va trece fluxul magnetic în înfășurarea secundară și vom obține semiciclul pozitiv al semnalului sinusoidal la ieșire.
În următorul ciclu, partea de jos a circuitului este în partea de sus a circuitului este oprit, de aceea am eliminat partea de sus, acum curentul curge în direcția opusă și generează un flux magnetic în acea direcție, inversând astfel direcția fluxului magnetic în miez. Aflați mai multe despre funcționarea MOSFET aici.
Acum, știm cu toții că un transformator funcționează prin schimbări de flux magnetic. Deci, pornirea și oprirea ambelor MOSFET-uri, unul inversat la altul și făcând asta de 50 de ori într-o secundă, va genera un flux magnetic oscilant frumos în interiorul miezului transformatorului și fluxul magnetic în schimbare va induce o tensiune în bobina secundară ca știm după legea Faraday. Așa funcționează invertorul de bază.
Circuitul invertor SPWM complet utilizat în acest proiect este prezentat mai jos.
Componente necesare pentru a construi invertorul SPWM
Sl. Nu |
Părți |
Tip |
Cantitate |
1 |
Atmega328P |
IC |
1 |
2 |
IRFZ44N |
Mosfet |
2 |
3 |
BD139 |
Tranzistor |
2 |
4 |
BD140 |
Tranzistor |
2 |
5 |
22pF |
Condensator |
2 |
6 |
10K, 1% |
Rezistor |
1 |
7 |
16MHz |
Cristal |
1 |
8 |
0,1 uF |
Condensator |
3 |
9 |
4.7R |
Rezistor |
2 |
10 |
1N4148 |
Diodă |
2 |
11 |
LM7805 |
Regulator de voltaj |
1 |
12 |
200uF, 16V |
Condensator |
1 |
13 |
47uF, 16V |
Condensator |
1 |
14 |
2.2uF, 400V |
Condensator |
1 |
Construcția circuitului invertorului SPWM
Pentru această demonstrație, circuitul este construit pe Veroboard, cu ajutorul schemei, la ieșirea transformatorului, o cantitate imensă de curent va curge prin conexiune, astfel încât jumperii de conexiune trebuie să fie cât mai groși posibil.
Program Arduino pentru invertor SPWM
Înainte de a continua și a începe să înțelegem codul, să clarificăm elementele de bază. Din principiul de lucru de mai sus, ați aflat cum va arăta semnalul PWM la ieșire, acum întrebarea rămâne cum putem face o astfel de undă variabilă la pinii de ieșire ai Arduino.
Pentru a face semnalul PWM diferit, vom folosi timer -ul de 16 biți 1 cu o setare de precaler 1, care ne va oferi 1600/16000000 = 0,1 ms timp pentru fiecare număr, dacă luăm în considerare un singur semiciclu al unei unde sinusoidale., care se potrivește exact de 100 de ori într-un ciclu de jumătate al undei. În termeni simpli, vom putea să ne probăm unda sinusoidală de 200 de ori.
Apoi, trebuie să împărțim unda sinusoidală la 200 de bucăți și să le calculăm valorile cu o corelație a amplitudinii. Apoi, trebuie să convertim acele valori în valori ale contorului temporizator, multiplicându-le cu limita contorului. În cele din urmă, trebuie să punem aceste valori într-un tabel de căutare pentru a le alimenta la contor și vom obține unda sinusoidală.
Pentru a simplifica lucrurile, folosesc un cod SPWM foarte bine scris de la GitHub, creat de Kurt Hutten.
Codul este foarte simplu, începem programul prin adăugarea fișierelor antet necesare
#include #include
Apoi, avem cele două tabele de căutare de la care vom obține valorile contorului temporizatorului.
int lookUp1 = {50, 100, 151, 201, 250, 300, 349, 398, 446, 494, 542, 589, 635, 681, 726, 771, 814, 857, 899, 940, 981, 1020, 1058, 1095, 1131, 1166, 1200, 1233, 1264, 1294, 1323, 1351, 1377, 1402, 1426, 1448, 1468, 1488, 1505, 1522, 1536, 1550, 1561, 1572, 1580, 1587, 1593, 1597, 1599, 1600, 1599, 1597, 1593, 1587, 1580, 1572, 1561, 1550, 1536, 1522, 1505, 1488, 1468, 1448, 1426, 1402, 1377, 1351, 1323, 1294, 1264, 1233, 1200, 1166, 1131, 1095, 1058, 1020, 981, 940, 899, 857, 814, 771, 726, 681, 635, 589, 542, 494, 446, 398, 349, 300, 250, 201, 151, 100, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0}; int lookUp2 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 100, 151, 201, 250, 300, 349, 398, 446, 494, 542, 589, 635, 681, 726, 771, 814, 857, 899, 940, 981, 1020, 1058, 1095, 1131, 1166, 1200, 1233, 1264, 1294, 1323, 1351, 1377, 1402, 1426, 1448, 1468, 1488, 1505, 1522, 1536, 1550, 1561, 1572, 1580, 1587, 1593, 1597, 1599, 1600, 1599, 1597, 1593, 1587, 1580, 1572, 1561, 1550, 1536, 1522, 1505, 1488, 1468, 1448, 1426, 1402, 1377, 1351, 1323, 1294, 1264, 1233, 1200, 1166, 1131, 1095, 1058, 1020, 981, 940, 899, 857, 814, 771, 726, 681, 635, 589, 542, 494, 446, 398, 349, 300, 250,201, 151, 100, 50, 0};
Apoi, în secțiunea de configurare , inițializăm registrele de control al contorului temporizatorului pentru a fi clare pe fiecare. Pentru informații suplimentare, trebuie să parcurgeți fișa tehnică a IC-ului atmega328.
TCCR1A = 0b10100010; / * 10 clar pe meci, setat la BOTTOM pentru compA. 10 clar pe meci, setat la BOTTOM pentru compB. 00 10 WGM1 1: 0 pentru forma de undă 15. * / TCCR1B = 0b00011001; / * 000 11 WGM1 3: 2 pentru forma de undă 15. 001 fără prescală pe tejghea. * / TIMSK1 = 0b00000001; / * 0000000 1 TOV1 Activare întrerupere semnal. * /
După aceea, inițializăm registrul de captură de intrare cu o valoare predefinită de 16000, deoarece acest lucru ne va ajuta să generăm exact 200 de eșantioane.
ICR1 = 1600; // Perioada pentru cristalul de 16 MHz, pentru o frecvență de comutare de 100 KHz pentru 200 de subdiviziuni pe ciclu de undă sinusoidală de 50 Hz.
Apoi, activăm întreruperile globale apelând funcția, sei ();
În cele din urmă, am setat pinul Arduino 9 și 10 ca ieșire
DDRB = 0b00000110; // Setați PB1 și PB2 ca ieșiri.
Aceasta marchează sfârșitul funcției de configurare.
Secțiunea buclă a codului rămâne goală, deoarece este un program temporizat de întrerupere a contorului.
bucla void () {; /*Nu face nimic…. pentru totdeauna!*/}
Apoi, am definit vectorul de revărsare timer1, această funcție de întrerupere primește un apel odată ce temporizatorul1 devine deversat și generează o întrerupere.
ISR (TIMER1_OVF_vect) {
În continuare, declarăm unele variabile locale ca fiind variabile statice și am început să alimentăm valorile la rezistența de captare și comparare.
static int num; caracter trig static; // modificați ciclul de funcționare în fiecare perioadă. OCR1A = lookUp1; OCR1B = lookUp2;
În cele din urmă, incrementăm contorul pentru a alimenta următoarele valori la captare și comparăm rezistențele, ceea ce marchează sfârșitul acestui cod.
if (++ num> = 200) {// Pre-increment num atunci verificați dacă este sub 200. num = 0; // Resetează num. trig = trig ^ 0b00000001; digitalWrite (13, trig); }
Testarea circuitului invertorului TL494 PWM
Pentru a testa circuitul, se folosește următoarea configurare.
- Baterie plumb-acid de 12V.
- Un transformator care are un robinet 6-0-6 și un 12-0-12 robinet
- Bec cu incandescență de 100W ca sarcină
- Multimetru Meco 108B + TRMS
- Multimetru Meco 450B + TRMS
Semnal de ieșire de la Arduino:
Odată ce am încărcat codul. Am măsurat semnalul SPWM de ieșire de la cei doi pini ai Arduino, care arată ca imaginea de mai jos,
Dacă mărim puțin, putem vedea ciclul de funcționare în continuă schimbare al undei PWM.
Apoi, imaginea de mai jos arată semnalul de ieșire de la transformator.
Circuitul invertorului SPWM în stare ideală:
După cum puteți vedea din imaginea de mai sus, acest circuit atrage aproximativ 13W în timp ce rulează ideal
Tensiune de ieșire fără încărcare:
Tensiunea de ieșire a circuitului invertorului este prezentată mai sus, aceasta este tensiunea care iese la ieșire fără nicio sarcină atașată.
Consum de energie de intrare:
Imaginea de mai sus arată puterea de intrare pe care o consumă atunci când este atașată o sarcină de 40W.
Consum de energie de ieșire:
Imaginea de mai sus arată puterea de ieșire consumată de acest circuit (sarcina este un bec cu incandescență de 40W)
Cu aceasta, încheiem partea de testare a circuitului. Puteți viziona videoclipul de mai jos pentru o demonstrație. Sper că ți-a plăcut acest articol și ai aflat puțin despre SPWM și tehnicile sale de implementare. Continuă să citești, continuă să înveți, continuă să construiești și te vom vedea în proiectul următor.