




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章引言1.1课题背景与来源当前,在国内外对各类智能机器人的钻研开发成了科研的热门,智能机器人。总体上来说,机器人的发展可以分为两个方向:第一个方向是无人管理时机器人的自主操作性越来越智能化,通过运用传感器、控制器,以先进的控制算法和精密的机电控制操作系统来实现;第二个方向和企业产品的生产加工相关的,设计出可以满足生产线操作具体任务的产业机器人,主要选用物美价廉的高性能模块,在能完成生产操作任务的基础上,追求操作系统的经济性以及可靠性。人类是通过语言来实现信息的交流,我们可以通过运用语言识别技术,让交流领域从人类与人类扩展到人类与机器。智能小车属于一种小型机器人,它的发展已经运用于机械、电子、工业等多个领域,和人们的生活密切相关。因此,为了适应新时代发展,本设计运用了一款集语音识别系统、语音播报系统、红外避障传感器和光电开关检测系统于一体的具有语音识别、语音播报、避障以及寻迹的多功能小车。1.2课题意义随着生产自动化的发展,机器人在自动化生产上应用广泛。现在科技发达,人们的需求也越来越高,实现对小车的声控功能的研究,为人们提供各种便利,比如声控售货机、声控洗衣机、声控电视等设备。实现小车的避障功能的研究,为避免发生车祸有着重要意义。实现小车自动进行寻迹功能的研究对智能运输系统起着重要作用。随着国家的经济发展,越来越多的人涌入城市,现有的城市公共交通已经满足不了人群的需求,所以解决城市交通的基础设施问题,为城市的发展起着重要性。因此智能运输系统越来越被人们所重视,因为它是基于关键理论模型,将数据传输技术、电子操作技术及微机运算处理技术综合起来形成的交通管理体系,能够全方位发挥作用,为人类高效地管理城市交通系统,从而解决生活中公交堵车、行使缓慢等问题。1.3设计的主要功能设计一个基于ATmega16A的智能小车,包含以下功能:1.声控:非特定人可通过声音来控制小车执行相应的程序指令,如前进、左转、停止等动作;2.寻迹:小车会自动沿着黑线轨道前进,在无人操作的情况下能引导小车顺利地到达目的地;3.避障:通过红外避障传感器探测小车前后左右四个方向是否有障碍物,在小车前进、后退、左转、右转过程中主程序将调用避障子程序进行检测,如探测到有障碍物,小车将不会执行相应动作,且语音提示遇到障碍,避免小车撞到障碍物;4.语音播放:用电脑合成音或者非特定人说话把想要播放的语音录入到ISD4004芯片,然后经过LM386放大播报相应语音。
第二章系统设计方案与论证2.1系统组成框图智能小车主要由单片机控制板、LD3320语音识别模块、ISD4004语音播报模块、红外避障模块、寻迹模块、L298N电机驱动等模块组成。图2-1为智能小车的系统框图:ATmega16AATmega16A单片机片机红外避障模块ISD4004语音播放模块红外避障模块ISD4004语音播放模块LD3320语音识别模块L298N电机驱动模块LD3320语音识别模块L298N电机驱动模块寻迹模块寻迹模块图2-1智能小车系统框图2.2系统的功能介绍及操作说明智能小车的特点及实现的功能和操作说明如下:打开小车总开关,语音播报“欢迎使用智能小车”,并提示“如要进行寻迹模式,请将小车置于黑线轨道上”,如小车检测不到轨道,则小车会自动进入语音模式,并等待非特定人语音指令。在语音模式,非特定人通过语音可以控制小车执行相应指令。即当有人对智能小车发出左转、右转、前进、后退、停止和寻迹等动作指令时,智能小车就会根据指令来执行相应的动作。3.在小车前进过程中主程序将调用避障子程序进行检测,,所以一旦检测到有障碍物,则小车停车播放语音提示遇到障碍。4.当命令小车前进、左转、右转时,如小车相应方向检测到有障碍物,小车将不会执行相应动作,且语音提示遇到障碍。5.当把小车放在黑线轨道上时则会自动进入寻迹模式,执行寻迹行走,如不在黑线轨道上则不执行寻迹行走。2.3主控芯片的选择方案一:采用AT89S51单片机,AT89S51单片机是功耗非常小且具有高性能的芯片,芯片内部含有4KB单元的程序存储器,此存储器的寿命为一千次的反复擦写。芯片总共有40个管脚,内部含有128字节大的随机数据存储器(RAM),32个双向I/0口,6个中断源,2个16位可编程定时器/计算器,一个全双工UART串行中断口,其兼容MCS-51指令系统。方案二:采用ATmega16AVR单片机,ATmega16AVR是功耗非常小的8位微型数据处理控制芯片,并具有1MIPS/MHZ的数据传输率和丰富的指令集。且其程序存储器比51单片机的大且寿命也长多了,高达16KB的单元和一万次的反复擦写;并具有32个双向I/0口,7个可以将模拟信号转换成数字信号的A/D转换器输入端口,两个可以预分频功能的8位定时器和一个16位的定时/计数器。由于ATmega16AVR单片机运行速度比51单片机高很多且定时器在本设计的小车中资源不会浪费,效率高,系统内可用于编程的存储空间比较大,所以本设计采用方案二。2.4避障模块的选择方案一:采用E18-D80NK红外避障传感器模块,该传感器是一种小型的反射式光电开关,具有比较强的环境光线适应能力。该模块由一对红外发射管与接收管组成,红外发射管发射波长是780nm-1mm的红外线,当红外线遇到障碍物时会被反射回来被红外接收管接收,此时传感器向单片机发出的电平信号由高电平转变为低电平,则单片机可以通过接收到的电平变换来确定小车是否遇到障碍物。还可以通过调节模块上可调电阻的大小来调节传感器的检测距离,具有体积小便于安装、抗干扰能力强、使用简单等优点,所以常用于智能小车的避障系统中。方案二:采用HC-SR04超声波测距模块进行避障,模块采用IO口触发测距,其检测的距离近处为3-5厘米,远处为2-3米。当超声波发生电路发送8个40KHZ的方波,同时单片机启动定时器计时,超声波在遇到障碍物的时候会马上返回来,同一模块的接收电路接收到有返回的信号,则产生变化电平输送给单片机外部中断引脚,产生中断并停止计时。则这一时间便是超声波从发射端遇到障碍物返回的时间,按据这个时间换算成小车与障碍物之间的间隔长度,测试距离=(时间*声速(340M/S))/2,这样就可以检测到障碍让小车提前进行避障。由于本设计中小车是要多个方向检测障碍物,所以在这里选择方案一。2.5功放模块的方案选择功放模块的作用是放大音频信号,在本设计中是放大录入到ISD4004语音芯片中的信号。以下是常用的选择方案:方案一:采用最常用到的TDA2030音频功率放大电路,其为5个管脚单列直插式V型封装构造。因为TDA2030内含保护电路,工作安全可靠性高且开机冲击小、输出功率大、外接元件也非常少、超小型封装(TO-220)等优良特性,所以TDA2030功放电路被常用于电脑有源音箱和汽车立体声收录音机当中。需要注意的是,与TDA2030组成的功放电路所用的元器件必须是质量有所保障的。方案二:采用LM386功率放大器集成电路,其为8个引脚双列直插式封装结构。LM386静态功耗约为4mA,工作电压为4-12V或者5-18V,电压增益可调为20-200DB且低失真度,适用于电池供电的产品中。它是美国半导体公司专为低电压消费类产品而设计生产的功放芯片,内部电路与通用型集成运放类似,是一个三级放大电路。能方便的应用于语音芯片相结合的电路中,只需要将LM386的同相输入端接一个可调电阻,然后与语音芯片的13脚即音频输出(AUDOUT)相连接便行。考虑到与ISD4004语音芯片的连接方便,故本设计选择方案一。2.6语音播报模块方案一:采用蜂鸣器提示。蜂鸣器是一种价格便宜且操作简易的电子讯响器,可用直流电压供电,当电磁线圈有电流通过时,其内的弹片因绕在磁铁上的线圈通电时产生的磁场而被电磁铁吸引振动发声。所以只需要单片机给蜂鸣器一个脉冲便可以使其发音一次,但由于单片机IO引脚输出电流小不能驱动蜂鸣器发声,所以需要一个三极管来放大电流。方案二:采用功能强大的ISD4004语音芯片,可以实现对用户所需要的语音录入与放出的控制,录音时间可长达8至16分钟且能清晰地还原语音,内部含有闪烁存储器能在断电情况下可以存留信息长达100年时间,并提供10万次录音周期。可以在ISD4004语音芯片内的0X00至0XHH各地址录入不同的语音信息,且可以独自播报任何一个地址中的语音信息,这种功能能够方便灵活的播报所需要的语音。由于蜂鸣器只是起提醒作用,不能播报所需要的语音,故在本次设计中采用方案二。2.7寻迹模块方案一:采用两个JX-358F寻迹传感器,把两个传感器分别置于黑线轨道的左边和右边,则可以根据它们两个接收反射光的强弱变化而向单片机输送高低电平,然后经过单片机处理控制智能小车的左转和右转,以此完成寻迹的目的。但是经研究发现,如果是两个传感器的距离太小,会约束小车的行使速度,如果距离太大则小车容易偏离黑线轨道,完成不了寻迹的任务。方案二:采用3个反射式光电开关ITR2001,并结合外围电路设计成的寻迹电路,此ITR2001光电开关是发射与接收为一体化结构的红外对管,设计电路时将这3个红外对管分别置于智能小车的车身底座前方。并根据黑线轨道的大小调整3个红外对管之间的位置,使其中两个分别位于黑线轨道的两侧,单片机可以根据这两个对管返回的信息判断小车是应该向左还是向右行驶,而其中一个位于黑线轨道上中间的位置,则可以根据这一个红外对管判断小车是否位于黑线轨道上,能方便快速的让小车做出相应调整。通过比较,选取第二种方案来实现寻迹。2.8电机的选择方案一:采用直流电机。连续移动的驱动方式可以使直流电机运行速度较快,小车行使时会比较平稳,且价格便宜。方案二:采用四相步进电机,步阶形式分段移动的驱动方式可以让我们精确地控制电机的转动情况,但是其运行速度较慢,小车转弯时会出现抖动振荡的情况,且价格较高。综合比较,故采用方案一的直流电机驱动智能小车。
第三章硬件组成与设计硬件是系统的基本结构,是实现智能小车多功能不可或缺的部分。本次设计智能小车的硬件主要包括单片机主控板、红外避障模块、寻迹模块、LM386功放电路、语音播报电路、电机驱动模块和LD3320语音识别模块。接下来将会详细的介绍一些芯片的性能、整体电路图的设计以及各个模块的电路图。3.1整体电路设计Atmega16A单片机及其外围电路的电路图如图3-1所示。在智能小车中运用的语音识别芯片是低功耗、高性能的LD3320芯片,工作电压为3.3V,而Atmega16A单片机工作电压为2.7至5.5V,所以可以直接和单片机Atmega16A连接起来。要使电机能正常转动就需要提供较大的电压和电流,所以给电机驱动模块提供9V电压,然后通过开关电压调节器LM2596转换成5V电压,再经过低漏失电压调节器AMS1117芯片转换成单片机主控板与LD3320语音识别模块所需要的3.3V电压。AMS1117有片内过热切断电路,可提供限电流和过热保护。Atmega16A单片机及其外围电路的电路图如图3-2所示:图3-1Atmega16A单片机及其外围电路的电路图3.2主控制器单片机常用于电子设计中作主控芯片,AVR单片机使用的是先进的精简指令集且每执行一条程序指令大多数只需要一个时钟周期,而51单片机使用的是复杂指令集且每执行一条程序指令需要至少长达十二个时钟周期,所以AVR单片机的运算速度比51单片机快。AVR单片机的I/O口功能比51的强大,不仅可以简单方便的设置引脚输出/输入的属性,还具有八个模拟信号转换成数字信号的片内A/D转换器的引脚接口,可不用像51单片机一样还需要外加A/D转换芯片,可以直接接入模拟信号量,操作简单节约成本。且AVR还可以通过调节内部输出PWM波控制电机速度,使小车能平稳的行驶和精确的转弯,另外AVR单片机的功耗比一般51单片机低。所以在本设计中采用Atmega16AAVR单片机,Atmega16A的指令是一个指令周期,含有多种硬件电路,且抗干扰能力也较强,自带晶振电路。Atmega16A芯片引脚图如图3-2所示:图3-2Atmega16A芯片引脚图3.3红外避障传感器为了避免小车在运行过程中撞到障碍物而损坏车体,本设计在车体左右前后各方向分别安装了一个红外避障传感器,其主要功能是在小车运行方向检测到有障碍物时,停止运动并语音提醒有障碍物。红外避障传感器和寻迹用的光电开关工作原理差不多,发射管发送红外线,当遇到障碍物时,则会因为物质的反射性而返回,接收管接收到红外线将会产生一个低电平送给单片机处理。本系统设计中使用E18-D80NK红外避障传感器,其测量范围为3-80CM,在测量范围内,如果小车遇到障碍物,传感器将返回一个低电平,经单片机指令处理后控制小车停止并通过语音播报提示;如果小车没有遇到障碍物,则发射出管发出的红外线会消散在空气中,小车继续前进。该红外避障传感器只有三根线,安装方便,只需要接上5V电源另一根接单片机外部中断引脚便可实现小车的避障控制功能。3.4寻迹模块电路寻迹模块主要由LM339比较器和ITR20001/T反射式光电开关传感器以及电位器相组成。有三个光电开关对管,每个对管的发射管发出红外线,则接收管根据被反射回来的红外线强弱的变化来判断是否检测到黑线轨道。通过调节上拉电阻可使比较器比较输出5V电压,提高传感器的检测率,通过调节电位器可以调节传感器的检测距离,使小车更能适应道路不平坦的环境。在不同的黑线轨道进行寻迹时需要调整ITR20001对管的位置,使其中两个分别位于黑线轨道的两侧白色处,当小车在行驶过程中偏离轨道时,必定会有一侧的对管照射到黑线轨道上发生电平变化,则单片机可以根据这两个对管返回的信息判断小车是应该向左还是向右行驶,修正行驶轨迹便能再次回到轨道上;而其中一个位于黑线轨道上中间的位置,则可以根据这一个红外对管判断小车是否位于黑线轨道上,方便快速的让小车做出相应调整。寻迹电路主要采用ITR20001/T反射式光电开关传感器检测黑线轨道,通过黑线轨道吸收光线,触发高电平,实现小车寻迹的目的。其原理图如图3-3所示:图3-3检测黑线轨道的电路原理图3.5LM386功放电路LM386的静态功耗可低为24mW,所以在电子设计中常用于低功耗电源工作的产品。该芯片由美国半导体公司制造,因其不仅静态功耗低,而且电压增益可调为20DB至200DB,使用的外围零件较少及具有低失真度,因此是一款备受大众喜爱的功放芯片。将它与ISD4004语音芯片相结合,能够很好的弥补ISD4004芯片音频功放较小的缺陷,并能提高音质的清晰度,使播放效果更加令人满意。且电路连接方便,只需要将LM386的同相输入端接一个20K精密可调电阻,通过调节该电阻便可改变播放声音的大小,而电阻的另一端与语音芯片的13脚即音频输出(AUDOUT)相连接便行。在这个电路的设计中还有一个比较重要但容易被忽视的问题,即录音输入方式的连接,如果选择使用麦克风,应该选择在安静的环境下进行录音否则会有噪声影响播放音质,所以最好是选择电脑合成音,不会受到环境影响且发音较为标准,将ISD4004语音芯片的音频输入口连接到电脑音频输出口就可以了。还需要注意的是喇叭的连接问题,如果通过用电线将喇叭与音频模块输出口连接,会因为焊接不劳或者所选用的线不适宜传输音频信号而大大影响音质,所以解决的办法是直接将喇叭焊接到功放模块的音频输出端。该功放电路的原理如3-4图所示:图3-4LM386电路图3.6语音播报模块本次方案所用到的语音播报芯片是ISD4004,然后与LM386相结合进行外围电路的设计,便可以设计成播放清晰语音的语音播报模块。在ISD4004芯片与LM386芯片之间连接一个20K的精密可调电位器,这样就可以对模块播放的声音进行音量大小的调节。由于ISD4004芯片工作电压为+3.3V,在本设计中采用低漏失电压调节器AMS1117芯片,内部有集成过热切断电路,可提供限电流和过热保护,适于用电池供电的便携式计算机产品中。语音播报电路的设计比较困难,不好调试,做出来的模块容易受到噪音干扰或者焊接技术不好而影响声音的录放,在DXP软件上画PCB电路图时要注意元器件的布置以及遵守布线规则,否则也会影响播放音质,所以在本模块电路的设计有挺多东西比较讲究。本模块电路的设计,选择了用电脑合成音而不是人说话通过麦克风进行录音,这样可以避免吵杂的环境影响录音质量。为了提高音质,在连接电脑音频线的接口处,焊了一个104PF的瓷片电容来对芯片在进行录音时出现的高频杂音、毛刺现象进行过滤,减少杂音的产生。在连接喇叭时,使用质量较好的音频线和喇叭,可减少杂音使音质更清晰。在画PCB电路图时,为了减少噪声干扰,采用了45°角转弯的画线规则,并将VCC电源线跟ISD4004的音频输出(AUDOUT)脚和自动静噪(AMCAP)脚的电容分开一些,且LM386功放芯片与ISD4004语音芯片之间的元件要摆放恰当,由于语音电路容易受线路影响,因此画电路图的时候信号线要尽量短,总的连线也要尽可能短,以便在做板时能减少铜板面积节约成本。由于电机驱动模块工作电压是9V,寻迹、避障等模块的工作电压是+5V,而ISD4004语音芯片的正常工作电压为+3.3V,所以在小车上必需能实现三种电压之间的转换。经过几个方案的综合比较,本设计采用AMS1117芯片和LM2596芯片,使输出电压更稳定。ISD4004芯片的外围电路图如图3-5所示;图3-6是5V降压为3.3V的电压转换电路;图3-7是9V降压为5V的电压转换电路。图3-5ISD4004电路图图3-6AMS1117降压电路图图3-7LM2596降压电路图由美国ISD公司生产的ISD4004语音芯片,正常工作电压为3.3V,工作电流为25~30mA,维持芯片工作只需1μA的电流。此芯片的录放语音时间可长达8至16分钟,且播放出来的音质很好,较适用于便携式的电子产品。其芯片采用CMOS技术,内部含有音频放大器、振荡器和自动静噪等,且有高密度的闪烁存储器能在断电情况下保存信息长达100年,并提供10万次录音周期。该芯片的任何操作都是由微控制器控制,其指令可通过串行通信接口SPI或串行同步双工通信接口Microware输入,而且可以将模拟信号量直接存贮在片内闪烁存贮器中,所以可以真实、自然地还原语音、音调和效果声,避免了噪音的干扰影响。其采样频率有4.0,5.3,6.4或者是8.0KHZ,如果频率越高,录放的时间则会越短,音质会有所提高。ISD4004语音芯片总共有28个引脚,为了减小噪声的产生,应分开连接数字电压和模拟电压。该芯片的通信方式是SPI(同步串行数据传输)协议,当片选信号端(SS)为下降沿时,串行数据开始进行传输且期间SS需要保持低电平,而两条指令间需要保持高电平;当ISD操作时如检测到EOM或者是OVF时,中断信号端(INT)要变成低电平并保持,该端口属于漏极开路输出,并清除于下一个SPI周期的开始,放音时如检测有EOM标志则此状态位将置1;若芯片内部的采样时钟频率不够,可以从外部时钟(XCLK)端口输入外部时钟,输入的时钟信号占空比不是很重要,因为内部已首先进行了分频,在不接外部时钟时,此端需接地;为了解决录放音质量和噪音问题,芯片内部设计了自动静噪功能,通常此自动静噪(AMCAP)端口对地接1MF的电容,如要禁止自动静噪则接VCCA。我们可以在ISD4004语音芯片内的0X00至0XHH各地址录入不同的语音信息,且可以独自播报任何一个地址中的语音信息,这种功能能够让我们准确的知道所录的信息分别在哪些地址中便于对播报所需要的语音进行管理。3.7电机驱动模块由STC公司生产的L298N电机驱动芯片,它具有操作方便、抗干扰性强、过压过流保护等优良特性。L298N结合外围电路设计成的驱动模块通过单片机处理可以精确控制智能小车的车速,且能够实现对电机的快速启动、停转和反转。只需在5、7、10、12引脚之间改变高低电平的转换便可以控制电机的正转和反转,而6、7引脚为控制使能端,连接单片机的定时/计数器引脚,利用PWM模式即改变脉冲电压的占空比可实现对电机转速的快慢进行控制。L298N芯片内具有两个H桥驱动电路,这样的设计主要是为了实现电机的正反方向驱动,一片L298N可控制两个两相的步进电机、一个四相的步进电机、两个继电器或者两个直流电机,且还有两个控制使能端。本设计中为了更好的驱动电机,采用了L298N驱动芯片并与外围元件构成了电机驱动模块,可以控制智能小车准确行走。其中5、7、10、12引脚接电平的输入控制,驱动电机的正反方向转动。其驱动模块原理图如下3-8图所示:图3-8L298N驱动模块原理图3.8LD3320语音识别模块LD3320语音识别模块是本次毕业设计的重头戏,可以让人和智能小车通过语音交互界面进行交流,让小车能够根据非特定人所说的话执行相应动作,实现声控功能。为了实现小车的声控功能,引入了语音识别系统,此系统是根据所采集到的声音提取其特征,进行模式识别,与模式库的词语进行比较后取得分最高的词语,然后把识别结果输送给单片机处理。LD3320芯片是一款由ICRoute公司设计的语音识别芯片,该芯片通过快速精确的优化算法,可以对非特定人的语音进行识别,且不用用户事先对芯片进行录音,识别准确度可高达95%。该芯片内含语音识别处理器、DA、AD转换器和声音输入输出口等,不需要外接辅助芯片如RAM等,只要与现成产品结合就可以实现语音识别功能。该工作供电为3.3V,适用于便携式电子产品中,且只需要用3节AA电池便可。而且可以在程序中动态编辑或修改任意的语音识别关键词语,每次可编写多达50项候选识别语句。语句可以是单字或者短句,要注意的是短句字数不可大于10个,语句还可以是79个字节的拼音串,这样可以用于多种场合,例如自动售货机,手持游戏机,智能手机等,提高设备的应用性。LD3320芯片支持并口方式和串口方式传输,串行传输方式可以简化与CPU之间的连接,在本次设计中使用该芯片的串行接口通过SPI(同步串行数据传输)协议和ATmega16A单片机连接,此时用到的端口共有七个分别为SPI的SDI(输入)、SDI(输出)、SDCLK(时钟)、SPIS(片选)、RESET(芯片复位)、IRQ(中断信号)、CS(芯片片选)端口。LD3320语音识别芯片其引脚图如图3-9所示:图3-9LD3320语音识别芯片引脚图
第四章软件设计小车功能的实现除了硬件外还得要有相应的软件来结合。如果说硬件是小车的身体,决定了基本结构和特性,软件则是小车的思维,决定了要做什么怎么去执行,软硬件缺一不可,相辅相成。在进行本系统软件设计时,由于主控芯片是AVR单片机,所以使用ICCAVR编程软件,采用C语言对单片机编写程序,实现小车的各项功能。车体主要由Atmega16A单片机主控板,电机驱动模块、ISD4004语音播报模块、寻迹模块和LD3320语音识别模块等组成。当把小车放在黑线轨道上时则会自动进入寻迹模式,执行寻迹行走,如不在黑线轨道上则不执行寻迹行走。如果寻迹途中遇到障碍物,将会停止前进,并进行语音提示。小车寻迹模式程序流程图如图4-1所示:开始开始系统初始化系统初始化否是否检测到黑线轨道否是否检测到黑线轨道语音模式语音模式是是寻迹行走寻迹行走是停止并语音提示前方有障碍物是否有障碍物是停止并语音提示前方有障碍物是否有障碍物否否继续前进直到寻迹完毕继续前进直到寻迹完毕小车停止图4-1小车寻迹模式程序流程图当小车不在黑线轨道上时会自动进入语音模式下,并等待非特定人语音指令控制小车。即当任何人发出小车前进、后退、左转、右转和停止等动作指令时,小车会执行相应的动作,而且小车在前进过程中将调用避障函数进行避障,所以一旦检测到有障碍物,则小车会立即停车并播放语音提示遇到障碍,避免撞坏车体。如果小车本来距离就小于安全距离时,命令小车前进、左转、右转,小车将不会执行相应动作,且语音提示遇到障碍。小车的语音模式程序流程图如图4-2所示:开始开始系统初始化系统初始化否是否有语音命令否是否有语音命令停止并语音提示前方有障碍物停止并语音提示前方有障碍物是贵港是贵港是贵港是贵港否是贵港是否有障碍物前进否是贵港是否有障碍物前进前进前进停止并语音提示左方有障碍物是贵港停止并语音提示左方有障碍物是贵港否否是贵港左转是贵港左转是否有障碍物左转停止并语音提示右方有障碍物是否有障碍物左转停止并语音提示右方有障碍物否否是贵港是贵港否否是贵港右转是贵港右转是否有障碍物右转停止并语音提示后方有障碍物是否有障碍物右转停止并语音提示后方有障碍物否否是贵港否是贵港否是贵港是否有障碍物后退是贵港是否有障碍物后退后退停止停止否否否否图4-2小车语音模式程序流程图第五章系统测试与分析5.1系统设计过程开始的时候在网上和课本上进行相关资料查阅,确定了本次毕业设计的方案,并逐渐了解所用到的芯片的技术资料。使用AltiumDesigner电路制图软件进行原理图的设计,确认原理图无误后导入到该工程下的PCB图中,进行元器件的位置摆放和线路的布线,整体上要求达到整齐美观。还要注意到的是,元器件的封装一定要和实际元件相匹配,如果软件的封装库没有合适的就需要按照实物引脚的尺寸来画。遵守布线的原则,要合理的分配地线和电源线,数字、模拟信号线尽量走短,且地线要大于电源线和信号线。画好PCB图后打印出来并覆盖在无损的铜板上进行转印,注意在转印前把铜板表面的氧化物用砂纸擦洗掉,以免影响转印时碳墨粘不牢在铜板上。转印后如线路有移位断裂或模糊的现象,用马克笔画好补上,等油墨干后用腐蚀液对铜板进行腐蚀,注意腐蚀过程中腐蚀液的配制是盐酸、双氧水和水的比例是1:1:1,且不要腐蚀太久,否则会腐蚀掉电路线。腐蚀好铜板擦掉碳粉就可以进行钻孔,要注意大小不一的铜孔要用对应的钻孔针,以免损坏电路或者元件插入不了。最后就是装入相应元件进行焊板,元件要安放合理,先焊小的再焊大的元件,对于不耐温的元器件不适宜焊接久,以免烧坏,在焊接过程中切误急功近利以免出现虚焊或短路现象。电路板检查无误后就可以进行模块的调试。5.2各模块的调试电路板制作好后,编写好C语言程序就可以就进行各模块的调试工作。由于本次设计用到的是AVR单片机,所以要用相关的AVR编程软件,在国内,最多人使用的AVR编程软件就是ICCAVR软件了,它含有非常丰富的程序例子,可以方便的进行调用而省去不少麻烦,虽然它的各方面性能不是很突出,可是使用起来比较方便。本次设计需要调试的模块有语音识别模块、语音播报模块、寻迹模块、电机驱动模块和避障模块等五个大模块。避障模块主要是调E18-D80NK红外避障传感器,一是看其发射管和接收管是否能工作,检测到障碍物的时候是否有高低电平的变化,二是调其感应距离,在这里调的距离为20CM。寻迹模块主要是检测黑线轨道,光电开关传感器在检测到白线时反射光线返回的是低电平,检测到黑线时被吸收光线返回的是高电平。调试过程中发现检测黑白线的时候电平没有变化,研究发现是因为连比较器可调电阻没有调节好,调好后可以发现检测黑白线时返回的电平有变化。电机驱动模块在调试的过程中发现怎么调电机都没有转动,后来把电机直接连电源的5V电压也不动才发现电机是坏的,换成了好的电机调试后,电机驱动模块能够正常驱动电机正反转。语音播报模块的调试比较复杂,除了能够准确无误录音和放音,还要使声音能清晰的播放出来,而且在没有播报语音的时候喇叭不能有沙沙的噪声。如果有噪声则是因为硬件上电路设计得不够好,因此在硬件上的设计要认真对待。在调试过程中人对着咪头说话,录好语音后发现播放的声音不清晰或者是杂音大,研究发现主要原因有两方面,一是说话发音不准,二是周围环境吵闹。后来改成用电脑合音进行录音,能播放出清晰的声音。语音识别模块的调试是重点,要实现小车的声控功能就得靠它来完成。语音识别即能够分辨出人所说的词语不同则所代表的意思不同,这就要在程序中把所要求识别的关键词编写好。在调试过程中,开始的时候采用并行通信连接到单片机,因为难度比较大调了很久都没成功就改成用串行通信,串行通信一开始也调不得,后来查资料发现需要把硬件上的并行通信口断开并把串行通信口连接好。在采集声音时,用杜邦线把麦克风连接到模块上,识别率非常的低,后来直接把麦克风焊在模块上识别率提高了许多,而且人说话时不能离麦克风太远,否则采集不到声音。调试过程中发现周围环境如有杂音,模块也会进行识别,只是识别不成功,所以为了确保能识别人的所说的指令,需要在安静的环境下进行语音识别。5.3系统测试达到的技术指标1.小车避障:小车前后左右四个方向都可以检测到障碍物2.声控距离:由于是小咪头,所以,在实验室情况下测试小车需要较近的距离,几乎是贴着小话筒;如果需要远距离测试,则需要非特定人大声发出小车要执行的指令。3.工作电压:3.3V;4.语音播报工作:可以录音也可以放音;5.控制小车情况:既可以声控,又可以寻迹行走。6.小车前进:图5-1小车前进图6.小车后退:图5-1小车后退图7.小车左转:图5-2小车左转图7.小车右转:图5-1小车右转图7.小车寻迹:图5-2小车寻迹图
第六章总结与展望6.1总结本次毕业设计足足花了四个多月的时间,期间虽然有许许多多的困难,不过在老师还有同学的帮助以及自己的努力之下终于能够在规定的时间内成功完成了作品设计。 从设计方案到开始实施,经历了画电路原理图到PCB图,到焊接电路板,到程序的编写完成以及小车的组装调试,我一直努力认真地完成每一个步骤。在硬件设计与程序编写过程中遇到过挺多困难,如对电路设计、元器件摆放不合理,编写程序时调用多个中断定时等有冲突,还有语音识别方面以前从没接触过,不知道从何下手,对此我并没有放弃而是积极地去请教老师和同学或者上网查找资料,在坚持不懈地努力之下终于功克一个个难题,完成了本次设计。虽然这四个多月来休息时间都少了很多,且一直思考极消耗脑力,比较辛苦,但这并不影响我的自信与激情,因为这一切都是值得的。通过本次毕业设计,让我深刻地了解到自己学习的不足并学到了很多新的专业知识。6.2工作展望本次毕业设计涉及到了语音信号的识别与播报,以及避障与寻迹等功能,经过本次毕业设计,让自己学到了更多的专业基础知识,还提高了动手能力,为以后走专业方面的道路奠定了基础。虽然自己的专业知识学得还不是很好,但是我永不言弃,会通过自己的努力把模电、单片机、C语言等知识学好,因为在这竞争激烈的社会如果没有掌握好一门好技术就难以立足,希望自己在以后的工作生活能不断的学习,可以有所进步,有所提高。电子信息工程主要研究的是电子设备与信息系统的设计、开发和应用,而且随着科技的发展与人们生活水平的日益提高, 将会有越来越多的电子产品进入人们的生活中。所以希望毕业以后能够进入到较好的公司,在更大的平台上进行新的学习,从事电子产品的技术管理和开发工作。
参考文献[1]边鹏飞.基于行为的移动机器人智能避障系统研究[D].武汉:武汉理工大学,2009:1-30[2]肖南峰.智能机器人[M].广州:华南理工在学出版社,2008:128-130[3]何友等著.多传感器信息融合及应用第2版[M].北京:电子工业出版社,2009.1-12[4]张拓,戴亚文.基于ATmega16A单片机的智能循迹机器人设计[J].机电工程技术,2009(1):13-15[5]刘建清,苏保书,李凤伟等.轻松玩转AVR单片机C语言[M].北京:北京航空航天大学出版社,2011.1-8[6]何希才.薛永毅.传感器及其应用实例[M].北京:机械工业出版社,2004:138-152[7]祝胜光.智能寻迹小车设计与研究[J].深圳:深圳大学机电与控制工程学院2009(14):32-35[8]谢自美.电子线路设计与实验[M].武汉:华中科技大学出版社,2009:26-33[9]谭保华等.语音识别技术概述[J].郧阳师范高等专科学校学报,2009(3):19-20[10]胡汉才.单片机原理极其接口技术-2版[M].北京:清华大学出版社,2004:66-70[11]金鑫等.声控小车技术及其应用[J].电脑与信息技术,2011,6(8):20-23[12]王力.电路设计与制作ProtelDXP库元器件手册[M].北京:人民邮电出版社,2008:66-70[13]过惠,吴迅.单片机C语言程序设计完全自学手册[M].北京:电子工业出版社,2008.10:1-200.[14]赵亮,侯国锐.单片机C语言编程与实例[M].北京:人民邮电出版社,2003:33-38[15]YooOh.Anamerecognitionbasedcallandcomeserviceforhomerobots[J].IEEETransactionsonConsumerElectronics,2008,vol.54:247-251[16]JamesW.Nilsson,Susan.Prentice-HallInternationalinc[M].ElectricCircuitsNinthEdition.2012.122-123
附录一、实物图二、原理图1.Atmega16A及其外围器件电路图2.反射式光电开关传感器及其外围器件电路图3.语音播放电路图4.L298N驱动原理图程序//////***********主函数********///////#include"common.h"
uint8nAsrStatus=0;//中断中的nAsrStatus=LD_ASR_FOUNDOK表示一次识别流程结束后,有一个识别结果
//语音识别流程:1.芯片初始化》写入识别列表》开始识别。
//每识别一次都需要进行一次这样的流程。
uint8RunASR(void)
{
uint8i=0;
uint8asrflag=0;
for(i=0;i<5;i++) // 防止由于硬件原因导致LD3320芯片工作不正常,所以一共尝试5次启动ASR识别流程
{
LD_AsrStart();//芯片初始化。
delay(10);
if(LD_AsrAddFixed()==0)//识别列表是否成功,返回1表示成功
{
LD_reset(); // LD3320芯片内部出现不正常,立即重启LD3320芯片
delay(10); // 并从初始化开始重新ASR识别流程
continue;
}
delay(1);
if(LD_AsrRun()==0)//启动识别语音是否成功,返回1表示成功
{
LD_reset(); // LD3320芯片内部出现不正常,立即重启LD3320芯片
delay(10); // 并从初始化开始重新ASR识别流程
continue;
}
asrflag=1;
break; // ASR流程启动成功,退出当前for循环。开始等待LD3320送出的中断信号
}
returnasrflag;//返回1标示成功,返回0标示失败。
}
voiddispatch(uint8cmd)
{
switch(cmd)
{
case1:
qianjin90();//前进test();
break;
case2:
houtui90();//后退test1();
break;
case3:
zuozhuan90();//zuozhuan90();//左转test2();
break;
case4:
youzhuan90();//youzhuan90();//右转test3();
break;
case5:
tingzhi();//右转test3();
break;
default:
break;
}
}
voidinit(void)
{
DDRA=0x1F;
PORTA=0XFF;
DDRB=0xFF;
DDRC=0x7F;
PORTC=0X80;
DDRD=0x03;//00000001
PORTD=0X0C;//01001100
MCUCR|=0x0A;//INT0的下降沿产生异步中断请求
GICR|=0xC0;//INT0使能
TIMSK=0x00;//timerinterruptsources
SEI();//re-enableinterrupts
}
voidmain(void)
{
uint8nAsrRes=0,aaa=0;
init();
init_12864();
LD_reset();//test_delay();
nAsrStatus=LD_ASR_NONE; //LD_ReadReg(0xba)=0x00 中断辅助信息,读或设为00// 初始状态:没有在作ASR
isd_pu();//AN键按下ISD上电并延时50ms
isd_pd();
isd_pu();
speak(0x06,0X06,300);//你好!欢迎使用智能小车,,
speak(0x07,0X07,300);//如要进行寻迹模式,请将小车置于黑线轨道上
while(1)
{
if((!(PINA&0X80))&&(PINA&0X40)&&(!(PINA&0X20)))
{
while(PINA&0X40)//测到黑线为高电平
{
if((PINA&0X80)&&(!(PINA&0X20)))//右转
{
youzhuan();
//frequen_2(255,5);
}
elseif((!(PINA&0X80))&&(PINA&0X20))//左转
{
zuozhuan();
//frequen_2(5,255);
}
else //前进
{
zhizou();
//frequen_2(255,255);
}
}
}
elseif((!(PINA&0X80))&&(!(PINA&0X40))&&(!(PINA&0X20)))
{
tingzhi();
delay(1);
while(!(PINA&0X40))
{
test55();//指示灯作用,可以进行声控
switch(nAsrStatus)
{
caseLD_ASR_RUNING://表示LD3320正在作ASR识别中
caseLD_ASR_ERROR://表示一次识别流程中LD3320芯片内部出现不正确的状态
break;
caseLD_ASR_NONE://初始化识别。表示没有在作ASR识别
{
nAsrStatus=LD_ASR_RUNING;
if(RunASR()==0) // 启动语音识别是否成功,启动一次ASR识别流程:ASR初始化,ASR添加关键词语,启动ASR运算
{
nAsrStatus=LD_ASR_ERROR;// 表示一次识别流程中LD3320芯片内部出现不正确的状态
}
break;
}
caseLD_ASR_FOUNDOK:// 表示一次识别流程结束后,有一个识别结果
{
nAsrRes=LD_GetResult(); // 0XC5一次ASR识别流程结束,去取ASR识别结果
nAsrStatus=LD_ASR_NONE;
dispatch(nAsrRes);///得出识别结果给dispatch好作出相应动作
break;
}
caseLD_ASR_FOUNDZERO:
//test5();//表示一次识别流程结束后,没有识别结果,有声音输出,但是没有匹配的内容。
default:
{
nAsrStatus=LD_ASR_NONE;//初始状态:没有在作ASR
break;
}
}//*///switch
}
}
}//while
}
#pragmainterrupt_handlerint0_isr:iv_INT0
voidint0_isr(void)
{
ProcessInt0();
}
#pragmainterrupt_handlerint1_isr:iv_INT1
voidint1_isr(void)
{
tingzhi();
delay(5);
speak(0x05,0X05,300);//前方有障碍请注意行使
}
voidDELAY_NOP(uintn)//8*0.125=1us
{
uinti,j;
for(j=0;j<8;j++)
{
for(i=0;i<n;i++)
{NOP();NOP();}
}
}
voiddelay(uintms)//1ms
{
ucharj,k;
{
for(;ms>0;ms--)
for(j=2;j>0;j--)////for(j=20;j>0;j--)
for(k=141;k>0;k--);
}
}
voiddelay_nms(uintz)
{
uinti,j;
for(i=z;i>0;i--)
for(j=114;j>0;j--);///for(j=1140;j>0;j--);
}
voidtest55(void)
{
PORTD|=BIT(1);
delay(50);
PORTD&=~BIT(1);
delay(50);
}
//////********************点H程序包含子函数***********************//////
#ifndefCOMMON_H_
#defineCOMMON_H_
#include<iom16v.h>
#include<macros.h>
#include"LDChip.h"
#include"Reg_RW.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
#endif
//////*******************LD3320芯片驱动函数点H文件**************//////#ifndefLD_CHIP_H
#defineLD_CHIP_H
#include"common.h"
#defineDATE_A7/*数组二维数值*/
#defineDATE_B15 /*数组一维数值*/
#defineRSTB3//复位信号,低电平有效
#defineSCS2//芯片片选信号
#defineSDCK4//SPI时钟信号
#defineSDI0//SPI数据输入
#defineSPIS1//SPI模式设置:低有效。
#defineSDO7//SPI数据输出
#defineCON_PORTPORTA//高低电平
#defineCON_DDRDDRA//输入输出
#defineCON_PINPINA//接收
#defineRSTB_SETCON_PORT|=(1<<RSTB)//复位信号
#defineRSTB_RESETCON_PORT&=~(1<<RSTB)
#defineSCS_SETCON_PORT|=(1<<SCS)//芯片片选信号
#defineSCS_RESETCON_PORT&=~(1<<SCS)
#defineSDCK_SETCON_PORT|=(1<<SDCK)//SPI时钟信号
#defineSDCK_RESETCON_PORT&=~(1<<SDCK)
#defineSDI_SETCON_PORT|=(1<<SDI)//SPI数据输入
#defineSDI_RESETCON_PORT&=~(1<<SDI)
#defineSPIS_RESETCON_PORT&=~(1<<SPIS)//SPI模式设置:低有效.
#defineSDO_IN(PINC&(1<<SDO))//SPI数据从语音模块中输出到MCU的PC7口
#defineuint8unsignedchar
#defineuint16unsignedint
#defineuint32unsignedlong
// 以下五个状态定义用来记录程序是在运行ASR识别过程中的哪个状态
#defineLD_ASR_NONE 0x00 // 表示没有在作ASR识别
#defineLD_ASR_RUNING 0x01 // 表示LD3320正在作ASR识别中
#defineLD_ASR_FOUNDOK 0x10 // 表示一次识别流程结束后,有一个识别结果
#defineLD_ASR_FOUNDZERO 0x11 // 表示一次识别流程结束后,没有识别结果
#defineLD_ASR_ERROR 0x31 // 表示一次识别流程中LD3320芯片内部出现不正确的状态
#defineCLK_IN 22 /*userneedmodifythisvalueaccordingtoclockin*/
#defineLD_PLL_11 (uint8)((CLK_IN/2.0)-1)
#defineLD_PLL_ASR_19 (uint8)(CLK_IN*32.0/((LD_PLL_11)+1)-0.51)
#defineLD_PLL_ASR_1B 0x48
#defineLD_PLL_ASR_1D 0x1f
//识别码(客户修改处)
#defineCODE_QJ 1 /*前进*/
#defineCODE_HT 2 /*后退*/
#defineCODE_ZZ 3 /*左转*/
#defineCODE_YZ 4 /*右转*/
#defineCODE_TZ 5 /*停止*/
#defineCODE_YY6/*语音*/
#defineCODE_XJ7/*寻迹*/
#defineMIC_VOL0x43//咪头增益(灵敏度调节)
voidLD_reset(void);
voidLD_Init_Common(void);//识别模式初始化
voidLD_Init_ASR(void);
voidLD_AsrStart(void);
uint8LD_AsrRun(void);
uint8LD_AsrAddFixed(void);
uint8LD_Check_ASRBusyFlag_b2(void);
uint8LD_GetResult(void);
voidProcessInt0(void);
#endif
//////*******************LD3320芯片的驱动函数*****************//////#include"common.h"
externuint8nAsrStatus;
uint8ucRegVal;
/************************
函数功能;LD3320复位函数
入口参数:无
出口参数:无
***************************/
voidLD_reset(void)
{
RSTB_SET;
delay(2);
RSTB_RESET;
delay(2);
RSTB_SET;
delay(2);
SCS_RESET;
delay(2);
SCS_SET;
delay(2);
}
/*******LD3320初始化*********/
voidLD_Init_Common(void)
{
LD_ReadReg(0x06);//激活蕊片
LD_WriteReg(0x17,0x35);//软件复位
delay(10);
LD_ReadReg(0x06);//激活蕊片
LD_WriteReg(0x89,0x03);//进入蕊片初始化状态
delay(5);
LD_WriteReg(0xCF,0x43);//进入蕊片初始化状态
delay(5);
LD_WriteReg(0xCB,0x02);
LD_WriteReg(0x11,LD_PLL_11);
/////MODE=1语音识别模式/////
LD_WriteReg(0x1E,0x00);
LD_WriteReg(0x19,LD_PLL_ASR_19);
LD_WriteReg(0x1B,LD_PLL_ASR_1B);
LD_WriteReg(0x1D,LD_PLL_ASR_1D);
delay(10);
LD_WriteReg(0xCD,0x04);//初始化时设置。允许芯片休眠
LD_WriteReg(0x17,0x4C);//进入省电模式
delay(5);
LD_WriteReg(0xB9,0x00);//初始化设置
LD_WriteReg(0xCF,0x4F);//内部省电模式
LD_WriteReg(0x6F,0xFF);//初始化设置
}
///***语音识别初始化**/////
voidLD_Init_ASR(void)
{
LD_Init_Common();//识别模式初始化
LD_WriteReg(0xBD,0x00);//启动ASR模块
LD_WriteReg(0x17,0x48);//激活内部DSP
delay(1);
LD_WriteReg(0x3C,0x80);
LD_WriteReg(0x3E,0x07);
LD_WriteReg(0x38,0xff);
LD_WriteReg(0x3A,0x07);
LD_WriteReg(0x40,0x00);
LD_WriteReg(0x42,0x08);
LD_WriteReg(0x44,0x00);
LD_WriteReg(0x46,0x08);//配置数据口
delay(1);
}
/*************************
功能描述:获取识别结构
调用函数:
入口参数:
返回函数:
*************************/
voidProcessInt0(void)
{
uint8nAsrResCount=0;///////nAsrStatus
GICR&=~(1<<INT0);//失能外部中断请求0
ucRegVal=LD_ReadReg(0x2B);//2B为中断请求编号
LD_WriteReg(0x29,0);//29为中断允许地址,0表示不允许
LD_WriteReg(0x02,0);//02为FIFO中断允许地址,0表示不允许//21表示闲状态,35可以确定语音识别流程正常结束
if((ucRegVal&0x10)&&(LD_ReadReg(0xb2)==0x21)&&(LD_ReadReg(0xbf)==0x35))//识别成功
{
nAsrResCount=LD_ReadReg(0xba);//BA中断时,是语音识别有几个识别候选
if((nAsrResCount>0)&&(nAsrResCount<=4))//1-4:N个识别候选,0或者大于4没有识别候选
{
nAsrStatus=LD_ASR_FOUNDOK;//0X10//表示一次识别流程结束后,有一个识别结果//PORTD&=~BIT(6);
}
else
{
nAsrStatus=LD_ASR_FOUNDZERO;//没有识别结果
}
}
else
{
nAsrStatus=LD_ASR_FOUNDZERO;
}
LD_WriteReg(0x2b,0);//
LD_WriteReg(0x1C,0);//ADC开关控制,0为ADC不可用
GICR|=(1<<INT0);//使能外部中断请求0
}
uint8LD_Check_ASRBusyFlag_b2(void)
{
uint8j;
uint8flag=0;
for(j=0;j<10;j++)
{
if(LD_ReadReg(0xb2)==0x21)//21表示空闲
{
flag=1;
break;
}
delay(10);
}
returnflag;
}
voidLD_AsrStart(void)
{
LD_Init_ASR();
}
uint8LD_AsrRun(void)//Return1:success.
{
GICR&=~(1<<INT0);//失能外部中断请求0
LD_WriteReg(0x35,MIC_VOL);//麦克风的音量设置。一般设为40-50理解B3寄存器的调整对于灵敏度和识别距离的影响
LD_WriteReg(0x1C,0x09);//输入方式选择
LD_WriteReg(0xBD,0x20);//启动ASR或者MP3
LD_WriteReg(0x08,0x01);//清除FIFO-DATA,先进先出缓冲寄存器
delay(1);
LD_WriteReg(0x08,0x00);
delay(1);
if(LD_Check_ASRBusyFlag_b2()==0)
{
return0;
}
LD_WriteReg(0xB2,0xff);
LD_WriteReg(0x37,0x06);//通知DSP开始准备识别语音
delay(5);
LD_WriteReg(0x1C,0x0b);//麦克风输入ADC通道可用
LD_WriteReg(0x29,0x10);//同步中断
LD_WriteReg(0xBD,0x00);//启动识别
GICR|=(1<<INT0);//使能外部中断请求0gai
return1;
}
uint8LD_GetResult(void)
{
returnLD_ReadReg(0xc5);//C5读取ASR最佳结果
}
//写入识别列表。返回0写入失败。返回1写入成功
uint8LD_AsrAddFixed(void)
{
uchark,flag;
ucharnAsrAddLength;
ucharconstsRecog[DATE_A][DATE_B]={"qianjin","houtui","zuozhuang","youzhuang","tingzhi","yuyin","xunji"};//添加关键词,用户修改
ucharconstpCode[DATE_A]={CODE_QJ,CODE_HT,CODE_ZZ,CODE_YZ,CODE_TZ,CODE_YY,CODE_XJ};//添加识别码,用户修改
flag=1;
for(k=0;k<DATE_A;k++)//
{
if(LD_Check_ASRBusyFlag_b2()==0)
{
flag=0;
break;
}
LD_WriteReg(0xc1,pCode[k]);//识别字INDEX(00H-FFH)写入识别字序号
LD_WriteReg(0xc3,0x00);//识别字添加时写00
LD_WriteReg(0x08,0x04);//清除FIFO—EXT
delay(1);//jiadelay(5);
LD_WriteReg(0x08,0x00);
delay(1);
for(nAsrAddLength=0;nAsrAddLength<DATE_B;nAsrAddLength++)
{
if(sRecog[k][nAsrAddLength]==0)
break;
LD_WriteReg(0x05,sRecog[k][nAsrAddLength]);//FIFO-EXT数据口,写入列表
}
LD_WriteReg(0xb9,nAsrAddLength);//当前添加字符串的长度,写入本字符串长度
LD_WriteReg(0xb2,0xff);//DSP忙闲状态
LD_WriteReg(0x37,0x04);//通知写下一个识别词语
}
returnflag;
}
//////****************LD3320读写函数点H文件******************///////#ifndefREG_RW_H
#defineREG_RW_H
#include"common.h"
voidLD_WriteReg(unsignedcharaddress,unsignedchardataout);
unsignedcharLD_ReadReg(unsignedcharaddress);
#endif///***********LD3320读写寄存器子程序************/////////#include"common.h"
voidLD_WriteReg(unsignedcharaddress,unsignedchardataout)
{
unsignedchari=0;
unsignedcharcommand=0x04;
SPIS_RESET;//0
SCS_RESET;//0低电平有效
DELAY_NOP(50);
for(i=0;i<8;i++)
{
if((command&0x80)==0x80)
{
SDI_SET;//SPI数据输入//1
}
else
{
SDI_RESET;
}
DELAY_NOP(100);//gai
SDCK_RESET;
command=(command<<1);
DELAY_NOP(50);
SDCK_SET;
}
//writeaddress
for(i=0;i<8;i++)
{
if((address&0x80)==0x80)
{
SDI_SET;
}
else
{
SDI_RESET;
}
DELAY_NOP(100);//gai
SDCK_RESET;
address=(address<<1);
DELAY_NOP(50);
SDCK_SET;
}
//writedata
for(i=0;i<8;i++)
{
if((dataout&0x80)==0x80)
{
SDI_SET;
}
else
{
SDI_RESET;
}
DELAY_NOP(100);//gai
SDCK_RESET;
dataout=(dataout<<1);
DELAY_NOP(50);
SDCK_SET;
}
DELAY_NOP(50);
SCS_SET;
}
unsignedcharLD_ReadReg(unsignedcharaddress)
{
unsignedchari=0;
unsignedchardatain=0;
unsignedcharcommand=0x05;
SPIS_RESET;//0
SCS_RESET;//0
DELAY_NOP(50);
//writecommand
for(i=0;i<8;i++)
{
if((command&0x80)==0x80)
{
SDI_SET;
}
else
{
SDI_RESET;
}
DELAY_NOP(100);//gai
SDCK_RESET;
command=(command<<1);
DELAY_NOP(50);
SDCK_SET;
}
//writeaddress
for(i=0;i<8;i++)
{
if((address&0x80)==0x80)
{
SDI_SET;
}
else
{
SDI_RESET;
}
DELAY_NOP(100);//gai
SDCK_RESET;
address=(address<<1);
DELAY_NOP(50);
SDCK_SET;
}
DELAY_NOP(50);
//Readdata
for(i=0;i<8;i++)
{
datain=(datain<<1);
DELAY_NOP(100);//gai
SDCK_RESET;
if(SDO_IN)
{
datain|=0x01;
}
DELAY_NOP(50);
SDCK_SET;
}
DELAY_NOP(50);
SCS_SET;
returndatain;
}
///*************************LD3320读写函数***********************/////////#include"common.h"
voidLD_WriteReg(unsignedcharaddress,unsignedchardataout)
{
unsignedchari=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第三人称单数形式的辨别与应用:小学英语教案
- 我的老师敬爱的语文老师演讲稿10篇
- 供应链管理与物流合作协议规定事项表
- 食品营养学专业知识问答练习集
- 绿色发展理念对产业提质增效的影响
- 银行业风险管理测试卷
- 技术进步对高素质应用型人才培养的影响分析
- 教育用品类型及价格列表
- 跨学科合作促进地理学实践教学的多元化
- 智能仓储物流解决协议
- XXX有限公司化工装置开、停车方案
- 中国不宁腿综合征的诊断与治疗指南
- “四史”(改革开放史)学习通超星期末考试答案章节答案2024年
- 期末考试卷-模拟测试卷市场营销王永贵试卷4
- 卤菜店供货合同协议书
- 《积极心理学(第3版)》 课件 第5章 希望
- 企业信息化系统定制开发合同
- 幼儿园大班综合活动《蚂蚁和西瓜》课件
- DL∕T 1455-2015 电力系统控制类软件安全性及其测评技术要求
- 旅游服务合作协议模板
- 江西省南昌市2023-2024学年八年级下学期6月期末语文试题
评论
0/150
提交评论