Obsah:

Arduino Sinewave pro střídače: 4 kroky
Arduino Sinewave pro střídače: 4 kroky

Video: Arduino Sinewave pro střídače: 4 kroky

Video: Arduino Sinewave pro střídače: 4 kroky
Video: DIY 1kW sinusový měnič 12V na 220v EGS002, jlcpcb 2024, Červenec
Anonim
Arduino Sinewave pro střídače
Arduino Sinewave pro střídače

V tomto projektu jsem vygeneroval signál SPWM (sinusový pulsně široce modulovaný) ze dvou digitálních výstupů arduino pwm.

Protože, abych vytvořil takový program, musím mluvit o mnoha dalších funkcích a vlastnostech arduina, celého projektu, včetně obrázků osciloskopu a pro různé frekvence, navštivte mé webové stránky:

eprojectszone

Krok 1: Generování signálu Pwm pro 50 Hz

Pro generování signálu 50 Hz na vyšší frekvenci je nutné provést nějaké výpočty. Frekvence z arduina mohou být na 8 MHz, ale my chceme signál s proměnným pracovním cyklem.

Chcete -li porozumět typům variabilních pracovních cyklů arduina, můžete si přečíst tyto 3 části stejného příspěvku 1, 2 a 3.

Předpokládejme, že naše frekvence je 50 Hz, což znamená, že časové období je 20 ms. 10ms je tedy polovina cyklu. V těchto 10 ms potřebujeme mít mnoho pulzů s různými pracovními cykly počínaje malými pracovními cykly, uprostřed signálu máme maximální pracovní cykly a skončíme také s malými pracovními cykly. Pro generování sinusové vlny použijeme dva piny jeden pro pozitivní poloviční cyklus a jeden pro negativní poloviční cyklus. V našem příspěvku k tomu používáme piny 5 a 6, což znamená časovač 0.

Pro plynulý signál volíme fázově správný pwm na frekvenci 31372 Hz-viz předchozí příspěvek. Jedním z největších problémů je, že vypočítáme potřebný pracovní cyklus pro každý puls. Protože naše frekvence je f = 31372 Hz, perioda pro každý impuls je T = 1/31372 = 31,8 us, takže počet pulzů pro poloviční cyklus je N = 10 ms/31,8 us = 314 pulzů. Nyní pro výpočet pracovního cyklu pro každý impuls máme y = sinx, ale v této rovnici potřebujeme stupně, takže poloviční cyklus má 180 stupňů pro 314 pulzů. Pro každý puls máme 180/314 = 0,57 stupňů/puls. To znamená, že pro každý puls se pohybujeme vpřed o 0,57 stupňů.

y je pracovní cyklus a x hodnota polohy v polovičním pracovním cyklu. nejprve x je 0, poté x = 0,57, x = 1,14 a tak dále, dokud x = 180.

vypočítáme -li všech 314 hodnot, získáme pole 314 prvků (typ „int“vypočítá snáze arduino).

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

Vidíte, že jako sinusová vlna je pracovní cyklus nejnižší u prvního a posledního prvku a nejvyšší uprostřed.

Krok 2: Program Arduino pro variabilní pracovní cyklus

Program Arduino pro variabilní pracovní cyklus
Program Arduino pro variabilní pracovní cyklus

Na obrázku výše máme signály proměnných pracovních cyklů s hodnotami z pole.

Jak ale takový signál vytvořit ??

část níže uvedeného programu používá přerušení ke změně hodnot pracovních cyklů

sei (); // povolit přerušení

}

ISR (TIMER1_COMPA_vect) {// přerušení, když se časovač 1 shoduje s hodnotou OCR1A

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

i = 0; // přejít na první hodnotu vektoru (pole)

OK = 1; // povolit pin 5

}

x = sinPWM ; // x vezme hodnotu z vektoru odpovídající poloze i (i je nula indexována)-hodnota pracovního cyklu

i = i+1; // přejděte na další pozici

}

Krok 3: Střídavě na 50Hz pinech Arduino

Střídavě na 50Hz pinech Arduino
Střídavě na 50Hz pinech Arduino

Protože každý pin generuje pouze poloviční pracovní cyklus k vytvoření plné sinusové vlny, používáme dva piny, které se střídají jeden po druhém po přesných 10 ms (pro 50 Hz). Tato změna pinů se provádí na konci pole- poté, co řekněme, že pin 5 vygeneroval 314 pulzů, tento pin se vypne a aktivuje pin 6, což dělá totéž, ale pro záporný pracovní cyklus.

Protože arduino může generovat pouze pozitivní signály, je v h můstku vytvořen negativní pracovní cyklus- zde si o tom můžete přečíst

Program pro změnu pinů:

sei (); // povolit přerušení

}

ISR (TIMER1_COMPA_vect) {// přerušení, když se časovač 1 shoduje s hodnotou OCR1A

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

i = 0; // přejde na první hodnotu vektoru

OK = 1; // povolit pin 5

}

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

i = 0; // přejde na první hodnotu vektoru

OK = 0; // povolit pin 6

}

x = sinPWM ; // x vezme hodnotu z vektoru odpovídající poloze i (i je nula indexována)

i = i+1; // přejděte na další pozici

pokud (OK == 0) {

OCR0B = 0; // vytvoření kolíku 5 0

OCR0A = x; // povolit pin 6 na odpovídající pracovní cyklus

pokud (OK == 1) {

OCR0A = 0; // vytvoření kolíku 6 0

OCR0B = x; // povolit pin 5 na odpovídající pracovní cyklus

}

}

Krok 4: Řízení mostu H a filtrování signálu Pwm

Signály získané z arduina jsou řídicí částí pro invertorové aplikace, protože oba jsou kladné. Abychom vytvořili plnou sinusovou vlnu a praktický invertor, musíme použít h můstek a vyčistit pwm dolní propust.

Zde je představen H-můstek.

Nízkopásmový filtr testován s malými střídavými motory-zde.

Doporučuje: