Balansuojantis robotas (3 dalis)

Čia jau trečias bandymas padaryti balansuojantį robotą. Kam dar vienas? Tiesiog įdomu, vis dar yra kur tobulėt. Apie pirmuosius galima paskaityti čia: 1 dalis, 2 dalis. Šį kartą bandžiau išspręsti klibančių reduktorių problemą. Rasti geresnius variklius sunkoka, prieš perkant neįmanoma žinoti geri ten bus reduktoriai, ar nelabai. Būtų geriau, jei reduktorių visai nereikėtų. Galima bandyti panaudoti žingsninius variklius.

Žingsninių variklių naudojimas tokiame robote turi ir pliusų, ir minusų. Pliusai:

– labai tikslus valdymas, kiek žingsnių impulsų gauna, tiek ir pasisuka. Šiaip daugumos žingsninių variklių ašis apsisuka 360 laipsnių per 200 žingsnių. Tačiau dabartiniai draiveriai leidžia naudoti mikro žingsnius (microstepping). Taip vieną žingsnį galima padalinti į daug dalių. Mano naudojami leidžia žingsnį dalinti iki 32 kartų.

– jei jau variklis nesisuka, tai jis tikrai nesisuka (padėties palaikymas). Jokio laisvo sukimosi negali būti.

– šie varikliai turi normalią ašį (5mm), ji pakankamo ilgio, lengva uždėti ratus.

Minusai:

– kai variklis nesisuka, arba sukasi lėtai, naudoja daugiausiai srovės (padėties palaikymas), kuo greičiau sukasi tuo mažiau srovės naudoja.

– kuo greičiau sukasi, tuo mažiau jėgos turi.

– maksimalios apsukos ribotos. Prie didesnių apsukų pameta sinchronizaciją ir visai sustoja.

– teoriškai valdymas sudėtingesnis nei paprasto variklio, tačiau naudojant dabartinius draiverius valdymas pasidaro paprastas.

Pasirinkau NEMA17 variklius ir DRV8825 draiverius. Jie naudojami 3D spausdintuvuose, todėl dabar jų pilna eBay. Daviklis (IMU) – MPU-6050.

Sunkoka rasti tokiems robotams tinkamus ratus. Pasinaudojau šiuolaikiniu būdu – 3D spausdinimu. Toks būdas leidžia pasidaryti būtent tokius, kokių reikia. Kad tiktų uždėti ant ašies be jokių perėjimų, kad eitų normaliai priveržt. Lieka tik viena problema – padangos. Aš panaudojau guminius žiedus iš eBay. Tai sandarinimo tarpinės (o-rings). Jų yra įvairiausių diametrų. Gavosi tikrai neblogai. Aš 3D spausdintuvo neturiu, todėl užsisakiau www.3Dvirtuve.lt. Kūriau su OpenSCAD. Tiesa, ne visai kūriau, paėmiau iš laisvai prieinamų modelių ir pataisiau kaip man reikia. Keista programa, kad ten ką nors padaryt, beveik programuot reikia išmokt. :)

br1

Pirmiausiai bandžiau variklius. Reikėjo pasižiūrėti, kiek srovės ima, kokiu greičiu gali suktis, kaip reaguoja į maitinimo įtampos pasikeitimą. DRV8825 draiveris prie mikrokontrolerio pajungiamas labai paprastai – reikia tik dviejų įėjimų (DIR ir STEP). Jei DIR įėjime 0 – suksis į vieną pusę, jei 1 – į kitą. Trumpas impulsas STEP įėjime priverčia variklį padaryti vieną žingsnį. Pats pajungimas prie mikrokontrolerio nesunkiai randamas internete. 200 žingsnių vienam apsisukimui šiek tiek gruboka. Todėl panaudojau 1/8 mikro žingsnių režimą. Taip gaunasi 1600 žingsnių vienam apsisukimui. Variklis sukasi švelniai, praktiškai nesijaučia, kad žingsninis. Kaip paaiškėjo, suktis gali pakankamai greitai, tačiau jėga labai sumažėja. Yra riba, prie kurios visiškai sustoja, nes pameta sinchronizaciją. Kai nesisuka ima apie 0,8A. Kai sukasi greitai, srovė labai sumažėja – apie 0,2A. Jei palikti kurį laiką suktis visai lėtai, pats variklis pradeda pastebimai kaisti. Be to, yra keistas efektas. Jei variklį laikyti rankoje, jis gali suktis gana greitai. Apsukų nematavau, bet daug greičiau nei mano naudoti anksčiau darytam robote. Tačiau tereikia variklį padėti ant stalo ir jis sustoja. Pameta sinchronizaciją.

Robotą surinkau panašiai kaip ir anksčiau, tik šiek tiek mažesnį. Kontroleris surinktas ant montažinės plokštės.

br2

Variklius priveržiau prie apatinės plokštės. Paaiškėjo, kad tai gerokai pablogina jų sukimąsi. Gaunasi kažkoks rezonansas, ir prie didesnių apsukų varikliai sustoja. Taip atrodo, kad jie vienas kitą veikia savo vibracijomis. Tačiau pasirodo, kad realiai tai nelabai turi reikšmės, nes kai robotas važiuoja, viskas gerai. Matomai pats svoris veikia teigiamai. Keistas čia dalykas, nemažai eksperimentavau ir priėjau išvados, kad jei variklius pritvirtinti minkštai, t.y. ant kokių nors gumų, galima būtų važinėti gerokai greičiau.

br3

Valdymui per Bluetooth panaudojau Joy BT Commander (Android). Nebloga programėlė, yra pavyzdys kaip nuskaityti jos perduodamus duomenis, todėl nesunku integruoti į savo programą. Taip pat galima perduoti kelias reikšmes atgal, kurios bus matomos telefone. Pasidariau, kad matyčiau akumuliatoriaus įtampą. Ir derinant patogu matyti norimas reikšmes. Kontroleris tas pats kaip ir antrame robote – Arduino su atmega328. Programa skiriasi, nes čia žingsniniai varikliai ir nėra enkoderių.

Kadangi nėra reduktorių, nėra jokio ratų laisvumo. Tas klibėjimas buvo nemažas minusas. Šį kartą balansavimas veikia puikiai. Be to, nereikia enkoderių, kad žinoti kiek pasisuko ratai. Čia esminis dalykas. Ratai pasisuka tik tiek, kiek žingsnių gavo. Jei paskaičiuot kiek pasisuko į vieną pusę (būtent žingsnius), tai padavus tiek pat žingsnių atgal, parvažiuos į tą pačią vietą. Padariau tokį režimą – „return to home“ :). Galima robotą stumti neribotai, paleidus jis parvažiuos į tą pačią vietą. Niekur nepasuks, nes abu ratai sukasi idealiai vienodai.

Tai, kad greitai sukantis ratams labai sumažėja variklių jėga, praktiškai neturi reikšmės. Tikėjausi, kad bus blogiau, bet važinėja labai mikliai. Pabandžiau ir ant pasvirusio paviršiaus. Specialiai tam nieko nedariau. Ten įjungtas tas pats „grįžimo atgal“ režimas, tai rezultatas ne per geriausias. Tiesiog kuo daugiau pavažiuoja į pasvirimo pusę, tuo didesnis poveikis važiuoti atgal. Šis pasipriešinimas dabar apribotas 2 laipsniais, todėl tik tiek ir gali pasipriešint. Šį režimą reikėtų padaryt kitaip, rezultatas galėtų būti geresnis. Bet tokios „padangos“ turi mažą sukibimą, tai neleistų pasiektų žymiai geresnio rezultato.

br4

Kaip jau minėjau, kai varikliai sukasi lėtai (balansuoja vietoje), ima nemažai srovės. Iki 1,5A abu kartu. Padavus varikliams mažiau nei 12V labai mažėja jų jėga, todėl aš įdėjau impulsinį keitiklį, kuris palaiko 12V nepriklausomai nuo akumuliatoriaus įtampos. Tačiau nuo tokios srovės jis gerokai kaista. Kai važiuojama greičiau, srovė nedidelė ir niekas nekaista.

Kai naudojami mikro žingsniai, labai svarbu variklių valdymo srovė. Ant draiverių yra potenciometrai, juos būtina pareguliuoti. Jei srovė per didelė ar per maža, variklių sukimasis labai pablogėja – pameta sinchronizaciją ir sustoja arba pradeda drebėt vietoje. Kiek pastebėjau, jei naudojamas pilnas žingsnis (full step), ta srovė nelabai turi reikšmės. Naudoti daugiau kaip 1600 žingsnių vienam apsisukimui nematau prasmės, tai neduoda jokio pastebimo teigiamo efekto.

Suktis vietoje robotas gali gerokai greičiau nei matosi video. Važiuoti pirmyn – atgal yra gerokai sunkiau, todėl tai kas matosi video, yra geriausia ką man pavyko pasiekt. Tačiau riboja tik variklių sukimosi greitis. Reikėtų sugalvot kaip minkštai pritvirtint variklius, rezultatas būtų dar geresnis.

Beje, mačiau, kad jau net ir multiwii kontrolerį galima naudot tokiam robotui…

This entry was posted in Elektronika, Programavimas, Robotai. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *