V tokratni številki imamo pred sabo nadaljevanje članka iz pretekle številke. Osredotočili se bomo na elektroniko in programsko rešitev, velik del pa bomo namenili tudi elektromotorju. Elektromotor je potrebno skrbno načrtovati, saj nam prenaša vse obremenitve in je najbolj izpostavljena komponenta.
Pri izbiri pogonskega sklopa vedno kolebamo med ceno in robustnostjo ter iščemo optimum. Opisali bomo tudi ugotovitve testiranja in izzivov, ki so se pojavili ter kako smo jih uspešno rešili. V zaključku bomo podali smernice za možnosti nadgradnje nosilnosti vozička in razmislek o izbiri vrste pogonskega elektromotorja.
Električni načrt
Najprej je potrebno razvojno idejo zasnovati in izdelati električni načrt. Osnova je mikrokrmilniška razvojna plošča Arduino MEGA. Za le-to smo se odločili, ker potrebujemo 23 digitalnih vhodno/izhodnih priključkov in še en analogni vhod. Zaenkrat imamo dokaj dobre izkušnje s temi razvojnimi ploščami v prototipnih izdelkih in iz tega razloga je bila odločitev v našem primeru samoumevna. Za potrebe odklopa močnostnega krmilnega dela smo vključili 12 V rele. S tem smo si zagotovili izvedbo varnostnih funkcij in načrtovanih varčevalnih shem. Pri varnostni funkciji torej s tipko za zasilno ustavitev »STOP« ugasnemo rele, ki napaja močnostni del krmilja. S tem prekinemo napajanje močnostnega dela, kar povzroči odklop napajanja H-mostičnih vezij ter prenehanje poganjanja elektromotorjev. Na elektromotorje je nameščeno polžasto gonilo, ki ima lastnost samozapornosti.
Ta vsebina je samo za naročnike
Tipanje aktivnosti tipke za zasilni izklop smo izvedli v ločenem tokokrogu. V primeru uporabe istega tokokroga kot ga uporabljamo za izklapljanje napajanja releja (NC kontakt), bi morali digitalni vhod mikrokrmilnika dodatno zaščititi, saj ob izklopu releja (induktivno breme) pride do indukcije napetosti. Uporabili smo NO kontakt na tipki zasilnega izklopa. Obe tipki (spredaj in zadaj) smo vezali vzporedno in tako izvedli ALI funkcijo, da se upošteva aktiviranje katerekoli tipke. Eno sponko NO smo vezali na GND, drugo sponko pa na D12 vhod mikrokrmilnika. V mikrokrmilniku smo na tem vhodu vklopili notranji PullUp upor, da potencial GND na digitalnem vhodu pomeni aktivno stanje.
Digitalni izhod D13 smo uporabili za krmiljenje vklopa releja, ki nam napaja močnostni del. Rele vklapljamo z MOS-FET tranzistorjem IRFB4110 in ga lahko krmilimo z napetostjo 5 V, hkrati pa ima nizko notranjo upornost kanala RDSon, ki znaša le 3,7 mΩ. Napajanje releja smo izvedli z zaporedno vezavo obeh tipk za zasilni izklop z NC kontaktom. Tako smo izvedli IN funkcijo, kar pomeni, da bomo lahko vklopili napajanje releja takrat, ko ne bo aktivirana nobena tipka za zasilni izklop in ko bo prisoten pozitivni signal na izhodu D13, ki ga aktivira programska rešitev. S tem smo hkrati izvedli varovanje močnostnega dela in še dodatno možnost krmiljenja za potrebe varčevalnih shem, ki smo si jih zastavili. Hkrati imamo prisoten prikazovalnik napetosti akumulatorja. V razvojnem prototipu smo ga dodali na ohišje, da lahko spremljamo stanje napetosti akumulatorja. Priklopljen je na močnostni del in nam prikazuje napetost le takrat, ko imamo aktivne močnostne krmilnike BTS7960, da lahko spremljamo napetost ob obremenitvi.
Vključili smo še merjenje stanja napetosti akumulatorja. To smo izvedli z napetostnim delilnikom, z uporoma R6 in R7, ki imata nizko toleranco. Merjenje napetosti v programu izvajamo z razlogom, da v primeru padca napetosti pod spodnjo dovoljeno napetost akumulatorja, ki smo jo iz varnostnih razlogov določili na 10,5 V, izklopimo močnostni del in Rdeča LED prične počasi utripati.
Pogonski sklop
Voziček sestavljajo 4 enaki pogonski sklopi. Na osnovi zahtevane hitrosti premikanja vozička dobimo število vrtljajev na gredi reduktorja elektromotorja. Za zahtevano hitrost premikanja, ki v tem primeru znaša 1,5 km/h oziroma 0,42 m/s, je pri premeru koles 152 mm potrebnih 52 vrtljajev na minuto. Sledi izračun potrebne moči, ki jo moramo zagotoviti na osnovi največje obremenitve. To se zgodi pri vožnji v klanec, ko peljemo voziček po rampi v vozilo.
Za sile, ki se pojavijo na telo na klancu si pomagamo s sliko, ki se nahaja na spletni strani: https://si.openprof.com/wb/sile_na_klancu?ch=431
Naša dejanska situacija je prikazana na spodnji sliki. Dolžina rampe, po kateri se bo voziček vozil na vozilo, znaša 2,5 m. Višina, ki jo moramo doseči je 0,6 m. Na osnovi teh podatkov izračunamo kot α, ki v tem primeru znaša 14 stopinj.
Pri izračunu smo vrednosti zaokroževali navzgor, saj je potrebno imeti nekaj »rezerve«. Gravitacijska sila tako znaša F_g=600N. Če sile razstavimo na statično in dinamično komponento, dobimo F_d=145N. Iz sile in hitrosti, ki jo želimo doseči, lahko torej izračunamo potrebno moč:
P=F_d∙v=145N∙0,42 m/s=60W
Potrebno je upoštevati še silo trenja, ki je odvisna od koeficienta trenja med kolesi in podlago. Pri raziskovanju koeficienta trenja lahko naletimo na veliko znanstvenih člankov in eksperimentalnih izsledkov. Po raziskavi sem prišel do zaključka, da bi moralo biti dovolj, če upoštevamo eksperimentalne izsledke, ki govorijo, da je pri bremenu 60 kg koeficient trenja 0,3: F_tr=F_s∙μ=582N∙0,3=174N. Pri upoštevanju koeficienta trenja pridemo torej do dodatnih 174 N sile, ki jo moramo premagati pri vožnji v klanec. Silo trenja je potrebno prišteti k dinamični komponenti. Tako dobimo skupno silo, ki jo morajo premagati elektromotorji pri vožnji v klanec in znaša 319 N. Iz skupne sile in hitrosti, ki jo želimo doseči, lahko izračunamo potrebno moč, ki sedaj znaša P=F∙v=319N∙0,42 m/s=134W.
Za premagovanje višinske razlike lahko uporabimo tudi enačbo za delo, kjer velja, da je opravljeno delo odvisno od produkta sile in poti ki jo opravimo: A=F∙s. Če želimo voziček dvigniti na višino 0,6 m, opravimo delo A=600N∙0,6m=360Nm. Iz tega lahko izračunamo moč, ki jo dobimo iz kvocienta med delom in časom, potrebnim za dvig vozička. Iz hitrosti lahko izračunamo, da bomo 2,5 m rampe prevozili v času 6 s. Moč, ki jo potrebujemo za to pot znaša P=A/t=360Nm/6s=60W. Tukaj je potrebno dodati še trenje in tako pridemo do enake vrednosti, kot pri prejšnjem načinu izračuna.
Za izračun potrebne moči elektromotorja sem povprašal tudi v podjetju PS Logatec, kjer so mi priskočili na pomoč z nasvetom.
Na osnovi izračuna moči, ki bi jo potrebovali v našem primeru, smo našli primeren in cenovno ugoden krtačni DC motor s polžastim gonilom, ki se sicer uporablja v avtomobilski industriji za pogon brisalcev prednjega vetrobranskega stekla in ima 12 V napajanje. Pri nazivni napetosti smo na gredi neobremenjenega reduktorja izmerili hitrost vrtenja 60 vrt/min, nazivna moč pa znaša 40 W. Za voziček smo uporabili 4 takšne motorje, kar skupaj znaša 160 W nazivne električne moči. Ob izkoristku DC elektromotorja in polžastega gonila lahko ugotovimo, da se najverjetneje nahajamo nekje na meji zmogljivosti. Ker pa bomo voziček v klanec vozili le kratek čas in bo največ obremenjen le v času, ko bodo vsa štiri kolesa na rampi (v dolžini dobrega metra), menimo, da bodo izbrani DC elektromotorji zadovoljivi za našo aplikacijo. Ko je eno kolo (spredaj ali zadaj) na ravni podlagi, je kot namreč manjši in ni potrebno zagotavljati takšne moči, kot smo jo izračunali.
Elektromotor, ki smo ga uporabili za voziček, je bilo najprej potrebno predelati, saj je imel eno priključno sponko nameščeno na ohišje (na ohišju avtomobila je negativna priključna sponka). Ker elektromotor krmilimo s H-mostičnim vezjem in mu s tem spreminjamo polariteto, v našem primeru priključne sponke ne smemo imeti vezane na ohišje. Ker je celotna konstrukcija kovinska, bi tako namreč prišlo do kratkega stika med izhodi H-mostičnih vezij različnih elektromotorjev.
Leva slika prikazuje, kako je priključek od ene ščetke s pomočjo sponke in vijaka priklopljen na ohišje. Kot lahko vidimo na sredinski sliki, smo najprej odstranili del sponke, ki je omogočala stik z ohišjem. Nato smo uporabili drugi vodnik iz elektromotorja, ki je bil namenjen poganjanju DC elektromotorja z nižjimi vrtljaji, kar vidimo na zadnji sliki. Po takšni predelavi na ohišju ni več električnega potenciala in DC elektromotor lahko po namestitvi brez težav krmilimo v obe smeri.
Pri uporabi Mecanum koles se pojavljata sili v aksialni in radialni smeri, zato je potrebno paziti na izbiro primernih ležajev. Ker izbrani elektromotor s polžastim reduktorjem ne prenaša aksialnih sil, ki jih bo prevzel ležaj, je bilo potrebno razviti prirobnico in ohišje, ki drži ležaj.
Za močnostno krmiljenje DC motorja smo uporabili integrirano vezje BTS7960. Uporabili smo vhode 1 do 4. Po pridobljeni informaciji iz prve roke bi omenjeno vezje naj bilo preveč »brutalno«, saj ima izjemno nizko upornost, a je posledično zato tudi robustno in vzdržljivo. V aplikaciji, ki jo je omenjen vir uporabljal, je vezje namreč v primeru kakšne napake povzročilo veliko škodo okrog le-tega. Ker pa moje izkušnje kažejo, da lahko IBT_2 modul brez težav poganja 500 W DC elektromotor na 24 V, sem se vseeno odločil, da ga vključim tudi v to aplikacijo.
Programska rešitev
Programirali smo v razvojnem odprtokodnem okolju Arduino. V programski rešitvi smo uporabili dve serijski komunikacijski vodili. Arduino MEGA ima na razpolago skupaj 4 serijska komunikacijska vodila.
//Serijska komunikacija:
Serial.begin(9600); // Komunikacija za izpis na serijski monitor (biti/s)
Serial1.begin(9600); // priklop Bluetooth modula HC-05 na Rx1 in Tx1 (biti/s)
Na začetku glavnega dela programa smo si nastavili spremenljivke, s katerimi lahko v programu spreminjamo ključne nastavitve.
// zacetne nastavitve v programu:
cas_za_PWM = 1; // cas med povecevanjem in zmanjsevanjem PWM [milisekunde]
pristevamo = 2; // uporabljamo za pristevanje k PWM (hitrost mehkega zagona)
odstevamo = 10; // uporabljamo za odstevanje k PWM (hitrost mehkega pojemanja)
PWM_MAX_manjsi = 150; // omogoca spreminjanje najvisje hitrosti za manjso hitrost
PWM_MAX_vecji = 255; // omogoca spreminjanje najvisje hitrosti za vecjo hitrost
PWM_izklop_sp_meja = 30;// pri upocasnjevanju izklopi izpisovanje PWM in da PWM=0
Odločili smo se, da bomo imeli 4 različne načine stanja: STANJE_NAPAKA, STANJE_VOZNJA, STANJE_POCIVA in STANJE_PRAZEN_AKU. Na osnovi stanja imamo tudi 4 načine utripanja LED diode, ki nam prikazuje stanje. Za primer ugotavljanja stanja praznega akumulatorja preberemo stanje napetosti in primerjamo s spodnjo dovoljeno mejo. Če je napetost pod spodnjo mejo, vklopimo zastavico STANJE_PRAZEN_AKU. V tem stanju nam rdeča LED počasi utripa in odklopimo napajanje močnostnega dela ter ne dovolimo vožnje, dokler ne izklopimo celotnega napajanja in ponovno vklopimo. Počasno utripanje nas hkrati opozarja, da je z glavnim stikalom potrebno izklopiti napajanje vozička in napolniti akumulator.
// preberemo stanje baterije; na vhodu imamo napetostni delilnik 10kE/4,7kE
int U_bat=0;
for(int i=0;i<10;i++){
U_bat = U_bat + analogRead(A0);
}
U_bat=trunc(U_bat/10);
// ce je napetost na akumulatorju pod 10,5V, izklopimo mocnostni del in utripa pocasi rdeca LED
//Uizh=(4k7E/(10kE+4k7E))*Uvh=0,3197*10,5V=3,357V -> pri tej vhodni napetosti bo U_bat=689
if (U_bat <= 690){ // ce izmerimo povprecno vrednost pod 690, smo pod 10,5V
STANJE_NAPAKA = LOW;
STANJE_VOZNJA = LOW;
STANJE_POCIVA = LOW;
STANJE_PRAZEN_AKU = HIGH;
digitalWrite (RELE, LOW); // izklopimo rele za napajanje mocnostnega dela
}
Zastavico za aktiviranje napake vklopimo, ko preberemo nizko stanje na tipki za zasilni izklop. Z vsakim vklopom ene izmed zastavic, ostale tri izklopimo. V visokem stanju zastavice STANJE_VOZNJA najprej vklopimo rele za napajanje močnostnega dela, nato pa sledi hitro utripanje zelene LED diode.
if (STANJE_VOZNJA == HIGH){
digitalWrite (RELE, HIGH); // vklopimo rele za napajanje mocnostnega dela
if (LED_ZEL == LOW){
if (millis() >= (cas_izklop_LED + cas_NEsveti_LED_kratki)){
LED_ZEL = HIGH;
cas_vklop_LED = millis();
digitalWrite (LED1_ZEL, HIGH); // vklopimo zeleno LED
}
} else if (LED_ZEL == HIGH){
if (millis() >= (cas_vklop_LED + cas_sveti_LED)){
LED_ZEL = LOW;
cas_izklop_LED = millis();
digitalWrite (LED1_ZEL, LOW); // IZklopimo zeleno LED
}
}
}
Sledi varčevalna shema STANJE_POCIVA. Varčevalna shema je sprogramirana tako, da se močnostni del izklopi po 1 minuti neaktivnosti katerekoli tipke na aplikaciji. V tem stanju nam počasi utripa zelena LED. Ko pritisnemo na katerokoli tipko, se najprej aktiviral rele in pričnemo z vožnjo v izbrani smeri. Takrat prične zelena LED hitro utripati.
STANJE_NAPAKA je aktivna, ko aktiviramo tipko za zasilni izklop. V tem stanju nam rdeča LED hitro utripa.
V trenutku, ko dobimo ukaz iz Bluetooth modula HC-05 na serijskem vodilu in hkrati zastavica STANJE_NAPAKA ni aktivna, lahko pričnemo z vožnjo. Z aktivacijo zastavice za vožnjo, moramo ostale zastavice izklopiti.
if ((Serial1.available() > 0) && (STANJE_NAPAKA == LOW))
{
serialA = Serial1.read();
cas_zadnjega_ukaza = millis();
STANJE_VOZNJA = HIGH;
}
Glavni del programske rešitve je bila odločitev, kako bomo prenašali znak za aktiviranje in sprostitev posamezne tipke. Odločili smo se za prenos črk angleške abecede. Podrobneje smo ta del opisali v prvem delu članka. Pri programski rešitvi smo za posamezno smer prav tako uporabili zastavice, ki smo jih vklopili in izklopili.
if (STANJE_VOZNJA == HIGH){
switch (serialA)
{
// vklopimo zastavice za posamezno tipko
case 97: //Kodo 97 preberemo iz serijskega monitorja, ko s telefonom vklopimo ROTIRAJ_LEVO.
ROTIRAJ_LEVO= HIGH;
break;
Na osnovi aktivne zastavice za smer vožnje se vklopijo posamezna kolesa. Za posamezno kolo smo uporabili funkcije, ki nam krmilijo posamezno H-mostično vezje pri pospeševanju in pri izklopu tudi pripadajoče pojemanje.
// Odlocitev, v katero smer peljemo vozicek
if (ROTIRAJ_LEVO == HIGH){ // manjsa hitrost rotiraj levo
PWM_MAX = PWM_MAX_manjsi;
LS_naprej();
LZ_naprej();
DS_nazaj();
DZ_nazaj();
ZAST_ROTIRAJ_LEVO = HIGH;
}
else if (ZAST_ROTIRAJ_LEVO == HIGH){
LS_nazajustavljaj();
LZ_nazajustavljaj();
DS_naprejustavljaj();
DZ_naprejustavljaj();
}
Pri vožnji smo se odločili, da bomo imeli za vsako kolo ločeno funkcijo.
// VOZNJA:
// pristevali in odstevali bomo PWM za vsako kolo loceno
// najprej izracunamo in na koncu rutine izpisemo na analogni izhod
void LS_naprej(){
ENABLE_omogocimo ();
digitalWrite (PWM_LS_2, LOW); // izpisemo stanje PWM na izhod
PWM_zeljeni = PWM_MAX;
// omejitev, da ne gremo s pristevanjem preko 255
if ((PWM_zeljeni > PWM_trenutni_LS) && (PWM_trenutni_LS < (PWM_MAX-2))){
PWM_trenutni_LS = PWM_trenutni_LS + pristevamo; // pristevanje k PWM-u
}
// izpisemo stanje PWM na izhod, druga veja mostica ostane na LOW
analogWrite (PWM_LS_1, PWM_trenutni_LS);
delay (cas_za_PWM);
}
Podobno kot pospeševanje pri mehkem zagonu, smo v programski rešitvi izvedli tudi pojemanje.
Testiranje
Pri testiranju prototipa smo elektronske komponente postavili na ploščo za montažo krmilja, H-mostična vezja pa smo namestili na držala, ki smo jih 3D zmodelirali in natisnili. Za prvi test delovanja smo povezali elektronske komponente ter preizkusili delovanje programa. Za prototipno izvedbo smo napajanje močnostnega dela povezali s hitrimi spojkami. Po prvem testiranju smo ugotovili, da močnostni del deluje brez težav, zataknilo pa se je pri komunikaciji, saj smo v prvi fazi imeli vezan Bluetooth modul HC-05 na Tx0 in Rx0. Ta komunikacijski port se namreč uporablja tudi pri komunikaciji z računalnikom preko USB povezave. Pri testiranju smo uporabljali tudi serijske izpise, zaradi česar je občasno prišlo do napak. Bluetooth modul smo prestavili na Tx1 in Rx1, kar je težave odpravilo.
Po sestavi vozička je sledil obremenitveni test. Pri obremenitvenem testu smo preizkusili delovanje z maso, ki za 100 % presega skupno dovoljeno bruto maso, torej skupaj 120 kg. Na podlagi iz keramike je voziček deloval brezhibno. Pojavila se je le težava na spoju prirobnice in gredi elektromotorja. Spoj je popustil in kolo pri obremenitvi več ni sledilo vrtljajem gredi reduktorja. Sledil je razmislek, kako dodelati ta spoj in odločili smo se za umestitev zatiča v prirobnico, ki bo preprečeval »zdrs« prirobnice na gredi. Po tej spremembi smo podoben obremenitveni test ponovili na neravni podlagi – na tlakovcih – in težave tokrat več ni bilo. Posneli smo tudi video o delovanju vozička, kjer smo prikazali vožnjo na treh različnih podlagah – na tlakovcih, asfaltu in na keramiki. Video se nahaja na povezavi: https://www.youtube.com/watch?v=0N5tnWIFPIE
Zaključek
Prvi prototipni MECANUM električni voziček MB-1/2020 je pokazal, da je načrtovana konstrukcija in krmilje v skladu z zahtevami naročnika. Pomanjkljivost je skupna nosilnost, ki zaenkrat ne presega 60 kg. Ker masa samega električnega vozička brez nadgradnje znaša 30 kg, ostane za nadgradnjo in vsebino le še 30 kg, kar pa bo za potrebe naročnika najverjetneje premalo. Pri zahtevi za večjo nosilnost bo zato potrebno preiti na modificiran pogonski sklop in povečati kapaciteto akumulatorja. Na obstoječem produktu je glavna omejitev nosilnost mecanum koles, zato bo potrebno najprej izbrati kolesa z večjo nosilnostjo. Ob tem nujno sledi tudi sprememba pri izbiri elektromotorjev. Že pri opisanem prototipu smo ugotovili, da smo pri izračunu potrebne moči nekje na meji. Običajno se glede na izračun doda nekaj 10 % rezerve, da preidemo v »varno« območje. Hkrati je skoraj nemogoče zagotoviti simetrično obremenitev na vseh štirih pogonih. Kot pri vijačnih zvezah ali paralelni vezavi elektronskih komponent, bi bilo tudi tukaj smiselno upoštevati, da je vsak element sposoben prenesti le 75 % nosilnosti oziroma obremenitve. Tako bi bilo priporočljivo v izračunu vsakemu pogonu, ki v idealnem primeru prevzame ¼ bremena, dodati še nekaj rezerve. Poleg tega pa tudi ne moremo predvideti popolnoma vseh okoliščin uporabe. Uporabnik lahko na primer zapelje voziček tudi na razgiban teren, kjer pa se koeficient trenja bistveno poveča. Ob upoštevanju vseh zapisanih dejstev ne bi bilo napačno, če bi se odločili za izbiro elektromotorja, kjer bi od izračunane vrednosti moči povečali le-to še za vsaj 50 %. V tem primeru bi lahko zagotovo trdili, da se z izračunom nahajamo v »varnem« področju.
Pri načrtovanju pogonov smo se zaradi cenovne ugodnosti in nezahtevnosti aplikacije odločili uporabiti DC krtačne elektromotorje v odprti zanki. Za nadaljnji razvoj produkta je predvideno povečanje bruto nosilnosti. Tako ob upoštevanju priporočil glede uporabe elektromotorjev z večjo močjo pridemo do vsaj trikratnika trenutne vrednosti. To pomeni tudi novo moč, ki tako znaša preko 100 W za posamezni elektromotor. Pri sistemski napetosti 12 V bi za zahtevano avtonomijo torej morali povečati še kapaciteto akumulatorjev za trikratnik.
Naslednji razmislek gre v smer izbire vrste elektromotorjev in ali le-te tudi zamenjati. Lahko ostanemo na DC krtačnih elektromotorjih, kar je najenostavnejša rešitev, ki ne zahteva sprememb v načinu krmiljenja. Druga opcija je lahko izbira koračnih motorjev z reduktorjem. Tukaj se je pojavil razmislek, da se pri visokih vrtljajih zmanjšuje navor. Tretja opcija bi bila pogon s kakšnimi BLDC motorji.
Daljša testiranja prototipne rešitve Mecanum vozička MB-1/2020 bodo podrobneje pokazala uporabnost, robustnost in zanesljivost delovanja razvojnega produkta. Po testiranju sledi odločitev o nadaljnjem razvoju, spremembah, izboljšavah, kar pa je lahko tema kakšnega novega članka.
Avtor: mag. Marjan Bezjak
Marjan Bezjak s. p.
marjan.bezjak@gmail.com