PWM szabályzó DC motorhoz


Hirtelen felindulásból (és mert rajtam maradt egy félig működőképes autó-váz) Igény merüt fel egy morcosabb szervó vezérlő építésére. Az áramkör az RC szabvány szerinti 1..2ms periódusú jeleket veszi, egy csatornán, és ebből kétirányú (előre-hátra) és sebesség-szabályozós (PWM) meghajtást csinál egy DC motor számára. Bár lehet kapni ilyen funkciójú áramköröket különböző modellboltokban, de készítésnél néhány fontos szempontot kijelöltem:

-Jóval nagyobb teljesítményű legyen a kommersz vezérlőknél
-Lehetőleg N csatornás típusú FET-ek használata a kis csatornaellenállás -kis veszteség- miatt
-Egyszerű alkatrészekből megépíthető legyen
-Később könnyebb legyen új funkciókat implementálni (taníthatóság, telep-védelem, zavarvédelem, több szervó használata, átviteli görbe-konverzió stb.)

Ádáz fejlesztőmunkával született az alábbi kapcsolás:

A kapcsolás a vevőből érkező, (egyelőre) 1 csatornás szervo jelet fogadja. Körül néztem, és a kis méret, megbízhatóság és az ár miatt úgy döntöttem, hogy rádióvevőt nem érdemes építeni. Adót már jobban, de annyira olcsón hozzá lehet jutni, hogy -már csak a mechanika elkészítése miatt is- nem fogtam bele.
Viszont egy nagy teljesítményű DC motor vezérlőt érdemesnek látszott konstruálni. A gyárilag kapható vezérlők elvileg tudnak 60-70A áramot, de nagyon könnyű őket zárlattal, túlterheléssel elfüstölni. A kis méret miatt SMD FET-ekből épülnek fel, és ezek nem igazán strapabírók. Természetesen ahol a súly kritikus (repülők, helikopterek) ott más nemigen jöhet szóba. Autónál itt lehetett egy kicsit szabadabban garázdálkodni. Viszont ahhoz hogy élvezhető legyen az autókázás, a motor 30-40A-t is felkap a 7V-os akumulátorból. A "tuning" motor akár 60-70A-t is. Persze megy mint az őrült, az akku cellák behorpadása mellett :)
Az egyszerűség jegyében be kellet vetni néhány trükköt. Például mit keres ott a MAX232? Ebben az alkalmazásban biztosítja azt, hogy akár 5V tápfeszültség mellett (akku teljesen leterhelve) is biztosítsa azt, hogy a felső oldali FET-ek valamelyike legalább 4V-tal nagyobb feszültséget kapjon a tápfeszültségnél. Ez megközelítőleg teljesül is, ezért a FET-ek alig melegszenek, nagyon kicsi a veszteség. A 4011-es IC-vel felépülö "multiplexer" áramkör feladata, hogy vagy a jobb oldali, vagy a bal oldali FET kapjon csak PWM vezérlést. Az áramkör elhagyható lett volna, hiszen ezt a funkciót ellátná a vezérlő mikrokontoller, DE! Előfordulhat olyan állapot, hogy a táp, és egyéb zavarok hatására a kód leszáll, és a FET-ek összenyitnak (az alsók és felsők) ennek füst a vége a FET-ekre és az akkumulátorra nézve is. A jelenséget viszonylag könnyen, az első próbán sikerült előidézni :)
A vezérlő funkciót egy ATTINY2313 Atmel gyártmányú mikrokontrollerrel van kivitelezve. A hardver a lehetőségekhez képest elég jól ki van használva, a PWM és a bemeneti jel mintavételezését is számláló végzi. Emiatt a kód gyakorlatilag arra szorítkozik, hogy a vezérlési diagramot átszámítsa.
Tervezem a szoftver kibővítését tanító funkcióval (azaz adó által kiadott jelek szélsőértékeit rögzíteni lehessen) illetve ha elveszti a kapcsolatot az adóval, akkor a motor a zaj hatására ne ugrájlon össze-vissza. Sajnos a jelenlegi verzió még nem tudja ezt. A telep merüléséből adódó problémák ezzel az áramkörrel már egészen jól orvosolva lettek, ezzel nem volt gond.


Képek, videó

Peti a tesztpilóta

Az áramkör közelről

Az áramkör közelről 2.

Kicsit fusi, de a mienk :)

Azért a drift gumik nem piskóták ám!

Videó - megy mint az állat ;)


Egyéb lehetőségek

Az áramkör átalakítható úgy is, hogy csak egy forgásirányba vezéreljen egy DC motort, ami például repülőkhöz kell. Ha több szervó funkciót el kell látni ahhoz érdemes egy nagyobb kontrollert (pl. ATMEGA8) választani. Akinek van ötlete, hogy még milyen extra funkciót kellene megvalósítani, az emailben jelezze. Bár nem vagyok egy nagy programozó, néhány egyszerű funkció talán nem fog ki rajtam :)


Szoftver, forráskód

A forráskód C-ben készült. Az ingyenes WINAVR fordítót használtam. A kódot a Ponyprog Segítségével égettem be az STK200 égető segítségével. Az égetés során a "CKSEL" fuse biteket belső 4MHz-es oszcillátorra kell állítani. Az adó impulzus paramétereit (egyelőre kézzel) maxval, minval,midval,gap változókkal lehet beállítani, és a forráskódot le kell fordítani. Most egy középértéken van.

A forráskód Itt van.

Igény merült fel egy nagyobb feszültségű verzió megépítésére. Ádáz fejlesztőmunkával megszületett ez is :)

Új 12V-os verzió

módosított c fájl a Spektrum. DX5E típ. távirányítóhoz

Úgy néz ki másra is fel lehet használni:

2 csatornás DC szervo vezérlő kamera mozgatásához