Arduino PWM valdomas variklis

4 07 2012

Problema

Kol kas vieninteliame projekte ,Timelapse bėgių kontroleryje, naudojau DC variklius, kurių greitį valdžiau PWM pagalba. Žinoma pastebėjau, kad esant nepilnam PWM signalui varikliai tiesiog riaumodavo. Tai galite pastebėti šiame filmuke:

Dabar pakalbėsiu kas per velnias ten buvo ir kaip reikia išpresti šią problemą.

Pirmiausiai tai Arduino IDE siulo labai patogią funkciją PWM generavimui. Norint gauti PWM viename iš 6 PWM išėjimų tereikia iškviesti analogWrite() funkciją. Jai nurodžius norimą PWM dydį nuo 0 iki 255 pastarasis išėjimas pradeda generuoti šį signalą.

Deja bet PWM signalas susideda ne tik iš jo impulso dydžio parametro, bet ir turi dažnio parametrą, kuris Arduino Uno atveju yra 976Hz ant pinų 9, 10, 3 ir 11 ir tik 488 ant pinų 5 ir 6.  Problema tame, kad priklausomai nuo variklio tipo jiems valdyti siuloma naudoti 10-20kHz atnaujinimo dažnį. Jei variklis jautresnis galima naudoti ir daugiau. Esmė tame kad Hz didelis skaičius nekenkia, kenkia kai jų permažai. Šiuo atveju variklio apvyjos turėdamos per daug laisvo laiko tarp PWM impulsų truputi atsilaisvina, pradededa lėtėti ir vėl gavus srovės sukelia keista daužymasi arba kitaip vadinama rezonansą. Esant dideliam atnaujino dažniui variklio apvyjos turi daug mažesnius laiko intervalus kuomet negauna srovės, todėl valiklis vis dar turi pakankama inercijos galios iki sekančios srovės gavimo. Taip variklis gauna daugiau kirčių tačiau jie daug mačiau įtakoja mechaniškai nes viska išlygina inercija.

Sprendimas

Mano Timelapse bėgelių projekte buvo naudoti 9 ir 10 pinai pirmam varikliui, o 5 ir 6 pinai antram. Taigi išvada viena – norint išvengti variklio kankinimo reikia padidinti dažnį. Tai atliekam keičiant atitinkamų taimerių daliklius. Daug į tai nesigilinant galite pasiskaityti apie tai funkcijos setPwmFrequency() aprašyme čia. Su šia funkcija labai lengvai pakeičiamas daliklis į norimą, o kokia šio daliklio įtaka dažniui galite apsiskaičiuoti arba tiesiog pamatyti čia.

Savo atveju pasigaminau nedidelę bandymų programą su kuria galiu patikrinti kokia įtaka varikliui daro atitinkami Hz:

Dabar matytame video kairėje pusėje buvo reguliuomas PWM nuo 0 iki 255, o dešiniau dažnis, kuris gali būti 61Hz, 244Hz, 976Hz, 7812Hz ir 62500Hz (nors ekrane vietoje šio skaičiaus rodomas 73036 dėl perdidelės Int reikšmės). Taigi matome kad variklis skirtingai reaguoja į dažnius ir kaip rezultatą skleisdamas kitokio dažnio rezonansinius garsus. Ties 7812Hz yra girdėti labai skardus zyzimas, tačiau telefono mikrofonas jo neužfiskavo. Ties auksčiausiu dažniu 62500Hz visi triukšmai išnyko, tad priimsiu tai kaip išeitį.

Katik rodytos programos kodą parsisiųsti galite čia: http://www.files.com/thumbs/square/4ff53e6de3ad1/PWMGenerator-120705a.zip

Taigi didelis dažnis yra tinkamiausias, todėl buvo nuspręsta Timelapse bėgių kontroleryje tiek Timer0 (5 ir 6 pinai) tiek Timer1 (9 ir 10 pinai) nustatyti ant daliklio 1 kuomet gaunu 31.250Khz pirmam varikliui ir 62.500Khz antram. Deja tokia jau situacija, kad nepavyko sulyginti abiejų variklių dažnių bet manau skirtumas net nesijaučia:

Kaip matome liko variklio pavaros skleižiamas trukšmas, o rezonansas dingo.

Tačiau kartu su didesniais dažniais atkeliauja keli tūkumai:

  • 3, 5, 6, ir 11 pinų dažnio pakeitimas įtakoja Delay() ir Millis() veikimui. Kadangi laikrodis sukasi sistemoje greičiau arba lėčiau reikia atitinkai didesnį laikotarpi naudoti ir su šiomis funkcijomis. Mano atveju Delay() funkcijai visuomet siunčiau 64 kartus didesnę milisekundžių reikšmę (nes būtent tiek kartu dabar yra greitesnis Timer0), o Milis() funkcijos reikšmę interpretavau kaip 64 kartus mažesnę.
  • 9 ir 10 pinų dažnio keitimas įtakoja Servo bibliotekos veikimą, na bet jos ar ir nenaudojau savo atveju 🙂

Taigi dabar su tokiais dažniais Timelapse begių varikliai veikia daug tyliau ir kaip suprantu sklandžiau.


Veiksmai

Information

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti / Keisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti / Keisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti / Keisti )

Google+ photo

Jūs komentuojate naudodamiesi savo Google+ paskyra. Atsijungti / Keisti )

Connecting to %s




%d bloggers like this: