Talaan ng mga Nilalaman:

Arduino Sinewave para sa Inverters: 4 Hakbang
Arduino Sinewave para sa Inverters: 4 Hakbang

Video: Arduino Sinewave para sa Inverters: 4 Hakbang

Video: Arduino Sinewave para sa Inverters: 4 Hakbang
Video: как сделать простой инвертор 4500W, синусоида, 8 MOSFET, IRFz 44n, jlcpcb 2024, Hulyo
Anonim
Arduino Sinewave para sa Inverters
Arduino Sinewave para sa Inverters

Sa proyektong ito nakabuo ako ng isang SPWM (sine wave pulse wide modulated) signal mula sa dalawang arduino pwm digital output.

Dahil upang makagawa ng tulad ng isang programa kailangan kong pag-usapan ang tungkol sa maraming iba pang mga pag-andar at pag-aari ng arduino ang buong proyekto kasama ang mga imahe ng oscilloscope at para sa iba't ibang mga frequency mangyaring bisitahin ang aking website:

eprojectszone

Hakbang 1: Pagbubuo ng Pwm Signal para sa 50Hz

Upang makabuo ng isang 50Hz signal sa mas mataas na dalas ito ay kinakailangan upang gumawa ng ilang mga kalkulasyon. Ang mga frequency mula sa arduino ay maaaring nasa 8MHz, ngunit nais namin ang isang senyas na may variable cycle ng tungkulin.

Upang maunawaan ang mga uri ng variable cycle ng arduino maaari mong mabasa ang 3 bahagi ng parehong post na 1, 2 at 3.

Ipagpalagay natin na ang ating dalas ay 50Hz na nangangahulugang ang tagal ng panahon ay 20ms. Kaya't ang 10ms ay kalahating ikot ng panahon. Sa 10ms na iyon kailangan nating magkaroon ng maraming mga pulso na may iba't ibang mga cycle ng tungkulin na nagsisimula sa maliit na mga cycle ng tungkulin, sa gitna ng signal mayroon kaming maximum na mga cycle ng tungkulin at tapusin din na may maliit na mga cycle ng tungkulin. Upang makabuo ng isang sine wave gagamitin namin ang dalawang mga pin ng isa para sa positibong kalahating ikot at isa para sa negatibong kalahating ikot. Sa aming post para dito gumagamit kami ng mga pin na 5 at 6 na nangangahulugang Timer 0.

Para sa isang maayos na signal pipiliin namin ang tamang phase ng pwm sa dalas na 31372 Hz-tingnan ang nakaraang post. Ang isa sa pinakamalaking problema ay kung paano namin makalkula ang kinakailangang cycle ng tungkulin para sa bawat pulso. Kaya, dahil ang aming dalas ay f = 31372Hz ang panahon para sa bawat pulso ay T = 1/31372 = 31.8 sa amin, kaya ang bilang ng mga pulso para sa isang kalahating ikot ay N = 10ms / 31.8us = 314 pulso. Ngayon upang kalkulahin ang cycle ng tungkulin para sa bawat pulso mayroon kaming y = sinx, ngunit sa equation na ito kailangan namin ng degree kaya't ang kalahating ikot ay mayroong 180deg para sa 314 na pulso. Para sa bawat pulso mayroon kaming 180/314 = 0.57deg / pulso. Nangangahulugan iyon para sa bawat pulso na sumusulong sa 0.57deg.

y ay ang cycle ng tungkulin at x ang halaga ng posisyon sa kalahating duty cycle. sa una x ay 0, afetr na x = 0.57, x = 1.14 at iba pa hanggang sa x = 180.

kung kinakalkula namin ang lahat ng 314 na halaga nakakakuha kami ng isang array 314 na mga elemento (i-type ang "int" upang makalkula nang mas madali ng arduino).

Ang nasabing array ay:

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

Maaari mong makita na tulad ng isang alon ng sine ang duty cycle ay pinakamababa sa una at huling elemento at pinakamataas sa gitna.

Hakbang 2: Arduino Program para sa Variable Duty Cycle

Arduino Program para sa Variable Duty Cycle
Arduino Program para sa Variable Duty Cycle

Sa imahe sa itaas mayroon kaming mga variable duty cycle cycle na may mga halaga mula sa array.

Ngunit paano gumawa ng ganoong senyas ??

ang bahagi ng programa sa ibaba ay gumagamit ng mga nakakagambala upang baguhin ang mga halaga ng mga cycle ng tungkulin

sei (); // paganahin ang mga pagkagambala

}

ISR (TIMER1_COMPA_vect) {// makagambala kapag tumugma ang timer 1 sa halagang OCR1A

kung (i> 313 && OK == 0) {// huling halaga mula sa vector para sa pin 6

i = 0; // pumunta sa unang halaga ng vector (array)

OK = 1; // paganahin ang pin 5

}

x = sinPWM ; // x kunin ang halaga mula sa vector na naaayon sa posisyon i (ako ay zero index) -value ng duty cycle

i = i + 1; // pumunta sa susunod na posisyon

}

Hakbang 3: Kahalili sa 50Hz Arduino Pins

Kahalili sa 50Hz Arduino Pins
Kahalili sa 50Hz Arduino Pins

Dahil sa bawat pin ay bumubuo lamang ng isang kalahating duty cycle upang makagawa ng isang buong sine wave na ginagamit namin ng dalawang mga pin na kahalili isa-isa pagkatapos ng eksaktong 10mseconds (para sa 50Hz). Ang pagbabago ng mga pin na ito ay ginawa sa pagtatapos ng array- pagkatapos sabihin nating ang pin 5 ay nakabuo ng 314 pulso ang pin na ito ay pinapatay at pinagana ang pin 6 na gumagawa ng parehong bagay ngunit para sa negatibong cycle ng tungkulin.

Dahil ang arduino ay makakabuo lamang ng mga positibong signal na negatibong pag-ikot ng tungkulin ay ginawa sa h tulay- maaari mong mabasa dito tungkol dito

Ang programa para sa pagbabago ng mga pin:

sei (); // paganahin ang mga pagkagambala

}

ISR (TIMER1_COMPA_vect) {// makagambala kapag tumugma ang timer 1 sa halagang OCR1A

kung (i> 313 && OK == 0) {// huling halaga mula sa vector para sa pin 6

i = 0; // pumunta sa unang halaga ng vector

OK = 1; // paganahin ang pin 5

}

kung (i> 313 && OK == 1) {// huling halaga mula sa vector para sa pin 5

i = 0; // pumunta sa unang halaga ng vector

OK = 0; // paganahin ang pin 6

}

x = sinPWM ; // x kunin ang halaga mula sa vector na naaayon sa posisyon na i (ako ay zero index)

i = i + 1; // pumunta sa susunod na posisyon

kung (OK == 0) {

OCR0B = 0; // gumawa ng pin 5 0

OCR0A = x; // paganahin ang pin 6 sa kaukulang cycle ng tungkulin

kung (OK == 1) {

OCR0A = 0; // make pin 6 0

OCR0B = x; // paganahin ang pin 5 sa kaukulang cycle ng tungkulin

}

}

Hakbang 4: Pagmamaneho ng isang H Bridge at Pag-filter ng Pwm Signal

Ang mga signal na nakuha mula sa arduino ay ang bahagi ng kontrol para sa mga aplication ng inverter dahil pareho ang positibo. Upang makagawa ng isang buong sine wave at isang praktikal na inverter kailangan naming gumamit ng isang h tulay at i-clear ang pwm isang mababang pass filter.

Ang H-tulay ay ipinakita dito.

Sinubukan ang low-pass filter na may maliit na Ac Motors-dito.

Inirerekumendang: