2013-04-30

12A dual H-Bridge - motorų valdymui mikrokontroleriu

Būna, jog prisireikia valdyti žymiai galingesnę elektrinę įrangą, kuri būna maitinama didesne įtampa ar pan. Mikrokontroleriai geriausiu atveju per savo išvadą gali išduoti 5V @ 25mA ar pan. To akivaizdžiai per mažai kad ir 12V @ 2A motoro valdymui. Lieka ieškoti ne tik kito maitinimo šaltinio motorams, bet ir kaip tai realizuoti. Akivaizdus sprendimas būtų panaudoti tranzistorius ar rėles. Šiame straipsnyje pateiksiu savo atradimus ir informaciją, kaip pasigaminti elektrinių motorų iki 25V (o su pakeitimais ir iki 100V ir pan.) valdymo schemą, kuri tiesiog dažnai vadinama H-Bridge.

Situacija labai paprasta - turime mikrokontrolerį maitinamą 5V ar žemesne įtampa, kitą didesnės įtampos šaltinį ir, galingesnį nei žaislinis, motorą ar pan. Norime panaudoti du mikrokontrolerio išvadus A ir B motorui valdyti. Viename išvade, tarkime A, padavus +5V motoras suktųsi į kairę, o padavus priešingai - į B +5V motoras suktųsi į dešinę. Kitais atvejais motoras nesisuktų ar būtų stabdomas. O dar papildomai panaudojus PWM būtų galima sukimosi greitį keisti nuo 0 iki maksimalaus. Labai paprastas valdymo variantas. Kyla klausimas, kam čia tokį paprastą atvejį reikia spręsti, nes turbūt jau egzistuoja begalės būdų? Taip, iš tikrųjų tai egzistuoja net vienos mikroschemos sprendimų (VNH3SP30 schema žemiau), kurie leidžia valdyti galingus motorus prie didelių srovių, tačiau jų kaina irgi atitinkamai dažnai būna įspūdinga.


Galbūt net paprasčiau, ar tiesiog pigiau pasigaminti savo, jei ne visiškai analogišką, tai bent panašų sprendimą - svarbu tik turėti noro, šiek tiek gabumų ir žinių. Paskutiniųjų kaip tik čia ir bandysiu suteikti.

Prieš tai minėtą motoro valdymo logiką galima tiesiog realizuoti rėlėmis - tačiau jos lėtai persijunginėja, gremėzdiškos, nors aišku, turi ir privalumų - palaiko dideles įtampas, nesudėtingas naudojimas ir pan. Žinoma, kitas variantas - realizuoti paprastais NPN/PNP tranzistoriais. Iš fizikos kurso galime prisiminti, jog tranzistorius labai lengva valdyti mažomis srovėmis kaip jungiklius (angl. switch) - todėl net ir mikrokontroleriai puikiai tam tinka. NPN tranzistorius atsidaro padavus į jo bazę srovę (dažniausiai >=5mA), o PNP tranzistorius priešingai - užsidaro. Kaip ir kiekvienam puslaidininkiui - atidarymo įtampa apie 0.7V. Pasinaudokime šiais puslaidininkių privalumais.
Kaip pavaizduota žemiau paveiksle, vietoj apkrovos (load) prijungus elektrinį motorą ar kitą galingesnį prietaisą, maitinamą aukštesnę nei +5V įtampą U,  jį būtų galima lengvai įjungti/išjungti valdant įtampą ir srovę tranzistoriaus bazėje su mikrokontroleriu. Šaunu!


Tokios schemos problema - jog motoras suktųsi tik į vieną pusę, t.y. srovės tekėjimo krypties keisti negalėtume. Galbūt to mums pakanka? O jeigu mūsų tikslas - valdyti sukimąsį į abi puses. Gal galima protingai sujunti abi schemas ir gauti laukiamą rezultatą? Atsakymas teigiamas. Tokios schemos pavadinimas yra H-tiltelis (angl. h-bridge). Akivaizdu, jog schemos pavadinimas būtent ir kilo iš savo sujungimo panašumo į "H" raidę. Paprasčiausia jo realizacija pavaizduota apačioje. H raidės viduryje turime valdomą motorą (įtaisą), A ir B  išvadus srovės krypties valdymui mikrokontroleriu.


Galime pastebėti, jog pateikta schema atlieka tai, ko norime. Valdymo signalai sinchronizuojami ir paduodami A ir B pusėms vienu metu. Kai turime A=1, B=0 (geltona spalva) srovė teka per tranzistorius, kurie neuždaryti ir motoras sukasi į vieną pusę, padavus priešingus signalus A=0, B=1 (raudona spalva) atsidaro kiti tranzistoriai, o prieš tai minėti užsidaro ir motoras sukasi į kitą pusę. Padavus A=0, B=0 signalus motoras nesisuks arba lėtės (jeigu prieš tai sukosi). Taip pat signalų derinys A=1, B=1 leis stabdyti motorą.

Bet vėl gi ši realizacija dar nėra pakankamai efektyvi. Reiktų atskirti mikrokontrolerio žemos įtampos (signalų) dalį nuo motoro aukštos įtampos grandinės - t.y. dabar A ir B išvadai negali būti tiesiai jungiami prie mikrokontrolerio, kai įtampa V yra didelė. Taip pat atsiranda įvairių niuansų, kai yra staigiai stabdomas įsisukęs motoras, dėl saviindukcijos galimi didesni nei V momentiniai įtampos šuoliai grandinėje. Apie visus šiuos kątik paminėtus projektavimo niuansus galima rasti informacijos internete. Pasirodo pasigaminti gerą H-tiltelį reikia pakankamai daug žinių ir praktikos. Vienas iš geriausių ir įdomesnių bei mano rekomenduojamų šaltinių - Chuck McManis robotikos puslapis - jame aiškiai išdėstoma tiek teorija tiek ir praktika. Taip pat nemažai informacijos ir H-tiltelių schemų variantų yra čia.

Egzistuoja visokių H-tiltelio atmainų, pvz. naudojančių PNP tranzistorius viršuje ir NPN apačioje arba tiesiog vienos rūšies visus keturis ir t.t. Siekiant pasigaminti H-tiltelį kuris būtų tinkamas didelės galios motorams - reikia naudoti galingus BJT ar MOSFET tranzistorius, kurie būtent ir pritaikyti didelėms srovėms ir įtampoms. Tokie tranzistoriai kainuoja brangiau nei įprasti, tačiau leidžia padaryti daugiau, jų palaikomos srovės siekia 10A ir daugiau, o įtampos siekia 100V ir t.t. Žinoma, prie tokių srovių ir įtampų reikia aušinimo, o prie mažų dar galima apseiti be radiatorių ar ventiliatorių.


Remiantis Chuck McManis puslapiu, anksčiau analizuotą, paprastą schemą galima patobulinti iki galutinio varianto (žr.aukščiau). Įsigijau ir panaudojau BDW94C ir BDW93C darlingtono tranzistorius (iš www.lemona.lt) - juose jau papildomai įrengtas atgalinės srovės diodas. Šiuos galinguosius  darlingtono  tranzistorius reikia pasirinkti taip, jog būtų palaikomos reikiamos darbinės srovės ir įtampos, todėl gali tekti pastudijuoti tranzistorių datasheet aprašymus. Be abejo patartina, kad jie kuo geriau atitiktų vienas kitą (atsidarymo įtampos ir srovės ir pan.) - laimei tokie parduodami kaip tik "suderintomis" (angl.complementary pairs) poromis NPN ir PNP.    Taip pat schemoje A ir B išvadai yra atskirti papildomais paprastais tranzistoriais nuo aukštos įtampos grandinės. Be abejo, geriausia būtų panaudoti optronus ir visiškai izoliuoti tuo pačiu ir nuo triukšmų, tačiau būtų prarandamas tranzistorių perjunginėjimo greitis optinėje sistemoje. Jeigu tai neaktulu, tai padaryti galima nesudėtingai - daugiau informacijos rasite minėtame C.McManis puslapyje. Taigi galutinei realizacijai ir mikrokontrolerio signalų perdavimui - paprastesni BC639 tranzistoriai ir keletas 0.25W varžų. Norint valdyti keletą motorų - galima sujungti keletą H-tiltelių tarpusavyje:



Plokštė suprojektuota EAGLE programa, o gamybos eiga bei rezultatas pavaizduoti žemiau. Projektų failus rasite straipsnio pabaigoje. Įvertinus išlaidas dvigubam h-tilteliui - gauname apie 30-40 litų (arba 15-20 litų viena tilteliui ) pagaminti. Norint pritaikyti didesnėms (iki 12A) srovėms ir (iki 100V) įtampoms reikia atkreipti dėmesį į aušinimą - pridėti radiatorius/ventiliatorius ant tranzistorių bei naudoti didesnei įtampai pritaikytą elektrolitinį kondensatorių. Patartina perprojektuoti plokštę paliekant tam daugiau vietos ir naudojant platesnius vario takelius.




 

Kaip veikia schema, galite pamatyti žemiau esančiame video. Jame RC motorams naudojama 7.2V 2000mAh baterija, o valdymo signalas gaunamas prie tos pačios baterijos prijungus 5.1V zenerio diodą. Galutiniame variante valdymo signalas į A arba B įvestis būtų paduodamas iš mikrokontrolerio išvesties. Video demonstruojama, jog aktyvuojant A arba B puses, keičiasi motoro sukimosi kryptis. 


Projekto EAGLE dokumentai  - download


2 komentarai:

  1. sveiki gal zinote kur galima pirkti tokia mikoskrema?

    AtsakytiPanaikinti
    Atsakymai
    1. Apie kokią mikroschemą kalbate?

      Jeigu apie VNH3SP30 - rasite pololu.com tinklapyje, jeigu apie tranzistorius BDW, tai rasite Lemonoje - http://lemona.lt/index.php?page=item&i_id=24597, Evitoje - http://www.evita.lt/bdw94c-tranzistorius-bdw94c-si-p-darl-di-100v-12a-80w-20mhz-to-220?search=bdw94 ar RCL - http://rcl.lt/index.php?lang=lt&id=2&acc=search&term=bdw94&search_x=41&search_y=12&search=search.

      O pačią schemą/plokštę reikia gamintis savarankiškai.

      Panaikinti