Taula de continguts:

Arduino Sinewave per a inversors: 4 passos
Arduino Sinewave per a inversors: 4 passos

Vídeo: Arduino Sinewave per a inversors: 4 passos

Vídeo: Arduino Sinewave per a inversors: 4 passos
Vídeo: How pure sine wave inverter works / How to program SPWM microcontroller / Pulse width modulation PWM 2024, Desembre
Anonim
Arduino Sinewave per a inversors
Arduino Sinewave per a inversors

En aquest projecte he generat un senyal SPWM (pols d'ona sinusoïdal modulada) a partir de dues sortides digitals arduino pwm.

Com que per fer aquest programa he de parlar de moltes altres funcions i propietats de l’arduino, el projecte complet incloent imatges d’oscil·loscopi i per a diferents freqüències, si us plau visiteu el meu lloc web:

eprojectszone

Pas 1: Generació del senyal Pwm per a 50Hz

Per generar un senyal de 50Hz a major freqüència és necessari fer alguns càlculs. Les freqüències d'arduino poden ser a 8 MHz, però volem un senyal amb cicle de treball variable.

Per entendre els tipus de cicles de treball variables d’arduino, podeu llegir aquestes 3 parts del mateix post 1, 2 i 3.

Suposem que la nostra freqüència és de 50 Hz, és a dir, el període de temps és de 20 ms. Per tant, 10 ms és un període de mig cicle. En aquests 10 ms hem de tenir molts impulsos amb cicles de treball diferents, començant per cicles de treball petits, al mig del senyal tenim cicles de treball màxims i acabem també amb cicles de treball petits. Per generar una ona sinusoïdal utilitzarem dos pins un per mig cicle positiu i un de mig cicle negatiu. A la nostra publicació per a això fem servir els pins 5 i 6, que vol dir temporitzador 0.

Per a un senyal suau, escollim la fase correcta de pwm a una freqüència de 31372 Hz (veure publicació anterior). Un dels problemes més grans és que calculem el cicle de treball necessari per a cada impuls. Per tant, com que la nostra freqüència és f = 31372Hz, el període per a cada impuls és T = 1/31372 = 31,8 us, de manera que el nombre d’impulsos per a mig cicle és N = 10ms / 31,8us = 314 impulsos. Ara per calcular el cicle de treball per a cada pols tenim y = sinx, però en aquesta equació necessitem graus, de manera que el mig cicle té 180 graus per 314 polsos. Per a cada pols tenim 180/314 = 0,57deg / pols. Això significa que per cada pols avancem amb 0,57 graus.

y és el cicle de treball i x el valor de la posició en mig cicle de treball. al principi x és 0, després que x = 0,57, x = 1,14 i així successivament fins a x = 180.

si calculem tots els 314 valors obtindrem una matriu de 314 elements (escriviu "int" per calcular-lo més fàcilment per arduino).

Aquesta matriu és:

int sinPWM = {1, 2, 5, 7, 10, 12, 15, 17, 19, 22, 24, 27, 30, 32, 34, 37, 39, 42, 44, 47, 49, 52, 54, 57, 59, 61, 64, 66, 69, 71, 73, 76, 78, 80, 83, 85, 88, 90, 92, 94, 97, 99, 101, 103, 106, 108, 110, 113, 115, 117, 119, 121, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 169, 171, 173, 175, 177, 178, 180, 182, 184, 185, 187, 188, 190, 192, 193, 195, 196, 198, 199, 201, 202, 204, 205, 207, 208, 209, 211, 212, 213, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 249, 249, 249, 249, 249, 248, 248, 248, 248, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 240, 240, 239, 238, 237, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 21 6, 215, 213, 212, 211, 209, 208, 207, 205, 204, 202, 201, 199, 198, 196, 195, 193, 192, 190, 188, 187, 185, 184, 182, 180, 178, 177, 175, 173, 171, 169, 168, 166, 164, 162, 160, 158, 156, 154, 152, 150, 148, 146, 144, 142, 140, 138, 136, 134, 132, 130, 128, 126, 124, 121, 119, 117, 115, 113, 110, 108, 106, 103, 101, 99, 97, 94, 92, 90, 88, 85, 83, 80, 78, 76, 73, 71, 69, 66, 64, 61, 59, 57, 54, 52, 49, 47, 44, 42, 39, 37, 34, 32, 30, 27, 24, 22, 19, 17, 15, 12, 10, 7, 5, 2, 1};

Podeu veure que, com una ona sinusoïdal, el cicle de treball és més baix al primer i últim element i més alt al mig.

Pas 2: Programa Arduino per al cicle de treball variable

Programa Arduino per al cicle de treball variable
Programa Arduino per al cicle de treball variable

A la imatge superior tenim senyals de cicles de treball variables amb valors de la matriu.

Però, com fer aquest senyal ??

la part del programa següent utilitza les interrupcions per canviar els valors dels cicles de treball

sei (); // habilita les interrupcions

}

ISR (TIMER1_COMPA_vect) {// interrompre quan el temporitzador 1 coincideix amb el valor OCR1A

if (i> 313 && OK == 0) {// valor final del vector per al pin 6

i = 0; // anar al primer valor del vector (matriu)

OK = 1; // activa el pin 5

}

x = sinPWM ; // x pren el valor del vector corresponent a la posició i (i és zero indexat) -valor del cicle de treball

i = i + 1; // passa a la següent posició

}

Pas 3: Alternar els pins Arduino a 50Hz

Alternant a 50Hz pins Arduino
Alternant a 50Hz pins Arduino

Perquè cada pin genera només un cicle de mitjà treball per fer una ona sinusoïdal completa, fem servir dos pins que s’alternen un darrere l’altre després de 10 segons exactes (per 50Hz). Aquest canvi de pins es realitza al final de la matriu; després de dir que el pin 5 ha generat 314 polsos, aquest pin està apagat i activat el pin 6, cosa que fa el mateix però per al cicle de treball negatiu.

Com que arduino només pot generar senyals positius, el cicle de treball negatiu es fa al pont h; aquí podeu llegir-ne

El programa per canviar els pins:

sei (); // habilita les interrupcions

}

ISR (TIMER1_COMPA_vect) {// interrompre quan el temporitzador 1 coincideix amb el valor OCR1A

if (i> 313 && OK == 0) {// valor final del vector per al pin 6

i = 0; // anar al primer valor del vector

OK = 1; // activa el pin 5

}

if (i> 313 && OK == 1) {// valor final del vector per al pin 5

i = 0; // anar al primer valor del vector

OK = 0; // activa el pin 6

}

x = sinPWM ; // x pren el valor del vector corresponent a la posició i (i és zero indexat)

i = i + 1; // passa a la següent posició

if (D'acord == 0) {

OCR0B = 0; // fes el pin 5 0

OCR0A = x; // habilita el pin 6 al cicle de treball corresponent

if (D'acord == 1) {

OCR0A = 0; // fes el pin 6 0

OCR0B = x; // habilita el pin 5 al cicle de treball corresponent

}

}

Pas 4: conduir un pont H i filtrar el senyal Pwm

Els senyals obtinguts d’arduino són la part de control per a aplicacions d’inversors perquè tots dos són positius. Per fer una ona sinusoïdal completa i un pràctic inversor hem d’utilitzar un pont h i netejar el pwm un filtre de pas baix.

El pont H es presenta aquí.

El filtre de pas baix provat amb petits motors AC és aquí.

Recomanat: