RoboteQ valdiklio paleidimas

3kW motoro jungtis - Anderson 30A

Iškart įspėju, tekstas ilgas. Tingintiems skaityti: veikia, bet yra niuansų. Daugiau informacijos žemiau.

Kaip rašiau ankstesniame įraše, parkeliavo stebulinis motoras MXUS 3000 v2 3T. V2 reiškia, kad antra versija (suprask – geresnis), o “3000” greičiausiai reiškia kinišką galingumą (o gal ir tikrą?). Bet laidai ir jungtis laiko tik 30A… Suprask, kaip patinka.

Nelabai maloni naujiena – 15.2kg rato svoris, o Ryčio duomenimis, pliko motoro svoris – 9.25kg. Todėl pirma maloni naujiena – jokio žingsniavimo (cogging). Pamenu, su Crystalyte X5303 buvo nelabai malonu važiuoti, nes žingsniavimas buvo toks stiprus, kad ties tam tikrais greičiais užrezonuodavo stipinai ir visas dviratis. O čia – visiškai nieko, sukasi lyg paprastas ratas (tik aišku sunkiau). Reiškia progresas šioks toks yra.

Motoro valdiklis

pfolder_mbl1650cKadangi dirbu su standartine industrine įtampa (48V), galiu sau leisti naudoti industrinę įrangą. Tam pasirinkau universalų programuojamą RoboteQ valdiklį MBL1660, kuris duoda 120A fazinės srovės. Beje, RoboteQ turi ir labai smagių miniatiūrinių 30A valdiklių – SBL1360. Šie valdikliai, šalia visiškai neadekvačios kainos, turi RS232, USB, CAN ir keletą programuojamų įėjimų-išėjimų. Taipogi yra speciali vartotojo erdvė, kur galima rašyti savo skriptus, pvz. apdoroti išorinius signalus, pasirašyti PID akceleratoriui, stabdžiams ir t.t.

Daiktas nepigus – $225 + siuntimas per kurjerį + išmuitinimo popieriai 45€, + muitas 3% + PVM 21%. Supraskit teisingai, pinigų iš čiužinio netraukiu. Turėjau tokiam daiktui kelis reikalavimus:

  1. Kompaktiškas;
  2. Turi analoginį regeneracijos valdymą;
  3. Dirba Torque mode, t.y. sukimo momentas (fazės srovė) proporcingas akceleratoriaus pasukimui.
  4. Sinusinis valdymas, idealiu atveju.

Roboteq MBL1660 PCBTai realiai buvo vienintelis pasirinkimas… Ir praktiškai idealiai atrodantis. 120A gal kiek mažoka, kadangi mano atveju (45V) pikinė galia gaunasi 5.4kVA. Paverčiant į W, įvertinant visokiausius kritimus, maksimalios galios tašką ir t.t. ir pan., reali galia bus koks 3kW. Na, iš bėdos su eismu judėti turėtų pakakt.

Beje, šitas daiktas gražiai išsiima iš korpuso ir gamintojas tai netgi pateikia kaip privalumą: plokštę galima prisukti prie savo aliuminio gabalo ir viskas bus gerai. Plokštės matmenys – 107x107x24mm. Vienintelė bjaurastis, kad viskas coliais… Na bet ne tragedija.

Valdiklio viduriai

Roboteq MBL1660 PCB components

Visa valdiklio magija tupi mikrovaldiklyje STM32F103, tai labai tikėtina, kad yra naudojama STM biblioteka FOC SDK, kas yra, greičiausiai, gerai. Kitas dalykas – valdiklyje nematau nei vieno srovės šunto. Gerai apžiūrėjus pasimatė tik vienas keistas platus takelis plokštės dešinėje, kuris greičiausiai yra naudojamas vietoje šunto. Nematau tame problemos, didelis tikslumas čia nėra reikalingas, tačiau problema yra kitoje vietoje: matuojant tik baterijos srovę, fazės srovė yra nematoma ir šios vertės turi būti realiu laiku išskaičiuojamos iš baterijos srovės ir PWM pločio. Iki šiol visi bandyti valdikliai šioje vietoje stipriai feilindavo ir pasitaikydavo, kad sprogsta su minimalia ar net visiškai be apkrovos. Kitas dalykas, STM32F103 net neturi aparatinių komparatorių trijų fazių srovei stebėti ir daryti cycle-by-cycle srovės ribojimą. Jei čia naudojama STM motorų biblioteka, tikėtina, kad sroves suvaldo neblogai, bet prie mažo induktyvumo motoro (≤30μH) jau nerizikuočiau jungti. Kai susirašinėjau su gamintoju, į induktyvumo klausimą nesugebėjo atsakyti, tik visaip amerikietiškai suko temą į šoną ir apsimetė durniais (o gal vadybininkas iš tikro nesuprato apie ką eina kalba?). Jei daryti normaliai, turėtų būti naudojamas STM32F303 ir bent du srovės sensoriai (nes trečio reikšmė išskaičiuojama iš pirmų dviejų, kadangi I1+I2+I3=0). Tai šioje vietoje nežinau kaip suprasti, ar sutaupė mikrovaldikliui, ar tiesiog nelabai žino kas kaip.

Tarp tranzistorių yra pastatytas termistorius, tai temperatūros apsauga vis tik yra. Apskritai komponentų rinkinys maloniai nustebino: visi iš gerai žinomų gamintojų, nuperkami beveik tą pačią dieną, lengvai randama dokumentacija. Bet tuo pačiu tai pasako, kad RoboteQ kompanija dar jauna ir apimtys nedidelės. Plokštė 4 sluoksnių (manau tam nebuvo būtinybės).

Galios tranzistoriai – IRFS3107, po du lygiagrečiai. 75V 195A 2.5mΩ, tai, teoriškai, maksimali fazinė srovė – 390A… Prieš kelis metus, kai ieškojau gerų tranzistorių savo valdiklio projektui, būtent tokius ir pirkau (tik 7 kojų, kurie laiko 240A, kadangi tai jau buvo geriausia, ką galima nusipirkti. Smagu, kad šioje vietoje netaupė.

Tranzistorių draiveriai – LM5107. 100V 1.4A, visiškai jokių apsaugų, nieko. Vėl standartinis daiktas. Vienintelis pliusas – mažai kojų ir integruotas bootstrap diodas. Gal ne labiausiai cost-efficient sprendimas, bet paprastas ir aiškus, taigi dar kartą įsitikiname RoboteQ inžinierių kompetencija.

Logikos maitinimo keitiklis – LM5574. Maksimali įtampa 75V, išėjimo srovė 0.5A. Integruotas vienas tranzistorius, tačiau keitiklis yra asinchroninis ir reikalauja išorinio diodo, tampa mažiau efektyvus (bet atsparesnis dideliems įėjimo įtampos svyravimams, kurių čia bus). Kiek matau iš plokštės, shutdown funkcija nenaudojama (apie laisvos eigos energijos sąnaudas niekas nepagalvojo). Keitiklis srovės ribojimo neturi, tik temperatūros. Tad geriau netrumpinti. Šis keitiklis greičiausiai daro ~12V maitinimą mosfetų draiveriams, o už jo stovi linijinis 3.3V reguliatorius mikrovaldikliui. Plokštėje yra dar vienas SOT-23-5 reguliatorius kažkam, o šalia jo stovi dvikanalis operacinis LM4558, neaišku ir nelabai įdomu kam.

Plokštėje taip pat yra MAX3232 RS-232 keitiklis, neizoliuotas SN65HVD1050 CAN keitiklis (irgi jokio sleep, jokio activity detection) ir dvigubas SO-8 tranzistoriaus kontaktoriaus valdymui.

Verta pastebėti, kad beveik visi komponentai yra ST arba TI. Realiai, jei šioje rinkoje bent kiek veiktų ekonomikos dėsniai (t.y. būtų reali konkurencija), jie pasispaudę laisvai galėtų šitą daiktą pardavinėti 3x pigiau. Čia turbūt labai tinka žodis “overpriced“. Suprantu, kad programinė įranga, maži pardavimai ir t.t., na bet…

Kontaktas

Roboteq MBL1660 DC/DC modPrijungus maitinimą tik prie galios raktų, pasimato pirma problema – užsižiebė status LED, viskas užsikūrė. O taip turėtų nutikti tik prijungus maitinimą prie papildomo logikos maitinimo. Tą pačią problemą turėjome ir su mažaisiais 30A valdikliais darbo projekte, bet ten pakako tik pašalinti vieną diodą. Niekaip negaliu suprasti kodėl taip buvo padaryta, kai šalia yra logikai užmaitinti skirtas kontaktas. Gal tiesiog dėl paprastumo, kad prijungus maitinimą prie vieno kontakto iš karto viskas veiktų?

Kad ir kaip ten bebūtų, aš jokio kontaktoriaus nedėsiu ir toks veikimas tik trukdys – nuolat valgys bateriją, net sandėliuojant. O valgo gan nemažai, gerus 150mA. “Remontas” paprastas – pašalintas vienas diodas (ten jis stačias, nes taip pasidėjau, kad nepasimestų) ir viskas veikia, kaip turėtų. Tik problema – prie 30V maitinimo vis tiek ima 660μA. Diodai ir kondensatoriai tokio nuotėkio neturėtų sudaryti (o gal?), tai greičiausiai bus kažkur mažas bleeding rezistorius. Iš pirmo žvilgsnio nepasimatė, tai, kadangi tokia srovė mano bateriją galėtų iškrauti per maždaug 13 metų, šiuo metu nekreipsiu dėmesio.

Toliau prijunginėjant motorą pasimato holo sensoriaus jungties kvailumas…

Roboteq MBL1660 hall connector

Ir ne, tos šukos už jungties – kitiems reikalams…  Šita Molex jungtis ne tik kad yra brangi (palyginus su kitomis), bet dar ir jos kontaktai kokybiškai neužsispaudžia su biudžetinėmis replėmis. O už $2500 reples pirkti tai.. na, kvaila. Kitas dalykas, nepridėti <$1 vertės jungties su paruoštais laidais, kai gaminio kaina $225 – tiesiog įžūlu. Žinot, kiek jie už šią jungtį prašo papildomai? $19!! Laimei,radau tarp savo chlamo šito modelio, tik didesnę jungtį ( ;-) – tiems, kas žino, iš kur), kuriai padarius apipjaustymą, viskas tiko, beveik:

Modified Molex connector Modified Molex connector

Kitas žingsnis – rasti mini USB kabelį. Dabar tokių jau nelabai kur rasi, visur micro USB… Namie neradau, parduotuvės savaitgalį uždarytos… Šitoj vietoj tikrai nesitikėjau strigt. :) Bet kažkaip subūriau iš visokių galiukų. Beje, USB visada naudoju su izoliatoriumi, kadangi jau pasimokiau – užmušiau vieną laptopo portą. Baisiai jautrus ir neindustrinis dalykas tas USB.

Laikas jungti. 3.. 2.. 1.. STOP. Reikia dar pasiruošti… Su šitais motorais, iš 6 galimų holo sensoriaus jungimo kombinacijų, pirma visada būna neteisinga. O tokiu atveju, atsukus akceleratorių, galima išvysti dūmelį (na gal labiau tai galioja Kinijos produkcijai). Pirmo jungimo metu rekomenduotina kažkaip apriboti srovę, todėl naudoju laboratorinį maitinimo šaltinį: įtampą pasuku iki max (30V), o srovę nustatau 5A.

Įjungiu valdiklį, prijungiu USB, pasileidžiu RoboRun programą. Viskas iš pirmo karto pasileidžia. Akceleratorius dar neprijungtas, todėl greitį reguliuoju šliaužikliu programos lange. Vos pastumiu į šoną ir pasigirsta kliukliukliukliuk… Viskas aišku, neteisinga sensoriaus kombinacija. Liko 5. Apkeičiu laidus ir bandau dar kartą. Ir dar kartą. Iš ketvirto karto sukasi, bet gana garsiai ir srebia daugokai srovės, negerai, nepataiko į fazę. Bandau toliau. Žodžiu, teisinga kombinacija yra paskutinė, kaip visada. :)

Programinė įranga

Tai – pagrindinė produkto pridėtinė vertė. Anksčiau to nesuprasdavau ir nevertindavau, tačiau savo kailiu patyriau, kad geras produktas reikalauja geros programinės įrangos, o pastaroji reikalauja mažiausiai 10 kartų daugiau laiko ir pastangų, nei pats gaminys. Todėl RoboteQ produkcija labai maloniai nustebino.

roborun

Į abi puses sukasi vienodai gerai, prie 31V maitinimo įtampos, ima ~1.4A. Dirba išties tyliai, bet vis tik girdisi trapecinis valdiklio fazių junginėjimas. Toks įdomus pastebėjimas: by default, numetinėjant greitį, jis regeneruoja… Čiut nenukepiau maitblokio. Akivaizdu, kad galios grandinė veikia sinchroniniu režimu, kas yra labai gerai – žymiai mažiau kaista. Pavyzdžiui, Kelly tai stato kaip didelį privalumą, kadangi visi kiti kiniški valdikliai to nemoka. Dar kilo mintis, kad valdiklis veikia kažkokiu closed loop speed režimu, bet pažiūrėjus nustatymus pasimatė, kad open-loop. Na, gal jie turi kažkokią neigiamos srovės ribą, kai skaitosi kad motoras freewheelina, apsidraudžiant, kad negreitėtų. Su sinchroniniu valdymu ši vieta yra tokia truputį sukta. Yra metodų, žinoma, bet reikia papildomai pasukti galvą kaip viską suvaldyti. Žemiau yra kiek patogiau pateiktas grafikas.

Srovės rodo kiek virš 2.5A, nors realiai maitinimo šaltinis sako 1.4A. Greičiausiai tai tik offsetas ir realios įtakos veikimui neturės. Tačiau noriu susifokusuoti prie grafiko… Gražiai matosi kaip motoro greitis atkartoja šliaužikliu užduotą greitį (kad rodytų teisingai, reikėjo sukonfigūruoti motoro polių skaičių). Ir dar matosi kaip stabdymo metu pakyla maitblokio įtampa. Biškį sudrebėtų ranka ir numesčiau per greitai, kitą dieną būtų bloge įrašas kaip susiremontuoti maitblokį… :) Dar toks pastebėjimas, kad fazės junginėjamos net kai užduotas greitis = 0, tai gaunasi kaip užtrumpinti laidai ir nelabai sekasi pasukt…

Kad jau naudoju transporto priemonėje, reikia nusistatyti Torque Mode. Tai yra labai geras parametras, kadangi padavus neigiamą sukimo momentą gaunamas stabdymas, kol važiuoji į priekį. Tik svarbu išjungti, kai jau esi sustojęs, nes pradės važiuot atbulas. :) Gerai, kad galima apriboti atbulinį greitį ir galią. Taip pat reguliuojasi tokie dalykai kaip maksimalus pagreitis, kas irgi yra labai patogu apriboti visokius netyčiukus. Nustačiau šitą režimą, bet PID kažkaip negražiai veikia su 5A maitinimo šaltiniu, trūkčioja. Reikės pareguliuot parametrus.

config2Tik niekaip nesuprantu kaip ten yra su tuo Sinusoidal Switching Mode. Prie Angle Sensor leidžia pasirinkti holo sensorių, tačiau jei prie Switching Mode pasirenku Sinusoidal, valdiklis persikrauna ir vėl matau Trapezoidal. Kažkur dokumentacijoje rašo, kad sinusiniam darbui būtinas papildomas enkoderis, tai pakeitus šitą parametrą jis matyt užkrauna kitą motoro valdymo biblioteką ir pasitikrina ar yra prijungtas enkoderis. Na ir jei ne, krauna trapecinį variantą. Manau, kad perkrovimo jam reikia, kadangi STM FOC SDK yra didžiulis gremėzdas ir ne taip paprasta su juo tvarkytis.

O beje, kaip matot, galima ir PWM dažnį keisti. Pakaitaliojus pasimatė, kad maksimalus dažnis yra 20 kHz.

Nustatymų gana daug, bet vis tik neradau kaip išjungti mosfetus, kai akceleratorius nepasuktas, t.y. kad gauti freewheeling funkciją. Visuose kiniškuose valdikliuose tai yra savaime suprantamas dalykas, o čia va, kažkaip nesigauna.

Išvados

Na tai šiam kartui tiek. Rato į dviratį dar neįdėjau (sukinėju ant stipinavimo stendo), prie baterijos dar irgi nejungiau. Gal ryt-poryt…

Apibendrinant, privalumai:

  1. Itin kompaktiškas 48V 120A sprendimas
  2. Trapecinis ir sinusinis valdymas
  3. Komunikabilumas
  4. Konfigūravimas be papildomų brangių kabelių
  5. Lankstumas programuojant funkcijas
  6. Sukimo momento režimas
  7. Reversavimas, visokiausi apribojimai
  8. Darbinių parametrų (pvz.: RPM, temperatūra, įtampa, srovė) skaitymas realiu laiku

Trūkumai:

  1. Sinusiniam darbui būtinas papildomas enkoderis.
  2. Mandra holo sensorių jungtis, kuri neįeina į komplektą (bet tuo pačiu labai gremėzdiška universalių kontaktų jungtis)
  3. Gana stati mokymosi kreivė viską paleidžiant
  4. Į komplektą neįeina net pačios būtiniausios jungtys, o papildomai užsakant kiekvienas laidelis kainuoja absurdiškus $19.
One Comment

Leave a Reply to Šarūnas Cancel reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.