Talaan ng mga Nilalaman:
- Hakbang 1: Pagbubuo ng Pwm Signal para sa 50Hz
- Hakbang 2: Arduino Program para sa Variable Duty Cycle
- Hakbang 3: Kahalili sa 50Hz Arduino Pins
- Hakbang 4: Pagmamaneho ng isang H Bridge at Pag-filter ng Pwm Signal
Video: Arduino Sinewave para sa Inverters: 4 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:14
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
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
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:
Temperatura Sensor para sa Arduino Inilapat para sa COVID 19: 12 Mga Hakbang (na may Mga Larawan)
Temperatura Sensor para sa Arduino Inilapat para sa COVID 19: Ang sensor ng temperatura para sa Arduino ay isang pangunahing elemento kapag nais naming masukat ang temperatura ng isang processor ng katawan ng tao. Ang sensor ng temperatura na may Arduino ay dapat makipag-ugnay o malapit upang matanggap at masukat ang antas ng init. Ganun
Relay Board para sa Arduino para sa Mas kaunti sa $ 8 .: 5 Mga Hakbang
Relay Board para sa Arduino para sa Mas kaunti sa $ 8 .: Kumusta mga kaibigan, ngayon sasabihin ko sa iyo kung paano gumawa ng isang relay board para sa Arduino nang mas mababa sa $ 8. Sa circuit na ito, hindi kami gagamit ng anumang IC o transistor. Kaya, gawin natin ito
Gumamit ng 1 Analog Input para sa 6 na Mga Pindutan para sa Arduino: 6 Mga Hakbang
Gumamit ng 1 Analog Input para sa 6 na Mga Pindutan para sa Arduino: Madalas akong nagtaka kung paano ako makakakuha ng mas maraming mga Digital Input para sa aking Arduino. Kamakailan lamang naisip ko na dapat kong magamit ang isa sa Mga Analog Input para sa pagdala ng maraming mga digital input. Mabilis akong naghanap at nahanap kung nasaan ang mga tao
Ang Pag-ibig ay Para sa Mga Manlalaro, ang Arduino Project na Ginawa para sa Singles: 5 Hakbang
Ang Pag-ibig ay Para sa Mga Manlalaro, ang Arduino Project na Ginawa para sa Mga Singles: Ang Instructable na Ito ay tungkol sa aking proyekto sa Arduino na tinawag na " Ang pag-ibig ay para sa Mga Gamer " na nagsimula bilang isang tool para sa giggles at kasiyahan. Hindi ito perpekto o anupaman, ngunit gumagana ito
Tutorial para sa L298 2Amp Motor Driver Shield para sa Arduino: 6 na Hakbang
Tutorial para sa L298 2Amp Motor Driver Shield para sa Arduino: PaglalarawanL298 2Amp Motor Driver Shield para sa Arduino ay batay sa L298 motor driver integrated circuit, isang buong-motor na driver ng motor. Maaari itong magmaneho ng dalawang magkahiwalay na 2A DC motors o 1 2A step motor. Ang bilis ng motor at mga direksyon ay maaaring makontrol magkahiwalay