Mine sisu juurde

Mikrokontroller

Allikas: Vikipeedia
Ultraviolettkiirgusega kustutatava püsimäluga mikrokontroller 62E40 aastast 1993 firmalt STMicroelectronics
Mikrokontroller ATtiny2313 firmalt Atmel
Kõvaketta juhtplaat mikrokontrolleriga Fujitsu MAP3735NC

Mikrokontroller (algse nimega ühekiibi mikroarvuti) on mikrokiip, milles on peale keskprotsessori veel komponente, näiteks mälu.

Võrreldes mikroprotsessoriga on mikrokontroller komplektsem. Mikrokontrollerile on toimiva arvuti koostamiseks vaja lisada vähem komponente kui mikroprotsessorile.

Mikrokontrollereid kasutatakse peamiselt automaatjuhtimisseadmetes ja mehhatroonilistes süsteemides.

Mikroprotsessoriga töötava süsteemi koostamiseks oli vaja väliseid kiipe (mälud, andmesideliidesed jms). See tõstis süsteemide kogumaksumust ja muutis majanduslikult võimatuks paljud arvutirakendused.

  • 1971. aastal koostasid firma TI insenerid Gary Boone ja Michael Cochran esimese mikrokontrolleri TMS 1000, mis toodi kommertsturule aastal 1974 ning kandis nimetust ühekiibi mikroarvuti (single chip microcomputer). See sisaldas ühes kiibis püsimälu, muutmälu, mikroprotsessori ja taktsignaali allikat ning oli mõeldud manussüsteemidele.[1]
  • 1977. aastal tõi Intel kommertsturule mikrokontrolleri Intel 8048.[2] See sisaldas muutmälu, püsimälu samas kiibis mikroprotsessoriga. See kiip ja selle kiibi edasiarendused on leidnud kasutust miljardites personaalarvuti klaviatuurides ning paljudes muudes rakendustes. Firma Intel president Luke J. Valenter on nimetanud seda üheks suurimaks edulooks firma ajaloos.

Tol ajal oli levinud kaks liiki mikrokontorollereid:

  • Kustutatava EPROM programmimäluga mikrokontrolleritel oli kvartsist aken ultraviolettkiirgusega kustutamiseks. Üldjuhul olid need keraamilise kestaga.
  • Ühekordselt programmeeritavatel mikrokontrolleritel kustutamisvõimalus puudus. Sisu poolest oli see sama mis kustutatav mikrokontroller, aga kuna odava plastkesta tõttu kustutamisvõialus kvartsist akna näol puudus, siis nimetati seda ühekordselt programmeeritavaks PROM püsimäluga mikrokontrolleriks.

Elektriliselt kustutatavate püsimälude ehk EEPROM-mälude turuletulek 1993. aastal andis võimaluse valmistada kustutava püsimäluga mikrokontrollereid ilma kalli kestata. Elektriliselt kustutatavad püsimälud ehk EEPROM-id olid eraldi kiipidena turul juba enne seda kuid ühes kiibis lahenduse puudumine ei võimaldanud nendega koostada odavat masstoodangut. Elektriliselt kustutatavateks mikrokontrollerkiipide näiteks on firma Microchip PIC16x84 mikrokontrollerid, firma Atmel välkmäluga (FLASH) mikrokontrollerid[3] ja paljude teiste firmade poolt samade mälutüüpidega mikrokontrollerid.

Mikrokontrolleriga süsteemide elektritoide

[muuda | muuda lähteteksti]

Erinevalt lihtsatest digitaallülitustest, mis kasutavad ühte toitepinge nivood (+3,6 V või +5 V), vajavad paljud mikrokontrolleriga süsteemid mitme erineva tasemega toitepinget. Samuti vajavad mõningad andmeedastuslülitused diferentsiaalsignaalide tekitamiseks kahepolaarset toitepinget. Diferentsiaalsignaale kasutavad andmesideliidesed RS-422, RS-485, keerdpaarjuhtmega Ethernet, USB.[4]

Kui elektroonika vajab mõnes kohas nii positiivset kui ka negatiivset toitepinget, saab selle tekitada trafoga, mille mähiselt on keskelt võetud kolmas väljund. Samuti võib kaks trafot omavahel ühendada. Pärast alandamist ja silumist saab kahepolaarse toitepinge.

Kui puudub vajadus suure voolu järele kahepolaarsetes ahelates, saab kohmaka trafoga lülituse asendada laengupumbaga, mis tavalisi kondensaatoreid kasutades liigutab laenguid erinevate kondensaatorite vahel nii, et tekiksid vajalike pingetega väljundina kasutatavad kondensaatorid. Selliseid pumpasid kasutavad RS-232 liini juhtimise mikrokiibid.

Mikrokontrolleri elektrisignaalide sobitamine

[muuda | muuda lähteteksti]

Kuna mikrokontrollerid töötavad tavaliselt toitepingetel 1,8 V, 3,3 V või 5 V, siis ei saa nende väljundeid ühendada otse andmeliinidega, mis toimivad suurematel pingetel. Samuti ei saa enamikul juhtudel otse juhtida liine, mille pinge on väiksem kui mikrokontrolleri väljundpinge.

Probleemi lahendamiseks tuleb mikrokontrolleri ja liini vahele panna astmemuundur. Lihtsamatel juhtudel saab kasutada sisendi puhul tavalist pingejagurit ja väljundi puhul transistoridest koostatud lülitust, mis tüürib väikese pingega suuremat pinget. Silmas tuleb pidada, et lisatakistuste ja mahtuvuste lisamine liinile tõstab selle ajakonstanti ja seega muutub liini efektiivne töösagedus väiksemaks.[5]

Andmeedastuseseviiside tehnilised näitajad

[muuda | muuda lähteteksti]

Lauaarvuti ja mikrokontrolleri vahelisel suhtlusel saab valida erinevaid andmevahetusprotokolle ja -viise, millel kõigil on omad head ja vead. Õige lahenduse leidmiseks tuleb uurida mitut probleemi ja vastuste baasil otsustada, milline andmevahetus on kõige otstarbekam antud ülesande lahendamiseks.

Andmeedastuskiirus
[muuda | muuda lähteteksti]

Sõltuvalt andmepakettide mahust ja pakettide saatmise sagedusest tuleb valida sobiva kiirusega andmevahetusprotokoll. Meeles tuleb pidada, et mida suurem on andmete liikumise kiirus, seda suurem on elektrisignaalide sagedus. Suurematel sagedustel on raskem elektrisignaale edastada, sest väikesed mahtuvused ja induktiivsused mõjutavad signaali rohkem. Sellepärast hoitakse kiirete andmetega liinid lühikesed – arvuti muutmälu on otse emaplaadil, mitte lintkaabliga korpuse küljes.

Sõltuvalt andmete tüübist saab valida erineva veakindlusega andmevahetuste vahel. Mõõtes ilmajaamalt iga ajavahemiku t tagant ilma näitajaid, ei juhtu midagi, kui 1% saadetud andmetest on viga sees. Kasutades tarkvara, mis eemaldab mõõtmiste loetelust eksed, võime koostada üsnagi suure tõenäosusega ilma kujutavad graafikud, mis on tõesed. Selline olukord võib tekkida ilmajaamaga, mis kasutab raadiosidet toas oleva arvutiga ning maja konstruktsioon on raadiosignaale segav.

Teisel juhul on 1% viga väga tõsine probleem. Näiteks programmeerides liiga pika varjestamata kaabliga mikrokontrollereid, ei jõua andmed arvutist kunagi täiesti õigesti kohale ja programm hakkab tõrgetega käima või ei tööta üldse, sest iga bitt programmis võib olla ülimalt tähtis.

Sõltuvalt kohast, kus soovitakse arvutiga ühendatavat seadet kasutada, tuleb valida sobiv andmeedastus. Ei ole mõtet kasutada USB-d, kui on vaja ühendada maja teises otsas asuvat kontrollerit (näiteks ventilatsiooni kontroller), sest USB-standard lubab vaid ilma vahelülideta 5 m pikkust kaablit.[6] Otstarbekas oleks kasutada näiteks RS-422 standardit, mis lubab kaabli pikkuseks 1200 m.[7]

Liini sobitamine
[muuda | muuda lähteteksti]

Pikemate liinide ja suuremate sageduste puhul võib esineda probleem, kus liini otsast sisenev impulss ei jõua liini otsas olevasse vastuvõtjasse. Osa võimsusest muutub liini takistuse tõttu soojuseks ning liini sees toimub signaali peegeldumine. Võimalikult suure signaali võimsuse jõudmiseks vastuvõtjasse peavad liini, saatja ja vastuvõtja impedantsid ehk näivtakistused olema võrdsed.[8]

Elektriline isoleeritus
[muuda | muuda lähteteksti]
Multimeetri optiline väljund

Mistahes elektriline ühendus arvuti ja mikrokontrolleri vahel võib üle kanda rikkevoolu (pigem mikrokontrollerilt arvutile kui vastupidi). Logivaid elektrilisi mõõteriistu toodetakse tihti infrapuna, raadioside või optiliselt eraldatud andmeliinidega, et rikke puhul kaitsta arvutit.

Mikrokontrolleri suhtlus lauaarvutiga

[muuda | muuda lähteteksti]
AVR mikrokontroller ühenduses arvutiga läbi STK500 arenduslaua

Mikrokontrolleri suhtlus lauaarvutiga on kas elektriline, optiline, heli- või raadiolainetega toimuv andmeedastus. Enamikul juhtudel on edastatav signaal digitaalsignaalide jada. Mikrokontrollereid leidub väga paljudes nüüdisajal toodetud elektroonikaseadmetes, seetõttu on vaja erinevaid meetodeid millega andmeid üle andmesideliideste lauaarvutisse, sülearvutisse või arvutivõrgu abil üle kanda. Viimaseid nimetatakse andmesideprotokollideks.

Mikrokontrollerite abil saab teostada digitaalseid multimeetreid, ostsilloskoope, ilmajaamu ja palju muud, kõigi nende seadmete kogutud infot on vaja edasi töödelda ja kasutajale paremini loetavaks muuta.

Mikrokontrolleri ja üldotstarbelise arvuti vahelise andmevahetus on kasutusel elektroonikatööstuses, hariduskeskustes ja hobielektroonikute hulgas. Andmesideliideseid kasutatakse ka programmi töö silumiseks (ingl. k. debug) ja kasutajaliideste arendamiseks.

Eri tüüpi mikrokontrollerid ja nende integreeritud andmeedastusprotokollid

[muuda | muuda lähteteksti]

Erinevad mikrokontrollerid pakuvad erinevaid võimalusi arvutiga suhtlemiseks, kus osa seadmeid saab ühendada otse (USB) ja teistele on vaja vahele lisada elektroonikat (RS-232). All olevas tabelis on toodud erinevaid mikrokontrollereid ja nende integreeritud andmeedastusüksused.

Tüüp Registrite suurus Mudel SPI TWI U(S)ART USB Ethernet ZigBee IR
AVR[9] 8-bit ATxmega16A4 2 2 5 0 0 0 1
AVR[9] 8-bit ATxmega128A1 4 4 8 0 0 0 1
AVR[9] 8-bit ATmega48 1 1 1 0 0 0 0
AVR[10] 8-bit ATmega8U2 1 0 1 1 0 0 0
AVR[11] 8-bit ATmega128RFA1 1 1 2 0 0 1 0
AVR[12] 32-bit AT32UC3A0512 2 1 4 1 1 0 1
PIC[13] 32-bit PIC32MX575F256L 4 5 6 1 0 0 0
PIC[13] 32-bit PIC32MX795F512L 4 5 6 1 1 0 0

Mikrokontrolleri suhtlus USB-ga

[muuda | muuda lähteteksti]

USB suhtluse arendamiseks mikrokontrolleri ja lauaarvuti vahel on kolm peamist võimalust:

  1. mikrokontrolleri I/O (sisend väljund) otseühendamine
  2. mikrokontrolleri ühendamine välise loogika kaudu
  3. mikrokontrolleri integreeritud USB-kontrolleri kasutamine

I/O otseühendamine

[muuda | muuda lähteteksti]

Kuigi enamik nõrga võimekusega 8-bitiseid mikrokontrollereid USB-kontrollerit ei sisalda, saab tekitada tarkvaraliselt virtuaalse USB-kontrolleri. Näiteks AVR mikrokontrolleritele on arendatud tarkvara V-USB (virtuaalne USB siin AVR mikrokontrolleritele), mis on osaliselt vabavara[14] ja võimaldab järgmist:

  • on täielikult ühilduv USB 1.1 standardiga;
  • töötab igal AVR-mikrokontrolleril, millel on vähemalt 2 kB koodimälu, 128 baiti muutmälu ja taktsagedus vähemalt 12 MHz;
  • ühildub Windowsi, Maci ja Linuxiga.[15]

Ühendamine välise loogikalülituse kaudu

[muuda | muuda lähteteksti]

Kuna tarkvaraliselt teostatud USB-sideprotokoll nõuab palju ressurssi, võib see olla mõne lahenduse juures takistuseks. Kui mikrokontrollerisse ei ole integreeritud sideprotokolli jaoks vajalikku riistvara, saab selle asendada välise elektroonikalülitusega, mis ühelt poolt suhtleb näiteks USB-ga ja teiselt poolt mõne lihtsama protokolli abil mikrokontrolleriga.

FTDI FT232BL

Mikroelektroonika tootja FTDI on arendanud suure seeria andmesidekontrollereid, mis tegelevad USB-andmevahetusega. Need ühilduvad ühelt poolt täielikult USB 2.0 standardiga ja teiselt poolt lihtsate andmesideliidestega – jada- (UART) või paralleelliidesega.

Lauaarvutis töötavad tarkvaralahendused suhtlevad jadaliidesega operatsioonisüsteemi kaudu. Firma FTDI toodang ühildub enamiku operatsioonisüsteemidega ning programme saab arendada kasutades C++, LabVIEW, Delphi ja paljudes muudes keeltes. Vajadusel saab tekitada mikrokontrolleri ja lauaarvuti vahele virtuaalse jadavärati (COM-port), mis muudab süsteemi programmeerimise lihtsaks.[16]

Ühendamine integreeritud USB-kontrolleri kaudu

[muuda | muuda lähteteksti]

Osadele mikrokontrolleritele on integreeritud sisemine kontroller, mis tegeleb USB-andmevahetusega. See võimaldab võrreldes kahe eelmise meetodiga hoida kokku trükkplaadi pinda, mikrokontrolleri ressurssi ja mõnel juhul tootmiskulusid.

Nii Atmel kui Microchip pakuvad laias valikus USB-liidesega mikrokontrollereid. Esindatud on 8-bitised, 16-bitised ja 32-bitised lahendused. Mõlemad tootjad pakuvad oma lahendustele erinevaid arenduslaudu ja näidistarkvara, mille abil on võimalik enda tarkvara arendada.[17][18]

Mikrokontrolleri suhtlus jadaväratiga

[muuda | muuda lähteteksti]

Kuigi jadavärat hakkab uutel arvutitel kaduma, võib seda siiski vanadelt töökorras arvutitelt leida ja kasutada. Jadavärat kasutab RS-232 standardit, mis baseerub lihtsal UART standardil.

UART standardile vastav andmeedastus leidub enamikul Microchip ja Atmel mikrokontrolleritel. Selle kasutamine on lihtne ja nõuab mikrokontrollerilt vähe ressurssi. Lihtsa UART tarkvara kirjutamine mikrokontrolleri poolele nõuab vähe koodimälu.

UART andmevahetuse programm

[muuda | muuda lähteteksti]

Näide on arendatud Atmel Atmega1280 mikrokontrolleril. See näitab UART andmeedastuse tarkvaralise poole lihtsust, kui soovitakse saata ja lugeda andmeid 1-bait korraga. Näide on kirjutatud C-keeles. Kui soovitakse paindlikumat koodi suurema funktsionaalsusega tuleb koodi edasi arendada.

void UART_seadistus(void)
    {                    //Seadistan registrid
    UBRR0L = 103;        //Uart bitiedastus kiiruse väärtus
    UCSR0A = 0b00000010; //Topelt kiirus 
    UCSR0B = 0b00011000; //Saatja ja Vastuvõtja sisse 
    UCSR0C = 0b00001110; //8 info ja 2 stop bitti 
    return;
    }

char UART_loe(void)
    {
    char data;
    data=UDR0;           //Loen info registrist saadetud biti
    return data;         //Tagastan loetud baidi
    }

void UART_kirjuta(char data)
    {
    UDR0=data;     
    //Ootan, kuni register on vaba uueks kirjutamiseks 
    while(UCSR0A&0x20);
    return;
    }

Asünkroonse jadavärati (UART) signaalide sobitamine RS-232 standardiga liiniga

[muuda | muuda lähteteksti]

Kuna mikrokontroller töötab pingetel 1,8–5,5 V, siis tema väljund ei sobi RS-232 standardiga kokku. RS-232 vajab andmeliinidel positiivseid ja negatiivseid pingeid – näiteks +10 V ja −10 V.[19]

Probleemi lahendamiseks on vaja skeemile lisada RS-232 liini juhtija, mis viib UART signaalid vastavusse RS-232 standardiga ja vastupidi.[20] Näiteks võib tuua firma Maxim toodetud seeria MAX220–MAX249 ja firma Texas Instruments kiip SN75LV4737, mis on suutelised töötama ühepolaarse toitepingega +5 V. Mikroskeemidele on integreeritud sisemised laengupumbad, mis kondensaatoreid kasutades tekitavad vajalikud toitepinged +10 V ja −10 V. Esiteks kahekordistatakse toitepinge ja pärast tekitatakse vastastikuse polaarsusega võrdne pinge.[21]

Mikrokontrollersüsteemide raadioside

[muuda | muuda lähteteksti]

Mikrokontrolleri suhtlus ZigBee'ga

[muuda | muuda lähteteksti]

Kuna mikrokontrollerid muutuvad aina võimsamaks ja odavamaks ning hakkavad üha enam juhtima meie igapäeva seadmeid, on tõusnud idee seadmete vahelisest võrgustikust. Võib kujutada maja, kus valgustus, ventilatsioon ja küte on ühendatud erinevate anduritega, mis paiknevad erinevates kohtades. Anduritelt saadud info põhjal kontrollib maja arvutivõrk võimalikult otstarbekalt energiaressursse. Kogu süsteem oleks kontrollitav näiteks süleaarvutist.

Sellise võrgustiku loomiseks on kõige mugavam raadiosidega üksuste kasutamine, mis on suutelised ühilduma juba olemasoleva süsteemiga. Selliste süsteemide arendamiseks on loodud ZigBee (IEEE 802.15.4-2003) standard, mis on olemuselt traadita personaalne kohtvõrk (WPANWireless Personal Area Networks).[22]

Mikrokontroller ja raadioside ühes kiibis

[muuda | muuda lähteteksti]

Kuna ZigBee kasutab kõrgsageduslikku raadiosidet (2,4 GHz)[23], siis saab see riistvara olla väikeste mõõtmetega. Atmel oli üks esimesi tootjaid, mis integreeris mikrokontrolleri ja ZigBee täisfunktsionaalsusega saatja ja vastuvõtja ühe kiibi sisse. Ühendati Atmega1281 ja ZigBee raadioside ning saadi ATmega128RFA1. Vajalikke väliseid komponente kulub vähe, millest põhilised on:

  1. 12 MHz kristall
  2. kondensaatorid kristallile
  3. kondensaatorid müra eemaldamiseks
  4. antenn
  5. soovituslik varjestus

[24]

Kuna mikrokontroller ning raadiosaatja ja -vastuvõtja on ühes tükis, toimub nendevaheline suhtlus läbi registrite, mis on palju mugavam lahendus kui välise raadiosidet korraldava üksusega suhtlemine. Integreeritud raadiosaatja ja -vastuvõtja saavad kasutada katkestusi, mis muudavad programmi töö paindlikumaks.

Valmis raadiomoodulid

[muuda | muuda lähteteksti]

Leidub valmis raadiomooduleid, kus kasutaja ei pea väliseid komponente lisama, et raadiosidet arendada. Näiteks ATmega128RFA1 baasil toodetud deRFmega128-22A02 on valmis lahendus kuni 200 m kauguse raadioside arendamiseks.[25]

ZigBee lauaarvutile

[muuda | muuda lähteteksti]

Lauaarvutitele saab integreerida ZigBee tuge. Näiteks on võimalik USB kaudu suhelda välise ZigBee raadiosaatja ja -vastuvõtjaga.

Programmikoodi ja seadistuskoodi laadimine püsimäludesse

[muuda | muuda lähteteksti]

Mikrokontrolleri mälus olevat infot saab muuta (programmeerida) läbi arvuti, kasutades tootjate väljatöötatud riistvara koos sobiva tarkvaraga.

Vale infosõna kirjutamine mikrokontrolleri seadistusmälu (inglise k fuse map) pesasse võib mikrokontrolleri muuta kasutuskõlbmatuks. Sellest tulenevalt on olemas seadmete rikkumise oht ebakvaliteetse aparatuuri või tarkvara kasutamisel. Programmaatoreid on võimalik ise ehitada, kuid neist kõige lihtsamad versioonid ei ole veakindlad ja võivad tekitada probleeme. Näiteks AVR 8-bitiste mikrokontrollerite puhul juhtus tihti seda, et kehv programmaator seadistas vea tõttu taktsignaali allika valesti ning mikrokontrollerit ei saanud enam edasi programmeerida, ilma et oleks muudetud skeemi.

Piltidel on näha ühte kodus tehtud AVR 8-bitiste mikrokontrollerite programmeerijat ja ühte originaali – AVR ISP mkII. Atmeli oma toodangust on pilt pealt ja ka sellest, mis sel sees on.

  1. Augarten, Stan (1983). The Most Widely Used Computer on a Chip: The TMS 1000. State of the Art: A Photographic History of the Integrated Circuit. New Haven and New York: Ticknor & Fields. ISBN 0-89919-195-9. Vaadatud 23.12.2009.
  2. "Oral History Panel on the Development and Promotion of the Intel 8048 Microcontroller" (PDF). Computer History Museum Oral History, 2008. Lk 4. Originaali (PDF) arhiivikoopia seisuga 19.06.2012. Vaadatud 28.06.2011.
  3. ""Atmel's Self-Programming Flash Microcontrollers"" (PDF). 24. jaanuar 2012. Vaadatud 25.10.2008. by Odd Jostein Svendsli 2003
  4. "Differential signaling" Wikipedia artikkel "Differential signaling"
  5. "3V Tips ‘n Tricks" Microchip selgitused 3 V loogika kohta 11.Dets
  6. "USB KKK" USB standardi koduleht 21.Nov 2010
  7. "RS-422" Wikipedia artikkel "RS-422"
  8. "Transmission lines" Wikipedia artikkel "Transmission lines"
  9. 9,0 9,1 9,2 "Atmel mikrokontrollerid" 21.Nov 2010
  10. "ATmega8U2" ATmega8U2 andmeleht 21.Nov 2010
  11. "ATmega128RFA1" ATmega128RFA1 andmeleht 21.Nov 2010
  12. "AT32UC3A0512" AT32UC3A0512 andmeleht 21.Nov 2010
  13. 13,0 13,1 "Microchip mikrokontrollerid" 21.Nov 2010
  14. "V-USB licensing" V-USB litsents 11.Dets
  15. "V-USB Overview" V-USB võimalused 11.Dets
  16. "FTDI Home Page" FTDI koduleht 11.Dets
  17. "Atmel USB" Atmel USB tutvustus 11.Dets
  18. "Microchip USB" Microchip USB tutvustus 11.Dets
  19. "AVR RS-232" RS-232 ja AVR ühendus
  20. "RS-232" Wikipedia artikkel "RS-232"
  21. "RS-232 line driver" RS-232 liini juhtijad
  22. "ZigBee" Wikipedia artikkel "ZigBee"
  23. "ZigBee Hope Oage" ZigBee koduleht 11.Dets
  24. "MCU wireless" Atmel traadita mikrokontrollerite tutvustus 11.Dets
  25. "deRFmega128-22A02" Dresten Elektronik'u deRFmega128-22A02 11.Dets