Obsah:

Arduino sinewave pre meniče: 4 kroky
Arduino sinewave pre meniče: 4 kroky

Video: Arduino sinewave pre meniče: 4 kroky

Video: Arduino sinewave pre meniče: 4 kroky
Video: как сделать простой инвертор 3000W, синусоида, 16 mosfet, IRFz 44n 2024, November
Anonim
Arduino sinewave pre meniče
Arduino sinewave pre meniče

V tomto projekte som vygeneroval signál SPWM (sínusový impulz so širokou moduláciou) z dvoch digitálnych výstupov arduino pwm.

Pretože na to, aby som mohol vytvoriť taký program, musím hovoriť o mnohých ďalších funkciách a vlastnostiach arduina, celého projektu vrátane obrázkov osciloskopu a pre rôzne frekvencie navštívte moju webovú stránku:

eprojectszone

Krok 1: Generovanie signálu Pwm pre 50 Hz

Na generovanie signálu 50 Hz na vyššej frekvencii je potrebné vykonať niekoľko výpočtov. Frekvencie z arduina môžu byť 8 MHz, ale chceme signál s premenlivým pracovným cyklom.

Aby ste pochopili typy variabilných pracovných cyklov arduina, môžete si prečítať tieto 3 časti toho istého príspevku 1, 2 a 3.

Predpokladajme, že naša frekvencia je 50 Hz, čo znamená, že časové obdobie je 20 ms. Takže 10 ms je pol cyklu. V týchto 10 ms potrebujeme veľa impulzov s rôznymi pracovnými cyklami počínajúc malými pracovnými cyklami, v strede signálu máme maximálne pracovné cykly a skončíme tiež s malými pracovnými cyklami. Na generovanie sínusovej vlny použijeme dva piny jeden na pozitívny polovičný cyklus a jeden pre negatívny polovičný cyklus. V našom príspevku na to používame piny 5 a 6, čo znamená časovač 0.

Pre hladký signál vyberáme fázovo správne pwm na frekvencii 31372 Hz-pozri predchádzajúci príspevok. Jedným z najväčších problémov je, že vypočítame potrebný pracovný cyklus pre každý impulz. Pretože naša frekvencia je f = 31372 Hz, perióda pre každý impulz je T = 1/31372 = 31,8 us, takže počet impulzov pre pol cyklu je N = 10 ms/31,8 us = 314 impulzov. Teraz na výpočet pracovného cyklu pre každý impulz máme y = sinx, ale v tejto rovnici potrebujeme stupne, takže polovičný cyklus má 180 stupňov pre 314 impulzov. Pre každý impulz máme 180/314 = 0,57 stupňov/impulz. To znamená, že pri každom pulze sa pohneme dopredu o 0,57 stupňa.

y je pracovný cyklus a x hodnota polohy v polovičnom pracovnom cykle. najskôr x je 0, potom x = 0,57, x = 1,14 a tak ďalej, až x = 180.

ak vypočítame všetkých 314 hodnôt, získame pole 314 prvkov (typ „int“bude jednoduchšie vypočítať arduino).

Takéto pole je:

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};

Môžete vidieť, že ako sínusová vlna je pracovný cyklus najnižší v prvom a poslednom prvku a najvyšší v strede.

Krok 2: Program Arduino pre variabilný pracovný cyklus

Program Arduino pre variabilný pracovný cyklus
Program Arduino pre variabilný pracovný cyklus

Na obrázku vyššie máme signály s premenlivými pracovnými cyklami s hodnotami z poľa.

Ale ako vytvoriť taký signál ??

časť nižšie uvedeného programu používa na zmenu hodnôt pracovných cyklov prerušenia

sei (); // povoliť prerušenia

}

ISR (TIMER1_COMPA_vect) {// prerušenie, keď sa časovač 1 zhoduje s hodnotou OCR1A

if (i> 313 && OK == 0) {// konečná hodnota z vektora pre pin 6

i = 0; // prechod na prvú hodnotu vektora (pole)

OK = 1; // povoľte kolík 5

}

x = sinPWM ; // x vezme hodnotu z vektora zodpovedajúceho pozícii i (i je nula indexovaná)-hodnota pracovného cyklu

i = i+1; // prejdite na ďalšiu pozíciu

}

Krok 3: Striedanie na 50 Hz pinoch Arduino

Striedavo na 50 Hz piny Arduino
Striedavo na 50 Hz piny Arduino

Pretože každý pin generuje iba polovičný pracovný cyklus na vytvorenie plnej sínusovej vlny, používame dva piny, ktoré sa striedajú jeden po druhom presne po 10 ms (pre 50 Hz). Táto zmena pinov sa vykoná na konci poľa- potom, keď povedzme, že kolík 5 vygeneroval 314 impulzov, tento kolík sa vypne a povolí kolík 6, čo robí to isté, ale pre negatívny pracovný cyklus.

Pretože arduino môže generovať iba pozitívne signály, negatívny pracovný cyklus sa vytvára v mostíku h- o tom si môžete prečítať tu

Program na výmenu kolíkov:

sei (); // povoliť prerušenia

}

ISR (TIMER1_COMPA_vect) {// prerušenie, keď sa časovač 1 zhoduje s hodnotou OCR1A

if (i> 313 && OK == 0) {// konečná hodnota z vektora pre pin 6

i = 0; // prejde na prvú hodnotu vektora

OK = 1; // povoľte kolík 5

}

if (i> 313 && OK == 1) {// konečná hodnota z vektora pre pin 5

i = 0; // prejde na prvú hodnotu vektora

OK = 0; // povoľte kolík 6

}

x = sinPWM ; // x vezme hodnotu z vektora zodpovedajúceho pozícii i (i je nula indexovaná)

i = i+1; // prejdite na ďalšiu pozíciu

ak (OK == 0) {

OCR0B = 0; // urobte kolík 5 0

OCR0A = x; // povolenie kolíka 6 na príslušný pracovný cyklus

ak (OK == 1) {

OCR0A = 0; // urobte kolík 6 0

OCR0B = x; // povoľte kolík 5 do zodpovedajúceho pracovného cyklu

}

}

Krok 4: Jazda na moste H a filtrovanie signálu Pwm

Signály získané z arduina sú riadiacou časťou aplikácií invertora, pretože oba sú pozitívne. Aby sme vytvorili plnú sínusovú vlnu a praktický invertor, musíme použiť mostík h a vyčistiť pwm dolnopriepustný filter.

Tu je predstavený H-most.

Nízkopriepustný filter testovaný s malými striedavými motormi-tu.

Odporúča: