1.1 Istoricul acestei cărți și ce veți obține citind-o
În decurs de aproximativ un an, după ce am finalizat prima mea carte, am resuscitat un vechi proiect de companie de a construi un submarin autonom (denumit proiectul E-2) cu anumite cerințe de funcționalitate destul de dificile. În cursul dezvoltării acestei idei, am petrecut multe ore pe internet și în alte părți, cercetând tehnici de dezvoltare rapidă a diverselor sisteme de control electromecanic și platforme pentru a rula algoritmi destul de complecși de procesare a semnalelor. Deși există, bineînțeles, mii de proiecte utile și fragmente de informații care pot fi obținute de pe internet și din cărțile despre robotica pentru amatori, am constatat că nimeni altcineva nu părea să aibă exact prioritățile mele. În special, se pare că nu există o singură referință care să reunească soluții cel puțin introductive pentru toate problemele de proiectare încorporată care au afectat proiectul meu: necesitatea de a utiliza instrumente și sisteme de operare cu costuri reduse (open-source), o cerință pentru mai multe caracteristici cu cerințe destul de dure în timp real și dorința de a utiliza componente ieftine, de uz curent, de consum, ori de câte ori este posibil. Resursele disponibile pe multe subiecte se concentrează fie pe componente industriale foarte scumpe de serie, fie pe sisteme cu constrângeri stricte construite în jurul unui singur microcontroler, cu un cod delicat optimizat și neportabil pentru a controla perifericele – și o gamă foarte limitată de suport pentru periferice. Aceste din urmă restricții de proiectare a sistemului sunt inevitabile atunci când lucrați cu cerințe stricte de putere, constrângeri de spațiu sau un cost al listei de materiale (BOM) extrem de scăzut, dar construirea și reglarea unor astfel de sisteme pentru un proiect unic sau un prototip reprezintă un efort exagerat de mare. În plus, învățarea tuturor detaliilor necesare pentru a asambla un astfel de sistem este o sarcină enormă; este ușor să te pierzi în reglarea amănunțită a detaliilor fără să reușești vreodată să pui pe teren un sistem complet și funcțional. În mod iritant, multe dintre ajustările și cea mai mare parte a planificării atente pe care le faceți pentru a face acel sistem operațional vor trebui aruncate la gunoi dacă treceți la producția efectivă sau dacă trebuie să construiți mai multe unități cu componente ușor diferite.
Ce căutam în timp ce dezvoltam proiectul E-2 era o modalitate de a construi diverse module hard real-time (senzori și actuatori) care să poată fi interfațate ușor și ieftin cu un calculator de uz general care rulează Linux. Cutia Linux a servit drept banc de testare pentru algoritmi care mai târziu ar fi fost portată într-un modul de procesare mai mic, mai rece și mai eficient din punct de vedere energetic de un anumit tip. Aveam nevoie de o bază solidă de coduri și tehnici bune cunoscute, astfel încât să pot porni de acolo și să-mi construiesc propriul sistem personalizat. Am vrut, de asemenea, un ghid simplu și funcțional pentru construirea de distribuții Linux integrate. Pentru prototipul inițial, nepracticabil, al submarinului meu, nu aveam o idee exactă despre câtă putere de procesare voi avea nevoie în versiunea finală – așa că nu am vrut să mă leg de o anumită arhitectură de microcontroler și nici nu am vrut să mă împotmolesc în încercarea de a ajusta și regla multe sarcini în timp real pe un singur microcontroler. De asemenea, am vrut să folosesc câteva periferice – cum ar fi camerele de luat vederi – care sunt cel mai ușor de interfațat prin intermediul unui sistem de operare de uz general.
Este posibil ca aceste cerințe să sune în acord cu propria voastră viață profesională. Sunt șanse să vă fi întâlnit situații în care ar fi util să automatizați un experiment de colectare a unor date pe termen lung sau să creați un controler automat simplu pentru o sarcină de programare, de fabricație sau de altă natură. În această ordine de idei, alte trei cazuri în care am aplicat tehnicile din această carte sunt:
Dezvoltarea unei game de aparate multimedia în rețea de succes (comercializate), concepute pentru aplicații nesupravegheate de publicitate și galerii de artă.
▪
Dezvoltarea unui aparat specializat, aproape în întregime automat, de testare a defecțiunilor mecanice pentru anumite articole electronice de consum.
▪
Construcția unui înregistrator automat de date de mare viteză care monitorizează o legătură radio și extrage mesajele DTMF direcționate către receptoare specifice.
Cel de-al doilea articol de mai sus prezintă un interes deosebit, deoarece demonstrează foarte bine modul în care această carte poate avea o valoare practică în aplicații de control și testare a proceselor. În cursul anului 2002, am lucrat pentru scurt timp pentru o mică divizie a unei companii multinaționale a cărei activitate principală era reprezentată de articole din plastic pentru uz casnic și de birou. A fost foarte instructiv să examinez dispozitivele lor de testare automatizate – sisteme proprietare – și să compar costul și complexitatea de configurare a acestor dispozitive cu costul și timpul de configurare relativ reduse ale unui simplu SBC bazat pe Linux care controla aceleași actuatoare și senzori pneumatici. În mod clar, există o piață insuficient exploatată pentru sistemele de testare cu costuri reduse de acest tip. Sistemele brevetate utilizate în această instalație specifică au costat aproape 20 000 de dolari pentru o jumătate de duzină de actuatoare și PLC-urile asociate, la care se adaugă nenumărate ore de configurare1. Software-ul de control pentru aceste dispozitive era specializat și nu era bine înțeles; de fapt, majoritatea acestor echipamente stăteau nefolosite pentru că persoanele care le configurau inițial plecaseră din companie. Prin contrast, aceleași sarcini puteau fi îndeplinite cu ușurință cu un PC obișnuit care costa doar câteva sute de dolari, la care se adăugau poate 200 de dolari per actuator pentru sistemul pneumatic asociat. Și mai important, software-ul de control pentru un astfel de sistem este un simplu program C ușor de înțeles și adaptabil de către orice student competent în domeniul informaticii sau al ingineriei electronice; existau mai mulți candidați ușor de găsit în laboratorul companiei.
Datorită naturii cercetărilor care au dus la apariția acestei cărți, am inclus în text o sumedenie de detalii navale, nu toate acestea fiind direct relevante pentru inginerul embedded. Dacă acest material nu vă interesează, îl puteți ignora în siguranță fără a vă compromite în vreun fel înțelegerea restului textului. Motivul pentru care aceste informații sunt incluse alături de discuția „pură” despre dezvoltarea încorporată este, în principal, acela de a ilustra cerințele din lumea reală și modul de gândire care au condus la diferite decizii de proiectare în cadrul proiectului E-2. Ingineria nu este o știință teoretică; este o disciplină aplicată și, având în vedere acest lucru, folosesc exemple specifice pentru a ilustra punctele teoretice.
De asemenea, ar trebui să rețineți că unele dintre opiniile exprimate în această carte, dacă nu sunt chiar controversate (cu excepția standardelor Usenet – totul pe Usenet este controversat!), sunt cel puțin discutabile; de exemplu, alegerea AVR-ului ca platformă de control în timp real a mea. Din acest motiv, am oferit justificări suplimentare pentru deciziile pe care le-am luat în acest text. Această explicație suplimentară ar trebui să demonstreze motivele pe care le-am avut pentru a alege anumite căi specifice, dar în mod expres nu este concepută pentru a face prozelitism pentru AVR în fața persoanelor care au experiență cu o altă arhitectură și o preferă. Din nou, acest „material bonus” nu este esențial pentru înțelegerea conceptelor de bază prezentate aici, și puteți sări peste el în siguranță dacă doriți.
De asemenea, rețineți că această carte nu este în mod intenționat o „biblie”. Nu este o acoperire exhaustivă a fiecărei nuanțe a subiectelor abordate; o astfel de lucrare s-ar întinde pe mai multe rafturi. Scopul principal al acestei cărți este să descrie și să ilustreze o metodologie simplă, modulară și ieftină de implementare a sistemelor integrate complexe și să prezinte câteva module gata de utilizare pe care cititorul să le adapteze la propriile sale proiecte. Accentul se pune în special pe realizarea de soluții de la un capăt la altul folosind hardware de dezvoltare cu costuri reduse și instrumente software gratuite. Până când veți ajunge la ultimele pagini, sperăm că veți avea următoarele:
▪
O înțelegere funcțională a detaliilor critice „sub capotă” necesare pentru a porni Linux pe platforme x86.
▪
O introducere în tipurile de probleme cu care vă veți confrunta în utilizarea calculatoarelor încorporate x86 cu o singură placă ca nucleu al sistemelor de înregistrare a datelor și de control al mișcării.
▪
Informații de bază despre familia de microcontrolere Atmel AVR.
▪
O introducere practică în construirea unor circuite simple de achiziție de date și control al motoarelor și conectarea acestora la PC-uri.
▪
Câteva informații de bază „de bază” despre problemele de securitate, autentificare și fiabilitate a datelor, așa cum afectează sistemele încorporate.
Ideea de bază este că cititorul are o experiență rezonabil de intimă cu unul sau altul dintre subiectele de dezvoltare a aplicațiilor Linux, sau de dezvoltare a sistemelor adânc încorporate – această carte este concepută pentru a vă impulsiona pe marginea de frunte a curbei de învățare cu elementele esențiale ale oricărei părți a ecuației care vă lipsește. De asemenea, ea oferă lipiciul care leagă aceste informații în contextul general al unui proiect destul de complex. Rețineți, de altfel, că am folosit cuvântul titular „carte de bucate” cu o oarecare reținere. Ingineria pur și simplu a cărților de bucate – a pune laolaltă piese prost înțelese ca niște sfere Capsela – nu este niciodată o practică bună. În această carte, vă ofer câteva piese Capsela gata de utilizare, dar vă spun și cum și de ce am realizat eu angrenajele și arborii din fiecare piesă și, într-o oarecare măsură, cum puteți merge mai departe și să vă confecționați singuri piese mai bune. Aceste explicații sunt mult mai importante decât planurile pieselor în sine.
Când planifici o carte ca aceasta, este ușor să cazi într-una din cele două capcane: fie să creezi o singură „mega-aplicație” monolitică care ilustrează toate punctele dorite, dar care este extrem de dificil de explicat succint, fie, pe de altă parte, să împarți subiectul în numeroase note mici și abstracte pe care mulți cititori vor avea probleme să le integreze în proiecte din lumea reală. Am încercat să mă situez între aceste două extreme, împărțind modulele cele mai interesante ale proiectului E-2 în câteva aplicații mici, practice, împreună cu un cod practic de sine stătător și suficientă teorie pentru a modifica și extinde aceste aplicații pentru propriile utilizări.
În final, o notă pentru cei care dețin cartea mea anterioară, Embedded System Development on a Shoestring. Această carte nu este concepută pentru a fi o continuare a acelui volum, dar este cu siguranță un material conex. Dacă urmați tehnicile din această carte pentru a construi un dispozitiv prototip, iar mai târziu doriți să îl reduceți la o soluție optimizată pe un singur cip, lucrarea mea anterioară vă va ajuta să înțelegeți cum să folosiți instrumentele GNU gratuite pentru ca software-ul dumneavoastră să fie ușor de portat pe un microcontroler ARM. Principalele critici pe care le-am primit pentru acea carte anterioară au fost că trebuia să acopere o gamă mai largă de informații și că existau prea puține ilustrații, ceea ce făcea din ea o lectură mai degrabă aridă. Am ascultat aceste comentarii și sper că această carte vă va satisface nevoile din ambele puncte de vedere. Ca întotdeauna, comentariile și sugestiile dumneavoastră sunt binevenite; puteți să-mi trimiteți un e-mail la sau să vizitați site-ul meu web la http://www.zws.com/.
.