Tartalomjegyzék:

Arduino Sinewave inverterekhez: 4 lépés
Arduino Sinewave inverterekhez: 4 lépés

Videó: Arduino Sinewave inverterekhez: 4 lépés

Videó: Arduino Sinewave inverterekhez: 4 lépés
Videó: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, November
Anonim
Arduino Sinewave inverterekhez
Arduino Sinewave inverterekhez

Ebben a projektben SPWM (szinuszhullámú impulzus széles modulált) jelet generáltam két arduino pwm digitális kimenetből.

Mivel egy ilyen program elkészítéséhez az arduino számos más funkciójáról és tulajdonságairól kell beszélnem, a teljes projekt, beleértve az oszcilloszkóp képeket és a különböző frekvenciákat, kérjük, látogasson el webhelyemre:

eprojectszone

1. lépés: Pwm jel generálása 50 Hz -re

50 Hz -es jel magasabb frekvencián történő előállításához szükséges néhány számítást elvégezni. Az arduino frekvenciái 8 MHz -en lehetnek, de változó teljesítményciklusú jelet szeretnénk.

Az arduino változó munkaciklusainak megértéséhez olvassa el ugyanazon bejegyzés 1, 2 és 3 e részét.

Tegyük fel, hogy a frekvenciánk 50 Hz, ami azt jelenti, hogy az időtartam 20 ms. Tehát 10 ms fél ciklus időszak. Azokban a 10 ms -ban sok impulzusra van szükségünk, különböző munkaciklusokkal, kis munkaciklusokkal kezdve, a jel közepén maximális terhelési ciklusokkal rendelkezünk, és kis munkaciklusokkal is befejezzük. Szinuszhullám létrehozásához két tüskét használunk pozitív félciklus és egy negatív félciklus. Bejegyzésünkben ehhez az 5 -ös és 6 -os csapokat használjuk, ami 0 -as időzítőt jelent.

A sima jel érdekében a fázis megfelelő pwm-t választjuk 31372 Hz frekvencián-lásd az előző bejegyzést. Az egyik legnagyobb probléma az, hogy hogyan számoljuk ki az egyes impulzusokhoz szükséges működési ciklust. Tehát, mivel frekvenciánk f = 31372Hz, az egyes impulzusok periódusa T = 1/31372 = 31,8 us, tehát az impulzusok száma egy fél ciklusban N = 10ms/31,8us = 314 impulzus. Most az egyes impulzusok működési ciklusának kiszámításához y = sinx, de ebben az egyenletben fokokra van szükség, így a félciklus 180 fok 314 impulzus esetén. Minden impulzushoz 180/314 = 0,57deg/impulzus van. Ez azt jelenti, hogy minden egyes impulzushoz 0,57 fokgal haladunk előre.

y a terhelési ciklus, és x a pozíció értéke fél munkaciklusban. először x 0, majd x = 0,57, x = 1,14 és így tovább, amíg x = 180.

ha mind a 314 értéket kiszámítjuk, akkor egy 314 tömb elemet kapunk ("int" típusú, hogy az arduino könnyebben kiszámítsa).

Ilyen tömb:

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

Látható, hogy a szinuszhullámhoz hasonlóan a munkaciklus a legalacsonyabb az első és az utolsó elemnél, és a legmagasabb a közepén.

2. lépés: Arduino program változó terhelési ciklushoz

Arduino program a változó terhelési ciklushoz
Arduino program a változó terhelési ciklushoz

A fenti képen változó teljesítményciklusú jelek vannak a tömb értékeivel.

De hogyan lehet ilyen jelet adni ??

a program alábbi része megszakításokkal módosítja a munkaciklusok értékeit

sei (); // engedélyezze a megszakításokat

}

ISR (TIMER1_COMPA_vect) {// megszakítás, amikor az 1. időzítő egyezik az OCR1A értékkel

if (i> 313 && OK == 0) {// végső érték a 6. tű vektorból

i = 0; // ugrás a vektor (tömb) első értékére

OK = 1; // engedélyezze az 5. tűt

}

x = sinPWM ; // x vegye ki az értéket az i pozíciónak megfelelő vektorból (i nulla indexelt)-a munkaciklus értéke

i = i+1; // ugrás a következő pozícióra

}

3. lépés: Váltás 50 Hz -es Arduino Pins -en

Váltva 50 Hz -es Arduino Pins -en
Váltva 50 Hz -es Arduino Pins -en

Mivel minden csap csak egy fél ciklusot generál a teljes szinuszhullám létrehozásához, két csapot használunk, amelyek egymást váltják pontosan 10 másodperc után (50 Hz -en). Ez a csapváltás a tömb végén történik- miután tegyük fel, hogy az 5. tüske 314 impulzust generált, ez a csap ki van kapcsolva, és engedélyezi a 6-os csapot, ami ugyanazt teszi, de a negatív munkaciklusra.

Mivel az arduino csak pozitív jeleket tud generálni, a negatív munkaciklus a h bridge-ben készül- erről itt olvashat

A csapok cseréjének programja:

sei (); // engedélyezze a megszakításokat

}

ISR (TIMER1_COMPA_vect) {// megszakítás, amikor az 1. időzítő egyezik az OCR1A értékkel

if (i> 313 && OK == 0) {// végső érték a 6. tű vektorból

i = 0; // ugrás a vektor első értékére

OK = 1; // engedélyezze az 5. tűt

}

if (i> 313 && OK == 1) {// végső érték az 5. tű vektorból

i = 0; // ugrás a vektor első értékére

OK = 0; // engedélyezze a 6. tűt

}

x = sinPWM ; // x vegye ki az értéket az i pozíciónak megfelelő vektorból (i nulla indexelt)

i = i+1; // ugrás a következő pozícióra

ha (OK == 0) {

OCR0B = 0; // készítse el az 5 0 tűt

OCR0A = x; // engedélyezze a 6. csapot a megfelelő terhelési ciklushoz

ha (OK == 1) {

OCR0A = 0; // készítse el a 6 0 -as érintkezőt

OCR0B = x; // engedélyezze az 5. tüskét a megfelelő terhelési ciklushoz

}

}

4. lépés: H -híd vezetése és a Pwm -jel szűrése

Az arduino által kapott jelek az inverter alkalmazás vezérlő részei, mivel mindkettő pozitív. Ahhoz, hogy teljes szinuszhullámot és praktikus invertert készítsünk, h -hidat kell használnunk, és a pwm -t aluláteresztő szűrővel kell tisztítani.

A H-híd itt látható.

Az aluláteresztő szűrőt kis AC motorokkal tesztelték-itt.

Ajánlott: