1.1 Storia di questo libro e cosa otterrete leggendolo
Nel corso di circa un anno, dopo aver completato il mio primo libro, ho riesumato un vecchio progetto di costruire un sottomarino autonomo (indicato come il progetto E-2) con alcuni requisiti funzionali abbastanza impegnativi. Nel corso dello sviluppo di questa idea, ho trascorso molte ore su Internet e altrove, alla ricerca di tecniche per lo sviluppo rapido di vari sistemi di controllo elettromeccanici e piattaforme per eseguire algoritmi di elaborazione del segnale abbastanza complessi. Anche se ci sono, naturalmente, migliaia di progetti utili e frammenti di informazioni da ottenere da Internet e dai libri sulla robotica hobbistica, ho scoperto che nessun altro sembrava avere le mie stesse priorità. In particolare, apparentemente non c’è un singolo riferimento che raccolga almeno soluzioni introduttive a tutti i problemi di progettazione embedded che hanno interessato il mio progetto: la necessità di usare strumenti e sistemi operativi a basso costo (open-source), l’esigenza di diverse funzioni con requisiti in tempo reale abbastanza difficili, e il desiderio di usare componenti economici, di largo consumo, quando possibile. Le risorse disponibili su molti argomenti si concentrano o su componenti industriali off-the-shelf molto costosi, o su sistemi strettamente vincolati costruiti intorno a un singolo microcontrollore, con codice delicatamente ottimizzato e non portabile per controllare le periferiche, e una gamma molto limitata di supporto per le periferiche. Queste ultime restrizioni nella progettazione del sistema sono inevitabili quando si lavora con requisiti di potenza ristretti, vincoli di spazio, o un costo minimo della distinta dei materiali (BOM), ma è una quantità eccessiva di sforzo costruire e mettere a punto tali sistemi per un progetto unico o un prototipo. Inoltre, imparare tutti i dettagli richiesti per assemblare un tale sistema è un compito enorme; è facile perdersi in dettagli di messa a punto senza mai riuscire a mettere in campo un sistema completo e funzionante. Irritante, molte delle regolazioni e la maggior parte dell’attenta pianificazione che si fa per rendere il sistema operativo dovrà essere buttata via se si passa alla produzione effettiva, o se si ha bisogno di costruire altre unità con componenti leggermente diversi.
Quello che stavo cercando mentre sviluppavo il progetto E-2 era un modo per costruire vari moduli hard real-time (sensori e attuatori) che potessero essere facilmente ed economicamente interfacciati ad un computer generico con Linux. La scatola Linux serviva come banco di prova per gli algoritmi che in seguito sarebbero stati portati in un modulo di elaborazione più piccolo, più freddo e più efficiente dal punto di vista energetico di qualche tipo. Avevo bisogno di una solida base di codice e tecniche conosciute e buone in modo da poter partire da quel punto e costruire il mio sistema personalizzato. Volevo anche una semplice guida operativa per costruire distribuzioni Linux embedded. Per il prototipo iniziale, non campionabile del mio sottomarino, non avevo un’idea esatta di quanta potenza di CPU avrei avuto bisogno nella versione finale – quindi non volevo essere legato ad una specifica architettura di microcontrollore, né volevo impantanarmi nel cercare di modificare e mettere a punto molti compiti in tempo reale su un singolo microcontrollore. Volevo anche utilizzare alcune periferiche, come le telecamere, che sono più facili da interfacciare attraverso un sistema operativo generico.
Questi requisiti possono essere in sintonia con la vostra vita lavorativa. È probabile che abbiate incontrato situazioni in cui sarebbe utile automatizzare qualche esperimento di raccolta dati a lungo termine o creare un semplice controller automatico per un compito di programmazione, produzione o altro. In questo senso, altri tre casi in cui ho applicato le tecniche di questo libro sono:
Lo sviluppo di una serie di apparecchi multimediali in rete di successo (commercialmente diffusi), progettati per applicazioni pubblicitarie e gallerie d’arte non presidiate.
▪
Lo sviluppo di un apparecchio specializzato, quasi completamente automatico, per testare i guasti meccanici di alcuni articoli di elettronica di consumo.
▪
Costruzione di un datalogger automatico ad alta velocità che controlla un collegamento radio ed estrae messaggi DTMF mirati a specifici ricevitori.
Il secondo punto sopra è di particolare interesse, perché dimostra piacevolmente come questo libro può essere di valore pratico nel controllo di processo e nelle applicazioni di test. Durante il 2002, ho lavorato brevemente per una piccola divisione di una società multinazionale il cui obiettivo principale era la plastica per la casa e l’ufficio. È stato molto istruttivo esaminare le loro attrezzature di prova automatizzate – sistemi proprietari – e confrontare il costo e la complessità di configurazione di queste attrezzature con il costo relativamente basso e il tempo di configurazione di un semplice SBC basato su Linux che controlla gli stessi attuatori pneumatici e sensori. Chiaramente, c’è un mercato poco sfruttato per sistemi di test a basso costo di questo tipo. I sistemi proprietari in uso in questa particolare struttura costano quasi 20.000 dollari per una mezza dozzina di attuatori e i PLC associati, più innumerevoli ore di setup1. Il software di controllo per questi dispositivi era specializzato e non ben compreso; infatti, la maggior parte di queste attrezzature era inattiva perché le persone che le avevano originariamente configurate avevano lasciato l’azienda. Per contrasto, gli stessi compiti potrebbero essere facilmente svolti con un normale PC che costa solo poche centinaia di dollari, più forse 200 dollari per attuatore per la pneumatica associata. Ancora più importante, il software di controllo per un tale sistema è un semplice programma C facilmente comprensibile e adattabile da qualsiasi informatico competente o laureato in ingegneria elettronica; c’erano diversi candidati prontamente disponibili nel laboratorio dell’azienda.
A causa della natura della ricerca che ha portato all’inizio di questo libro, ho incluso una serie di dettagli navali nel testo, non tutti direttamente rilevanti per l’ingegnere incorporato. Se questo materiale non è di interesse, potete tranquillamente ignorarlo senza compromettere in alcun modo la vostra comprensione del testo rimanente. La ragione per cui queste informazioni sono incluse accanto alla “pura” discussione sullo sviluppo embedded è principalmente per illustrare i requisiti del mondo reale e il pensiero che ha portato a varie decisioni di design nel progetto E-2. L’ingegneria non è una scienza teorica; è una disciplina applicata, ed è con questo in mente che uso esempi specifici per illustrare punti teorici.
Si dovrebbe anche notare che alcune delle opinioni espresse in questo libro, se non proprio controverse (tranne che per gli standard di Usenet – tutto su Usenet è controverso!), sono almeno discutibili; per esempio, la scelta di AVR come piattaforma di controllo in tempo reale. Per questo motivo, ho fornito una giustificazione aggiuntiva per le decisioni che ho preso in questo testo. Questa spiegazione aggiuntiva dovrebbe dimostrare le ragioni che ho avuto per scegliere percorsi specifici, ma non è espressamente progettata per fare proselitismo dell’AVR a persone che hanno esperienza con, e preferiscono, un’altra architettura. Di nuovo, questo “materiale bonus” non è critico per la vostra comprensione dei concetti di base presentati qui, e potete tranquillamente saltarlo se lo desiderate.
Tenete anche a mente che questo libro non è intenzionalmente una “bibbia”. Non è una copertura esaustiva di ogni singola sfumatura degli argomenti trattati; un tale lavoro si estenderebbe su diversi scaffali. L’obiettivo primario di questo libro è di descrivere e illustrare una metodologia semplice, modulare e poco costosa per l’implementazione di complessi sistemi embedded, e di presentare alcuni moduli pronti all’uso per il lettore da adattare ai propri progetti. L’enfasi particolare è sulla realizzazione di soluzioni end-to-end usando hardware di sviluppo a basso costo e strumenti software liberi. Arrivati alle ultime pagine, si spera che abbiate quanto segue:
▪
Una comprensione funzionale dei dettagli critici “under-the-hood” richiesti per avviare Linux su piattaforme x86.
▪
Un’introduzione ai tipi di problemi che dovrete affrontare nell’uso di computer incorporati x86 a scheda singola come nucleo di sistemi di registrazione dati e controllo del movimento.
▪
Informazioni di base sulla famiglia di microcontrollori Atmel AVR.
▪
Un’introduzione pratica alla costruzione di alcuni semplici circuiti di acquisizione dati e controllo motori, e al loro collegamento al PC.
▪
Alcune informazioni di base sulla sicurezza dei dati, l’autenticazione e i problemi di affidabilità che riguardano i sistemi embedded.
L’idea di fondo è che il lettore abbia un’esperienza ragionevolmente intima con l’uno o l’altro argomento dello sviluppo di applicazioni Linux, o con lo sviluppo di sistemi profondamente embedded – questo libro è progettato per spingervi al limite della vostra curva di apprendimento con gli elementi essenziali di qualsiasi lato dell’equazione vi manchi. Fornisce anche il collante che lega insieme questi pezzi di informazione nel contesto generale di un progetto abbastanza complesso. Notate, a proposito, che ho usato la parola “libro di cucina” con una certa diffidenza. L’ingegneria puramente da libro di cucina – infilare pezzi incompresi insieme come sfere Capsela – non è mai una buona pratica. In questo libro, vi sto dando alcuni pezzi Capsela pronti all’uso, ma vi sto anche dicendo come e perché ho fatto gli ingranaggi e gli alberi in ogni pezzo, e in qualche misura come potete andare oltre e fare pezzi migliori per voi stessi. Queste spiegazioni sono molto più importanti dei progetti dei pezzi stessi.
Quando si progetta un libro come questo, è facile cadere in una delle due trappole: o creare una singola, monolitica “mega-applicazione” che illustra tutti i punti desiderati, ma è estremamente difficile da spiegare succintamente, o d’altra parte suddividere l’argomento in numerose piccole note astratte che molti lettori avranno problemi ad integrare nei progetti del mondo reale. Ho cercato di mantenermi tra questi due estremi rompendo i moduli più interessanti del progetto E-2 in alcune piccole applicazioni pratiche insieme a codice fondamentalmente autonomo e abbastanza teoria per modificare ed estendere queste applicazioni per i propri usi.
Infine, una nota per chi possiede il mio libro precedente, Embedded System Development on a Shoestring. Questo libro non è progettato per essere un seguito di quel volume, ma è sicuramente materiale correlato. Se segui le tecniche in questo libro per costruire un prototipo di dispositivo, e in seguito vuoi ridurlo in una soluzione ottimizzata su singolo chip, il mio lavoro precedente ti aiuterà a capire come usare gli strumenti GNU liberi per portare facilmente il tuo software su un microcontrollore ARM. Le principali critiche che ho ricevuto per quel libro precedente erano che doveva coprire una gamma più ampia di informazioni, e che c’erano troppo poche illustrazioni, rendendolo una lettura piuttosto arida. Ho ascoltato questi commenti e spero che troverete questo libro soddisfacente per entrambi gli aspetti. Come sempre, i vostri commenti e suggerimenti sono i benvenuti; potete mandarmi un’e-mail all’indirizzo o visitare il mio sito web all’indirizzo http://www.zws.com/.
.