MCU(MicroControllerUnit)中文名稱為多點控制單元,又稱單片微型計算機(SingleChipMicrocomputer),是指隨著大規模集成電路的出現及其發展,將計算機的CPU、RAM、ROM、定時數器和多種I/O接口集成在一片芯片上,形成芯片級的計算機,為不同的應用場合做不同組合控制。
在現代嵌入式開發領域,通過了解客戶需求和電子產品趨勢,搜集市面上大量的不同型號的MCU資料,結合市場上剛出現的低成本高性能MCU新產品,是成功進行MCU選型的基礎。一般來說,嵌入式系統開發人員在選擇MCU時,通常遵循四項主要標準∶功能、可用性、成本和熟悉程度。
微控制器(Microcontroller;MCU)是一種無所不在的嵌入式控制晶片,玩具、家電、醫療、汽車等領域都有其存在,負責各種感測、監控工作,例如我們常見的電飯煲、電磁爐、咖啡壺等內部均由MCU負責感測水溫,并接受使用者的指示是否該加溫、沸騰,同樣的冷氣機的溫控也是用MCU來實現。此外,如桌上電腦所用的鍵盤、滑鼠等也各有一顆MCU,負責將敲打的鍵碼、指標的X/Y軸位移偏量等資訊回傳給電腦CPU。
對於選擇MCU進行設計的系統設計師來說,可獲得的大量的不同型號MCU會讓選型工作變得復雜,如SiliconLabs工作電壓低至0.9V的8位元MCU,德州儀器針對低功耗應用的多款16位元 MSP430,飛思卡爾和英飛 針對汽車應用的MCU方案,Atmel 的AVR系列和Microchip的PIC系列一直在推陳出新……雖然新的 32位ARM核Cortex-m3處理器已經發布許久,古老的8位8051核還是在不同MCU中占領主流地位……面對繽紛多彩的MCU世界,正確把握MCU發展趨勢,熟悉MCU架構,甚至於借助選擇工具進行分析比較就顯得極其必要。
MCU的主要分類:
按用途分類:
通用型:將可開發的資源(ROM、RAM、I/O、 EPROM)等全部提供給用戶。
專用型:其硬件及指令是按照某種特定用途而設計,例如錄音機機芯控制器、打印機控制器、電機控制器等。
按其基本操作處理的數據位數分類:
根據總線或數據暫存器的寬度,單片機又分為1位、4位、8位、16位、32位甚至64位單片機。4位MCU大部份應用在計算器、車用儀表、車用防盜裝置、呼叫器、無線電話、CD播放器、LCD驅動控制器、LCD游戲機、兒童玩具、磅秤、充電器、胎壓計、溫濕度計、遙控器及傻瓜相機等;8位MCU大部份應用在電表、馬達控制器、電動玩具機、變頻式冷氣機、呼叫器、傳真機、來電辨識器(CallerID)、電話錄音機、CRT顯示器、鍵盤及USB等;8位、16位單片機主要用于一般的控制領域,一般不使用操作系統, 16位MCU大部份應用在行動電話、數字相機及攝錄放影機等;32位MCU大部份應用在Modem、GPS、PDA、HPC、STB、Hub、Bridge、Router、工作站、ISDN電話、激光打印機與彩色傳真機; 32位用于網絡操作、多媒體處理等復雜處理的場合,一般要使用嵌入式操作系統。64位MCU大部份應用在高階工作站、多媒體互動系統、高級電視游樂器(如SEGA的Dreamcast及Nintendo的GameBoy)及高級終端機等。
8位MCU工作頻率在16~50MHz之間,強調簡單效能、低成本應用,在目前MCU市場總值仍有一定地位,而不少MCU業者也持續為8bit MCU開發頻率調節的節能設計,以因應綠色時代的產品開發需求。
16位MCU,則以16位運算、16/24位尋址能力及頻率在24~100MHz為主流規格,部分16bit MCU額外提供32位加/減/乘/除的特殊指令。由于32bit MCU出現并持續降價及8bit MCU簡單耐用又便宜的低價優勢下,夾在中間的16bit MCU市場不斷被擠壓,成為出貨比例中最低的產品。
32位MCU可說是MCU市場主流,單顆報價在1.5~4美元之間,工作頻率大多在100~350MHz之間,執行效能更佳,應用類型也相當多元。但32位MCU會因為操作數與內存長度的增加,相同功能的程序代碼長度較8/16bit MCU增加30~40%,這導致內嵌OTP/FlashROM內存容量不能太小,而芯片對外腳位數量暴增,進一步局限32bit MCU的成本縮減能力。
內嵌程序存儲器類型
下面以51單片機為例(MCS-51系列MCU是我國使用最多的單片機),根據其內部存儲器的類型不同可以分為以下幾個基本型:
1.無ROM型 :8031
2.ROM型:8051
3.EPROM型:8751
4.EEPROM 型:8951
5.增強型:8032/8052/8752/8952/C8051F
MCU按其存儲器類型可分為無片內ROM型和帶片內ROM型兩種。對于無片內ROM型的芯片,必須外接EPROM才能應用(典型芯片為8031)。帶片內ROM型的芯片又分為片內EPROM型(典型芯片為87C51)、MASK片內掩模ROM型(典型芯片為8051)、片內FLASH型(典型芯片為89C51)等類型,一些公司還推出帶有片內一次性可編程ROM(One TIme Programming, OTP)的芯片(典型芯片為97C51)。MASKROM的MCU價格便宜,但程序在出廠時已經固化,適合程序固定不變的應用場合;FLASH ROM的MCU程序可以反復擦寫,靈活性很強,但價格較高,適合對價格不敏感的應用場合或做開發用途;OTPROM的MCU價格介于前兩者之間,同時又擁有一次性可編程能力,適合既要求一定靈活性,又要求低成本的應用場合,尤其是功能不斷翻新、需要迅速量產的電子產品。
由于MCU強調是最大密集度與最小芯片面積,以有限的程序代碼達成控制功能,因此當今MCU多半使用內建的MaskROM、OTP ROM、EEPROM或Flash內存來儲存韌體碼,MCU內建Flash內存容量從低階4~64KB到最高階512KB~2MB不等。
存儲器結構
MCU根據其存儲器結構可分為哈佛(Harvard)結構和馮?諾依曼(Von Neumann)結構?,F在的單片機絕大多數都是基于馮·諾伊曼結構的,這種結構清楚地定義了嵌入式系統所必需的四個基本部分:一個中央處理器核心,程序存儲器(只讀存儲器或者閃存)、數據存儲器(隨機存儲器)、一個或者更多的定時/計時器,還有用來與外圍設備以及擴展資源進行通信的輸入/輸出端口,所有這些都被集成在單個集成電路芯片上。
指令結構
MCU根據指令結構又可分為CISC(Complex InstrucTIon Set Computer,復雜指令集計算機)和RISC(Reduced InstrucTIon Set Comuter,精簡指令集計算機微控制器)
MCU的應用技巧:
在MCU應用開發中,代碼的使用效率、抗干擾性和可靠性等問題仍困擾著大部份應用工程師。以下是MCU開發應用中應掌握的基本技巧。
1、MCU的通用測試方法 MCU從生產出來到封裝出貨的每個不同的階段會有不同的測試方法,其中主要會有兩種∶中測和成測。 所謂中測即是WAFER的測試,它會包含產品的功能驗證及AC、DC的測試。專案相當繁多,以HOLTEK產品為例最主要的幾項如下∶
(1) 接續性測試∶檢測每一根I/O PIN內接的保護用二極體是否功能無誤。
(2)功能測試∶以產品設計者所提供測試資料(TEST PATTERN)灌入IC,檢查其結果是否與當時SIMULATION時狀態一樣。
(3)STANDBY電流測試∶測量IC處於HALT模式時即每一個接點(PAD)在1態0態或Z態保持不變時的漏電流是否符合最低之規格。
(4) 耗電測試∶整顆IC的靜態耗電與動態耗電。
(5) 輸入電壓測試∶測量每個輸入接腳的輸入電壓反應特性。
(6) 輸出電壓測試∶測量每個輸出接腳的輸出電壓位元。
(7) 相關頻率特性(AC)測試,也是通過外灌一定頻率,從I/O 口來看輸出是否與之匹配。
(8) 為了保證IC生產的長期且穩定質量,還會做產品的可靠性測試,這些測試包括ESD測試,LATCH UP測試,溫度回圈測試,高溫貯存測試,濕度貯存測試等。
成測是產品封裝好後的測試,即PACKAGE測試,其目的是確定通過中測的IC產品在封裝過程中是否有損壞。測試方法主要是儀器自動測試,但測試項目仍與WAFER TEST相同。
2、在demo板上采樣時,電壓不穩定結果有波動,如何消除?
一般來說,模擬器都是工作在一個穩壓的環境(通常為5V)。如果用模擬器的A/D時,要注意其A/D參考電壓是由模擬器內部給出,還是需要外部提供。A/D 轉換需要一個連續的時鐘周期,所以在仿真時不能用單步調試的方法,否則會造成A/D采樣值不準。至於A/D采樣不穩定,可以在A/D輸入口加一電容,起到濾波作用,再在軟體處理時采用中值濾波的方法。
3、MCU系統為了省電,經常要進入掉電(POWER DOWN)狀態,此時如何才能獲得最低功耗?
MCU的I/O口可用作輸入和輸出狀態。以HOLTEK最簡單的 I/O MCUHT48R05A-1為例,當作為輸入時可設置成帶上拉電阻的斯密特輸入;作為輸出時是 CMOS輸出。如果程式進入省電狀態(HALT)時,首先,各個有用的I/O仍需輸出一定值,以保證外部電路工作正常,同時請小心不要讓外部電路保持長耗電狀態(如長時間導通繼電器);對於暫時不用的I/O口,為了節約功耗建議將I/O置為輸出狀態,并且輸出為低。
4、如何減少程式中的bug?
因系統中實際運行的參數都是有范圍的,系統運行中要考慮的超范圍管理參數有∶
(1) 物理參數∶這些參數主要是系統的輸入參數,它包括激勵參數、采集處理中的運行參數和處理結束的結果參數。合理設定這些邊界,將超出邊界的參數都視為非正常激勵或非正常回應進行出錯處理。
(2) 資源參數∶這些參數主要是系統中的電路、器件、功能單元的資源,如記憶體容量、存儲單元長度、堆疊深度。在程式設計中,對資源參數不允許超范圍使用。
(3) 應用參數∶這些應用參數常表現為一些MCU、功能單元的應用條件。如EEPROM的擦寫次數與資料存儲時間等應用參數界限。
(4) 過程參數∶指系統運行中的有序變化的參數。 對程式師而言,須養成良好習慣,在程式的開頭,有順序的用自己喜歡文字參數對應列表來替代,然後用自己定義的文字參數來編寫程式,這樣在做程式的修改及維護時只在程式的開頭做變動即可,不用修改到程式段,才比較容易且不會出錯。
5、如何提高C語言編程代碼的效率?
用C語言進行MCU程式設計是MCU開發與應用的必然趨勢。如果使用C編程時,要達到最高的效率,最好熟悉所使用的C編譯器。先試驗一下每條C語言編譯以後對應的組合語言的語句行數,這樣就可以很明確的知道效率。在今後編程時,使用編譯效率最高的語句。各家的C編譯器都會有一定的差異,故編譯效率也會有所不同,優秀的嵌入式系統C編譯器代碼長度和執行時間僅比以組合語言編寫的同樣功能程度長5-20%。對於復雜而開發時間緊的專案時,可以采用C語言,但前提是要求你對該MCU系統的C語言和C編譯器非常熟悉,特別要注意該C編譯系統所能支援的資料類型和演算法。雖然C 語言是最普遍的一種高階語言,但由於不同的MCU廠家其C語言編譯系統是有所差別的,特別是在一些特殊功能模組的操作上。所以如果對這些特性不了解,那麼調試起來問題就會很多,反而導致執行效率低於組合語言。
6、用作RF控制時,MCU的時鐘(晶振)、資料線會輻射基頻或倍頻,被LNA放大後進入混頻,出現帶內Spur而無法濾除,如何解決?
在設計高頻電路用PCB有許多注意事項,尤其是GHz等級的高頻電路,更需要注意各電子元件pad與印刷版圖的長度對電路特性所造成的影響。
最近幾年高頻電路與數位電路共用相同電路板,構成所謂的混載電路系統似乎有增加的趨勢,類似如此的設計經常會造成數位電路動作時,高頻電路卻發生動作不穩定等現象,其中原因之一是數位電路產生的雜訊,影響高頻電路正常動作所致。為了避免上述問題除了設法分割兩電路block之外,設計電路板之前充分檢討設計構想,才是根本應有的手法。基本上,設計高頻電路用電路板必需掌握下列三大原則∶高質感、不可取巧、不可倉促搶時間。
以下是設計高頻電路板的一些建議∶
(a) 印刷版圖的長度會影響電路特性。尤其是傳輸速度為 GHz高速數位電路的傳輸線路,通常會使用strip line,同時藉由調整配線長度補正傳輸延遲時間,其實這也意味著電子元件的設置位置對電路特性具有絕對性的影響。
(b) 接地越大越好。銅箔面整體設置接地層,而連接via的較大接地面則是高頻電路板與高速數位電路板共同的特徵,此外高頻電路板最忌諱使用幅寬細窄的印刷版圖描繪地面。
(c) 電子元件的接地端子,以最短的長度與電路板接地。具體方法是在電子元件的接地端子pad附近設置via,使電子元件能以最短的長度與電路板接地。
(d) 信號線作短配線設計。不可任意加大配線長度,盡量縮短配線長度。
(e) 減少電路之間的結合。尤其是濾波器與放大器I/O之間作電路分割非常重要,它相當於音頻電路的串擾對策。
(f) MCU回路布線考慮∶震蕩電路盡可能接近IC震蕩腳位;震蕩電路與VDDVSS保持足夠的距離;震蕩頻率大於1MHz時不需加osc1osc2電容;電源與地間要最短位置并盡量布設等寬與等距的線,於節點位置加上104/ 103/102等陶瓷電容。
7、遙控是MCU的基本應用,在設計編解碼時要注意什麼?
一般來說,完整的遙控碼分為頭碼、位址碼、資料碼和校驗碼四個組成部分。頭碼根據不同的廠家各不相同,位址碼和資料碼都由邏輯“1”和邏輯“0”組成。編碼的設計目的,就是按照編碼規則發送不同的碼值。遙控編碼晶片最常用的是在空調、DVD、車庫門等遙控器上。
設計編碼程式可以分為三個部分∶
(1) 了解碼型的特性。遙控碼的頭碼和位址碼(也稱為客戶碼)是固定不變的,資料碼和校驗碼根據不同的鍵值而改變。
(2) 計算發碼時間。遙控碼大部分都是由邏輯“1”和邏輯“0” 組成,也就是由一串固定占空比、固定周期的方波所組成。通常這些方波的周期是毫秒甚至微秒等級,需要在時間上計算的比較精確。所以你選擇發碼MCU型號的時候,就要考慮到MCU的運行速度是不是夠快,以及程式運行時間夠不夠。
(3) 程式的編寫。選定MCU型號之後,開始設計程式流程。一般來說我們使用I/O口就可以做發碼的輸出埠。發碼程式一般由幾個子程式組成,頭碼副程式、邏輯1副程式,邏輯0副程式以及校驗碼的演算法副程式。一旦我們得到要發送碼的命令後,首先調用頭碼副程式,然後根據客戶碼和鍵值調用邏輯1副程式或者邏輯0副程式,最後調用校驗碼演算法副程式輸出校驗碼。
設計解碼程式也可以分為三部分∶
(1) 了解編碼波形特性。從分析編碼的高、低脈沖寬度入手,了解邏輯“1”和邏輯“0”的波形占空比、周期,了解頭碼的特性。
(2) 確定接收方式。一般我們可以用I/O口查詢方法或者INT 口中斷回應方法來接收編碼。這兩者的區別是I/O口查詢方式比較耗費MCU的運行時間資源,需要不斷的去偵測I/O的電平變化,以免漏掉有效的碼值;而INT口中斷接收方式則比較節省資源,當外部有電平變化時,MCU才需要去處理,不需要時刻進行偵測。但是INT口中斷接收方式不能辨別相同周期不同占空比的波形特性,當編碼所攜帶的邏輯“1”和邏輯“0”具有這種特性時,就無法通過INT口中斷接收方式來辨別了,因為INT中斷只是在上升沿或者下降沿的時候才觸發。
(3) 將接收的碼值存儲并分析執行。根據判斷高低電平的寬度(計時器或者延時),可以得到碼值,也就是所說的解碼。一般我們連續收到3個相同的完整碼值,就確認此碼的確被發出,并接收成功。當解碼結束,根據碼值我們可以判斷出是哪個按鍵被按下,由此去執行相對的按鍵功能。
8、如何設計控制系統(發電機系統)的重定電路?
MCU復位可分為內部與外部事件復位。外部事件復位包括上電復位、RES重定和低電壓重定。上電復位和RES復位是人為的正常重定,以保證程式計數器被清零且程式從頭開始執行。要正常進行這兩種重定動作,需要外接正確的RES重定電路,一般來說不同的MCU的重定電路稍有不同,MCU廠商都會提供標準的重定電路資料。以HOLTEK IC為例,我們提供的重定電路是RES腳接100KΩ電阻至VDD; RES腳再接10KΩ電阻和0.1μF的電容至VSS。
當電源電壓受外部干擾,低於正常工作電壓時,會造成程式功能運行不正常,嚴重的還可能造成MCU死機。此時會對發電機系統造成嚴重後果,因此需要用低電壓重定來解決這個問題。通常可以用兩個方法實現低電壓重定∶
(1) 外加一個電壓檢測晶片(例如7033)加到RES腳上,當電源電壓低於某個臨界值時,電壓檢測晶片會給出一個低電平到RES腳使MCU復位,防止MCU死機。
(2) 有些廠家的MCU內部會有一個低電壓檢測LVR功能,例如HOLTEK MCU。當電源電壓低於某一個臨界值時,MCU會自動復位避免死機,外部不需要再連接任何檢測電壓的電路。
除了外部電源不穩定會造成MCU復位,內部WDT溢出也會造成復位,即內部事件復位。對於需要長時間穩定工作的系統來說,看門狗是十分必要的,它可以避免程式跑飛造成的錯誤。當重定發生時,要保證重定後能與重定前的各個狀態無縫的連接起來,就需要用軟體來判定重定前程式執行到哪個程式段。
以HOLTEK MCU為例,除了上電復位之外,通用寄存器重定前後的值不會發生變化。那麼就可以設定一些寄存器記錄程式當前運行在哪一個程式功能段。一旦發生重定,只需要讀出那些寄存器的值就可以跳轉到重定之前運行的程式功能段運行。另外,HOLTE MCU內部有兩個特殊標?位元PD和TO,可以根據此兩位元的值來判定具體是什麼原因造成的復位。
烜芯微專業制造二極管,三極管,MOS管,橋堆等20年,工廠直銷省20%,4000家電路電器生產企業選用,專業的工程師幫您穩定好每一批產品,如果您有遇到什么需要幫助解決的,可以點擊右邊的工程師,或者點擊銷售經理給您精準的報價以及產品介紹
烜芯微專業制造二極管,三極管,MOS管,橋堆等20年,工廠直銷省20%,4000家電路電器生產企業選用,專業的工程師幫您穩定好每一批產品,如果您有遇到什么需要幫助解決的,可以點擊右邊的工程師,或者點擊銷售經理給您精準的報價以及產品介紹