AS-74.3135 Servotekniikka Seminaariesityksen kirjallinen versio, mikrokontrollerit Vesa Nikkilä 16. huhtikuuta 2012 Mikrokontrolleri on pieni tietokone, joka sisältää prosessorin eli CPU:n lisäksi ohjelmamuistia (yleensä flash tai ROM), RAM-muistia eli datamuistia ja IO-nastoja [1]. Lisäksi tärkeä ominaisuus mikrokontrollereissa on keskeytyksistä huolehtiva yksikkö. Tämä interrupt unit tarkkailee haluttuja toimintoja, jotka voivat antaa keskeytyssignaalin. Keskeytyssignaalin saatuaan mikrokontrolleri siirtyy suorittamaan ohjelmakoodia toisesta kohtaa, jossa keskeytys käsitellään. Keskeytys voi esimerkiksi olla käyttäjän näppäinpainallus. Toinen tärkeä ominaisuus useissa nykyisissä mikrokontrollereissa on ad-muunnin, joka siis muuntaa analogisen signaalin digitaaliseksi. Muunninta voidaan käyttää esimerkiksi haettaessa analoginen lämpötilasignaali anturilta. Signaali muutetaan digitaaliseksi ja prosessoidaan celsiusasteiksi. Mikrokontrollerien ja -prosessorien kehitys kulkee käsi kädessä. Ensimmäinen (yhden piirin) mikroprosessori oli Intelin julkaisema malli Intel 4004 [2]. Transistoreita, jotka oikeinohjelmoituina (ja järjestettynä) luovat halutun loogikan, tässä 4-bittisessä prosessorissa oli vain 2 300 nykyään uusimmissa prosessoreissa voi taas olla jopa yli 500 miljoonaa transistoria [2]. Ensimmäinen laajalti menestynyt mikrokontrollerisarja oli Intelin MCS-48, jolla oli jo kaupallistakin käyttöä. Esimerkiksi varhainen pelikonsoli Magnavox Odyssey 2 käytti Intelin 8048-mikrokontrolleria. Mikrokontrollereiden kehityksessä mentiin suuri askel eteenpäin 90-luvulla, kun niissä otettiin käyttöön EEPROM (electronic erasable ROM). EEPROM mahdollistaa mikrokontrollerin yksinkertaisen ja nopean uudelleenohjelmoinnin. Lyhyen ajan sisällä tuli myös flash-muisti, joka vakiintunut mikrokontrollerin ohjelmamuistina [3]. Tunnettuja mikrokontrollereiden valmistajia ovat mm. Atmel, Microchip Technology ja Texas Instruments. Mikrokontrollereiden sovellusalueet Mikrokontrolleri tarjoaa sen ominaisuuksien ansiosta erinomaisen vaihtoehdon kompleksisen logiikan toteuttamiselle. Elektroniset järjestelmät, jotka tarvitsevat tietokoneohjausta on eräs mikrokontrollereiden tärkeimmistä sovellusalueista. Tällöin puhutaan sulautetuista järjestelmistä, jossa yhdistyvät siis jokin järjestelmä (mekaaninen ja/tai elektroninen) ja tie- 1
tokoneohjaus [4]. Klassisia esimerkkejä sulautetuista järjestelmistä ovat: digitaalinen rannekello, nykyaikainen radio, mp3-soitin sekä kaukosäädin. Yleensä sulautetuissa järjestelmissä ei ole käyttöjärjestelmää, jonka päällä itse ohjelma(t) pyörivät, mutta on myös mahdollista, että järjestelmässä on jokin yksinkertainen käyttöjärjestelmä; esimerkiksi puhelimista löytyy käyttöjärjestelmä. Mikrokontrolleria voidaan käyttää myös osana suurempaa järjestelmää. Mikrokontrolleri voi siis muodostaa jonkin järjestelmän osan kanssa alijärjestelmän, joka esimerkiksi abstraktoi hankalan säädön ylemmälle tasolle, josta sitä voidaan käyttää helposti. Kuvitellaan esimerkin vuoksi vaunu, jonka päälle on kiinnitetty yhdellä vapausasteella varsi. Systeemi muodostaa näin käänteisen heilurin. Mikrokontrollerin muodostama alijärjestelmä voisi tässä esimerkissä huolehtia siitä, että varsi ei pääse kaatumaan. Alijärjestelmä ottaisi syötteekseen halutun paikan vaunulle, minkä jälkeen alijärjestelmä ajaisi vaunu oikeaan paikkaan. Näin käyttäjän ei tarvitsisi huolehtia enää järjestelmää jatkokehittäessä, siitä mitä tapahtuu pinnan alla. Ja tämä tietenkin oli vain yksi äärettömistä esimerkeistä. Mikrokontrollerilla on mahdollista toteuttaa hyvinkin hienostuneita säätimiä. Useasti käytettyjen P, PD tai PID-säätimien toteutus toteutus on mikrokontrollerilla hyvin yksinkertaista. Hienostuneempien säätöalgoritmien toteutus on myös näppärää, sillä vaadittavien elektronisten komponenttien määrä ei kasva vaikka säätöalgoritmi monimutkaistuisi kaiken tapahtuessa ohjelmallisesti; vain ohjelmakoodi kasvaa. Mikrokontrollerin ohjelmoiminen konkreettisesti tapahtuu yleensä C- tai assembly-kielellä [5]. Ohjelma täytyy siirtää mikrokontrollerin (flash)muistiin, kun ohjelma on käännetty lähdekoodista kääntäjälle. Siirto voidaan suorittaa sarjaporttia käyttämällä ja nykyään paljon käytössä olevan usb-portin kautta [6]. Usb-portin kautta tapahtuva siirto lienee suositeltavampaa, sillä sarjaportti rajoitustensa vuoksi on vanhentunut liitäntätyyppi, joka on jo poistunut tai poistumassa pc-käytöstä [7]; olisihan vaikeaa ladata ohjelma mikrokontrollerille sarjaportin kautta ilman sarjaporttia. Atmelin ATmega32-mikrokontrolleri ATmega32 on Atmelin valmistama mikrokontrolleri, ja se on hyvä esimerkki nykypäivän mikrokontrollerista. Sen prosessori on 8-bittinen, siinä on 32 kilotavua flash-muistia ohjelmalle, IO-pinnejä siitä löytyy 44, ja sen maksimi värähtelytaajuus on 16 MHz [8]. ATmega32:sta löytyy lukuisia hyödyllisiä lisätoimintoja: AD-muunnin, 1 kilotavu EEPROMmuistia, watchdog timer sekä pwm-ulostulo (eli pulse width modulation, pulssinleveys modulaatio) [8]. Watchdog timeriä voidaan käyttää järjestelmän elvyttämiseen, mikäli se on ajautunut virhetilaan. Yleensä tämä tapahtuu antamalla reset-signaali mikrokontrollerille. Pwm-ulostuloa voidaan taas esimerkiksi käyttää hyväksi säädettäessä led-valon kirkautta. ATmega32 CPU:n rekisterien leveys on siis 8 bittiä, mutta kehittyneimmillä mikrokontrollereilla se voi olla jopa 32 bittiä. Fyysisiltä mitoiltaan ATmega32 (TQFP eli thin quad flat package) on hyvin pieni: vain 12 12 millimetriä. Korkeutta sillä on 1,2 millimetriä. QFP-tyypin mikrokontrolleri on ns. s. 2
pintaliitoskompentti, jolloin piirilevyyn ei porata reikiä komponenttia varten, vaan se liitetään suoraan piirin pintaan (juottamalla) [8]. Käyttö PID-säätimenä Diskreetti PID-säädin on yleisimmin käytetty säädin teollisuudessa [9]. Osaksi tämänkin takia mikrokontrollereiden käyttö PID-säätimenä on hyvin yleistä. Esimerkkikohteita PIDsäätimelle ovat mm. moottorinohjaus, lämpötilan, virtauksen ja paineen säätö tai muiden ominaisuuksien säätö [10]. On muistettava, että säätimen digitalisointi tekee siitä tässä diskreetin. Mikrokontrollerille on helppoa asettaa näytteenottoväli käyttämällä kontrollerin sisäänrakennettuja ajastimia eli timereitä. Haluttaessa näytteenottoväli voi olla niinkin lyhyt ettei diskreetillä ja jatkuva-aikasella säätimellä ole mitään eroa. Tosin, diskreetit ominaisuudet tulevat näkyviin välttämättä säätöprobleemissa, jotka käyttäytyvät hyvin nopeasti, sillä kontrollerin kellotaajus ei ole ääretön. Atmelin diskreetin PID-säätimen esimerkissä mikrokontrolleri on ohjelmoitu C-kielellä [10]; tässä esimerkissä säätimen näytteenottovälin määrittämiseen käytetään ajastinta, joka on nimetty PID_timeriksi. Atmelin esimerkki diskreetistä PID-säätimestä Aivan aluksi säädin alustetaan kutsumalla ohjelman main()-funktiossa säätimen alustavaa Init_PID()-funktiota. Alustusfunktiolle annetaan parametreiksi, p_factor, i_factor ja d_factor, jotka määrittävät säätimen parametrit. Itse PID-säätimen implementaatio ollaan toteutettu erilliseen tiedostoon: pid.c ja sen header -tiedostoon pid.h. Säätimen kirjasto, jos näin voisi sanoa, tarjoaa kaksi funktiota käyttäjälle: alustusfunktion, sekä varsinaisen säätöfunktion PID(), joka palauttaa säätöarvon. Säätöfunktiolle luonnollisesti annetaan parametreiksi asetusarvo ja prosessin nykyinen tila. Esimerkissä on huomattavaa, että pienillä muutoksilla olisi mahdollista määrittää prosessin haluttu asetusarvo myös alustusfunktiossa. Tällöin ei asetusarvoa annettaisi säätöfunktiolle. Tämä kuitenkin rajoittaisi säätimen toimintaa, sillä asetusarvo olisi kiinteä vakio. Ohjelmassa käynnissä oleva ajastin asettaa lipukkeen PID_timer, kun näyttenottovälin määrittämä aika saavutetaan. Lipukkeen syttyessä päärutiini lukee nykyisen prosessiarvon ja kutsuu säätöfunktiota PID(), jolle toisena parametrina annettiin siis haluttu asetusarvo. Lopuksi säätöfunktio siis palauttaa säätöarvon, jonka päärutiini voi ohjata aktuaattorille. Säätöarvo voisi esimerkiksi olla moottorinnopeus. Koska mikrokontrollerilla säädin on täysin ohjelmapohjainen, niin on siihen myös helppo lisätä erikoisominaisuuksia. Kyseisessä Atmelin esimerkissä kontrollerille on toteutettu integraalitermin windup-ilmiön rajoitus. Rajoitus tapahtuu yksinkertaisesti asettamalla vakio MAX_I_TERM, joka huomioidaan säätimen implementaatiossa niin, että yksinkertainen ehtolauseke tarkistaa, ettei I-termi kasva sen yli. Myös säätimen muu lisäkehitys on helppoa; esimerkiksi näytteenottoajan ei tarvitse olla vakio vaan sitä voitaisiin muuttaa dynaamisesti. s. 3
Mikrokontrolleri vaihtoehtona Mikrokontrollerin käyttö, esimerkiksi säätimenä, ei ole pakollista. Kaikki on tietenkin mahdollista toteuttaa analogisesti. Mikrokontrollerin käyttö kuitenkin vähänkään laajemman järjestelmän toteuttamiseen on järkevää ja perusteltua. Ensinnäkin säästetään komponenttikustannuksissa, sillä iso osa analogiakomponenteista on korvattavissa vain yhdellä mikrokontrollerilla [11]. Lisäksi järjestelmä saadaan toteutettua pienempään tilaan ja siitä tulee myös kevyempi. Ja koska koko logiikka voidaan käytännössä paketoida mikrokontrollerille, on ympäröivä elektroniikkaosa yksinkertainen. Tämä lisää järjestelmän selkeyttä ja yksinkertaisuutta. Kaiken lisäksi on järjestelmää on helppoa päivittää, jos logiikkaan halutaan tehdä muutos tai korjaus. Yhteenveto Mikrokontrollerit ovat olellinen osa nykyteknologiaa; mikrokontrollereiden avulla on mahdollista toteuttaa asioita, mitä ei analogisesti ole edes käytännösä mahdollista toteuttaa. Mikrokontrolleri on ainutlaatuinen komponentti, sillä nykyaikaisesta kontrollerista löytyy itsestään suorittimen lisäksi kaikki oleellinen: ohjelmamuisti, IO-pinnit, (staattinen) RAMmuisti, keskeytyskäsittelijä, ad-muunnin ja paljon muuta tulevaisuudessa vielä enemmän. Saattaakin tuntua hassulta, että tämä kaikki mahtuu sentti kertaa sentti kokoiselle alueelle, mutta uskottava se on. Hintaa tavallisesti mikrokontrollerilla on noin yksi euro. Juuri näiden ominaisuuksien ansiosta mikrokontrolleri on erittäin geneerinen komponentti ja se soveltuu kaikkeen. s. 4
Viitteet [1] Wikipedian artikkeli mikrokontrolleista http://en.wikipedia.org/wiki/microcontroller [2] Intelin kotisivut Intel Museum, Online Exhibits, The Intel 4004 http://www.intel.com/about/companyinfo/museum/exhibits/4004/index.htm [3] Atmelin kotisivut Atmel s Self-Programming Flash Microcontrollers (pdf) http://www.atmel.com/dyn/resources/prod_documents/doc2464.pdf [4] Wikipedian artikkeli sulautetuista järjestelmistä http://en.wikipedia.org/wiki/embedded_system [5] C kääntäjä Atmelin AVR mikrokontrollereille http://www.nongnu.org/avr-libc/ [6] Artikkeli Atmelin AVR mikrokontrollereiden ohjelmoinnista http://www.triplespark.net/elec/pdev/avr/ [7] Wikipedian artikkeli sarjaportista. Alaotsikko limitations of the standard http://en.wikipedia.org/wiki/rs-232#limitations_of_the_standard [8] Atmelin kotisivut ATmega32(L) Summary (pdf) http://www.atmel.com/images/2503s.pdf [9] Digitaalinen säätö, AS-74.2112: luentokalvot 9 (Chap 6), p. 59 (pdf) https://noppa.aalto.fi/noppa/kurssi/as-74.2112/luennot/as-74_2112_chap_ 6 print_.pdf [10] Atmelin kotisivut AVR221: Discrete PID controller (pdf) www.atmel.com/images/doc2558.pdf [11] University of California, Berkeley Lab 7: Introduction to Microcontrollers (pdf) www-inst.eecs.berkeley.edu/~ee128/fa04/labs/lab7-intro.pdf s. 5