Urpobotti v2 (with more tank threads)

Continuing the discussion from Helsingin "urpobotti" HSF:n robokisaan:

Versio 2 on rakenteilla, vanhasta rungosta on purettu kaikki hyödyllinen irti (itse runko ja moottorit on bonkkivarastossa, saa käyttää) ja muinaisesta wifi-tukiasemabotista on otettu ylimääräiset ja rikkinäiset palat pois ja siihen ruvetaan seuraavaksi sitten ruuvaamaan kiinni Urpoa elektroniikkaa.

@jari mainitsi että oli tehnyt harjallisen moottorin PID säätimen joskus niin että mittasi back-EMFstä pyörimisnopeuden, tätä voisi harkita nytkin. Perusidea on melko simppeli, laitetaan moottorin H-silta kellumaan ja sitten mitataan ADC:llä moottorin molemmat navat, näiden jännitteiden erotus on suoraan suhteessa moottorin nopeuteen, tämän pitäisi onnistua noin millisekunnissa (mutta ei Arduinon analogRead:illa, pitää osata käyttää MCU:n ADC:tä oikeasti), mittaukset on hyvin meluisia joten suodatusta juotuu tekemään sekä analogisesti että koodissa. Toisaalta kun kerran tekis tästä hyvän kirjaston niin siitä olisi muillekin iloa.

Muista suurista linjoista voi lukea alkuperäisestä threadista, vapaaehtoiseksi robotinrakentajaksi (ja koodaajaksi) voi ilmoittautua täällä.

Back-EMF-menetelmästä löytyy tietoa tältä sivulta. Alussa oleva PDF on minun kauan sitten kirjoittamani, loput sivusta näyttää olevan “reprint” tästä sivusta. Myös tässä on varsin hyvä artikkeli aiheesta.

Rukkasin uuden virtakytkimen ja vanhat regulaattorit uuteen runkoon, lisäksi kokeilin 2S vs 3S akkua (suoraan moottorin napoihin), 3S on ehkä turhan vauhdikas, vaikka tietty PWM:llä voi pudottaa nopeutta.

Moottorien ohjaus pelaa. Kunhan ensin poisti 1k pull-upit h-sillan laudalta sekä korvasi ne 100k versioilla ja sitten laittoi ulkopuolelle 1k pull-downit että botti ei riehaannu kun arduino boottaa. Mutta vaihteistossa on vikaa, kts alla

Itse back-emf:ää ei nyt ehtinyt/jaksanut ajatella. Tuo yksi ratas pitäisi korjata/korvata ja toisen puolen vaihteistossa sama ratas on myös halki mutta vähemmän, samaan vaivaan olisi syytä fiksaa molemmat.

Ihan btw. Uteliaana näitä keskusteluja seuraavana kaipaisin kuvia aiheesta,
sivistävää.

Enemmän kuvia löytyy tuolta: https://plus.google.com/photos/+EeroafHeurlin/albums/6108359640061937889

Vai oliko hakusessa esim kuvia as in kytkentäkaavio tms ? En varmaan noista pikaisesti täplälevylle kolvatuista sovitteista tai hyppylangoilla viritetyistä jaksa moisia piirtää. Sitten tietty jos tekis jonkun pysyvämmän ratkaisun niin on pakko ensin piirtää schemat että voi tehdä piirilevyn layoutin jonka syövyttelee.

Uusi vaihteisto tilattu saksasta. Katsotaan saadaanko miten nopeasti perille. Back-EMF kokeita voi tehdä tuolla olemassaolevalla pakalla kun ruuvaa jonkun painon siihen akseliin.

Vastasähkömotorisen voiman (siis tekniikkasanasto toimii myös suomeksi :smile: ) mittaaminen näin pienestä moottorista edellyttää kyllä ehdottomasti ankkuriresistanssin huomioimista. Muuten mittaustulokset on mitä sattuu. Valitettavasti se tarkoittaa samalla, että myös ankkurivirta on mitattava.
Ideaalisessa tasavirtamoottorissa ankkurin kierrosluku on suoraan verranollinen ankkurijännitteeseen ja vain siihen. Vastaavasti vääntömomentti on suoraan verrannollinen ankkurivirtaan ja vain siihen. Ideaalisen tasavirtamoottorin ankkuriresistanssi siis on 0, joten se ei ota tyhjäkäyntivirtaa lainkaan, eikä vääntömomentti vaikuta vasta-SMVn arvoon, vaan ainoastaan koneen kierrosluku. Näin ideallisen moottorin pyörimisnopeus on lineaarisesti suhteessa napajännitteeseen.
Näin ei ole käytännön moottorilla jonka ankkuriresistanssi on >0. Napajännite on vasta-SMV:n ja ankkuriresistanssin jännitehäviön summa. Eli mitä enemmän kone vääntää, sitä isompi ankkurivirta ja sitä isompi jännitehäviö ankkuriresistanssin yli. Tämä häviö pitäisi mitata ja vähentää napajännitteestä, jolloin jäljelle jää aito vasta-SMV jännite. Se on suhteellinen kierroslukuun.

1 Like

Näin varmaan teoriassa, mutta käytännössä toimii ihan hyvin, vaikka noita ei otakaan huomioon. Tuolla ylempänä linkittämässäni selostuksessa käytin tätä moottoria, joka on suunnilleen saman kokoinen kuin tuossa tankissa. Mittaustulosta käytettiin moottorinohjaimessa kierrosnopeuden PID-säädön inputtina, ja tulos oli ihan käyttökelpoinen. Käytännössä isompi ongelma on, että mittaustulos on erittäin häiriöinen.

Eilen tehtiin mittauksia skoopin kanssa tuosta back-EMF:stä ja tein leiplaudalle pienen proton jännitteen skaalauksesta ja RC-filtteristä, kolvailen joutessani täplälevylle neljä samanlaista (yksi per moottorin napa) lisää ja laitan varoiksi vielä didiot suojaksi ettei pääse negatiivisen puolelle myöskään nuo piikit)

RC Suodatuksen jälkeen signaali itseasiassa on yllättävän siisti mutta kaipa siitä on silti syytä ottaa esim 5 samplea, hylätä korkein ja matalin ja sitten keskiarvottaa loput kolme.

No prkl, ei ihan vastannut laatuodotuksia nämä, pitää reklamoida kauppiaalle:

Tämä ei ole linssin aiheuttama vääristymä, se on oikeasti noin kiero.

Ja tästä puuttuu puoli hammasta…

No eiköhän ne silti toimi paremmin kuin nuo vanhat haljenneet muoviset…

@jautero haki kotimaisesta kaupasta toisen vaihteiston, jossa tosin oli vääränmalliset output akselit ja akselin vaihto siitä rattaalta osoittautui mahdottomaksi. Otin kuitenkin tästä yksilöstä uudet rattaat saksasta saapuneeseen huonojen tilalle, lopputulos on tyydyttävä, tosin mekkala on yhä aivan käsittämätön joten tein osittain siksi ja osittain suojaksi tämmöisen “konepellin”

Back-EMF mittaus toimii tällaisella vastusjakaja+RC-filtteri -virityksellä hyvin

Ja tämän artikkelin perusteella en ruvennut suuremmin sen ADC:n kanssa hienostelemaan, nostin ADC-kellon tuplaksi mutta muuten analogRead kelpaa ihan hyvin, kts backemf_test.ino.

Itseasiassa se RC-filtteri yksinään on jo sen verta tukeva että nuo ADC-arvot ei juuri heittele joten keskiarvotus on vähän hätävarjelun liioittelua.

Oviprojektin jäljiltä oli jäänyt yli tämmöinen ei-läpinäkyvällä kannella varustettu asennuslaatikko johon Pandaboardi näytti mahtuvan hyvin

Joten pienen sovittelemisen ja kahden spacerin kyhäämisen jälkeen ruuvasin sen bottiin

Seuraavaksi pitää tunkea vielä loput johdot laatikon sisäpuolelle ja sen jälkeen voikin tunkkaa PID-säädön moottereille ja sitten vanhalla softalla pääseekin jo koeajolle.

Nyt on elektroniikka laatikossa, UÄ-anturit paikallaan ja homma periaatteessa softan hienosäätöä vaille valmis

Harkitsen hiukan että sahaisin tuon kannen auki ja laittaisin siihen kirkkaan plexin mutta en ehkä jaksa

Laatikon takana pieni plexilevy suojaamassa akkuliitintä yms sateelta.

Softapuolella PID-säätimen tuning-arvot on aika pahasti vielä hakusessa, voi olla että osa ongelmaa on se että output PWM-arvo on aivan eri luokassa (-127 - +127) kuin setpoint/mitatut arvot (-500 - +500), tietty ne mitatut back-EMF arvot vois vaikka kokeilla jakaa neljällä ja sitten laittaa erinäköiset tuning-arvot.

Tätä back-EMF mittausta ja PID-säätöä moottoreissa lukuunottamatta softapuoli on samassa kuosissa kuin ennenkin (eli wifin yli voi antaa ajokäskyjä mutta omaa älyä ei ole).

Yleinen tapa säätötekniikassa on normalisoida kaikki ohjaus- ja mittasuureet nimellisarvoalueisiin, esim -1…0…1 tms. Tällöin vaikkapa liikenopeuden lukuarvot skaalataan kertoimina johonkin maksiminopeuteen suhteutettuna. Jos vaikka vedetään hatusta, että robo pystyy maksimissaan liikkumaan 75 cm/sek niin asetetaan se nimellisnopeudeksi joka saa skalatun arvon +1,0. Täysiä taakse olisi tällöin -1,0 jne. Samoin vetomoottorin kierrosluku skaalataan niin että täysi nopeus eteen on 1,0 jne.
Tällöin (PID) säätäjän toiminta-alue on aina -1 … +1 ja kaikki viriarvot ovat aina suhteellisia tähän skaalaan. Samoin säätäjän lähtö on aina skaalattu -1 … +1 joka tarkoittaa toimilaitteen (moottorin) minimi- ja maksimikomentoa. Pitää vaan normalisoida/denormalisoida sisään ja ulos menevät signaalit.
Tästä on mm se hyöty, että säätäjän käyttäytyminen pysyy vakiona (siirtovasteen navat ja nollat pysyy paikoillaan vaikka mittasuureiden todelliset arvot muuttelisivat.

Näimpä mutta kun tuo liukulukulaskenta on 8-bittisellä AVR:llä “vähän” hidasta niin mieluummin ehkä ei. Mutta jos nyt vaikka aloittaisi skaalaamalla sen backEMF mitta-arvon samalle tontille kuin säätimen outputti, se kun menee vielä aika simppelillä integerijaolla (ja itseasiassa koska tässä neljällä jakaminen olis muutenkin varmaan paras niin se menee ihan bitshiftauksella)

Fixed pointina nuo kaikki pitäisikin laskea. Ei tuohon liukulukumeininkiin ole mitään oikeaa tarvetta muuta kuin, että se Ardun kirjasto on väännetty liukuluvuilla.
Kaikki mitta-arvothan tulee joka tapauksessa sisään integer-tyyppeinä joten ne tarvii vain skaalata kerran ja sen jälkeen homma on hoidettu.

Mutta eipä ehkä kannata juuri tähän väliin alkaa tuota säätämään. Kunhan saan nämä nyt menossa olevat projektit pois näpeistä niin voisin julkaista kiinteän pilkun aritmetiikkakirjaston ja PID-säätäjän joka on sovitettu sille. Olen itse käyttänyt ensin mainittua hyvällä menestyksellä yhdessä laskentaprojektissa jossa se osoittautui hyödylliseksi ja toimivaksi. Siitä voisi tehdä vielä templaattipohjaisen niin lukualueet ovat vapaammin skaalattavissa.

Nyt kun vastustajiin on valettu kauhua ja eivät enää ehdi reagoida asiaan (suuremmin) esitellään urpobotin salainen ase “kaunein botti” -kilpailussa

Tuli näköjään tehtyä mittavirhe sentit vs tuumat ja vähän pieni tarra (jossa on muuten todella ohuita viivoja, melkoinen haaste oli saada se ehjänä leikattua ja siirrettyä)

Miten niin eivät ehdi? Onhan tässä vielä lähes seitsemän tuntia aikaa.

No loppupeleissä kävin kuten siinä kuuluisassa vapaussodassa, juuri ikävä raekoko hiekassa meni pahasti teloihin ja vääntökin loppui kesken (se että vaihteistoa oli pakko tuunata kasaamalla uudet parin osista ehkä vaikutti asiaan, samoin ehkä pitäisi kuitenkin käyttää kovempaa akkujännitettä, tai mitata back-EMFfää harvemmin tai jotain…)

Yleisön kosiskelusta huolimatta Turku otti säälipisteillä hienoimman robotin palkinnon (Tampereen isopyöräinen oli ainoa joka selvisi radan läpi asti…)

Edit: tampereen botin piirustukset ja koodi https://github.com/mokis/MServo

BackEMF -mittauksesta on näköjään tämmöinenkin artikkeli (bongattu Dangerous Prototypesin feedistä) http://www.precisionmicrodrives.com/application-notes-technical-guides/application-bulletins/ab-021-measuring-rpm-from-back-emf