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业者也持续为8bitMCU开发频率调节的节能设计,以因应绿色时代的产品开发需求。
16位MCU,则以16位运算、16/24位寻址能力及频率在24~100MHz为主流规格,部分16bitMCU额外提供32位加/减/乘/除的特殊指令。由于32bitMCU出现并持续降价及8bitMCU简单耐用又便宜的低价优势下,夹在中间的16bitMCU市场不断被挤压,成为出货比例中最低的产品。
32位MCU可说是MCU市场主流,单颗报价在1.5~4美元之间,工作频率大多在100~350MHz之间,执行效能更佳,应用类型也相当多元。但32位MCU会因为操作数与内存长度的增加,相同功能的程序代码长度较8/16bitMCU增加30~40%,这导致内嵌OTP/FlashROM内存容量不能太小,而芯片对外脚位数量暴增,进一步局限32bitMCU的成本缩减能力。
内嵌程序存储器类型
下面以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(OneTImeProgramming,OTP)的芯片(典型芯片为97C51)。MASKROM的MCU价格便宜,但程序在出厂时已经固化,适合程序固定不变的应用场合;FLASHROM的MCU程序可以反复擦写,灵活性很强,但价格较高,适合对价格不敏感的应用场合或做开发用途;OTPROM的MCU价格介于前两者之间,同时又拥有一次性可编程能力,适合既要求一定灵活性,又要求低成本的应用场合,尤其是功能不断翻新、需要迅速量产的电子产品。
由于MCU强调是最大密集度与最小芯片面积,以有限的程序代码达成控制功能,因此当今MCU多半使用内建的MaskROM、OTPROM、EEPROM或Flash内存来储存韧体码,MCU内建Flash内存容量从低阶4~64KB到最高阶512KB~2MB不等。
存储器结构
MCU根据其存储器结构可分为哈佛(Harvard)结构和冯?诺依曼(VonNeumann)结构。现在的单片机绝大多数都是基于冯·诺伊曼结构的,这种结构清楚地定义了嵌入式系统所必需的四个基本部分:一个中央处理器核心,程序存储器(只读存储器或者闪存)、数据存储器(随机存储器)、一个或者更多的定时/计时器,还有用来与外围设备以及扩展资源进行通信的输入/输出端口,所有这些都被集成在单个集成电路芯片上。
指令结构
MCU根据指令结构又可分为CISC(ComplexInstrucTIonSetComputer,复杂指令集计算机)和RISC(ReducedInstrucTIonSetComuter,精简指令集计算机微控制器)
MCU的应用技巧:
在MCU应用开发中,代码的使用效率、抗干扰性和可靠性等问题仍困扰著大部份应用工程师。以下是MCU开发应用中应掌握的基本技巧。
1、MCU的通用测试方法MCU从生产出来到封装出货的每个不同的阶段会有不同的测试方法,其中主要会有两种∶中测和成测。所谓中测即是WAFER的测试,它会包含产品的功能验证及AC、DC的测试。专案相当繁多,以HOLTEK产品为例最主要的几项如下∶
(1)接续性测试∶检测每一根I/OPIN内接的保护用二极体是否功能无误。
(2)功能测试∶以产品设计者所提供测试资料(TESTPATTERN)灌入IC,检查其结果是否与当时SIMULATION时状态一样。
(3)STANDBY电流测试∶测量IC处於HALT模式时即每一个接点(PAD)在1态0态或Z态保持不变时的漏电流是否符合最低之规格。
(4)耗电测试∶整颗IC的静态耗电与动态耗电。
(5)输入电压测试∶测量每个输入接脚的输入电压反应特性。
(6)输出电压测试∶测量每个输出接脚的输出电压位元。
(7)相关频率特性(AC)测试,也是通过外灌一定频率,从I/O口来看输出是否与之匹配。
(8)为了保证IC生产的长期且稳定质量,还会做产品的可靠性测试,这些测试包括ESD测试,LATCHUP测试,温度回圈测试,高温贮存测试,湿度贮存测试等。
成测是产品封装好後的测试,即PACKAGE测试,其目的是确定通过中测的IC产品在封装过程中是否有损坏。测试方法主要是仪器自动测试,但测试项目仍与WAFERTEST相同。
2、在demo板上采样时,电压不稳定结果有波动,如何消除?
一般来说,模拟器都是工作在一个稳压的环境(通常为5V)。如果用模拟器的A/D时,要注意其A/D参考电压是由模拟器内部给出,还是需要外部提供。A/D转换需要一个连续的时钟周期,所以在仿真时不能用单步调试的方法,否则会造成A/D采样值不准。至於A/D采样不稳定,可以在A/D输入口加一电容,起到滤波作用,再在软体处理时采用中值滤波的方法。
3、MCU系统为了省电,经常要进入掉电(POWERDOWN)状态,此时如何才能获得最低功耗?
MCU的I/O口可用作输入和输出状态。以HOLTEK最简单的I/OMCUHT48R05A-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高速数位电路的传输线路,通常会使用stripline,同时藉由调整配线长度补正传输延迟时间,其实这也意味著电子元件的设置位置对电路特性具有绝对性的影响。
(b)接地越大越好。铜箔面整体设置接地层,而连接via的较大接地面则是高频电路板与高速数位电路板共同的特徵,此外高频电路板最忌讳使用幅宽细窄的印刷版图描绘地面。
(c)电子元件的接地端子,以最短的长度与电路板接地。具体方法是在电子元件的接地端子pad附近设置via,使电子元件能以最短的长度与电路板接地。
(d)信号线作短配线设计。不可任意加大配线长度,尽量缩短配线长度。
(e)减少电路之间的结合。尤其是滤波器与放大器I/O之间作电路分割非常重要,它相当於音频电路的串扰对策。
(f)MCU回路布线考虑∶震荡电路尽可能接近IC震荡脚位;震荡电路与VDD&VSS保持足够的距离;震荡频率大於1MHz时不需加osc1&osc2电容;电源与地间要最短位置并尽量布设等宽与等距的线,於节点位置加上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厂商都会提供标准的重定电路资料。以HOLTEKIC为例,我们提供的重定电路是RES脚接100KΩ电阻至VDD;RES脚再接10KΩ电阻和0.1μF的电容至VSS。
当电源电压受外部干扰,低於正常工作电压时,会造成程式功能运行不正常,严重的还可能造成MCU死机。此时会对发电机系统造成严重後果,因此需要用低电压重定来解决这个问题。通常可以用两个方法实现低电压重定∶
(1)外加一个电压检测晶片(例如7033)加到RES脚上,当电源电压低於某个临界值时,电压检测晶片会给出一个低电平到RES脚使MCU复位,防止MCU死机。
(2)有些厂家的MCU内部会有一个低电压检测LVR功能,例如HOLTEKMCU。当电源电压低於某一个临界值时,MCU会自动复位避免死机,外部不需要再连接任何检测电压的电路。
除了外部电源不稳定会造成MCU复位,内部WDT溢出也会造成复位,即内部事件复位。对於需要长时间稳定工作的系统来说,看门狗是十分必要的,它可以避免程式跑飞造成的错误。当重定发生时,要保证重定後能与重定前的各个状态无缝的连接起来,就需要用软体来判定重定前程式执行到哪个程式段。
以HOLTEKMCU为例,除了上电复位之外,通用寄存器重定前後的值不会发生变化。那麽就可以设定一些寄存器记录程式当前运行在哪一个程式功能段。一旦发生重定,只需要读出那些寄存器的值就可以跳转到重定之前运行的程式功能段运行。另外,HOLTEMCU内部有两个特殊标?位元PD和TO,可以根据此两位元的值来判定具体是什麽原因造成的复位。
精彩评论