1.1 History of this Book and What You’ll Get From Reading It
In de loop van ongeveer een jaar, na het voltooien van mijn eerste boek, heb ik een oud huisdier project nieuw leven ingeblazen om een autonome onderzeeër te bouwen (aangeduid als het E-2 project) met bepaalde tamelijk uitdagende functionaliteitseisen. Tijdens de ontwikkeling van dit idee heb ik vele uren op het Internet en elders doorgebracht met het onderzoeken van technieken voor de snelle ontwikkeling van diverse elektromechanische besturingssystemen en platforms om tamelijk complexe signaalverwerkende algoritmen uit te voeren. Hoewel er natuurlijk duizenden nuttige projecten en stukjes informatie te vinden zijn op het Internet en in boeken over hobby-robotica, merkte ik dat niemand anders precies mijn prioriteiten leek te hebben. In het bijzonder is er blijkbaar geen enkele referentie die ten minste inleidende oplossingen verzamelt voor alle ingebedde ontwerpkwesties die van invloed waren op mijn project: de noodzaak om goedkope (open-source) gereedschappen en besturingssystemen te gebruiken, een vereiste voor verscheidene functies met tamelijk harde real-time eisen, en de wens om waar mogelijk goedkope, uit de handel verkrijgbare componenten van consumentenkwaliteit te gebruiken. Beschikbare bronnen over veel onderwerpen concentreren zich ofwel op zeer dure off-the-shelf industriële componenten, of op strak beperkte systemen gebouwd rond een enkele microcontroller, met delicaat geoptimaliseerde, niet-portabele code om randapparatuur aan te sturen – en dan nog een zeer beperkte reeks van randapparatuurondersteuning. Deze beperkingen in het systeemontwerp zijn onvermijdelijk als je werkt met krappe stroomvereisten, ruimtebeperkingen of een zeer lage materiaallijst (BOM), maar het bouwen en afstemmen van dergelijke systemen voor een eenmalig project of een prototype is een onevenredig grote inspanning. Bovendien is het leren van alle details die nodig zijn om zo’n systeem te assembleren een enorme taak; het is gemakkelijk om te verdwalen in het finetunen van details zonder er ooit in te slagen een compleet, werkend systeem op de markt te brengen. Irritant genoeg zullen veel van de aanpassingen en de meeste zorgvuldige planning die je doet om dat systeem operationeel te krijgen, weggegooid moeten worden als je tot werkelijke produktie overgaat, of als je nog een paar eenheden moet bouwen met iets andere componenten.
Waar ik naar op zoek was tijdens het ontwikkelen van het E-2 project was een manier om verschillende harde real-time modules (sensoren en actuatoren) te bouwen die gemakkelijk en goedkoop konden worden gekoppeld aan een computer voor algemeen gebruik waarop Linux draaide. De Linux box diende als een testbed voor algoritmen die later zouden worden overgezet in een kleinere, koelere, meer energie-efficiënte verwerkingsmodule van het een of ander. Ik had een solide basis nodig van bekende goede code en technieken, zodat ik vanaf dat punt mijn eigen aangepaste systeem kon bouwen. Ik wilde ook een eenvoudige en werkende gids voor het bouwen van embedded Linux distributies. Voor het eerste, niet veldbare prototype van mijn onderzeeër, had ik geen exact idee van hoeveel CPU paardenkracht ik nodig zou hebben in de uiteindelijke versie- dus ik wilde niet gebonden zijn aan een specifieke microcontroller architectuur, noch wilde ik verzanden in het proberen te tweaken en tunen van vele real-time taken op een enkele microcontroller. Ik wilde ook een paar randapparatuur gebruiken, zoals camera’s, die het gemakkelijkst via een algemeen besturingssysteem aan te sluiten zijn.
Deze eisen klinken misschien als een snaar in uw eigen werkleven. De kans is groot dat u situaties bent tegengekomen waarin het nuttig zou zijn een of ander langdurig experiment voor het verzamelen van gegevens te automatiseren of een eenvoudige geautomatiseerde controller te maken voor een programmeer-, fabricage- of andere taak. In deze geest zijn er nog drie andere gevallen waarin ik de technieken uit dit boek heb toegepast:
De ontwikkeling van een reeks succesvolle (commercieel-afgezette) genetwerkte multimedia-apparaten, ontworpen voor onbemande reclame en kunst-galerie-toepassingen.
▪
De ontwikkeling van gespecialiseerde, bijna geheel automatische mechanische testapparatuur voor het testen van bepaalde consumenten-elektronica-artikelen.
▪
Bouw van een automatische hogesnelheids-datalogger die een radioverbinding bewaakt en DTMF-berichten extraheert die gericht zijn op specifieke ontvangers.
Het tweede item hierboven is van bijzonder belang, omdat het mooi demonstreert hoe dit boek van praktische waarde kan zijn in procescontrole- en testtoepassingen. In 2002 werkte ik korte tijd voor een kleine divisie van een multinational die zich vooral bezighield met huishoudelijke en kantoorartikelen. Het was zeer leerzaam om hun geautomatiseerde testopstellingen te onderzoeken – bedrijfseigen systemen – en de kosten en complexiteit van het instellen van deze opstellingen te vergelijken met de relatief lage kosten en insteltijd van een eenvoudige Linux-gebaseerde SBC die dezelfde pneumatische actuatoren en sensoren aanstuurt. Het is duidelijk dat er een onderbenutte markt is voor goedkope testsystemen van dit type. De propriëtaire systemen die in deze specifieke faciliteit werden gebruikt, kostten bijna 20.000 dollar voor een half dozijn actuatoren en de bijbehorende PLC’s, plus ontelbare uren installatietijd1. De besturingssoftware voor deze apparaten was gespecialiseerd en niet goed begrepen; in feite stond de meeste van deze apparatuur stil omdat de mensen die ze oorspronkelijk hadden geconfigureerd, het bedrijf hadden verlaten. Daarentegen konden dezelfde taken gemakkelijk worden uitgevoerd met een gewone PC van slechts een paar honderd dollar, plus misschien 200 dollar per actuator voor de bijbehorende pneumatiek. Nog belangrijker, de besturingssoftware voor zo’n systeem is een eenvoudig C-programma dat gemakkelijk te begrijpen en aan te passen is door elke bekwame informaticus of elektrotechnicus; er waren verschillende kandidaten direct beschikbaar in het bedrijfslab.
Omwille van de aard van het onderzoek dat tot het ontstaan van dit boek heeft geleid, heb ik een aantal marinedetails in de tekst opgenomen, die niet allemaal direct relevant zijn voor de embedded engineer. Als dit materiaal niet van belang is, kunt u het gerust negeren zonder dat het uw begrip van de rest van de tekst op enigerlei wijze in gevaar brengt. De reden dat deze informatie is opgenomen naast de “zuivere” discussie over ingebedde ontwikkeling is hoofdzakelijk om de eisen en gedachten uit de praktijk te illustreren die tot verschillende ontwerpbeslissingen in het E-2 project hebben geleid. Engineering is geen theoretische wetenschap; het is een toegepaste discipline, en het is met dit in gedachten dat ik specifieke voorbeelden gebruik om theoretische punten te illustreren.
Je moet ook opmerken dat sommige van de meningen die in dit boek worden geuit, zo niet controversieel zijn (behalve naar Usenet maatstaven – alles op Usenet is controversieel!), dan toch op zijn minst betwistbaar zijn; bijvoorbeeld de keuze van AVR als mijn real-time besturingsplatform. Om deze reden heb ik in deze tekst een aanvullende rechtvaardiging gegeven voor de beslissingen die ik heb genomen. Deze extra uitleg moet de redenen aantonen die ik had om specifieke paden te kiezen, maar is uitdrukkelijk niet bedoeld om de AVR te verkondigen aan mensen die ervaring hebben met, en de voorkeur geven aan, een andere architectuur. Nogmaals, dit “bonus materiaal” is niet kritisch voor uw begrip van de hier gepresenteerde basisconcepten, en u kunt het gerust overslaan als u dat wenst.
Bedenk ook dat dit boek opzettelijk geen “bijbel” is. Het is geen uitputtende behandeling van elke nuance van de behandelde onderwerpen; een dergelijk werk zou meerdere planken beslaan. Het primaire doel van dit boek is het beschrijven en illustreren van een eenvoudige, modulaire, goedkope methodologie voor het implementeren van complexe embedded systemen, en het presenteren van een aantal kant-en-klare modules die de lezer aan zijn of haar eigen projecten kan aanpassen. De nadruk ligt op het realiseren van end-to-end oplossingen met behulp van goedkope ontwikkel-hardware en gratis software-gereedschappen. Tegen de tijd dat u de laatste pagina’s bereikt, zult u hopelijk het volgende hebben:
▪
Een functioneel begrip van de kritische “under-the-hood” details die nodig zijn om Linux op x86 platforms op te starten.
▪
Een inleiding tot de soorten problemen die u zult tegenkomen bij het gebruik van embedded x86 single-board computers als de kern van data logging en motion-controlling systemen.
▪
Basisinformatie over de Atmel AVR microcontroller familie.
▪
Een praktische inleiding tot het bouwen van enkele eenvoudige data-acquisitie en motorbesturingscircuits, en het aansluiten daarvan op PC’s.
▪
Enige basisinformatie over gegevensbeveiliging, authenticatie en betrouwbaarheid van embedded systemen.
Het onderliggende idee is dat de lezer redelijk intieme ervaring heeft met een van de onderwerpen van Linux applicatie-ontwikkeling, of ontwikkeling van diep ingebedde systemen – dit boek is ontworpen om u op te peppen met de essentie van welke kant van de vergelijking u ook mist. Het biedt ook de lijm die deze stukjes informatie samenbindt in de algemene context van een tamelijk complex project. Merk trouwens op dat ik het woord “kookboek” met enige schroom heb gebruikt. Puur kookboek engineering – onbegrepen stukjes aan elkaar plakken als Capsela bollen – is nooit een goede praktijk. In dit boek geef ik u een aantal kant-en-klare Capsela stukken, maar ik vertel u ook hoe en waarom ik de tandwielen en assen in elk stuk heb gemaakt, en tot op zekere hoogte hoe u verder kunt gaan en betere stukken voor uzelf kunt maken. Deze uitleg is veel belangrijker dan de blauwdrukken voor de stukken zelf.
Bij het plannen van een boek als dit, is het gemakkelijk om in een van twee valkuilen te vallen: ofwel om een enkele, monolithische “mega-applicatie” te maken die alle gewenste punten illustreert, maar extreem moeilijk is om beknopt uit te leggen, of aan de andere kant om het onderwerp op te splitsen in tal van kleine abstracte notities die veel lezers moeite zullen hebben om te integreren in real-world projecten. Ik heb geprobeerd tussen deze twee uitersten in te laveren door de interessantere modules van het E-2 project op te splitsen in een paar kleine, praktische toepassingen, samen met in principe standalone code en genoeg theorie om deze toepassingen aan te passen en uit te breiden voor eigen gebruik.
Ten slotte nog een opmerking voor mensen die mijn vorige boek, Embedded System Development on a Shoestring, bezitten. Dit boek is niet bedoeld als een vervolg op dat boek, maar het is wel degelijk verwant materiaal. Als je de technieken in dit boek volgt om een prototype te bouwen, en je wilt het later terugbrengen tot een geoptimaliseerde single-chip oplossing, dan zal mijn eerdere werk je helpen te begrijpen hoe je vrije GNU programma’s kunt gebruiken om je software gemakkelijk over te zetten naar een ARM microcontroller. De belangrijkste kritiek die ik kreeg op dat vorige boek was dat het een breder scala aan informatie moest bevatten, en dat er te weinig illustraties waren, waardoor het nogal droog was om te lezen. Ik heb naar deze opmerkingen geluisterd en ik hoop dat dit boek in beide opzichten aan uw wensen voldoet. Zoals altijd zijn uw opmerkingen en suggesties welkom; u kunt mij e-mailen op of mijn website bezoeken op http://www.zws.com/.