Vanwege hun lage prijs en verbazingwekkende mogelijkheden vinden microcontrollers (MCU) inmiddels hun weg naar bijna elke toepassing. Van enorme systems-on-chip (SoC) apparaten in auto's tot kleine 8-bits apparaten in sensoren. Nadat je zelf een microcontrollerfamilie hebt gevonden die aan je wensen voldoet blijf je waarschijnlijk zo lang mogelijk bij deze keuze. Daarmee kun je immers optimaal gebruik maken van je reeds opgebouwde kennis over deze processor, de ontwikkelomgeving en de foutopsporingstools. Niettemin zal er op een dag vast wel eens een applicatie idee opdoemen dat andere specificaties vraagt. In dit artikel bieden we een leidraad bij het snel en succesvol evalueren van het hedendaagse moderne aanbod aan microcontrollers!
 

Een microcontroller nodig?

Bij het kiezen van een microcontroller is er zeker geen gebrek aan opties. En dat is ook niet verwonderlijk. Met een wereldwijde markt, die naar schatting zal groeien tot meer dan $ 20 miljard in 2027, zal er namelijk ongetwijfeld een ruim en concurrerend aanbod zijn. Voor wie net op zoek is naar een microcontroller is dit gegeven natuurlijk positief. Het moedigt leveranciers aan om hun producten te innoveren en het biedt een rijk palet aan controllers met diverse mogelijkheden, functies en kenmerken. Echter, met zo’n snelgroeiend spectrum aan beschikbare opties, hoe ga je dan het beste te werk bij het selecteren van de optimale microcontroller voor je toepassing?

Je kunt hierbij gemakkelijk verstrikt raken in zaken als bitbreedtes, megahertz en geheugengroottes, want deze parameters alleen al maken het tot een uitdaging om de verschillende producten te vergelijken. Verder vereisen veel toepassingen juist een specifieke eigenschap, zoals een lange levensduur van de batterij, een hoge integratie, een vlekkeloze beveiliging, danwel functioneel veilig. Het wordt derhalve aanbevolen om de tijd te nemen bij het op een rij zetten van al je wensen voordat je begint met het zoeken naar je ideale microcontroller.
 

Definieer duidelijk je toepassingseisen

De eerste stap is dan om de diverse gebruiksopties te benoemen voor het ontwerp dat je probeert te bouwen. Dit omvat zaken als:

  • De mens-machine interface (MMI): wil je mechanische drukknoppen of capacitieve aanraking (figuur 1); monochroom of kleurendisplay; polyfoon geluid, of misschien gewoon een eenvoudige zoemer?     
  • Stroomverbruik: moet het apparaat jarenlang werken op een CR2023-cel, of dient het een adapter te gebruiken?
  • Interfaces: moet het compatibel zijn met bestaande protocollen (USB, Ethernet, Modbus, CAN, I2C en SPI)?
  • In- en uitgangen: heb je analoog nodig, en zo ja, welke nauwkeurigheid is daarbij vereist? Hoeveel digitale signalen zijn er nodig? Zijn er timers en tellers vereist?
  • Real-time mogelijkheden: borstelloze motorbesturing en digitale voedingen vereisen responstijden gemeten in nanoseconden, vooral bij eventuele kortsluiting. Dit vereist mogelijk speciale randapparatuur op je microcontroller.   
  • Afmeting: is je printplaat (PCB) beperkt in grootte waardoor de afmeting en het type IC-behuizing dat wordt gebruikt ook wordt beperkt?     
  • Maakbaarheid: ben je in staat om de aangeboden kits te solderen, vooral ook tijdens het prototypen?       
  • Beveiliging: Is er een veilige programmeeromgeving vereist voor het verwerken van cryptografische geheimen?
 
Figuur 1: Microcontrollers bieden vaak on-chip ondersteuning voor touch interfaces maar kunnen ook uitdagende eisen stellen aan de timing in je toepassing (Bron: Schurter).
De volgende stap is om deze lijst goed te bekijken en te overwegen wat er absoluut in de microcontroller moet zitten, danwel wat mogelijk off-chip zou kunnen zijn. Als je ontwerp beperkt is in ruimte wil je wellicht een sterk geïntegreerd apparaat. Maar stel dat je ruimte genoeg hebt op je board en hoge verwachtingen stelt aan het analoge signaalpad. In dat geval kies je waarschijnlijk liever voor een externe analoog-naar-digitaal of digitaal-naar-analoog converter (ADC / DAC).

De prijs van de microcontroller speelt uiteraard een rol in het besluitvormingsproces. Deze moet echter wel worden afgewogen tegen de kosten van extra randapparatuur om functies te implementeren die niét beschikbaar zijn op de microcontroller. Zo kunnen de kosten van een langere ontwikkelingstijd opwegen tegen eventuele besparingen op onderdelen indien het te ingewikkeld wordt om een ​​functie te implementeren die al is geïntegreerd in de randapparatuur.
 

Hoeveel bits en MHz? Welke Microcontroller processor?

Een decennium of langer geleden gaven het aantal bits en de gebruikte core waarschijnlijk de doorslag bij de keuze van een embedded microcontrollertoepassing, voornamelijk vanwege de prijs. Met de toename van 32-bits Arm devices zijn low-end Cortex-M0 modules echter inmiddels net zo goedkoop als sommige 8-bits microcontrollers (figuur 2). En, hoewel transistors kleiner worden, is dit veel minder het geval bij de halfgeleiders die worden gebruikt om flash memory te implementeren. Het is dus de grootte van de non-volatile flash memory die doorgaans de prijs van de chip bepaalt, niét de grootte en complexiteit van de processor en zijn randapparatuur.

 

Figuur 2: De huidige 32-bits microcontrollers kunnen net zo goedkoop zijn als sommige 8-bits alternatieven.

Een goede methode om te kunnen bepalen of een microcontroller je geplande toepassing aankan is door eerst een eenvoudig project te maken dat de critical code sections uitvoert. Na het compileren download je deze naar de microcontroller en gebruik je het foutopsporingsprogramma om te zien hoeveel flash- en SRAM-geheugen het vereist. Door tijdens de uitvoering bovendien een GPIO-pin in te schakelen, en de uitvoer hierop te bewaken met een oscilloscoop of logische analyzer, kan dan de uitvoeringstijd voor delen van de code worden bepaald.

Voordat je echter tijd verspilt aan het leren van nooit eerder gebruikte ontwikkelomgeving wil je misschien eerst enkele potentiële microcontrolleropties vergelijken met behulp van de EEMBC CoreMark benchmarks. CoreMark is een vast stuk applicatiecode dat vergelijkbare prestatiemetingen doet op de processor van de microcontroller. Omdat configuratie-instellingen hierbij een verschil kunnen maken worden resultaten vastgelegd met zowel de locatie van de code (flash of SRAM), de gebruikte versie van de compiler en de afgehandelde taken, en andere relevante informatie (figuur 3). Deze benchmarks zijn misschien niet perfect maar ze helpen wel om een shortlist te creëren. 
 

Figuur 3: De CoreMark resultaten van EEMBC vormen een goed startpunt bij het vergelijken van de relatieve prestaties van microcontrollers van verschillende leveranciers. (Bron: EEMBC )


Hoeveel microcontroller geheugen?

Het geheugenverbruik is volledig toepassingsafhankelijk. Idealiter moet alle bestaande code worden gecompileerd om te bepalen hoeveel programmageheugen nodig is. SRAM-behoeften zijn moeilijker te bepalen want stackgebruik kan alleen tijdens runtime worden bepaald. Gelukkig maken de huidige softwareontwikkelingsomgevingen het mogelijk om dit snel en gemakkelijk vast te stellen. Het is ook raadzaam om de hele microcontrollerfamilie te checken om in te schatten of er later mogelijk een pin-compatibele variant met minder flash en SRAM kan worden gebruikt, vooral als er druk op de kosten ligt.

De hedendaagse consument verwacht ook de software van zijn gebruikte producten te kunnen upgraden. De meeste apparaten beschikken over een protected area voor een bootloader. Wat er ook gebeurt, deze area zal altijd beschikbaar zijn, en dit biedt de mogelijkheid om firmware in het apparaat te flashen. Indien de laatste oude versie van de firmware moet worden behouden als een fallback, mocht de firmware-upgrade verkeerd gaan, dan dient dit gebied wel het dubbele aan flashgeheugen te bevatten om daarmee ruimte te bieden aan twee versies van je code.

Tot slot, flashgeheugen blijkt enigszins te slijten elke keer dat het wordt geschreven. Flashgeheugen voor code, of programmageheugen, kan daardoor slechts enkele tienduizenden schrijfcycli ondersteunen. Indien deze schrijfcycli alleen voor code worden gebruikt dan is dat prima. Maar mochten deze cycli worden gebruikt voor het opslaan van gegevens of configuratie-informatie dan moet er serieus rekening worden gehouden met die slijtage. Indien data worden opgeslagen in non-volatile memory dan dient alle beschikbare capaciteit van een interne EEPROM of een externe EEPROM te worden gebruikt (figuur 4).
 

Figuur 4: Bij het opslaan van kritieke non-volatile data is het raadzaam om een externe EEPROM te overwegen mocht de interne EEPROM van de microcontroller te beperkt zijn. (Bron: Microchip)


Hoeveel stroom zal mijn MCU gebruiken?

Indien je toepassing een lange levensduur van de batterij vereist dan is het essentieel om veel aandacht te besteden aan het onderzoeken van het stroomverbruik en de energiebesparende modi die elke microcontroller biedt. Het stroomverbruik is afhankelijk van vele factoren, en elke fabrikant heeft wel enkle slimme energiezuinige opties ontwikkeld die energie besparen, maar die ook van invloed zijn op de functionaliteit van de microcontroller. Zodra een controller ontwaakt uit een 'slaapstand' kan bijvoorbeeld een laagfrequente oscillator worden gebruikt totdat de hoofdoscillator is gestabiliseerd. Dit vertraagt de uitvoering van de code, wat in het algemeen ertoe kan leiden dat er meer stroom wordt verbruikt dan gepland. Het in dit stadium reeds selecteren van de verkeerde processor kan uiteindelijk resulteren in een vermindering van 10% of meer van de werkelijke levensduur van de batterij (uit eigen bittere ervaring!).

Maar de beste aanpak is het testen van de basisprincipes van je toepassing op een echt board. Dit is echter makkelijker gezegd dan gedaan. Bij veel demoboards en ontwikkelkits is het een uitdaging om de microcontroller te isoleren van de omliggende randapparatuur en chips. De beste aanpak is dan om een eenvoudig breakout board te bouwen met alleen de microcontroller, wat ontkoppelingscondensatoren en, indien nodig, een kristal. Met een stroomverbruik dat in het nanoampbereik ligt, maar naar micro- en milliampèreniveaus springt wanneer het actief is, is het dan wel even zoeken om een meetapparaat te vinden dat nauwkeurig genoeg is in de lage range van een breed dynamisch bereik. De firma Qoitech is gespecialiseerd in dit soort apparaten met hun Otii Arc. Hun vermogensmeter kan tevens de ontlading van de batterijen simuleren, wat zeer nuttig kan zijn (figuur 5).
 

Figuur 5: De Otii Arc van Qoitech biedt het benodigde dynamische bereik om het stroomverbruik van de microcontroller nauwkeurig te meten.


Het moet verder ook niet worden onderschat welke impact temperatuur, klokfrequentie, en voedingsspanning hebben op het stroomverbruik. Hoe hoger de temperatuur en de klokfrequentie, hoe groter het stroomverbruik. Voedingsspanning heeft zelfs een exponentiele impact op het stroomverbruik. Bij gebruik op de laagst toegestane spanning moet de capaciteit van de voeding dan ook zorgvuldig worden gedimensioneerd. Als de voeding dit namelijk niet goed trekt dan kan dit leiden tot spanningsdips op de microcontroller.

Elementaire "marketing" technische specificaties van fabrikanten van microcontrollers kunnen ook misleidend zijn. De energiezuinige microcontrollers van Microchip bieden bijvoorbeeld "9 nA sleep currents". Het bereiken van zo'n lage ruststroom kan echter ook tot ongewenste compromissen bij een andere specs leiden. De PIC24FJ256GA412 behoudt bijvoorbeeld niét z’n SRAM-content tijdens z’n ‘60 nA Deep Sleep’ mode. Hoewel z’n kritieke applicatie contextdata dan wél in twee registers (DSGPR0/1) kunnen worden opgeslagen betekent dit nog steeds dat de ‘wake up’ veel uitvoeringstijd en dus vermogen gebruikt om de microcontroller weer in de gebruikstoestand te krijgen. Het vermogensprofiel van de hele toepassing moet dus zorgvuldig worden geanalyseerd om te bezien of een dergelijke energiezuinige modus eigenlijk wel nuttig is.

Ten slotte biedt de EEMBC ook een familie van Ultra Low Power-benchmarks met de naam ULPMark. Als eerder aangekaart: wanneer je begint met de zoektocht naar geschikte devices kunnen dit soort benchmarks handig zijn om te weten waar je het beste kunt beginnen (figuur 6).

Figuur 6: EEMBC biedt ook ULPMark-benchmarkresultaten die de energiezuinige mogelijkheden van populaire microcontrollers vergelijken.

Welke randapparatuur?

Om redenen die vele jaren geleden misschien logisch waren, of omdat bepaalde busprotocollen geregistreerde handelsmerken zijn van andere leveranciers, kan de gebruikte interfacing soms een beetje verwarrend zijn. De meeste moderne microcontrollers hebben één of meer UART-, I2C en SPI-interfaces. Als voorbeeld van een mogelijke afwijking kan I2C dan echter soms ook een Two Wire Interface (TWI) worden genoemd. En los van deze andere benaming ondersteunt het dan wellicht ook niet de hogere klokfrequenties van I2C, de 10-bits adresseringsmodus of het is mogelijk niet geschikt voor gebruik in SMBus of PMBus toepassingen. Hetzelfde risico van functionaliteitsafwijkingen geldt ook voor UARTs en SPI. Ook hierbij is het dan aanbevolen om te testen in plaats van voetstoots aan te nemen dat de gewenste functionaliteit beschikbaar is.

De interfacing naar de randapparatuur kan ook zeer veeleisend zijn voor een processor, vooral indien er een interrupt wordt gegenereerd bij ontvangst van elke byte. Mocht er veel dataoverdracht worden verwacht dan is het raadzaam om een microcontroller te vinden met een Direct Memory Access (DMA) controller. Deze kan worden gekoppeld aan de interrupts van een randapparaat om zo een vaste hoeveelheid gegevens rechtstreeks van(naar) de SRAM naar(van) het randapparaat te kunnen sturen. Pas nadat een substantieel data block is verwerkt krijgt de processor een interupt zodat hij dán pas het gewenste proces uitvoert. Bij sommige microcontrollers kan de processor ook in low-power mode worden gezet terwijl de DMA autonoom nog steeds data heen en weer stuurt.

Sommige microcontrollers hebben zeer gespecialiseerde real-time besturingsinterfaces. De TMPM375FSDMG van Toshiba is bijvoorbeeld ontworpen voor de vectorbesturing van borstelloze motoren. Het beschikt over een mathematische Vector Engine, een driefasige pulsbreedtemodulator (PWM) blok en een ADC die bijna autonoom werken. De processor hoeft slechts af en toe in te springen in geval van een verandering van snelheid of bij een eventuele foutmelding.

On-chip analoge randapparatuur, zoals ADC's, dient te worden geïmplementeerd in dezelfde chiptechnologie als de rest van de chip. Dit is echter niet altijd de meest ideale technologie, hetgeen kan betekenen dat dergelijke ADC's, DAC's en vergelijkbare componenten mogelijk niet zo 'goed' zijn als off-chip alternatieven. Het aantal beschikbare bits in ADC's en DAC's alsmede de bemonsterings/updatesnelheid kan dan ook beperkt zijn. In dergelijke gevallen moet een compromis worden gevonden tussen de gewenste prestaties en andere factoren, zoals de omvang, de complexiteit en de kosten van het onwerp.
 

Ondersteuning bij design van de microcontroller

Dit thema beslaat een breed spectrum, variërend van de beschikbaarheid van ontwikkeltools en boards tot software librairies en de ondersteuning door third-party leveranciers. De meeste leveranciers van microcontrollers bieden ook ontwikkelomgevingen en compilers. Zo niet, dan worden ze waarschijnlijk ondersteund door IAR of Segger of andere aanbieders van ontwikkeltools. De leverancier van de microcontroller, danwel die third-parties, bieden eveneens hardware debuggers aan. Een eerste ervaring met een ontwikkelomgeving kan dan worden verkregen door een evaluation- of development board te testen, aangezien deze vaak ook een onboard feature-limited debugger hebben geïntegreerd. Compilers zijn meestal gratis beschikbaar met dan mischien wel enige beperkingen, zoals ‘geen toegang tot optimizers’ of een ‘limiet op de codegrootte’. Veel toepassingen met ook veiligheidsaspecten stellen echter hoge eisen aan documentering. Dus in dat geval zijn voor een goede traceerbaarheid wél de volledig gelicentieerde compilers en tools benodigd.

In de afgelopen decennia hebben microcontrollerleveranciers zich gerealiseerd dat softwarelibraries essentieel zijn om embedded software ontwikkelaars te ondersteunen. Minimaal dienen er enkele libraries beschikbaar te zijn waarmee een flink scala aan randapparatuur kan worden geïnitialiseerd en gebruikt. Meestal zijn er ook volledige softwarestacks beschikbaar, zoals USB en TCP/IP. Ook kunnen bij de meer eisende toepassingen real-time besturingssystemen worden geladen op de belangrijkste processors, zoals freeRTOS.

Een andere waardevolle graadmeter qua mogelijke toekomstige issues is het checken van de errata, de foutenlijst voor de geselecteerde microcontroller. Mocht deze lijst opmerkelijk lang zijn en sommige problemen geen bekende oplossing hebben dan is het waarschijnlijk een controller die je wilt vermijden. Ook is het raadzaam om forums met feedback van andere gebruikers af te struinen, maar bijvoorbeeld ook om te begrijpen hoe responsief en behulpzaam de leverancier is bij het beantwoorden van vragen.


Vragen of opmerkingen?

Heb je technische vragen of opmerkingen over zijn artikel? E-mail de auteur op stuart.cording@elektor.com of het Elektor-team op editor@elektor.com.