微控制器(MCU)是什麼?讓家電和汽車動起來的小電腦
微控制器(MCU)是做在一顆晶片上的小電腦。裡面有執行指令的電路、存放程式的記憶體,以及和外部裝置溝通的電路。電子鍋、遙控器、汽車煞車等的「控制」,都由它負責。它不斷重複這幾件事:用感測器讀取、做判斷、驅動馬達等裝置。
這篇文章可以了解
- 微控制器裡面有什麼(CPU、記憶體、周邊電路)
- 和電腦、手機處理器的差異
- 「讀取→判斷→驅動」的循環,以及中斷的原理
- 如何守住固定的時間,以及靠電池長時間運作的方法
- 汽車裡有很多微控制器的原因,以及它們在舊世代工廠生產的原因
先備知識:不需要。先讀過「CPU是什麼?」,前半會比較容易理解。
生活中的例子
按下電子鍋的開關,它會依米量調整火力,煮好後切換成保溫。在這類機器裡做判斷的,就是微控制器。
根據日本政府的宣傳刊物(2020年),依米量調整加熱的微控制器式電子鍋,在1979年的日本問世。現在,熱水器、玩具等許多用電的產品裡都有它。汽車裡,有的甚至裝了超過100個。
微控制器的英文縮寫是MCU(Micro Controller Unit)。
一顆晶片,就是一整套小電腦
電腦需要執行指令的電路、記住程式和資料的記憶體,以及和外界溝通的接口。在個人電腦裡,這些多半是分開的零件。微控制器則把全部放進一顆晶片。
中心是一個個取出指令並執行的電路。它的工作和電腦的CPU相同,稱為「CPU核心」。
多數微控制器把程式存放在晶片內、關掉電源也不會消失的記憶體裡。這種記憶體稱為快閃記憶體,和隨身碟屬於同一類(細部方式不同)。一接上電源,CPU核心就馬上從這裡開始讀取指令。
量到的溫度和計算途中的數字,放在工作用的記憶體。微控制器多半使用一種叫SRAM的記憶體。它讀寫很快,關掉電源內容就會消失。容量依型號而定,從不到1 KB到幾MB都有。1 KB大約是1,000個半形英數字的量。
和外界相連的「周邊電路」
最能看出微控制器特色的,是和外界溝通的電路,統稱為「周邊電路」。代表性的有以下幾種。
- 輸入輸出的接腳:把晶片接腳的電壓當成0或1來讀取或輸出。可用來讀取按鈕、點亮LED等。稱為通用輸入輸出(GPIO)。
- 把類比轉成數字的電路:溫度感測器等會輸出隨溫度一點一點變化的電壓。這個電路把這種連續的值換成數字,稱為類比數位轉換器(ADC)。
- 計時器:計算以固定間隔送來的訊號(時脈),用來測量時間。
- 用開關來改變強度的電路:讓輸出快速重複開與關,用「開」的時間比例改變平均強度。可用來調整LED亮度和馬達轉速,稱為脈寬調變(PWM)。
- 通訊電路:依照固定的程序,和其他晶片互傳資料。有UART、I²C、SPI等方式。差異整理在「I2C、SPI、UART的差異」的表格中。
有些型號還有無線電路等。因為組合不同,微控制器的型號非常多。
和電腦、手機處理器的差異
電腦和手機的核心晶片,同樣也有CPU。不過,它們以快速執行大量應用程式為優先。工作用的記憶體(DRAM)是另一顆晶片,容量可達好幾GB。它們也執行Windows、Android這類管理整台機器的大型基本軟體(作業系統,OS)。
為了和微控制器區分,這類晶片稱為微處理器(MPU)。手機核心晶片(SoC)的內容,在「手機裡有哪些半導體?」中介紹過。微控制器則以便宜、省電、確實地完成固定的工作為優先。
| 比較項目 | 微控制器 | 電腦、手機的處理器 |
|---|---|---|
| 主要工作 | 照預定方式控制機器 | 執行大量應用程式 |
| 工作用記憶體 | 主要在晶片內。不到1 KB〜幾MB | 晶片外的DRAM。幾百MB〜幾GB |
| OS | 沒有,或是小型OS | Windows、Android等大型OS |
| 接上電源後 | 馬上運作 | OS開機要幾秒以上 |
表格只是大致的傾向,界線並不明確。也有很多產品兩者並用:畫面和網路交給處理器,時間要求嚴格的控制交給微控制器。詳細比較請看「MCU與MPU的差異」。
原理:重複「讀取→判斷→驅動」
微控制器的程式,多半是不斷重複同一組步驟的循環。以電子鍋為例,簡化成最單純的樣子來看看。
- 讀取:用ADC把溫度感測器的電壓轉成數字來讀取
- 判斷:把這個數字和目標溫度比較
- 驅動:溫度低就讓加熱器通電,溫度高就停止
這3個步驟以很短的間隔一直重複。用量到的結果決定下一個動作,再量一次動作的結果,溫度就能維持在目標附近。這種邊看結果邊調整的方式,稱為回授控制。實際的電子鍋會依浸泡、煮沸、燜飯等階段改變目標。這裡只取出其中一個階段。
中斷:對緊急的訊號馬上回應
也可以在循環中每次都檢查按鈕。不過,檢查的間隔一拉長,反應就會變慢,或漏掉很短的按壓。
因此微控制器有一種機制:訊號一來,就暫停目前的工作,先執行事先準備好的處理。處理完後,再從暫停的地方繼續原本的工作。這種機制稱為中斷。發出訊號的,有按鈕的接腳、計時器、通訊電路等。
中斷也可以當作叫醒睡眠中微控制器的訊號。和每次都去檢查的方式(輪詢)的差異,整理在「中斷與輪詢的差異」的表格中。
一定要守住固定的時間
微控制器的工作中,有時「一定要在固定時間內完成」比速度更重要。例如汽車的安全氣囊,必須在感測器偵測到碰撞後的極短時間內打開,否則就沒有用。
只要有一次沒趕上期限就算失敗,這種嚴格的時間條件稱為硬即時。微控制器的工作少又單純,內部會發生什麼容易預測,所以適合這種條件。電腦以公平執行大量應用程式為優先,不擅長保證細微的時間。
有OS的微控制器,沒有OS的微控制器
在電腦上,切換應用程式和管理記憶體由OS負責(「作業系統(OS)是什麼?」)。在微控制器上,常常不用OS,只靠前面的循環和中斷來寫程式。意思是在沒有OS、赤裸的硬體上直接執行,所以也稱為「裸機」(bare metal)。
工作變多、一個循環管不過來時,就會使用小型的OS。這是以守住期限為重點設計的OS,稱為即時作業系統(RTOS)。它替每項工作訂出優先順序,緊急的工作一來就迅速切換。
靠電池長時間運作:大部分時間都在睡
冷氣的遙控器,可以很久不用換電池。裡面的微控制器只有在按下按鈕時才有工作,其餘時間都在睡眠中等待。
沒有工作時,微控制器會停止送往CPU核心和許多電路的訊號(時脈)與電力,以極少的電力等待。這種狀態稱為睡眠模式。按下按鈕時,它被中斷叫醒,送出訊號後又回去睡。
電池能撐多久,會在「從數字來看」中計算。
8位元、16位元、32位元
介紹微控制器時,常會看到「8位元」「32位元」這些詞。大致來說,指的是CPU核心一次計算能處理的數字,有幾位0和1。8位元一次能處理0〜255,32位元則能處理到約43億的數字。這是簡化的說明,實際上還牽涉到能使用的記憶體範圍等(用0和1表示數字的原理,請看「電腦怎麼用0和1計算?」)。
位數越多,處理大數字和大量記憶體的工作就越輕鬆。另一方面,8位元微控制器的電路小,現在仍用在單純的工作上。自造用的開發板Arduino Uno(R3),用的也是8位元的ATmega328P。
不過,從營收來看,主流是32位元。調查公司IC Insights在2021年預測,當年車用微控制器營收約77%是32位元。16位元約18%,8位元約6%。
32位元微控制器常用的CPU核心設計,是英國Arm公司的「Cortex-M」系列。由Arm提供設計,各家公司把它放進自己的微控制器。根據Arm公司的發表,2020年10〜12月的3個月內,使用Cortex-M的晶片出貨了44億顆。
汽車裡的微控制器
汽車裡負責引擎、煞車、電動車窗、安全氣囊等的小型控制裝置,稱為電子控制單元(ECU)。ECU是在電路板上裝了微控制器,以及連接感測器、馬達的電路。
根據技術雜誌IEEE Spectrum在2021年的報導,便宜的車ECU數量也接近100個。高級車有的超過150個。
汽車的微控制器,要長年承受引擎旁的高溫、冬天的寒冷和震動。因此會使用通過規定測試、確認耐得住的零件。代表性的測試標準,是美國汽車電子協會(AEC)制定的AEC-Q100。
為什麼不在最先進的工廠生產?
手機的SoC,是用「3 nm」這類最先進的世代製造。相對地,多數微控制器是用比它早好幾代、已有實績的世代製造。根據McKinsey在2022年的分析,車用晶片多半是90 nm以上的世代。世代名稱的意思,在「「2奈米」「3奈米」是什麼的長度?」中說明。
原因之一,是存放程式的快閃記憶體。快閃記憶體寫入和抹除時要用高電壓。處理這種電壓的電晶體,即使世代前進,也無法以相同比例縮小。製程步驟也會增加,成本跟著提高。根據調查公司Yole(2024年),業界普遍認為極限大約在28〜22 nm。
瑞薩電子在2018年,開始出貨28 nm內嵌快閃記憶體的車用微控制器樣品(該公司稱為「業界首見」)。為了更往前走,也有改用新型記憶體取代快閃記憶體的動向。NXP和TSMC在2023年宣布,要在16 nm世代製造車用的MRAM,這是利用磁性的記憶體。
另一個原因是成本。微控制器的工作大多不需要最先進的速度,重要的是便宜,並且能以相同品質長期生產。不過,這些世代的產能不足,也是2020〜2022年汽車停產的原因之一(「晶片短缺為什麼會發生?」)。
程式要怎麼寫?
微控制器的程式,多半用C語言這種人容易讀寫的語言撰寫。再用電腦把它轉換成CPU核心能執行的0和1的排列(機器碼)。轉換好的機器碼,透過USB線等寫入微控制器的快閃記憶體。
像這樣裝在機器裡、平常不會改寫的程式,稱為韌體。
個人也能輕鬆試用微控制器。2021年1月,Raspberry Pi推出了4美元的開發板「Raspberry Pi Pico」。上面裝的是自家設計的微控制器RP2040,有2個Cortex-M的CPU核心。
不過,RP2040沒有內建快閃記憶體。程式放在板子上另一顆快閃記憶體晶片裡。「內建快閃記憶體」是多數型號的傾向,也有例外。另外,沒有「Pico」的「Raspberry Pi」,是能執行Linux的小電腦,不是微控制器。
常見的誤解
誤解:微控制器只是速度慢、性能低的CPU
實際上,兩者追求的目標不同。微控制器優先的是守住固定時間、耗電少、能直接和外部裝置溝通。把電腦的CPU放進電子鍋,價格和耗電都太大了。只比較時脈的數字會顯得慢,所以容易被當成「廉價的CPU」。
誤解:只有電腦、手機這類昂貴的產品裡才有電腦
實際上,電子鍋、遙控器、玩具裡都有。最早期的微控制器TMS1000(1974年發表),大量購買時1顆約2美元(美國電腦歷史博物館)。這些產品沒有螢幕也沒有鍵盤,只是不容易察覺裡面有電腦而已。
誤解:微控制器也一直在執行OS
實際上,如前面所說,很多微控制器不用OS也能運作。Windows、Linux這類大型OS需要的記憶體太多,裝不進一般的微控制器。因為電腦和手機有OS是理所當然的,所以容易以為微控制器也有。
從數字來看
| 項目 | 數字 |
|---|---|
| 使用Cortex-M的晶片出貨量(Arm公司) | 2020年10〜12月的3個月內44億顆 |
| 車用微控制器營收的組成(IC Insights,2021年的預測) | 32位元約77%、16位元約18%、8位元約6% |
| 一輛車的ECU數量(IEEE Spectrum,2021年) | 便宜的車也接近100個,高級車有的超過150個 |
| RP2040的工作用記憶體(SRAM) | 264 KB。約為iPhone 16 Pro記憶體(8 GB)的3萬分之1 |
用鈕扣電池來算算看睡眠的效果。根據Panasonic的資料,CR2032電池的容量是225 mAh。也就是能讓225毫安培的電流流1小時的量。假設把睡眠和醒著的時間平均起來,電流是0.01毫安培。這樣能撐22,500小時,約2.6年。如果平均是10倍的0.1毫安培,就約3個月。這是簡化的計算,省略了電池自然消耗的部分、溫度,以及瞬間流過的大電流的影響。
進一步學習
- 用表格看差異:NAND型與NOR型快閃記憶體的差異、ARM、RISC-V、x86的差異、CAN、LIN、車用乙太網路的差異(ECU之間的通訊)
- 下一步的用語:看門狗計時器、逐次逼近式ADC、區域架構
- 用數字試試看:PID控制步階響應模擬器(回授控制的動作)、LED電阻計算工具(把LED接到微控制器時)
- 相關文章:「功率半導體是什麼?」(依微控制器的指示切換大電力的零件)