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才能应用。带片内ROM型的芯片又分为片内EPROM型、MASK片内掩模ROM型、片内FLASH型等类型,一些公司还推出带有片内一次性可编程ROM的芯片。MASKROM的MCU价格便宜,但程序在出厂时已经固化,适合程序固定不变的应用场合;FLASH ROM的MCU程序可以反复擦写,灵活性很强,但价格较高,适合对价格不敏感的应用场合或做开发用途;OTPROM的MCU价格介于前两者之间,同时又拥有一次性可编程能力,适合既要求一定灵活性,又要求低成本的应用场合,尤其是功能不断翻新、需要迅速量产的电子产品。
由于MCU强调是最大密集度与最小芯片面积,以有限的程序代码达成控制功能,因此当今MCU多半使用内建的MaskROM、OTP ROM、EEPROM或Flash内存来储存韧体码,MCU内建Flash内存容量从低阶4~64KB到最高阶512KB~2MB不等。
存储器结构
MCU根据其存储器结构可分为哈佛(Harvard)结构和冯?诺依曼(Von Neumann)结构。现在的单片机绝大多数都是基于冯·诺伊曼结构的,这种结构清楚地定义了嵌入式系统所必需的四个基本部分:一个中央处理器核心,程序存储器(只读存储器或者闪存)、数据存储器(随机存储器)、一个或者更多的定时/计时器,还有用来与外围设备以及扩展资源进行通信的输入/输出端口,所有这些都被集成在单个集成电路芯片上。
指令结构
MCU根据指令结构又可分为CISC(ComplexInstrucTIon SetComputer,复杂指令集计算机)和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/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高速数位电路的传输线路,通常会使用strip line,同时藉由调整配线长度补正传输延迟时间,其实这也意味著电子元件的设置位置对电路特性具有绝对性的影响。
(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厂商都会提供标准的重定电路资料。以HOLTEK IC为例,我们提供的重定电路是RES脚接100KΩ电阻至VDD; RES脚再接10KΩ电阻和0.1μF的电容至VSS。
当电源电压受外部干扰,低於正常工作电压时,会造成程式功能运行不正常,严重的还可能造成MCU死机。此时会对发电机系统造成严重後果,因此需要用低电压重定来解决这个问题。通常可以用两个方法实现低电压重定∶
(1)外加一个电压检测晶片加到RES脚上,当电源电压低於某个临界值时,电压检测晶片会给出一个低电平到RES脚使MCU复位,防止MCU死机。
(2)有些厂家的MCU内部会有一个低电压检测LVR功。当电源电压低於某一个临界值时,MCU会自动复位避免死机,外部不需要再连接任何检测电压的电路。
除了外部电源不稳定会造成MCU复位,内部WDT溢出也会造成复位,即内部事件复位。对於需要长时间稳定工作的系统来说,看门狗是十分必要的,它可以避免程式跑飞造成的错误。当重定发生时,要保证重定後能与重定前的各个状态无缝的连接起来,就需要用软体来判定重定前程式执行到哪个程式段。
审核编辑:何安
全部0条评论
快来发表一下你的评论吧 !