Satura rādītājs:

Arduino Sinewave invertoriem: 4 soļi
Arduino Sinewave invertoriem: 4 soļi

Video: Arduino Sinewave invertoriem: 4 soļi

Video: Arduino Sinewave invertoriem: 4 soļi
Video: как сделать простой инвертор 6000Вт, 4 трансформатора, синусоида, IRFz 44n, jlcpcb 2024, Novembris
Anonim
Arduino Sinewave invertoriem
Arduino Sinewave invertoriem

Šajā projektā esmu ģenerējis SPWM (sinusa viļņu impulsa platmodulēts) signālu no divām arduino pwm digitālajām izejām.

Tā kā, lai izveidotu šādu programmu, man ir jārunā par daudzām citām arduino funkcijām un īpašībām, viss projekts, ieskaitot osciloskopa attēlus, un dažādām frekvencēm, lūdzu, apmeklējiet manu vietni:

eprojectszone

1. solis: Pwm signāla ģenerēšana 50 Hz frekvencei

Lai ģenerētu 50 Hz signālu augstākā frekvencē, ir jāveic daži aprēķini. Arduino frekvences var būt 8 MHz, bet mēs vēlamies signālu ar mainīgu darba ciklu.

Lai saprastu arduino mainīgo darba ciklu veidus, varat izlasīt šīs pašas ziņas 1, 2 un 3 šīs daļas.

Pieņemsim, ka mūsu frekvence ir 50 Hz, kas nozīmē, ka laika periods ir 20 ms. Tātad 10 ms ir pusperiods. Šajos 10 ms mums ir jābūt daudziem impulsiem ar dažādiem darba cikliem, sākot ar maziem darba cikliem, signāla vidū mums ir maksimālie darba cikli un jāpabeidz arī ar nelieliem darba cikliem. Lai radītu sinusoidālu vilni, mēs izmantosim divas tapas vienu pozitīvs puscikls un viens negatīvs puscikls. Šajā rakstā mēs izmantojam 5. un 6. tapu, kas nozīmē taimeri 0.

Lai iegūtu vienmērīgu signālu, mēs izvēlamies fāzes pareizo pwm ar frekvenci 31372 Hz-skatīt iepriekšējo ziņu. Viena no lielākajām problēmām ir tā, kā mēs aprēķinām nepieciešamo darba ciklu katram impulsam. Tātad, tā kā mūsu frekvence ir f = 31372Hz, katra impulsa periods ir T = 1/31372 = 31,8 mums, tātad impulsu skaits pusciklā ir N = 10ms/31,8us = 314 impulsi. Tagad, lai aprēķinātu darba ciklu katram impulsam, mums ir y = sinx, bet šajā vienādojumā mums ir nepieciešami grādi, lai puse cikla būtu 180 ° 314 impulsiem. Katram impulsam mums ir 180/314 = 0,57deg/impulss. Tas nozīmē, ka katram impulsam mēs virzāmies uz priekšu ar 0,57 grādiem.

y ir darba cikls un x pozīcijas vērtība pusperiodā. sākumā x ir 0, pēc tam x = 0,57, x = 1,14 un tā tālāk, līdz x = 180.

ja mēs aprēķinām visas 314 vērtības, mēs iegūstam masīva 314 elementus (tips "int", lai to vieglāk aprēķināt arduino).

Šāds masīvs ir:

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, 250, 249, 249, 249, 249, 249, 248, 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};

Jūs varat redzēt, ka kā sinusa vilnis darba cikls ir zemākais pirmajā un pēdējā elementā un visaugstākais vidū.

2. darbība: Arduino programma mainīga darba ciklam

Arduino programma mainīga darba ciklam
Arduino programma mainīga darba ciklam

Augšējā attēlā mums ir mainīgi darba ciklu signāli ar vērtībām no masīva.

Bet kā dot šādu signālu ??

zemāk esošajā programmas daļā tiek izmantoti pārtraukumi, lai mainītu darba ciklu vērtības

sei (); // iespējot pārtraukumus

}

ISR (TIMER1_COMPA_vect) {// pārtraukt, kad 1. taimeris sakrīt ar OCR1A vērtību

if (i> 313 && OK == 0) {// galīgā vērtība no vektora 6. tapai

i = 0; // doties uz vektora (masīva) pirmo vērtību

Labi = 1; // iespējot 5. tapu

}

x = sinPWM ; // x ņem vērtību no vektora, kas atbilst pozīcijai i (i ir indeksēts ar nulli)-darba cikla vērtība

i = i+1; // pāriet uz nākamo pozīciju

}

3. darbība: pārmaiņus 50 Hz Arduino tapas

Mainīgs ar 50 Hz Arduino tapām
Mainīgs ar 50 Hz Arduino tapām

Tā kā katra tapa rada tikai pusi darba cikla, lai izveidotu pilnu sinusoidālo viļņu, mēs izmantojam divas tapas, kas mainās viena pēc otras pēc precīzām 10 sekundēm (50 Hz). Šī tapu maiņa tiek veikta masīva beigās- pēc tam, kad pieņemsim, ka tapa 5 ir ģenerējusi 314 impulsus, šī tapa ir izslēgta un iespējota 6. tapa, kas padara to pašu, bet negatīvajam darba ciklam.

Tā kā arduino var ģenerēt tikai pozitīvus signālus, h tiltā tiek veikts negatīvs darba cikls- par to varat lasīt šeit

Spraudņu nomaiņas programma:

sei (); // iespējot pārtraukumus

}

ISR (TIMER1_COMPA_vect) {// pārtraukt, kad 1. taimeris sakrīt ar OCR1A vērtību

if (i> 313 && OK == 0) {// galīgā vērtība no vektora 6. tapai

i = 0; // pāriet uz vektora pirmo vērtību

Labi = 1; // iespējot 5. tapu

}

if (i> 313 && OK == 1) {// galīgā vērtība no vektora 5. tapai

i = 0; // pāriet uz vektora pirmo vērtību

Labi = 0; // iespējot 6. tapu

}

x = sinPWM ; // x ņem vērtību no vektora, kas atbilst pozīcijai i (i ir indeksēts ar nulli)

i = i+1; // pāriet uz nākamo pozīciju

ja (labi == 0) {

OCR0B = 0; // izveidojiet tapu 5 0

OCR0A = x; // iespējojiet tapu 6 atbilstošajam darba ciklam

ja (labi == 1) {

OCR0A = 0; // izveidojiet tapu 6 0

OCR0B = x; // iespējojiet tapu 5 atbilstošajam darba ciklam

}

}

4. solis: H tilta vadīšana un Pwm signāla filtrēšana

No arduino iegūtie signāli ir invertora aplikāciju vadības daļa, jo abi ir pozitīvi. Lai izveidotu pilnu sinusa vilni un praktisku invertoru, mums jāizmanto h tilts un jātīra pwm zemas caurlaidības filtrs.

Šeit ir parādīts H tilts.

Zemas caurlaidības filtrs pārbaudīts ar maziem maiņstrāvas motoriem-šeit.

Ieteicams: