Linear Modular DC kameramozgató rendszer

A korábbi time-lapse fotózáshoz fejlesztett Linear Basic kamerasín vezérlőrendszer folytatásaként 2014. év tavaszán kezdődött egy hasonló, de jóval nagyobb tudású rendszer fejlesztése. A korábbi projektnél kialakult leosztás szerint ebben a munkában is a teljes elektronikai fejlesztését kaptam feladatul, viszont az elvárások és a technikai követelmények hatalmasat ugrottak.

A Linear Basic sín egy egytengelyes kameramozgató megoldás volt, ráadásul egy helyen volt mind a mozgatást végző motor, mind pedig a vezérlőelektronika és a beállítás, paraméterezés is a helyben kialakított kezelőfelületen működött. Ezzel szemben ennél az új moduláris rendszernél 5 tengelyt kellett valós időben szinkronizáltan vezérelni. A legnagyobb kihívást az jelentette, hogy minden hardveres periféria különálló szerkezeti modulban kapott helyet, így az összeköttetésükről is gondoskodni kellett, mindezt egyetlen szál vezeték felhasználása nélkül. A rendszert manuális pad segítségével, illetve egy tabletre megírt célalkalmazás segítségével is tudni kellett vezérelni, ezért Wi-Fi kommunikáció kialakítására is szükség volt.

Többszöri egyeztetés és megbeszélés után összeállt egy nagyon részletes technikai specifikáció arról, hogy a rendszernek mit kell tudnia és hogyan kell működnie. Egy pár fontos szempont:

  • maximum 5 tengely vezérlésének megvalósítása
  • vezeték nélküli kommunikáció
  • kézi vezérlőpad segítségével történő mozgatás
  • manuális mozgatási paraméterek beállíthatósága (maximum sebesség, damping, deadband)
  • tableten futó alkalmazás által történő vezérelhetőség vezeték nélküli kapcsolaton keresztül
  • mobil kivitel miatt minimális méret, kis fogyasztás
  • minden részegység Li-ion akkumulátorról működik
  • akkumulátorok töltésének megoldása, ezzel kapcsolatos védelmek, monitorozási lehetőségek beépítése

A tengelyek vezérlése kézileg lehetséges egy erre a célra kialakított manuális vezérlőpultról joystick és potméterek segítségével. A központi vezérlő vezeték nélküli rádiós kapcsolat segítségével állandó összeköttetésben áll a tengelyek hajtásvezérlő egységeivel és minimális késleltetési idővel képes azokkal adatcserét bonyolítani úgy, hogy a vezérlés során ne legyen tapasztalható emiatt késés. A fejlesztés során a legnagyobb kihívást ez jelentette, de a hosszas és kitartó munka eredményeként sikerült ez az időt tengelyenként 3ms időre redukálni, így 5 tengely működése esetén is a rádiós kapcsolaton keresztül megvalósított kétirányú adatkommunikáció ciklusideje nagyjából 15ms hosszú lett. Ezzel megvalósult az egyik legfontosabb specifikált paraméter mely ezt a szinkronidőt maximum 20ms-ban határozta meg.

Kommunikáció vezetékek nélkül

A rádiós kommunikáció kialakítása bonyolult és összetett. Nem elegendő az szinkronidők tartása, de tudnia kell rugalmasan kezelni a csatlakoztatott hajtásokat, mivel a rendszert bármennyi, de maximum 5 hajtással is összerakható és működtethető. Alapesetben a slider, pan, tilt tengelyek lesznek jelen minden modell esetében, de a rendszer kiegészíthető lesz focus és zoom vezérlését lehetővé tévő tengelyekkel is, ugyanakkor szimplán csak egy slider tengelyt is tudnia kell működtetni.
Az adatszinkronizáló rutint ennek megfelelően kellett elkészíteni, továbbá a rádiós kapcsolat sérülékenységét is tudni kellett úgy lekezelni, hogy átmeneti zavarok miatt kimaradó csomagok sem okozzanak fennakadást és az átvitel egy 1ms időre se álljon le még hiba esetén sem.

A rádiós adatcserét a Nordic NRF24L01+ transceiver áramkörével oldottam meg. Ez 2,4Ghz frekvencián maximum 2Mb/s adatátviteli sebességre képes rádiós adó-vevő áramkör. Az Enhanced ShockBurst technológiának köszönhetően automatikus csomagkezelésre és CRC-re képes, valamint a CSMA-CA közeghozzáféréséből adódóan paramétereit megfelelően konfigurálva számos hasznos funkcióval rendelkezik.

A rádiós egység kezelését először kész programkönyvtárakkal igyekeztem megoldani, hiszen ha az ember már magas szintű nyelven programoz és a feladat is ennyire összetett, akkor ilyen alapszintű dolgokkal ne kelljen külön foglalkozni. Hát ez az elképzelésem nem jött be, ugyanis a fejlesztés időszakában egyik előre megírt programkönyvtár sem volt alkalmas arra, hogy a modul teljes tudását ki tudjam használni. Ezt sajnos átalakítással sem sikerült elérnem, így arra jutottam, hogy az alapoktól kezdve megírom magamnak a szükséges függvényeket, melyek segítségével valamennyi funkciója kihasználható a transceiver egységnek. Ez viszonylag hosszú időbe telt, hiszen szinte egy assembly nyelv használatához szükséges szintig le kellett menni a hardver minden egyes részének, funkciójának a megismeréséig, megértéséig. Mivel a kódot C++ nyelven írtam, így nem szándékoztam assembly betétekkel tarkítani a kódot, így ezt a kis keretprogramot is C++ nyelven valósítottam meg. A több hónapnyi munka végül meghozta a várt eredményt, ugyanis képessé tettem a rádiós egységet a lehető leggyorsabb kommunikációra úgy, hogy mindez két irányban, akadás és összeomlás nélkül képes legyen működni, valamint egyedül a saját kódommal sikerült a MultiCeiver üzemmód elindítására is, mely segítségével csillag topológiájú RF hálózat építhető ki egy központi transceiver és további 6 db node között. Mivel nagyon sok időt felemésztett a megfelelő sebességű rádiós kommunikáció létrehozása, a csillag topológia szerinti működést talonba lett téve és a rendszer egyelőre szekvenciális lekérdezést használ, viszont időben még így is jóval a meghatározott 20ms alatt teljesít.

A rádiós kommunikáció nehézségeinek leküzdése után újabb sarkalatos pont volt a hajtásoknál a DC motorok hajtásainak vezérlése a klasszikus PID algoritmus használata nélkül, ugyanis ennél a rendszernél nem lehet beégetett PID paraméterekkel mozgatni, mivel egyrészt a tengelyek között mechanikai felépítésben vannak alapvető különbségek. Más mechanika, más áttétek és motorok. Másrészt eltérő, előre pontosan nem meghatározott tömeget fognak mozgatni, illetve például a slider pálya nem csak vízszintes helyzetben állítható fel, hanem előfordulhat, hogy 30-40 fokkal döntve.
Minden tengely beépített inkrementális enkódert tartalmaz, mely az útméréshez és a sebesség kiszámításához nélkülözhetetlen. A nagy felbontás nagyon pontos pozicionálást tesz lehetővé. Ez sokszor annyira pontos mérés, hogy a mechanika már nem is képes olyan pontosan működni, így a mechanikai határokhoz igazodva hibaértékek kerültek beprogramozásra, hogy a rendszer megfelelő működésre legyen képes és az elektronikai rendszer képes legyen tolerálni a mechanikus szerkezet hibáit.
A nagy felbontású enkóder az áttétes hajtóművek miatt nagy mennyiségben adja be az impulzusokat az útmérő számlálónak. Impulzust veszíteni nem lehet, hiszen az az útérés hibájához vezet, ugyanakkor vezeték nélkül is tartani kell a kapcsolatot a központi vezérlővel, ami a rádiós kommunikáció maradéktalan kiszolgálását igényli. A kettő sajnos nem fért meg egy kontrolleren belül, hiszen két magas prioritású feladatot kell ellátni úgy, hogy bármelyik időpillanatban szükség lehet útmérőt módosítani és rádión kommunikálni, illetve ezekkel együtt mozgatást végezni és egyéb matematikai és mozgató, adatmanipuláló feladatokat végezni. Ennek okán úgy döntöttem, hogy két mikrokontrollerre bízom a hajtásnál felmerülő feladatok elvégzését.

Hajtásvezérlések

Az alapszintű, hajtással kapcsolatos feladatok elvégzését egy PIC18F14K22 kontrollerrel oldottam meg. Ez dolgozza fel az enkódertől érkező jeleket és az ebből származtatott mérési értékeket is ez a kontroller állítja elő. Itt történik a DC hajtás vezérlése egy speciálisan a feladatra fejlesztett algoritmus segítségével, ami hasonló, mint a PID, de önhangoló. Ezt a kódot a legjobb optimalizálhatóság és nagy hatékonyság elérése végett természetesen assemblyben írtam.
A kommunikációs interfész kezelését, egyéb lebegőpontos számítások, adatkonverziók elvégzését pedig egy PIC32MX340F512 kontrollerre bíztam. Ez enyhén túlméretezettnek érzem, de mivel ezen kezdtem a fejlesztést, más sok kód erre volt optimalizálva és az idő rövidsége miatt már nem volt lehetőségem átírni a kódot egy kisebb teljesítményű kontrollerre.

DC hajtásvezérlő

A projekt kapcsán első ízben kellett dolgoznom QFN tokozású alkatrészekkel, melyek nem éppen hatalmas méretükről és könnyű beültethetőségükről híresek. Természetesen ezen alkatrészeknek a szerelésére is megvannak a technológiák, módszerek. Az új tokozások használata miatt indokolttá vált némi infrastruktúra fejlesztés, illetve elméleti és gyakorlati ismeret megszerzése a jó eredmény elérése érdekében. Az alábbi képen látható forrasztás ugyan már a többedik alkalommal készült, de az elsők is néztek ki így.

DC hajtásvezérlő

Központi vezérlőegység

A központi vezérlőegységet egy PIC32MX795F512 kontroller köré terveztem. Ez egy nagyobb teljesítményű mikrovezérlő az előzőhöz képest, viszont a tervezett feladatra optimálisan ki lett használva. A nagy lábszámnak köszönhetően minden külső egységet közvetlenül hozzá lehetett csatlakoztatni, így külső kiegészítő áramkörökre nem igazán volt szükség.

A nagyobb sebességű működés céljából az NRF rádiós transceiver és a Wi-Fi modul külön SPI buszon kapott kommunikációs lehetőséget, így nincs szükség kiválasztó logika alkalmazására. A Wifi kapcsolat létrehozásához a Microchip MRF24W modulját használtam. Ehhez elérhető volt a gyártó által készített komplett programkönyvtár, illetve TCP és UDP stack. A rendszerhez tartozó szoftver IOS rendszerre lett kifejlesztve és iPad eszközökre optimalizált a megfelelően nagy képernyőméret igénye miatt. Az iPad Wi-Fi segítségével össze tud kapcsolódni a központi vezérlőegységgel és a rajta futó alkalmazás képes a rendszer teljes körű monitorozására, valamint mozgatások vezérlésére is.

Erre az egységre sem modul szintjén építettem rá a rádiós kommunikációs egységet, hanem újraterveztem azt az elemi alkatrészek szintjén. Ha már panelt tervez az ember... meg ennyire profi a QFN ültetésben. :) Íme két kép a központi vezérlőegységről.

Master modul

Master modul

Közel a befejezéshez

Az elektronikai fejlesztés első üteme 2015. év végén fejeződött be. Ez már 95%-os funkcionalitással rendelkezik. Az idő rövidsége miatt a végső kitesztelés és befejezés még várat magára. Ennek egyrészt az az oka, hogy az IOS alkalmazást egy másik csapat fejleszti, akiknek a munkához szükségük van a hardverre, másrészt a mechanikai kialakításban is vannak még változtatások, így az ezeket érintő programrészek még nem lettek implementálva.

A teljes projekt még nem zárult le, bár az elektronikai egységek apró javításokat követően hardveres szempontból már tekinthetőek véglegesnek.

Tesztek

A majdnem kész állapotban történő átadás előtt számos tesztet végeztem, hogy az IOS alkalmazás fejlesztéséhez szükséges feltételek biztosítottak legyenek és a rendszer az alkalmazással történő első tesztelésekre alkalmas legyen. Az utolsó teszt alkalmával készítettem pár fotót, illetve videót a működésről. Íme a prototípus mechanika:

Mechanikával

Mechanikával

Mechanikával

Majd jöjjön egy kis elektronika. A tesztelés ezekkel a "fapados" megoldásokkal zajlott. Az elektronikai modulok gyakorlatilag a kész valójukban láthatóak, de a kényelmesebb tesztelés végett még a burkolat külső oldalára vannak felszerelve és az ilyenkor csak problémákat jelentő akkumulátoros rész nincs is beépítve a rendszerbe, hiszen a tesztelések és fejlesztés során azt állandóan töltögetni kellett volna, mikor naphosszat ment a rendszer. Kényelmesebb volt erre az időre vezetékes tápellátást biztosítani, ezért a mechanikáról lelógó vezetékek. A master vezérlőből egy csokor vezeték megy az analóg kezelőszervekhez, melyek egy jelentős részét sikerült egy selejtes NYÁK-ra szerelni, ezzel kialakítottam egy pultszerű megoldást, ahogy az majd a végleges verzió esetében is lesz.

Master modul

A vezérlőpult

iPad

Utóbbi kép nem iPad reklám, hanem azért készítettem, mert valamennyire látható a kijelzőn az az alkalmazás, ami tesztelés céljára lett kifejlesztve, hogy a kommunikációt, illetve az alapvető funkciókat amennyire csak lehetséges, magam le tudjam tesztelni.