POSTS

PLC

Seoses maja ümberehitusega paigaldan ka uued elektrijuhtmed. Mõistagi üritan ma ajada sellist joont, et saaks lihtsa vaevaga seadmeid ka automaatselt juhtida. Ehk reeglid on mul hetkel sellised:

  • Iga lüliti, lamp, pistikupesa eraldi kaablitega elektrikilpi ning esialgu omavahelised ühendused kilbis (hiljem saab kontrolleri vahele panna).
  • Pistikute juurde igaks juhuks mitme faasiga kaabel, et jääks mingi varu juhe juhuks kui tahta pistiku juures mingit seadet eraldi lülitada.
  • Akende/uste/suitsuandurite/liikumisandurite jms juurde CAT5 kaabel nõrkvoolu jaoks.
  • Enamvähem igasse seina pistikupesa juurde CAT6 kaabel kohtvõrgu jaoks.

Aga et nüüd elektrikilbis asju juhtida, oleks vaja sinna mingit sorti kontrollereid. Arvestades et oleks vaja läbi interneti krüpteeritud kanalit pidi mingi backendiga ühendust saada, tundub mikrokontroller natukene lahja. Samas ei kisu mind raspberry PI poole, kuna mul on halvad mälestused seoses SD kaardi jms jamadega. Samuti ei tundu mulle et RPI’ga saaks mingit viisakat asja teha. Kui talle midagi külge ühendada, siis näeb asi välja nagu arenduskomplekt töölaual, mitte asi mida saaks elektrikilpi panna. Seega mõtlesin enda jaoks kriteeriumid:

  • Linuxi baasil.
  • Lahendus peab olema võimalikult odav, soovitav paarikümne euro ringis.
  • Peab olema etherneti võimekus.
  • Peab saama võimalikult lihtsalt installida (ma ei kannata lahendust, kus peaksid tõmbama mingi image kõigepealt SD kaardile ja siis seda installima jne).
  • Kogemata telliseks lastud seadet peaks saama lihtsa vaevaga fixida.
  • Kilbi/DIN liistu sõbralik.
  • Lahendus võiks olla lihtsasti laiendatav erinevate liidestega.

Ei hakka siinkohal oma otsingutulemusi lahkama vaid liigun kohe lahenduse suunas. Ehk et ega konkreetset valmis lahendust väga ei leiagi mis vastaks nendele tingimustele, seega ma läksin seda teed, et disainisin asja ise.

Linuxi komponendiks valisin hiinlaste tehtud väikese mooduli HLK-7688A baasil:

alt text

alt text

Konkreetse linuxi mooduli kasuks rääkis hind. Lisaks on talle sisse integreeritud juba väike SPI flash, mille pealt ta boodib ja kuhu saad oma firmware kirjutada. Lisaks on oluline veel see, et mainitud moodulil on välja toodud SPI CS0 pin. Tänu sellele pinile saab väga lihtsa vaevaga kirjtuada SPI flashile. Tuleb ainult protsessori /RST pin all hoida ja SPI flash on sinu päralt, kasutades pine MISO, MOSI, SCK ja CS0. Seega ei sõltu asi sellest kas moodulil on bootloader või kas ta on telliseks lastud. Boonusena on antud moodulil ka WIFI võimalus.

Korpuseks leidsin DIN liistule kinnitatava AK-DR-10

alt text

alt text

Antud korpuse puhul on eelis see, et neid saab kilpi ka üksteise otsa kinnitada. Samuti on hea lahendus need otsaplaadikesed, mida saab põhimõtteliselt ka CNC pingiga välja freesida. Mina hankisin musta värvi karbid, sest musta lehtplastikut on lihtsam hankida kui õige tooniga sinist, juhuks kui läheb CNC’tamiseks.

Disaini koha pealt võtsin vastu järgmised otsused:

  • Nn. “emapaladile” tuleb etherneti pesa, üks nupp, USB pesa (kusjuures USB toidet peab saama lülitada).
  • Kuna USB tahab 5V saada, siis on plaadil lisaks 5V -> 3V3 regulaator.
  • Lisaks on plaadil 4 LED’i.
  • Plaadil on “laienduspesa” vastava lahenduse jaoks.

Problemaatiliseks kujunes emaplaadi kuju. Arvestades korpuse iseärasusi ja et plaat toetub ilma kruvideta teatud kohtadele, siis tuli emaplaadile väikesed “sarved” juurde disainida, et plaat laienduspesa pistiku tõttu kõõluma ei hakkaks.

Tulemusena näeb joodetud plaat välja selline:

alt text

Emaplaat korpuses:

alt text

Üks laiendusplaatidest, kus on linuxit abistamas ATSAMD11C14A mikrokontroller (RFID lugemine ja muud kiiremad toimingud mida vaja teha):

alt text

Laiendusplaat koos emaplaadiga:

alt text

Laiendusplaadile sai lisaks veel pisikesed “kõrvad” PCB peale tehtud, et pistikuid välja tõmmates ei tõmbaks laiendusplaati emaplaadi küljest lahti.

Nagu näha, on pildil emaplaadil paremas ääres rida pine püsti. Nende kaudu toimubki SPI flashi kirjutamine. Samuti on seal ka UART0 pinid et saaks näha bootloaderi ja kerneli logi. Põhimõtteliselt käib asja arendamine umbes nagu mikrokontrolleri puhul, et emaplaat on programmaatori abil arvutiga ühendatud. Siis teed muudatusi softis/linuxi images/bootloaderis ja flashid seadme üle. Ei mingit jamamist SD kaartide ega bootstrap pinide ega muu sellisega.

Bootloaderi jaoks on U-Boot’il tugi olemas, kuid mina kirjutasin omale ise bootloaderi, mis oskaks automaatselt nn. “firmware” uuendada kui linuxis on õige koha peale flash’is uus image tõmmatud. Bootloader ise kasutab FIT tüüpi imaget bootimiseks, kust ta loeb välja kerneli, devicetree ning ramdiski. Natuke on seal solkimist, kuna töötav kernel sellele prosele ei oska kuidagi devicetree’d RAM’ist laadida ning sinna on ehitatud mingi häkk, mis pärast kerneli ehitamist kopeerib selle devicetree blobi teatud kohta kerneli image sisse. Seda sama teeb minu bootloader.

Väikesi nüansse on veel päris palju, mida tuli kerneli ehitamisel silmas pidada, aga neid kõige ei jõua siin üles lugeda.

Üldiselt nimetasin selle asja PLC’ks, ehkki ta tegelikult otseselt seda ei ole. Väga mugav on antud asja kasutada suvalistes projektides, kuna kui tuleb jälle keegi jutuga et “mul oleks vaja mingit seadet mis juhiks mul seda ja seda”, siis pole muud kui a) kasutada mingit juba varem valmis tehtud laiendusplaati või b) teha kiiresti uus lihtne laiendusplaat. DIN liistu kinnituse võib ka ära jätta karbi küljest ning siis saab seda ka mujale kinnitada. Tulemusena näeb asi vähemalt minu arust natuke viisakam välja kui mingi käkerdis RPI või analoogse seadme baasil, mis on kuidagi mingisse korpusesse mahutatud. Lisaks ei ole olnud mul siiani mitte ühtegi probleemi antud asja töökindlusega. Mõni isend on CAN-BUS’i laiendusplaadiga ühendatud auto külge ja nende uptime küündib vaikselt juba aastani.

Mis vahenditega ma linuxile juhtme kaudu firmware peale söödan, sellest järgmises postis.

Comments

Leave a comment