Микроконтролерът (MCU) е едночипова система, съчетаваща в себе си микропроцесор, тактов генератор, оперативна памет и програмируеми входно-изходни устройства. Често на същия чип има и различни видове компютърна памет. За разлика от микропроцесорите, които се използват в персоналните и други компютри, микроконтролерите са незаменими във вградените системи и са особено полезни, когато трябва да се реализира компютърно устройство, изпълняващо голям брой или сравнително сложни функции, например – комуникация с други устройства, управление на буквено-цифрови или графични дисплеи, измерване на различни величини, управление на технологични процеси и др.

Микроконтролер Intel 8742 – процесор с тактова честота 12 MHz, 128 байта оперативна памет, 2048 байта EPROM и входно-изходни устройства, обединени в един чип
Два микроконтролера Atmega32 на компанията Amtel.

Микроконтролерите се използват в продукти и устройства с автоматичен контрол като контролни системи в автомобилите, медицински импланти, дистанционни управления, офис машини, домашни уреди, електроинструменти, играчки и други вградени системи. С намалените си размери и цена в сравнение с отделен микропроцесор, памет и периферни устройства, микроконтролерите са икономично решение за управление. Възможна е реализация и на смесени аналогово-цифрови микроконтролери (на английски: mixed signal microcontrollers) за контрол на нецифрови електронни системи.

История редактиране

Първият микропроцесор е 4-битовият Intel 4004, пуснат на пазара от Intel на 15 ноември 1971 г. Заедно с Intel 8008 те стават достъпни през следващите няколко години. И двата микропроцесора обаче изискват външни чипове, за да се получи работеща система, което увеличава общия разход като цяло и прави невъзможно от икономическа гледна точка въвеждането на такъв тип чипове в други устройства.

Според Смитсоновия институт инженерите Гари Бун и Майкъл Кокран са успели да създадат първия микроконтролер през 1971 г. Резултатът от тяхната работа е микроконтролерът TMS 1000, който излиза на пазара през 1974 г. Той комбинира в себе си памет за четене, памет за четене и писане, процесор и часовник. Бил е предназначен за вградени системи.[1]

Отчасти като продължение на съществуването на TMS 1000[2], Intel разработват Intel 8048, компютърна система на чип, оптимизирана за приложения за осъществяване на контрол, която за първи път излиза на пазара през 1977. Тя комбинира в себе си RAM и ROM в един и същи чип. Чипът има разнообразни приложения и бива вграден в над един милиард клавиатури за персонални компютри. Люк Валентър, който по това време е президент на Intel, счита, че този микроконтролер е един от най-успешните в историята на компанията, както и че е успял да повиши бюджета на отдела с над 25%.

Повечето микроконтролери по това време са две разновидности. Единият използва изтриваема EPROM памет, която има прозрачен кварцов прозорец в капака на модула, позволяващ изтриване чрез ултравиолетова светлина. Другият вариант е PROM, който може да се програмира само веднъж. Понякога това бива обозначавано чрез абревиатурата „OTP“, която означава „one-time programmable“ или „програмируемо само веднъж“. PROM всъщност представлява абсолютно същия тип памет като EPROM, но тъй като при нея липсва възможност да бъде изложена на ултравиолетова светлина, тя не може да бъде изтрита. Изтриваемите типове памет изискват керамични модули с кварцови прозорчета, а това ги прави значително по-скъпи, отколкото OTP версиите, които могат да бъдат изработени от по-евтини пластмасови материали. При изтриваемите памети се използва кварц вместо стъкло, поради неговата пропускливост на ултравиолетова светлина, тъй като стъклото е до голяма степен непрозрачно за UV лъчите, но основният определящ фактор за цената остава самият керамичен модул.

През 1993 г. представянето на паметите EEPROM[3] позволява на микроконтролерите да бъдат електрически изтривани бързо и без нуждата от скъпи материали, използвани при изработката на EPROM, и позволявайки както бързо изработване на прототипи, така и системно програмиране (ISP).

(EEPROM технологията е съществувала и преди този период, но по-ранните ѝ версии са били по-скъпо струващи и по-ненадеждни, което ги прави неподходящи за евтините микроконтролери, предназначени за масова употреба).

През същата година Atmel представя първия микроконтролер, използващ флаш-памет, специален тип EEPROM. Други компании бързо последват нейния пример, използвайки и двата типа памет.

С времето цената на микроконтролерите значително намалява, като на едро най-евтините 8-битови модели, предлагани на пазара през 2009 г., е под 0,25 щатски долара, а някои 32-битови такива достигат цени от около 1 щатски долар при подобни количества.

С годините микроконтролерите стават евтини и лесно достъпни за любители, като се наблюдават големи онлайн общности, обединени около определени видове процесори.

В бъдеще MRAM технологията има потенциал да бъде използвана при изработката на микроконтролери, тъй като тя на практика осигурява изключителна надеждност, а освен това процесът при изработването на полупроводниковите компоненти, нужни за този тип памет, е сравнително евтин.

Продажбени обеми редактиране

През 2002 г. около 55% от всички процесори, продадени в света, са 8-битови микроконтролери и микропроцесори.[4] През 1997 са продадени над два милиарда 8-битови микроконтролери,[5], а според Semico, над четири трилиона 8-битови микроконтролери са продадени през 2006 г.[6] През 2011 г. Semico съобщава, че пазарът на микроконтролери е нараснал с 36,5% през 2010 и с 12% през 2011.[7]

В едно средностатистическо домакинство в развита държава е нормално да има само четири микропроцесора, предназначени за обща употреба, но за сметка на това около 36 микроконтролера. В един автомобил от среден клас например има 30 или повече микроконтролера. Микроконтролери могат също да се открият в много електрически устройства, като перални машини, микровълнови фурни и телефони.

Погледнато във времето, 8-битовият сегмент от пазара на микроконтролери винаги е бил доминиращ. 16-битовите микроконтролери от своя страна заемат по-голям дял от 2011 насам, като за първи път поглъщат дела на 8-битовите устройства. Според IC Insights характерът на пазара на микроконтролери ще претърпи съществени промени в следващите пет години с 32-битовите устройства, които постоянно отнемат все по-голям дял от продажбите. До 2017, 32-битовите микроконтролери се очаква да отчетат 55% от продажбите на микроконтролери като цяло. От гледна точка на обема, 32-битовите микроконтролери се очаква да достигнат 38% от всички поръчки през 2017, докато 16-битовите устройства ще представляват 34%, а 4 и 8-битовите модели се прогнозира да бъдат 28% от всички продадени единици за съответната година. Очакванията са, че пазарът на 32-битови микроконтролери ще расте с големи темпове, поради повишаването на нуждите от по-високо ниво на прецизност в обработването на информация и безпрецедентната свързаност, осигурена от интернет. Прогнозира се, че в идните години над 25% от процесорната мощност в колите ще идва от сложни 32-битови микроконтролери.[8]

През 2012, като последица от глобалната икономическа криза, забелязаният среден спад на цените на микроконтролерите е 17% – най-големият спад от 1980 насам. Тогава средната цена за миктоконтролер е $0.88 ($0.69 за 4/8-битов, $0.59 за 16-битови и $1.76 за 32-битови). През 2012 година в световен мащаб продажбите на 8-битови микроконтролери са около 4 милиарда щатски долара, а същевременно 4-битовите микроконтролери също виждат доста добри продажби.[9] През 2015 8-битовите микроконтролери се продават на цена от $0.311 (за 1000 единици)[10], 16-битови – за $0.385 (за 1000 единици)[11] и 32-битови – за $0.378 (за 1000 единици, но за 5000 единичната цена спада на $0.35).[12]

 
Микроконтролер PIC18F8720, вграден в 80-пинов TQFP модул.

Вграден дизайн редактиране

Eдин микроконтролер представлява система от затворен тип, която съдържа в себе си процесор и памет, и която може да бъде вградена в други устройства.[13] По-голямата част от микроконтролерите, употребявани днес, са вградени в други машини като автомобили, телефони и периферни устройства за компютърни системи.

Докато една част от вградените системи са много сложни, много от тях имат минимални изисквания за памет и за продължителност на програмата, не изискват наличие на операционна система и не се нуждаят от програмиране на ниско ниво. Типични устройства за вход и изход включват превключватели, релета, соленоиди, светодиоди, малки или потребителски LCD дисплеи, радиочестотни устройства и сензори за данни, като например температура, влажност, светлинно ниво и т.н. Вградените системи обикновено не разполагат с клавиатура, екран, дискове, принтери или други разпознаваеми устройства за вход и изход, защото не е нужно да има директно взаимодействие с потребителя.

Прекъсвания редактиране

Микроконтролерите трябва да предоставят в реално време предсказуем (макар и не непременно бърз) отговор на събитията във вградената система, която контролират. В случай на възникване на определено събитие, системата за прекъсване може да сигнализира на процесора да спре обработката на текущата последователност от инструкции и да стартира подпрограмата, отговаряща за прекъсването или ISR (interrupt service routine). IRS ще изпълни всички необходими обработки, в зависимост от източника на прекъсването, преди да върне първоначалната поредица от инструкции. Възможните източници на прекъсвания са зависими от съответния тип устройство и често включват събития като препълване на вътрешния таймер, завършване на аналогово-цифрово преобразуване, промяна на входа, а от логическа гледна точка – това са натискане на бутон например, както и получаване на данни. Тъй като консумацията на енергия е важен фактор, особено в устройства, захранвани с батерии, прекъсващата система също така може и да „събуди“ микропроцесора от сън – това е ситуация, в която процесорът е поставен, за да се понижи нивото на консумираната енергия.

Програми редактиране

Обикновено програмите на микроконтролера трябва да се поберат в свободната памет на чипа, тъй като би било доста скъпо системата да бъде снабдена с външна памет. Компилатори и асемблери се използват за преобразуване на езици от високо ниво и асемблер кодове в компактен машинен код за съхранение в паметта на микроконтролера. В зависимост от устройството, паметта, предвидена за програмиране, може да бъде постоянна, памет само за четене, памет, програмирана още при самото производство или памет, която да се програмира на място при въвеждането в експлоатация.

Производителите често проектират специални модели на своите микроконтролери, за да се подпомогне разработката на хардуер и софтуер в целевата система. Първоначално те ​​са включват EPROM модели, които имат „прозорец“ на горната част на устройството, чрез които паметта може да бъде изтрита с помощта на ултравиолетова светлина, като по този начин се подготвят за ново препрограмиране. От 1998 насам EPROM версиите се срещат все по-рядко и постепенно се заменят от EEPROM и тип „светкавица“ версии, които са както по-лесни за използване (информацията може да се изтрие и по електронен път), така и по-евтини за производство.

Съществуват и други версии, където ROM паметта е достъпна като външно устройство, а не като вътрешна памет, но те стават все по-редки, което се дължи на широкото предлагане на сравнително евтини устройства за програмиране на микроконтролери.

Когато се изискват стотици хиляди идентични устройства, използването на части, програмирани още по време на производството, би могло да бъде по-изгоден, от икономична гледна точка, вариант.

Един адаптивен микроконтролер включва в себе си блок за цифрова логика, която може да бъде персонализирана с цел предоставяне на допълнителната способност за връзка с периферни устройства и други интерфейси, адаптирани към изискванията на съответното приложение. Например AT91CAP от Atmel има логически блок, който може да се персонализира по време на производството в съответствие с изискванията на потребителя.

Вграждане на високо ниво редактиране

 
Интегрална схема на PIC12C508 8-битов, изцяло статичен, EEPROM/EPROM/ROM-базиран CMOS микроконтролер, произведен от компанията Microchip Technology, използвайки 1200-нанометров процес.
 
Интегрална схема на STM32F100C4T6BARM ARM Cortex-M3 микроконтролер с 16 килобайта флаш-памет, 24-херцов централен процесор (CPU) и CEC (Consumer Electronics Control) функции. Произведен от компанията STMicroelectronics.

Микроконтролерите обикновено не използват външна памет или шина за данни, тъй като при тях има вградена RAM памет и енергонезависима такава, намиращи се на един и същи чип, заедно с процесора. Използването на по-малко пинове прави възможно чипът да бъде поставен в много по-малък и по-евтин модул.

Вграждането на паметта и други периферни устройства в един чип и тестването им като отделен модул увеличава цената на самия чип, но често води до намаляване на нетните разходи за вградената система като цяло. Дори ако цената на процесор, който е с вградена периферия е малко по-висока от цената на друг, заедно с други външни периферни устройства, наличието на по-малко чипове обикновено позволява създаването на по-малка и по-евтина платка, съкращава труда, нужен за нейното изработване и тестване, а също така намалява и вероятността за допускане на дефект при крайното производство.

Микроконтролерът е единна интегрирана верига, която обикновено има следните характеристики:

  • централен процесор – срещат се както малки и прости 4-битови процесори, така и сложни 32 или 64-битови такива
  • енергозависима памет (RAM) за съхранение на данни
  • ROM, EPROM, EEPROM или флаш-памет за съхранение на самата програма и работните параметри
  • отделни битове за вход и изход, позволяващи контрол или проверка на логическото състояние на отделен пин
  • серийни портове за вход / изход
  • други интерфейси за комуникация като I²C, Serial Peripheral Interface and Controller Area Network за свързване на цялостната система
  • периферни устройства като таймери, броячи на събития и PWM генератори
  • генератори на електрически трептения – най-често кварцов осцилатор, резонатор или RC верига
  • повечето включват аналогово-цифрови преобразуватели, а някои само цифрово-аналогови такива
  • поддръжка на вътре-схемно-програмиране и възможност за дебъгване.

Такова вграждане драстично намалява броя на чиповете и размера на платката, необходим за свързването и поставяне им, в сравнение с еквивалентни системи, които използват отделни чипове. Също така при устройства с малко на брой пинове всеки отделен пин може да се свърже с няколко вътрешни периферни устройства, като тази му функция може да бъде зададена от съответен за целта софтуер. Това позволява един пин да има по-широк спектър на приложение, отколкото ако всеки има своя отделна функция.

Микроконтролерите се оказват много популярни в областта на вградените системи откакто са въведени през 1970.

Някои микроконтролери използват архитектура тип Харвард: наличие на отделна шина на паметта за инструкции и отделна такава за данни, което позволява достъпът до паметите да се осъществява едновременно. При използването на тази архитектура, инструкциите към процесора могат да бъдат с различна по битове големина от тази на вътрешната памет и регистрите; например: 12-битови инструкции, използвани с 8-битови регистри за данните.

Решението кои точно периферни устройства да бъдат вградени често е трудно. Търговците на микроконтролери обикновено предпочитат да компенсират работните честоти и гъвкавостта на дизайна за сметка на пазарните изисквания от своите клиенти и на по-ниската цена като цяло. Производителите са тези, които трябва да балансират между нуждата от намаляване на размера на чипа и допълнителната му функционалност.

Използваните в микроконтролерите архитектури значително се различават. Някои модели включват микропроцесорни ядра с общо предназначение с една или повече ROM, RAM или входно/изходни функции, интегрирани в самия модул. Други модели са специално създадени, за да работят с приложения, които осъществяват определен вид контрол. Наборът от инструкции на даден микроконтролер включва много инструкции, предназначени за изпълненинето на побитови операции, тъй като това прави програмите за контрол по-компактни.[14] Например, процесор с общо предназначение може да изисква няколко инструкции, за да провери стойността на даден бит, намиращ се в определен регистър или подрегистър, докато един микроконтролер може да има една-единствена инструкция, която да осигурява наличието на тази често необходима функция.

Микроконтролерите обикновено не разполагат с модул за изчисления с плаваща запетая, затова тези операции се извършват чрез специализиран за целта софтуер.

Среди за разработка на софтуер редактиране

Микроконтролерите първоначално се програмират само на асемблер, но в наши дни за тази цел се използват и други езици за програмиране от по-високо ниво. Тези езици са или създадени специално за целта, или представляват версии на езици с общо предназначение като например езика за програмиране C. Компилаторите на такива езици, обикновено имат някои ограничения, а също така и подобрения, за да се постигне по-добра съвместимост с уникалните характеристики на микроконтролерите. Някои микроконтролери дори имат собствени среди за разработка на софтуер, чрез които се създават подходящи за тях приложения. Търговците на микроконтролери често разпространяват свободно такива инструменти, с цел по-лесното вграждане на техните продукти в други устройства.

Много от микроконтролерите са толкова своеобразни, че за тяхното правилно функциониране са необходими специални версии на езика C, като например SDCC за 8051, който не позволява използването на стандартни инструменти (като библиотеки или статични средства за анализ), а дори на код, несвързан с хардуерните характеристики. Много често се използва междинен софтуер, наречен интерпретатор, за да могат да бъдат прикрити тези особености на ниско ниво.

Такива интерпретатори са налични за някои микроконтролери като например, BASIC при ранните микроконтролери Intel 8052; BASIC и FORTH за Zilog Z8[15], както и за някои съвременни устройства. Обикновено при интерпретаторите се поддържа интерактивно програмиране.

За някои видове микроконтролери има на разположение и симулатори. Те позволяват на разработчиците да анализират какво би било поведението на микроконтролера и на неговата програма, ако съответната част се използва в действителност. Симулаторът показва състоянието на вътрешния процесор, а също така позволява следене на изходите сигнали и генериране на входни такива. Въпреки че, повечето симулатори са ограничени от невъзможността си да симулират различен по вид хардуер в една система, те могат да симулират условия, които в повечето случаи са трудни за пресъздаване в реална среда, което ги прави най-бързият начин за трасиране и анализиране на даден проблем.

Последните модели микроконтролери често са снабдени с вградена верига за дебъгване, която, свързана с JTAG емулатор, позволява дебъгването на фърмуера с помощта на дебъгер.

Латентност на прекъсванията редактиране

За разлика от компютрите с общо предназначение, микроконтролерите използвани във вградените системи, често се опитват да оптимизират латентността на прекъсванията, за сметка на честотата на инструкциите. Проблемите включват намаляването на латентността на прекъсванията и правенето му по-предсказуемо (за поддържането на контрол в реално време).

Когато електронно устройство предизвика прекъсване, междинните резултати (регистри) трябва да бъдат запазени, преди софтуерът, отговорен за прекъсванията, да заработи отново. Също така трябва да бъдат възобновени до спирането на софтуера. В случай че има повече регистри, времето, нужно за запазване и възобновяване се увеличава, увеличавайки и времето на забавяне на процесите. Начините да се да се намали това забавяне включват поддържане на сравнително нисък брой регистри в процесора (което е нежелателно, защото значително се забавят повечето процеси, които не работят с прекъсвания) или поне редуциране на запазените от хардуера регистри (това не работи, ако софтуерът трябва да компенсира, запазвайки останалите процеси „ръчно“).

Други фактори, влияещи на латентността на прекъсванията, включват:

  • Циклите, нужни за завършването на текущите задачи на процесора. За да се минимизират тези загуби, микроконтролерите често ползват по три инструкции (или по-малко), малки буфери, подсигурявайки възможност за продължаване и рестартиране на по-дълги инструкции. Принципите на RISC дизайна осигуряват всички инструкции да използват един и същи брой цикли, спомагайки за премахването на нуждата от повечето логика за продължаване и рестартиране.
  • Дължината на всяка критична секция, която трябва да бъде прекъсната. Влизането в критична секция ограничава едновременния достъп до структурите от данни. Когато една структура от данни трябва да бъде прочетена от софтуера, отговорен за прекъсванията, критичната секция трябва да блокира прекъсването. Съответно, латентността на прекъсването се удължава с толкова време за колкото е блокирано прекъсването. Често разработчиците се нуждаят от инструменти за измерване на латентността на прекъсванията и за следене на критичните секции, които причиняват забавяния.
    • Често разпространен подход е просто да се блокират всички прекъсвания за времето, нужно за критичната секция. Това е лесно за имплементиране, но понякога критичните секции са прекалено дълги.
    • Една по-сложна техника просто блокира прекъсванията, които може да предизвикат достъп до тези структури от данни. Това често е базирано на приоритета на прекъсванията, които не отговарят много добре към релевантните системни структури от данни. Съответно тази техника е ползвана в много малък набор от среди.
    • Процесорите може да имат хардуерна поддръжка за някои критични секции. Примерите включват поддържането на атомния достъп до битове и байтове в дума, както и други атомни примитивни достъпи като LDREEX/STREX, ексклузивните примитивни достъпи, въведени в ARMv6 архитектурата.
  • Някои микроконтролери позволяват прекъсванията с по-голям приоритет да прекъсват такива с по-малък. Това позволява на софтуера да управлява изразходеното време, давайки по-голям приоритет на прекъсванията, които трябва да бъдат изпълнени за възможно най-малкото време (правейки забавянето по-предвидимо и по-малко).
  • Коефициент на задвижване. Когато прекъсванията се състоят по едно и също време, микроконтролерите може да се избегне допълнителен цикъл за запазване/възстановяване под формата на така наречената tail call оптимизация.

По-некачествените микроконтролери поддържат по-малко възможности за контрол над латентността на прекъсванията, отколкото по-качествените такива.

Вградена технология на памет на микроконтролери редактиране

От появяването на микроконтролерите са били използвани много различни технологии за паметта. Почти всички микроконтролери имат поне два вида памет, една за съхраняването на фърмуера и една за операциите с четене и записване на временно запаметените данни.

Данни редактиране

От най-ранните микроконтролери до днешните, шесттранзисторната статична RAM памет почти винаги е използвана като оперативна такава за четене/писане, заедно с още няколко транзистора, отговарящи за всеки бит, които се използва във файла с регистрите. FRAM или MRAM може потенциално да я замени, тъй като е от 4 до 10 пъти по-плътна, което би я направило по-рентабилна.

Освен SRAM, някои микроконтролери имат също вътрешна ЕЕПРОМ памет за съхранение на данни; даже тези които нямат (или имат недостатъчно) често са свързани за външен EEPROM чип (като BASIC Stamp) или външен флаш-памет чип.

Някои по-нови модели микроконтролери, от 2003 насам, имат самостоятелно програмируема флаш-памет.

Фърмуер редактиране

Най-ранните модели микроконтролери използват MROM памет за съхранение на фърмуер. По-късните модели (като ранните версии на Freescale 68HC11 и ранни PIC микроконтролери) имали кварцови прозорчета, които позволяват пропускането на ултравиолетова светлина, като по този начин се постига оптично изтриване на EPROM паметта.

Микрочипът PIC16c84, въведен през 1993,[16] е първият микроконтролер използващ EEPROM за съхранение на фърмуер. В същата година Atmel представя първия микроконтролер, който използва NOR Flash памет за съхранение на фърмуер.

Източници редактиране

  1. Augarten, Stan. The Most Widely Used Computer on a Chip: The TMS 1000. New Haven and New York, Ticknor & Fields, 1983. ISBN 0-89919-195-9.
  2. „Oral History Panel on the Development and Promotion of the Intel 8048 Microcontroller“, Computer History Museum Oral History, 2008
  3. Atmel’s Self-Programming Flash Microcontrollers by Odd Jostein Svendsli 2003
  4. Jim Turley. The Two Percent Solution 2002.
  5. Tom Cantrell „Microchip on the March“. Circuit Cellar. 1998.
  6. www.semico.com
  7. Momentum Carries MCUs Into 2011
  8. IC Insights, MCU Market on Migration Path to 32-bit and ARM-based Devices
  9. Bill Giovino. Zilog Buys Microcontroller Product Lines from Samsung. 2013.
  10. www.mouser.com
  11. www.mouser.com
  12. www.mouser.com
  13. Heath, Steve (2003). Embdded systems design. EDN series for design engineers (2nd edition).Newnes. pp. 11 – 12
  14. Easy Way to build a microcontroller project
  15. Optimizing the Zilog Z8 Forth Microcontroller for Rapid Prototyping // Архивиран от оригинала на 2012-09-27. Посетен на 2015-11-18. by Martin Marietta
  16. Microchip unveils PIC16C84, a reprogrammable EEPROM-based 8-bit microcontroller Архив на оригинала от 2004-12-13 в Wayback Machine. 1993
    Тази страница частично или изцяло представлява превод на страницата Microcontroller в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите. ​

ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни.​