基于RFID的助盲语音寻物机器人的设计与实现
随着科学技术的发展和人们生活水平的不断提高,我们对生活的安全、舒适、便捷等各方面的要求也越来越高[2]。针对盲人的生理缺陷,研究了一款帮助盲人寻找所需物品的移动机器人,它以UP-MAGIC2410为主控芯片,嵌入式Linux为操作系统,并采用多线程的方式集成了射频识别模块、超声波测距模块、电机驱动模块和语音声控模块。通过RFID模块对物品进行辨识确定所寻物体的位置并且进行精确定位,直流电机和驱动器完成对机器人的移动控制,而超声波模块实现避障功能[3]。盲人可以通过语音来对机器人进行寻物控制,在语音命令的指示下机器人将独立完成一次寻物过程,并会在找到的物体处给出语音提示。基于RFID的助盲寻物机器人是结合了RFID技术、语音声控技术、传感技术等的融合体,它给盲人的生活带了极大的便利[4]。
1功能描述
基于RFID助盲寻物机器人,是帮助盲人寻找物品的电子产品,它可以方便盲人寻找所需物品,避免盲人因找物而带来的麻烦,并可以通过语音命令对机器人进行控制,同时机器人也会给出语音提示,让盲人能享受现代科技生活的便捷。
本系统主要包括以下几个功能模块:
1)智能检测模块:
◆RFID读写器:检测室内的带有RFID标签的物品,确定其物品方位后通过语音提示给盲人。
◆温湿度传感器:检测室内的温度和湿度,通过语音提示给盲人。
◆烟雾浓度探测器:自动检测烟雾及温度,当烟雾浓度大于一定的范围的时候,进行语音提示。
2)手动控制模块:
◆Zigbee模块:在手动控制模块与中控模块之间进行无线传输指令和数据。
◆按键控制:直接通过手持终端上的按键来发出控制指令。
◆SPCE061A语音模块:识别盲人发出的语音指令来控制机器人,语音控制机器人使得整个系统操作简单实用更加人性化。
3)中控模块:
◆中控模块采用北京博创公司的UP-MAGIC2410开发板,它集成了助盲语音寻物机器人的所有子系统,接口丰富,功能强大,是机器人的总控制器。通过手持终端的Zigbee无线通讯,控制机器人的开启、温湿度检测、烟雾浓度检测和语音寻物的功能。
硬件系统框图如下图1。
2项目总体设计
根据助盲寻物机器人的功能与技术要求的实际情况,采用“硬件+软件”的系统结构来设计机器人[5],各部分简要介绍如下:
系统选用基于采用UP-MAGIC2410的硬件开发平台。嵌入式操作系统选用Linux 2.6.24,可以很好的满足用户的需求,而且用户可以对Linux系统进行剪裁或定制。
SQLit3数据库支持大多数的SQL指令,使用方便,一个文件就是一个数据库,不需要安装数据库服务器软件,减小了系统空间的使用量。不仅有完整的Unicode标准支持,而且它还具有速度快的特点,可以减少系统查询所消耗的时间。
系统的开发环境如下:
1)硬件环境:UP-MAGIC2410硬件开发平台、SPCE061A语音模块、Zigbee无线传输模块、超声波模块、RFID模块;
2)软件环境:Linux2.6+SQLite3
3应用的技术分析
3.1 Zigbee简介
ZigBee技术是一种应用于短距离范围内,低传输数据速率下的各种电子设备之间的无线通信技术。ZigBee名字来源于蜂群使用的赖以生存和发展的通信方式,蜜蜂通过跳ZigZag形状的舞蹈来通知发现的新食物源的位置、距离和方向等信息,以此作为新一代无线通讯技术的名称。
ZigBee技术的特点:
1)功耗低:工作模式下,ZigBee传输速率低,传输数据量很小,因此信号的收发时间很短,其次在非工作模式时,ZigBee节点处于休眠模式。2)传输可靠:ZigBee的媒体接入控制层(MAC层)采用talk-when-ready的碰撞避免机制。3)网络容量大:ZigBee低速率、低功耗和短距离传输的特点使它非常适宜支持简单器件。4)兼容性:ZigBee技术与现有的控制网络标准无缝集成。
5)安全性:Zigbee提供了数据完整性检查和鉴权功能,在数据传输中提供了三级安全性。
CC2430是一颗真正的系统芯片(SoC)CMOS解决方案。这种解决方案能够提高性能并满足以ZigBee为基础的2.4GHz ISM波段应用对低成本,低功耗的要求。它结合一个高性能2.4GHz DSSS(直接序列扩频)射频收发器核心和一颗工业级小巧高效的8051控制器。
3.2 RFID简介
RFID模块采用RMU900+读写器。RMU900+模块是超小型化超高频读写器核心部件,它集成了PLL、发射、接收、射频耦合器件 及MCU等。其主要工作频率为840-960MHz,同时支持EPC C1 GEN2、ISO 18000-6C两个协议,可工作在+3.3V的低电压下,最大输出功率可达到27dBm,并且可以通过UART、WIEGAND连接上位机。RMU900+模块还提供完整的通讯协议,可用于上位机为Linux操作系统的应用。
3.3 UP-MAGIC2410简介
本次项目的设计使用的硬件平台是由北京博创兴业科技有限公司开发的UP-MAGIC 2410实验平台。S3C2410微处理器的ARM9高性能的开发平台,主频200MHz,100MHz总线频率。采用最小系统核心板加扩展板的双层构架,标配32MSDRAM和64M NAND FLASH。提供LINUX2.4/2.6操作系统,并且提供了完整的驱动和应用程序。
UP-MAGIC 2410是专门为对成本和功耗非常敏感同时性能要求又相当高的应用而设计的。凭借代码大小和中断延迟的优化、集成的系统部件、灵活的配置、简单的高级语言编程和强大的软件系统,UP-MAGIC2410将成为广大系统(从复杂片上系统到低端的微控制器)的理想解决方案。
部分模块的详细设计:
3.4语音控制模块
语音控制模块主要是通zigbee的无线传输来控制助盲机器人寻找物体。SPCE061A是台湾凌阳公司出的一款单片机,它的CPU内核采用凌阳最新推出μ’nSP?s21(Microcontroller and Signal Processor)16位微处理器芯片。围绕μ’nSP?s21所形成的16位μ’nSP?s21系列单片机采用的是模块式集成结构,它以μ’nSP?s21内核为中心集成不同规模的ROM、RAM和功能丰富的各种外设接口部件;由于具有语音处理的特色,即便是不挂接额外的硬件,也能制作语音通讯产品[6]。
3.5超声波模块设计图如下
超声波是指频率超过20KHz以上的声音。理论上,声音在25℃空气中传播速度的理论值为344m/s,这个速度在0℃时降为334m/s。如果测距精度要求很高,则应通过温度补偿的方法加以校正。而超声波测距是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见,超声波测距原理与雷达原理是一样的。
测距的公式表示为:L=C*T (1)。
式(1)中L为测量的距离长度;C为超声波在空气中的传播速度;T为测量距离传播的时间差(T为发射到接收时间数值的一半)。
发射部分用来对超声波换能器进行功率驱动,将由单片机产生的40KHZ脉冲信号送入发射输入端,经过驱动放大达到足够功率之后,推动超声波换能器产生超声波。之所以使用40KHz的脉冲信号是因为实际的需要α=αf2式中α为衰减,α为介质常数(空气中α=2×10-13S2/cm),f位震荡频率。由上面的公示可知,当f=40KHz时,α=3.2×10-4/cm,1/a=31m。如果f=30KMz,1/a=56cm。用波动方程表示超声波A=A0e-axcos(wt+kx),那么(1/a)表示了在这个长度上,平面声波的振幅衰减为原来e分之一。由此可见,频率越高,衰减越厉害,传播的距离越短。
接收部分主要由接收换能器和放大电路等环节组成。其中放大电路是一个放大倍数较高的三级运算放大器,是将从目标处反射回来的微弱信号进行放大整形后送入计数控制电路部分。由于在距离较远时声波的回波信号很小,因而转换为电信号的幅度也较小,为此要求将信号放大60万倍左右[7]。因为共射放大适合用于小信号放大,所以采用三级共射放大:前两级放大100倍,其带宽为15MHz能充分满足要求;第三级采用运算放大器,带宽为4 MHz。
部分代码如下:
void init0int interrupt 0
{uint timer_us = 0;
TR0=0;//关闭定时器0
timer_us = TH0*256+TL0;
if(timer_us>190)timer_us=timer_us-180;//修正测距的距离
if(timer_us<=735)
{timer_us=timer_us-96}//二次修正
length = ((unsigned long)(329)*timer_us)/2000;//计算长度,是扩大1000倍
flag = 0;
EA = 0; }//禁止所有中断
3.6驱动模块的设计
驱动程序是连接硬件设备和设备文件的纽带,是操作系统内核和硬件设备之间的接口。
采用嵌入式Linxu系统,其驱动程序主要有两种加载方式:直接编译入内核和模块加载[8]。其中,采用直接编译进内核方式,在内核启动时就已经存在。而采用模块化加载方式,需要时动态的加载入内即可,这样使得程序按需加载,节省了内存,也相对灵活[9]。
模块化加载的的方式如下:
1)在Linxu内核目录下,执行“make menuconfig”指令,弹出Linux内核的配置菜单。
2)针对本课题选用的PL2303芯片的串口转USB设备,在配置菜单中选择响应的驱动模块,具体如下:
USB support -->
USB Serial Converter Support -->
USB Serial Converter Support
USB Prolific 2303 Single Port Serial Driver
3)退出配置菜单,并执行“make modules”指令编译驱动模块。也可以只编译内指定目录下的驱动模块,即通过执行“make mod? ules SUBDIRS=drivers/usb/serial”指令只编译内核源代码中drivers/usb/serial目录下的驱动模块。
4)执行完上述指令后,会在drivers/usb/serial目录下生成驱动模块usbserial.ko和pl2303.ko。
5)将usbserial.ko和pl2303.ko下载到开发平台上,并执行“insmod usbserial.ko”和“insmod pl2303.ko”两条指令。当然由于pl2303. ko是依赖于usbserial.ko的,所以上述指令的执行顺序是不能改变的。
6)最后,通过mknod建立响应的设备文件结点,即执行“mknod /dev/ttyUSB0 c 188 0”即可,而指令中的/dev/ttyUSB0代表文件节点的名车;“c”代表驱动程序的类型,为字符驱动;而188和0分别代表该串口转USB设备的主次设备号[10]。
3.7系统的工作流程如下
通过对SPCE061A语音模块进行语音命令预存储操作,并将训练的命令存储在flash中,在下次启动时先判定是否已经存储,如果存储,就直接将命令进行加载。否则对其训练。
在语音训练完成时,再和中控进行串口通信。但接受到一条命令时,语音模块就通过串口像中控平台发送一个对应的命令符。
中控平台找到物体后,语音模块可以通过串口中断接受中控平台发来的命令,并给予语音提示。
预先对RFID记录标签信息。RFID启动时,先开启USB接口,等待中控平台传送指令,在通过指令找到相应标签信息,然后开启标签查找功能。
机器人在中控平台的指令下启动,并根据中控平台中寻径算法控制其移动避障。并在每一次移动的同时发送超声波所反馈的信息。
超声波先设定好其探测长度(设定频率),当电机驱动开启后,超声波通过单片机GPIO口控制也随之开启,随着机器人的每一次移动,将前方信息反馈给单片机。再由单片机通过串口传送给中控平台。
先存储语音和RFID标签信息的数据库,再创建语音控制,RFID通信,和算法的线程,机器人的调控接口作为参数设置在算法线程中,由算法来给电机驱动提供指令。
4仿真及总结
基于RFID助盲语音寻物机器人完成实现之后,我们对它进行了测试,当我们在室内点燃物品产生烟雾时,机器人自动会通过语音提示来告诉盲人室内的烟雾浓度过高,同时还可以检测室内的温湿度状况;当通过语音发出寻物指令时,机器人就开始移动寻找物品,如果有障碍物遮挡时它会自动及时进行避障,不至于撞到周围物体,直到机器人移动到RFID模块扫描到所要找的物品时,它会停止移动并且通过语音提示来告诉盲人物品已找到。整个测试结果基本达到了预期的效果,但是机器人移动起来所走的路线由于受到路面等环境因素稍微有点偏差,以致最后离找到的物品发生位置上的偏差。
这款助盲语音寻物机器人所定位的服务对象是我国的广大的盲人群体,切实的帮助盲人解决生活上寻找物体的不便,为他们带来物联网时代下高科技的生活体验[11]。利用RFID定位导航,是依赖其较高的精确度,且便于控制[12]。根据RFID技术检测到目标物的位置[13],利用超声波探测技术结合贪心算法进行局部路径规划[14],在保证规划任务顺利完成的同时,也保证了路径规划的收敛性,并且具有较好的环境适应能力[15]。在探测路面状况方面,是利用超声波来进行实时探测。超声波不仅可以设置探测定长,而且探测距离远。采用Zigbee无线传输语音命令控制机器人,实现人机互动的趣味和便利。
随着对移动机器人技术的深入研究,以及机器人在工业和日常生活中的逐渐普及,采用RFID技术的移动机器人研究的显得越来越为人们所关注,其也必将为人们的生活、生产带了极大的便利。
参考文献:
[1]李磊,叶涛,谭民.移动机器人技术研究现状与未来[J].机器人,2002(24):475-477.
[2]杨化书,曲新峰.工业机器人技术的应用及发展[J].黄河水利职业技术学院学报,2004(4):42-43.
[3]郭戈,胡征峰,董江辉.移动机器人导航与定位技术[J].微计算机信息,2003(8):10-12.
[4]陈博.机器人技术的发展趋势和最新发展[J].西安教育学院学报,2004(3):85-87.
[5]康一梅.嵌入式软件设计[M].北京:机械工业出版社,2008:178,189-194,282-284.
[6]王??.有声图书市场分析[EB/OL].http://bbs.省略/home.php?mod=space&uid=51004&do=blog&id=379745,2010-11-02。
[7]吴涛.移动机器人避障与路径规划研究[D].武汉:华中科技大学,2004.
[8]李俊.嵌入式Linux设备驱动开发详解[M].北京:人民邮电出版社,2008:16-20.
[9]刘淼.嵌入式系统接口设计与Linux驱动程序开发[M].北京:北京航空航天大学出版社,2006:199-204.
[10]童永清.Linux C编程实战[M].北京:人民邮电出版社,2008:204-219.
[11]蒋新松.机器人学导论[M].沈阳:辽宁科学技术出版社,1944:511-516,543-554.
[12]陈华志,谢存禧.移动机器人导航及其相关技术的研究[J].机床与液压,2003(4):12-15.
[13]雷斌.动态环境下多移动机器人路劲规划研究[M].武汉:武汉理工大学,2006.
[14]刘京京.多目标遗传优化及其在机器人路径规划中的应用[D].南京:南京理工大学,2007.
[15]刘世成.工业机器人路径规划算法研究[M].沈阳:沈阳工业大学,2004.
1
史上最强单片机科普,看完给跪了!
MCU是Microcontroller Unit 的简称,中文叫微控制器,俗称单片机, 是把CPU的频率与规格做适当缩减,并将内存、计数器、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制,诸如手机、PC外围、遥控器,至汽车电子、工业上的步进马达、机器手臂的控制等,都可见到MCU的身影。
单片机发展简史
单片机出现的历史并不长,但发展十分迅猛。 它的产生与发展和微处理器(CPU)的产生与发展大体同步,自1971年美国英特尔公司首先推出4位微处理器以来,它的发展到目前为止大致可分为5个阶段。下面以英特尔公司的单片机发展为代表加以介绍。
1971年~1976年
单片机发展的初级阶段。 1971年11月英特尔公司首先设计出集成度为2000只晶体管/片的4位微处理器英特尔4004,并配有RAM、 ROM和移位寄存器, 构成了第一台MCS—4微处理器, 而后又推出了8位微处理器英特尔8008, 以及其它各公司相继推出的8位微处理器。
1976年~1980年
低性能单片机阶段。 以1976年英特尔公司推出的MCS—48系列为代表, 采用将8位CPU、 8位并行I/O接口、8位定时/计数器、RAM和ROM等集成于一块半导体芯片上的单片结构, 虽然其寻址范围有限(不大于4 KB), 也没有串行I/O, RAM、 ROM容量小, 中断系统也较简单, 但功能可满足一般工业控制和智能化仪器、仪表等的需要。
1980年~1983年
高性能单片机阶段。 这一阶段推出的高性能8位单片机普遍带有串行口,有多级中断处理系统, 多个16位定时器/计数器。片内RAM、 ROM的容量加大,且寻址范围可达64 KB,个别片内还带有A/D转换接口。
1983年~80年代末
16位单片机阶段。 1983年英特尔公司又推出了高性能的16位单片机MCS-96系列,由于其采用了最新的制造工艺, 使芯片集成度高达12万只晶体管/片。
1990年代
单片机在集成度、功能、速度、可靠性、应用领域等全方位向更高水平发展。
单片机的分类及应用
MCU按其存储器类型 可分为无片内ROM型 和带片内ROM型 两种。对于无片内ROM型的芯片,必须外接EPROM才能应用(典型为8031);带片内ROM型的芯片又分为片内EPROM型(典型芯片为87C51)、MASK片内掩模ROM型(典型芯片为8051)、片内Flash型(典型芯片为89C51)等类型。
按用途可分为通用型 和专用型 ;根据数据总线的宽度和一次可处理的数据字节长度可分为8 、16 、32位 MCU。
目前,国内MCU应用市场最广泛的是消费电子 领域,其次是工业领域 、和汽车电子 市场。消费电子 包括家用电器、电视、游戏机和音视频系统等。工业领域 包括智能家居、自动化、医疗应用及新能源生成与分配等。汽车领域 包括汽车动力总成和安全控制系统等。
单片机的基本功能
对于绝大多数MCU,下列功能是最普遍也是最基本的,针对不同的MCU,其描述的方式可能会有区别,但本质上是基本相同的:
TImer(定时器): TImer的种类虽然比较多,但可归纳为两大类:一类是固定时间间隔的TImer, 即其定时的时间是由系统设定的,用户程序不可控制,系统只提供几种固定的时间间隔给用户程序进行选择,如32Hz,16Hz,8Hz等,此类TImer在4位MCU中比较常见,因此可以用来实现时钟、计时等相关的功能。
另一类则是Programmable Timer(可编程定时器), 顾名思义,该类Timer的定时时间是可以由用户的程序来控制的,控制的方式包括:时钟源的选择、分频数(Prescale)选择及预制数的设定等,有的MCU三者都同时具备,而有的则可能是其中的一种或两种。此类Timer应用非常灵活,实际的使用也千变万化,其中最常见的一种应用就是用其实现PWM输出。
由于时钟源可以自由选择,因此,此类Timer一般均与Event Counter(事件计数器)合在一起。
IO口: 任何MCU都具有一定数量的IO口,没有IO口,MCU就失去了与外部沟通的渠道。根据IO口的可配置情况,可以分为如下几种类型:
纯输入或纯输出口: 此类IO口有MCU硬件设计决定,只能是输入或输出,不可用软件来进行实时的设定。
直接读写IO口: 如MCS-51的IO口就属于此类IO口。当执行读IO口指令时,就是输入口;当执行写IO口指令则自动为输出口。
程序编程设定输入输出方向的: 此类IO口的输入或输出由程序根据实际的需要来进行设定,应用比较灵活,可以实现一些总线级的应用,如I2C总线,各种LCD、LED Driver的控制总线等。
对于IO口的使用,重要的一点必须牢记的是:对于输入口,必须有明确的电平信号,确保不能浮空(可以通过增加上拉或下拉电阻来实现);而对于输出口,其输出的状态电平必须考虑其外部的连接情况,应保证在Standby或静态状态下不存在拉电流或灌电流。
外部中断: 外部中断也是绝大多数MCU所具有的基本功能,一般用于信号的实时触发,数据采样和状态的检测,中断的方式由上升沿、下降沿触发和电平触发几种。外部中断一般通过输入口来实现,若为IO口,则只有设为输入时其中断功能才会开启;若为输出口,则外部中断功能将自动关闭(ATMEL的ATiny系列存在一些例外,输出口时也能触发中断功能)。外部中断的应用如下:
外部触发信号的检测: 一种是基于实时性的要求,比如可控硅的控制,突发性信号的检测等,而另一种情况则是省电的需要。
信号频率的测量,为了保证信号不被遗漏,外部中断是最理想的选择。
数据的解码: 在遥控应用领域,为了降低设计的成本,经常需要采用软件的方式来对各种编码数据进行解码,如Manchester和PWM编码的解码。
按键的检测和系统的唤醒: 对于进入Sleep状态的MCU,一般需要通过外部中断来进行唤醒,最基本的形式则是按键,通过按键的动作来产生电平的变化。
通讯接口: MCU所提供的通讯接口一般包括SPI接口,UART,I2C接口等,其分别描述如下:
SPI接口: 此类接口是绝大多数MCU都提供的一种最基本通讯方式,其数据传输采用同步时钟来控制,信号包括:SDI(串行数据输入)、SDO(串行数据输出)、SCLK(串行时钟)及Ready信号;有些情况下则可能没有Ready信号;此类接口可以工作在Master方式或Slave方式下,通俗说法就是看谁提供时钟信号,提供时钟的一方为Master,相反的一方则为Slaver。
UART(Universal Asynchronous Receive Transmit): 属于最基本的一种异步传输接口,其信号线只有Rx和Tx两条,基本的数据格式为:Start Bit + Data Bit(7-bits/8-bits) + Parity Bit(Even, Odd or None) + Stop Bit(1~2Bit)。一位数据所占的时间称为Baud Rate(波特率)。
对于大多数的MCU来讲,数据为的长度、数据校验方式(奇校验、偶校验或无校验)、停止位(Stop Bit)的长度及Baud Rate是可以通过程序编程进行灵活设定。此类接口最常用的方式就是与PC机的串口进行数据通讯。
I2C接口: I2C是由Philips开发的一种数据传输协议,同样采用2根信号来实现:SDAT(串行数据输入输出)和SCLK(串行时钟)。其最大的好处是可以在此总线上挂接多个设备,通过地址来进行识别和访问;I2C总线的一个最大的好处就是非常方便用软件通过IO口来实现,其传输的数据速率完全由SCLK来控制,可快可慢,不像UART接口,有严格的速率要求。
Watchdog(看门狗定时器): Watchdog也是绝大多数MCU的一种基本配置(一些4位MCU可能没有此功能),大多数的MCU的Watchdog只能允许程序对其进行复位而不能对其关闭(有的是在程序烧入时来设定的,如Microchip PIC系列MCU),而有的MCU则是通过特定的方式来决定其是否打开,如Samsung的KS57系列,只要程序访问了Watchdog寄存器,就自动开启且不能再被关闭。一般而言watchdog的复位时间是可以程序来设定的。Watchdog的最基本的应用是为MCU因为意外的故障而导致死机提供了一种自我恢复的能力。
单片机的学习窍门
任何一款MCU,其基本原理和功能都是大同小异,所不同的只是其外围功能模块的配置及数量、指令系统等。
对于指令系统,虽然形式上看似千差万别,但实际上只是符号的不同,其所代表的含义、所要完成的功能和寻址方式基本上是类似的。
要了解一款MCU,首先需要知道就是其ROM空间 、RAM空间 、IO口数量 、定时器数量 和定时方式 、所提供的外围功能模块(Peripheral Circuit) 、中断源 、工作电压 及功耗 等等。
了解这些MCU Features后,接下来第一步就是将所选MCU的功能与实际项目开发的要求的功能进行对比,明确哪些资源是目前所需要的,哪些是本项目所用不到的。
对于项目中需要用到的而所选MCU不提供的功能,则需要认真理解MCU的相关资料,以求用间接的方法来实现,例如,所开发的项目需要与PC机COM口进行通讯,而所选的MCU不提供UART口,则可以考虑用外部中断的方式来实现。
对于项目开发需要用到的资源,则需要对其Manua*进行认真的理解和阅读,而对于不需要的功能模块则可以忽略或浏览即可。对于MCU学习来讲,应用才是关键,也是最主要的目的。
明确了MCU的相关功能后,接下来就可以开始编程了。
对于初学者或初次使用此款MCU的设计者来说,可能会遇到很多对MCU的功能描述不明确的地方,对于此类问题,可以通过两种方法来解决,一种是编写特别的验证程序来理解资料所述的功能;另一种则可以暂时忽略,单片机程序设计中则按照自己目前的理解来编写,留到调试时去修改和完善。前一种方法适用于时间较宽松的项目和初学者,而后一种方法则适合于具有一定单片机开发经验的人或项目进度较紧迫的情况。
指令系统千万不要特别花时间去理解。指令系统只是一种逻辑描述的符号,只有在编程时根据自己的逻辑和程序的逻辑要求来查看相关的指令即可,而且随着编程的进行,对指令系统也会越来越熟练,甚至可以不自觉地记忆下来。
单片机的程序编写
MCU的程序的编写与PC下的程序的编写存在很大的区别,虽然现在基于C的MCU开发工具越来越流行,但对于一个高效的程序代码和喜欢使用汇编的设计者来讲,汇编语言仍然是最简洁、最有效的编程语言。
对于MCU的程序编写,其基本的框架可以说是大体一致的,一般分为初始化部分(这是MCU程序设计与PC最大的不同),主程序循环体和中断处理程序三大部分,其分别说明如下:
初始化: 对于所有的MCU程序的设计来讲,出世化是最基本也是最重要的一步,一般包括如下内容:
屏蔽所有中断并初始化堆栈指针: 初始化部分一般不希望有任何中断发生。
清除系统的RAM区域和显示Memory:虽然有时可能没有完全的必要,但从可靠性及一致性的角度出发,特别是对于防止意外的错误,还是建议养成良好的编程习惯。
IO口的初始化: 根据项目的应用的要求,设定相关IO口的输入输出方式,对与输入口,需要设定其上拉或下拉电阻;对于输出口,则必须设定其出世的电平输出,以防出现不必要的错误。
中断的设置: 对于所有项目需要用到的中断源,应该给予开启并设定中断的触发条件,而对于不使用的多余的中断,则必须给予关闭。
其他功能模块的初始化: 对于所有需要用到的MCU的外围功能模块,必须按项目的应用的要求进行相应的设置,如UART的通讯,需要设定Baud Rate,数据长度,校验方式和Stop Bit的长度等,而对于Programmer Timer,则必须设置其时钟源,分频数及Reload Data等。
参数的出世化: 完成了MCU的硬件和资源的出世化后,接下来就是对程序中使用到的一些变量和数据的初始化设置,这一部分的初始化需要根据具体的项目及程序的总体安排来设计。对于一些用EEPROM来保存项目预制数的应用来讲,建议在初始化时将相关的数据拷贝到MCU的RAM,以提高程序对数据的访问速度,同时降低系统的功耗(原则上,访问外部EEPROM都会增加电源的功耗)。
主程序循环体: 大多数MCU是属于长时间不间断运行的,因此其主程序体基本上都是以循环的方式来设计,对于存在多种工作模式的应用来讲,则可能存在多个循环体,相互之间通过状态标志来进行转换。对于主程序体,一般情况下主要安排如下的模块:
计算程序: 计算程序一般比较耗时,因此坚决反对放在任何中断中处理,特别是乘除法运算。
显示传输程序: 主要针对存在外部LED、LCD Driver的应用。
中断处理程序: 中断程序主要用于处理实时性要求较高的任务和事件,如,外部突发性信号的检测,按键的检测和处理,定时计数,LED显示扫描等。
一般情况下,中断程序应尽可能保证代码的简洁和短小,对于不需要实时去处理的功能,可以在中断中设置触发的标志,然后由主程序来执行具体的事务――这一点非常重要,特别是对于低功耗、低速的MCU来讲,必须保证所有中断的及时响应。
对于不同任务体的安排,不同的MCU其处理的方法也有所不同。
例如,对于低速、低功耗的MCU(Fosc=32768Hz)应用,考虑到此类项目均为手持式设备和采用普通的LCD显示,对按键的反应和显示的反应要求实时性较高,应此一般采用定时中断的方式来处理按键的动作和数据的显示;而对于高速的MCU,如Fosc》1MHz的应用,由于此时MCU有足够的时间来执行主程序循环体,因此可以只在相应的中断中设置各种触发标志,并将所有的任务放在主程序体中来执行。
在MCU的程序设计中,还需要特别注意的一点就是: 要防止在中断和主程序体中同时访问或设置同一个变量或数据的情况。有效的预防方法是,将此类数据的处理安排在一个模块中,通过判断触发标志来决定是否执行该数据的相关操作;而在其他的程序体中(主要是中断),对需要进行该数据的处理的地方只设置触发的标志。――这可以保证数据的执行是可预知和唯一的。
全球主流单片机制造商
欧美地区
1、Freescale+NXP(飞思卡尔+恩智浦): 荷兰,主要提供16位、32位MCU。应用范围:汽车电子、LED和普通照明、医疗保健、多媒体融合、家电和电动工具、楼宇自动化技术电机控制、电源和功率转换器、能源和智能电网、自动化、计算机与通信基础设施。
2、Microchip+Atmel(微芯科技+爱特梅尔): 美国,主要提供16位、32位MCU。应用范围:汽车电子、工业用、电机控制、汽车、楼宇自动化、家用电器、家庭娱乐、工业自动化、照明、物联网、智能能源、移动电子设备、计算机外设。
3、Cypress+Spansion(赛普拉斯+飞索半导体): 美国,主要提供8位、16位、32位MCU。应用范围:汽车电子、家用电器、医疗、消费类电子、通信与电信、工业、无线。
4、ADI(亚德诺半导体): 美国,主要提供8位、16位、32位MCU。应用范围:航空航天与国防、汽车应用 、楼宇技术 、通信 、消费电子 、能源 、医疗保健 、仪器仪表和测量 、电机、工业自动化 、安防。
5、Infineon(英飞凌): 德国,主要提供16位、32位MCU。应用范围:汽车电子、消费电子、工程、商用和农用车辆、数据处理、电动交通、工业应用、医疗设备、移动设备、电机控制与驱动、电源、面向摩托车电动自行车与小型电动车、智能电网、照明、太阳能系统解决方案、风能系统解决方案。
6、ST Microelectronics(意法半导体): 意大利/法国,主要提供32位MCU。应用范围:LED和普通照明、交通运输、医疗保健、多媒体融合、家电和电动工具、楼宇自动化技术电机控制、电源和功率转换器、能源和智能电网、自动化、计算机与通信基础设施。
7、Qualcomm(高通): 美国,主要提供16位,32位MCU。应用范围:智能手机、平板电脑、无线调制解调器。
8、Texas Instruments(德州仪器): 美国,主要提供16位、32位MCU。应用范围:汽车电子、消费电子、医疗设备、移动设备、通信。
9、Maxim(美信): 美国,主要提供32位MCU。应用范围:汽车电子、消费电子、工业应用、安防。
日韩地区
1、Renesas(瑞萨): 日本,主要提供16位、32位MCU。应用范围:电脑及外设、消费类电子、健康医疗电子、汽车电子、工业、通信。
2、Toshiba(东芝): 日本,主要提供16位、32位MCU。应用范围:汽车电子、工业用、电机控制、无线通信、移动电话、电脑与周边设备、影像及音视频、消费类(家电)、LED照明、安全、电源管理、娱乐设备。
3、Fujitsu(富士通): 日本,主要提供32位MCU。应用范围:汽车、医疗、机械,家电。
4、Samsung Electronics(三星电子): 韩国,主要提供16位、32位MCU。应用范围:汽车电子、工业用、电机控制、汽车、楼宇自动化、家用电器、家庭娱乐、工业自动化、照明、物联网、智能能源、移动电子设备、计算机外设。
台湾地区
1、宏晶科技: 台湾,主要提供32位MCU。应用范围:通信、工业控制、信息家电、语音。
2、盛群半导体: 台湾,主要提供8位、32位MCU。应用范围:消费电子、LED照明等。
3、凌阳科技: 台湾,主要提供8位、16位MCU。应用范围:家庭影音。
4、中颖电子: 台湾,主要提供4位、8位MCU。应用范围:充电器、移动电源、家电、工业控制。
5、松翰科技: 台湾,主要提供8位、32位MCU。应用范围:摇控器、智能型充电器、大小系统、电子秤、耳温枪、血压计、胎压计、各类量测及健康器材。
6、华邦电子: 台湾,主要提供8位、16位MCU。应用范围:车用电子、工业电子、网络、计算机、消费电子、物联网。
7、十速科技: 台湾,主要提供4位、8位、51位MCU。应用范围:遥控器、小家电。
8、佑华微电子: 台湾,主要提供4位、8位MCU。应用范围:录音集成电路产品、消费电子、家用产品。
9、应广科技单片机: 台湾,主要提供4位、8位MCU。应用范围:机械、自动化、家电、机器人。
10、义隆电子: 台湾,主要提供8位、16位MCU。应用范围:消费电子、电脑、智能手机。
大陆地区
1、希格玛微电子: 主要提供32位MCU,应用范围:电信、制造、能源、交通、电力等。
2、珠海欧比特: 主要提供32位MCU,应用范围:航空航天:星箭站船、飞行器;高端工控:嵌入式计算机;舰船控制、工业控制、电力设备、环境监控。
3、兆易创新: 主要提供32位MCU,应用范围:工业自动化、人机界面、电机控制、安防监控、智能家居、物联网。
4、晟矽微电子: 主要提供8位、32位MCU,应用范围:小家电、消费类电子、遥控器、鼠标、锂电池、数码产品、汽车电子、医疗仪器及计量、玩具、工业控制、智能家居及安防等领域。
5、芯海科技: 主要提供16、32位MCU,应用范围:仪器仪表、物联网、消费电子、家电、汽车电子。
6、联华集成电路: 主要提供8位、16位MCU,应用范围:消费电子、白色家电、工业控制、通信设备、汽车电子、计算机。
7、珠海建荣: 主要提供8位MCU,应用范围:家用电器 、移动电源。
8、炬芯科技: 主要提供8位至32位MCU,应用范围:平板电脑、智能家居、多媒体、蓝牙、wifi音频。
9、爱思科微电子: 主要提供8位、16位MCU,应用范围:消费类芯片、通讯类芯片、信息类芯片、家电。
10、华芯微电子: 主要提供8位、4位MCU,应用范围:卫星接收器、手机充电器、万年历、多合一遥控器。
11、上海贝岭(华大半导体控股): 主要提供8位、16位、32位MCU,应用范围:计算机周边、HDTV、电源管理、小家电、数字家电。
12、海尔集成电路: 主要提供14位、15位、16位MCU,应用范围:消费电子、汽车电子、工业、智能仪表。
13、北京君正: 主要提供32位MCU,应用范围:可穿戴式设备、物联网、智能家电、汽车、费类电子、平板电脑。
14、中微半导体: 主要提供8位MCU,应用范围:智能家电、汽车电子、安防监控、LED照明及景观、智能玩具、智能家居、消费类电子。
15、神州龙芯集成电路: 主要提供32位MCU,应用范围:电力监控、智能电网、工业数字控制、物联网、智能家居、数据监控。
16、紫光微电子: 主要提供8位、16位MCU,应用范围:智能家电。
17、时代民芯: 主要提供32位MCU,应用范围:汽车导航、交通监控、渔船监管、电力电信网络。
18、华润矽科微电子(华润微旗下公司): 主要提供8位、16位MCU,应用范围:消费电子、工业控制、家电。
19、国芯科技: 主要提供32位MCU,应用范围:信息安全领域 、办公自动化领域、通讯网络领域、 信息安全领域。
20、中天微: 主要提供32位MCU,应用范围:智能手机、数字电视、机顶盒、汽车电子、GPS、电子阅读器、打印机。
21、华润微电子: 主要提供8位、16位MCU,应用范围:家电,消费类电子、工业自动化控制的通用控制电路。
22、中颖电子: 主要提供4位、8位、16位、32位MCU,应用范围:家电、电机。
23、灵动微电子: 主要提供32位,应用范围:电机控制、蓝牙控制、高清显示、无线充、无人机、微型打印机、智能标签、电子烟、LED点阵屏等。
24、新唐科技: 主要提供8位MCU,应用范围:照明、物联网等。
25、东软载波: 主要提供8位、32位MCU,应用范围:家电、智能家居、仪器仪表、液晶面板控制器、工业控制等。
26、贝特莱: 主要提供32位MCU,应用范围:智能家居、工业控制以及消费类产品领域。
27、笙泉科技: 主要提供8位MCU,应用范围:车用、教育、工控、医疗等中小型显示面板。
28、航顺芯片: 主要提供8位、32位MCU,应用范围:汽车、物联网等。
29、复旦微电子: 主要提供16位、32位MCU,应用范围:智能电表、智能门锁等。
30、华大半导体: 主要提供8位、16位、32位MCU,应用范围:工业控制、智能制造、智慧生活及物联网等。
【如果你喜欢EDA365的文章,记得关注和点赞哦!】
相关问答
随着计算机、通讯技术的发展, 语音识别 技术的重】作业帮[最佳回答]Today,therobotisdevelopingmoreandmoreintelligentandhumane.Weknowthatvoicemustalsobee...
学51 单片机 更有前途还是学 凌阳 61 单片机 更有用处?当然是51,现在市面上的51单片机我所知道的就有几十种,它们的指令相同,芯片内部包含的资源则各有特点,用法相似,可移植性好。生产51的公司众多(Intel、Atm...