声控小车设计论文.doc_第1页
声控小车设计论文.doc_第2页
声控小车设计论文.doc_第3页
声控小车设计论文.doc_第4页
声控小车设计论文.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

声控小车设计中文摘要: 声控小车指的是能够在人的语音命令控制下完成具体动作的小车,主要由控制板、驱动电路和车体组成,同时还要编辑合适的软件来具体控制小车的动作。 控制板主要负责软件的写入,能够完成语音信号的压缩、存储、辨识、响应等功能,而驱动电路则能够根据控制板送来的驱动信号对车体上的直流电机和继电器进行控制,从而完成具体的动作。 在本次设计中,控制板我们将采用凌阳公司的16位单片机,驱动电路将根据单片机的控制原理由我们利用模拟器件自己焊接。软件的编写将主要参考单片机的C语言程序设计,编译环境为凌阳公司的IDE 1.16.1.具体软件编写和硬件功能实现将在正文中详细讲述。 关键词:凌阳16位单片机,语音识别,单片机C语言编程,驱动电路设计英文摘要: The audio-control car is a kind of car that can be controlled by humans voice and can achieve many functions such as Turn-right ,Turn-left, Go-ahead and Back-off. The car is composed of 3 parts: control board, drive board and base. The software should be downloaded in the control board is also necessary. For the control board, it should have 2 qualifications: first, the software can be planted in, second, the voice signal can be compacted, stored, differentiated and responded. For the drive board, it should control the DC motor and the relay directly via the signal that sent by the control board. For this design, we will use the Single Chip Microprocessor (SCM) manufactured by Sunplus Corporation as the control board, so the drive board should be fit for the SCM. The software will be compiled in the IDE 1.6.1 also provided by Sunplus Corporation. The design process will be introduced in the following text in details.Keywords: Single Chip Microprocessor, Audio control, program design.目录: 前言3一、硬件电路设计及连接3 1.1 SPCE061A3 1.1.1 SPCE061A 总述3 1.1.2 SPCE061A 性能3 1.1.3 选择SPCE061A的理由4 1.1.4 凌阳16位单片机SPCE061A实物图4 1.1.5 SPCE061A内部结构框图5 1.2.车体驱动电路6 1.2.1车体驱动电路设计思路6 1.2.2实际驱动电路71.3、小车车底部分81.4.硬件部分结论8二、软件编写与调试92.1主程序流程图 92.2 控制口连接方式 102.3.RAM中数据存取方式112.4语音训练和识别 122.4.1语音命令训练过程122.4.2语音识别过程132.5 具体动作的实现132.6语音命令的重新训练142.7程序的组成和调试142.8程序代码下载15三、小车的操作说明:153.1使用方法15 3.2使用时的注意事项15 四、结论16 五、参考书目16正文: 前言:本次设计的目的是利用凌阳16位单片机SPCE061A的语音播放和语音识别资源进行语音控制,使小车能在具体的语音命令下完成前进、后退、左拐、右拐的动作。通过完成本次毕业设计,可以加深对凌阳16位单片机SPCE061A的熟悉,对单片机的C语言编程能力也有较高的要求,并且对小车直流电机的控制过程也要熟悉。本次毕业设计由我和马祥鹤同学共同完成,我主要负责软件方面的工作。 通过老师的指导和我们的思考,决定所设计的小车主要由以下几部分组成: 1、凌阳16位单片机SPCE061A精简开发办板 2、电机驱动电路板 3、小车车体,包括带有四个轮子的车底板,其中前面两个轮子由一继电器控制,可以根据电流方向的变化控制小车转弯,后面两个轮子由一直流电机控制,可以根据电流方向的变化控制小车前进后退。 根据我们的设计思路及过程,将分别从硬件设计和软件编写两个方面来介绍:一、硬件电路设计及连接:本部分主要包括凌阳16位单片机SPCE061A,驱动电路和小车车体,首先介绍一下凌阳16位单片机SPCE061A:1.1 SPCE061A1.1.1 SPCE061A 总述SPCE061A 是凌阳科技推出的一款16位微控制器。高速的处理速度和nSP.的内核结构使它能够非常容易、快速地处理复杂的数字信号。同时SPCE061A内嵌32K字的FLASH ROM和2K字的SRAM。因此SPCE061A微控制器是适用于语音识别领域的一种最佳选择。1.1.2 SPCE061A 性能SPCE061A在芯片内部集成了ICE仿真电路接口、FLASH程序存储器、SRAM数据存储器、通用I/O端口、定时器/计数器、中断控制、CPU时钟、模-数转换器A/D、DAC输出、通用异步串行输入输出接口、串行输入输出接口、低电压监测/低电压复位等若干部分。各个部分之间存在着直接或间接的联系。 SPCE061A的内核由总线、算术逻辑运算单元、寄存器组、中断系统及堆栈等部分组成。 SPCE061A的ALU在运算能力上很有特色,它不仅能做16位基本的算术逻辑运算,也能做带移位操作的16位算术逻辑运算,同时还能做用于数字信号处理的16位16位的乘法运算和内积运算。 工作电压(CPU) VDD为3.0V-3.6V; (I/O) VDDH为3.0V-5.5V; CPU时钟:0.32MHz-49.152MHz; 内置2K字SRAM; 内置32K字FLASH ROM; 可编程音频处理; 晶体振荡器; 系统处于休眠模式下(时钟处于停止状态),耗电仅为2A3.6V; 2个16位可编程定时器/计数器(可自动预置初始计数值); 2个10位DAC(数-模转换)输出通道; 32位通用可编程输入/输出端口; 两级中断,14个中断源; 具备触键唤醒的功能; 使用凌阳音频编码SACM_S240方式(2.4K位/秒),能容纳210秒的语音数据; 锁相环PLL振荡器提供系统时钟信号; 32768Hz实时时钟; 7通道10位电压模-数转换器(ADC)和单通道声音模-数转换器; 声音模-数转换器输入通道内置麦克风放大器和自动增益控制(AGC)功能; 具备串行设备接口(UART,SIO); 具有低电压复位(LVR)功能和低电压监测(LVD)功能; 内置在线仿真电路ICE(In- Circuit Emulator)接口; 具有加密功能; 具有Watch-dog功能1.1.3 选择凌阳16位单片机SPCE061A的理由: 首先是因为本单片机所具有的强大的语音处理及辨识功能,由自带的麦克风和喇叭,内置的2K字SRAM可以存储大量的音频文件,具有的32个双16位I/O口可以方便地和驱动板连接,CPU快速的处理能力也使小车具有快速的响应时间。并且有和它所关联的软件编译环境Unsp IDE 1.6.1,支持C语言程序设计,不用涉及复杂的后台程序处理操作,使用的时候非常方便。1.1.4 凌阳16位单片机SPCE061A实物图 图1、 SPCE061A实物图1.1.5 SPCE061A内部结构框图 图2、SPCE061A内部结构框图1.2.车体驱动电路1.2.1车体驱动电路设计思路: 车体驱动电路指的是连接SPCE061A和车体的电路,其中输入的是来自单片机SPCE061A的控制信号,用以控制小车上继电器和直流电机的电流方向,从而完成小车的具体动作。继电器和直流电机的电流方向和小车的状态之间的关系如下表所示: 直流电机的电流方向继电器电流方向小车状态 无 无 停止 正 无 前进 正 正 左拐 正 反 右拐 反 无 倒车 表1、状态控制关系由此表可知,只要驱动电路在单片机的具体信号控制下,可以控制流过直流电机和继电器的电流方向,即可实现对小车状态的控制。由于三极管具有良好的开关特性,所以我们将利用三极管级联电路来完成控制电路的设计。1.2.2实际驱动电路在本次设计中我们将采用如下电路来实现具体的控制,具体连接和各个元件的参数都已在图中标出: 图3、直流电机控制电路其中1、2脚分别连接电机的两端,MOT1和MOT2连接单片机上的信号输出口。具体的控制过程是: Q1 负责控制Q2、Q3 的导通与关断,Q1 导通激发Q2、Q3 导通,Q1 关断的同时Q2、Q3 也关断。Q6 负责控制Q7、Q8 的导通与关断,其工作过程同Q2、Q3。如果让Q2、Q3 导通Q7、Q8 关断,电流会流经Q3、负载、Q2 组成的回路,加在负载两端的电压左正右负,此时电机正转;如果让Q7、Q8 导通Q2、Q3 关断,电流会流经Q8、负载、Q7 组成的回路,加在负载Load 两端的电压为左负右正,此时电机反转。另外如果让Q2、Q3 关断Q7、Q8 也关断,负载Load 两端悬空,此时电机停转。这样就实现了电机的正转、反转、停止三态控制。 继电器的控制电路和直流电机的相同,具体电路如下: 图4、继电器控制电路其中RE1和RE2输入来自单片机的控制信号,3和4连接继电器的两端,通过电流方向的改变来实现方向控制。1.3、小车车底部分 单片机需要由小车车体上的电源供电,注意电线不要和直流电机、车轮缠绕在一起,同时要使单片机和驱动板共地,以保证信号的正确识别。1.4.硬件部分结论:通过以上分析,我们可以得出电路的连接框图,如下所示: 图5、电路连接框图二、软件编写与调试 在本设计中,选用C语言进行程序设计,这是因为:1. 不用懂得单片机的指令集,也能编写出完美的程序;2. 有标准的函数库,可以直接使用;3. 有严格的句法检查,可以避免错误,提高编程效率;4. 对单片机的内部硬件结构不需要了解很多。2.1主程序流程图主程序主要包括四个方面的内容,即初始化部分,训练部分,识别部分和重新训练部分,为了防止外界声音的干扰,在程序中加入了待命状态,只有小车在识别了待命命令(名字)之后,才进入识别模式。主程序的流程图如下: 图6、主程序流程图初始化部分:初始化操作将IOB13IOB10 设置为输出端,用以控制电机,将IOA 的低8 位设置为下拉的输入端,用来连接按键。训练部分:训练部分完成的工作就是建立语音模型。程序一开始就会去判断小车是否被训练过,如果没有训练过则会要求对其进行训练,并且会在训练成功之后将训练的模型存储到Flash 当中,在以后使用时就不需要重新训练了;如果已经训练过会把存储在Flash 中的模型调出来装载到辨识器中。识别部分:在识别环节当中,如果辨识结果是名字,直接置待命标志,然后等待动作命令。只有检测到待命标志,小车才会根据相应的辨识结果执行动作,如果没有待命标志即使识别到动作命令也不会执行。重新训练操作:考虑到有重新训练的需求,所以在这里设置了重新训练的按键(本程序用的是KEY2),程序运行时循环扫描该按键,什么时间检测到此键按下,则将擦除语音模型存储区首单元(0xe000)所在的页,等待复位到来。复位后,程序重新从头开始执行,当检测到语音模型存储区首地址为0xffff(擦除后的值)时会要求重新对其进行训练。2.2 控制口连接方式软件的编译环境为IDE1.16.1,所用语言为C语言。通过硬件电路的设计过程可以看出,单片机只需输出4路控制信号即可完成对小车的控制,在这里我们选择使用输入/输出接口来输出控制信号。输入/输出接口(也可简称为I/O口)是单片机与外设交换信息的通道。输入端口负责从外界接收检测信号、键盘信号等各种开关量信号。输出端口负责向外界输送由内部电路产生的处理结果、显示信息、控制命令、驱动信号等。unSP内有并行和串行两种方式的I/O口。SPCE061A有两个16位通用的并行I/O口:A口和B口。这两个口的每一位都可通过编程单独定义成输入或输出口。 方向向量Dir、属性向量Attrib和数据向量Data分别代表三个控制口。这三个口中每个对应的位组合在一起,形成一个控制字,来定义相应I/O口位的输入/输出状态和方式。 Dir位决定了口位的输入/输出方向:即0为输入,1输出。 Attrib位决定了在口位的输入状态下是为悬浮式输入还是非悬浮式输入:即0为带上拉或下拉电阻式输入,而1则为悬浮式输入。在口位的输出状态下则决定其输出是反相的还是同相的;0为反相输出,1则为同相输出。 Data位在口位的输入状态下被写入时,与Attrib位组合在一起形成输入方式的控制字00、01、10、11,以决定输入口是带唤醒功能的上拉电阻式、下拉电阻式或悬浮式以及不带唤醒功能的悬浮式输入。Data位在口位的输出状态下被写入的是输出数据,不过,数据是经过反相器输出还是经过同相缓存器输出要由Attrib位来决定。 在本次设计中将I/OB11-I/OB8 四个口设置为同向输出,用以输出控制信号。具体程序及说明如下:*P_IOB_ Dir =0xff00;/初始化IOB,IOB811同向输出*P_IOB_ Attrib=0xff00;*P_IOB_ Data=0x0000;其中I/OB13与MOT1, I/OB12与MOT2, I/OB11与RE1, I/OB10与RE2一一对应联接在一起。同时将IOA 的低8 位设置为下拉的输入端,用来连接按键KEY2,当KEY2键被按下后重新复位时进入重新训练状态。2.3 语音资料在RAM中的存储与读取方式 SPCE061A有2K字的SRAM(包括堆栈区),其地址范围从0x0000到0x07FF。前64个字,即0x00000x003F地址范围内可采用6位地址直接地址寻址方法,寻访速度为2个CPU时钟周期;其余0x00400x07FF地址范围内存储器的寻访速度则为3个CPU时钟周期。堆栈是在内存RAM区专门开辟出来的按照“先进后出”原则进行数据存取的一种工作方式,如图所示。主要用于子程序调用及返回和中断处理断点的保护及返回。堆栈的最大容量范围限制在2K字RAM内,即其地址范围从0X07FF到0X0000的存储器范围中。值得注意的是堆栈的生长方向,SPCE061A系统复位后,SP初始化为0x07FF,每执行PUSH指令一次,SP指针减一。 图7、内存映射表2.4语音训练和识别对于整个主程序,首先必须完成对语音命令的训练和识别,在训练阶段,单片机对采集到的语音样本进行分析处理,从中提取出语音特征信息,建立一个特征模型;在识别阶段,单片机对采集到的语音样本也进行类似的分析处理,提取出语音的特征信息,然后将这个特征信息模型与已有的特征模型进行对比,如果二者达到了一定的匹配度,则输入的语音被识别,否则将提示命令出错。我们采用的是对特定人声音的识别,这样操作的时候比较方便,但如果其他人再想控制小车的话就必须重新训练。2.4.1语音命令训练过程小车的训练步骤是:名称-名称-前进-前进-倒退-倒退-左转-左转-右转-右转.下面先以“前进”命令 的训练过程为例进行说明程序流程:步骤一:小车提示“前进”步骤二:告诉小车“前进”步骤三:小车提示:“请再说一遍”(重复训练提示音)步骤四:再次告诉小车“前进”(重复训练一次)这是一个完整的训练过程,如果训练成功,小车会自动进入下一条指令的训练,并会提示下一条指令对应的动作(后退,左拐,右拐等);如果没有听到声音,小车会提示“没有听到任何声音”,如果第二次的声音与第一次不相同,小车会提示“说什么暗语呀”。这样的话就要重复刚才所说的四个步骤,直到成功为止。具体程序如下:int TrainWord(unsigned int WordID,unsigned int SndID)int Result;PlaySnd(SndID,3);/引导训练,播放指令对应动作while(1)Result = BSR_Train(WordID,BSR_TRAIN_TWICE);/训练两次,获得训练结果if(Result=0)break;switch(Result)case -1:/没有检测出声音PlaySnd(S_NOVOICE,3);return -1;case -2: /需要训练第二次PlaySnd(S_AGAIN,3);break;case -3:/环境太吵PlaySnd(S_NOISY,3);return -3;case -4:/数据库满 return -4;case -5: /检测出声音不同PlaySnd(S_CMDDIFF,3);return -5;case -6: /序号错误return -6;default:break;return 0;训练完成后还要利用void StoreSD()函数存储语音模型,等待语音命令的识别。2.4.2语音识别过程本环节重要的一点就是待命命令(小车名字),只有只有检测到待命标志,小车才会根据相应的辨识结果执行动作,如果没有待命标志即使识别到动作命令也不会执行。这样做的原因是:一是比较符合人的思维过程,比如想个人做什么事情,那么首先要把这个人叫过来,然后才告诉他要去做什么事情;另外一个原因是从可靠性的角度出发,因为语音识别不可避免的存在一定的误差,而在动作前加了一道屏障,这样就大大减小了因错误识别导致小车错误动作的几率。在识别出待命命令后回答“YEATH”并进入待命状态,如果这时听到“前进”命令,会回答“前进”并执行相应动作;如果这时听到“倒车”命令,会回答“倒车,请注意”并执行相应动作;如果这时听到“左拐”命令,会回答“拐就拐”并执行相应动作;如果这时听到“右拐”命令,会回答“拐就拐”并执行相应动作。2.5 具体动作的实现:我们可以通过设置I/OB13-11的状态来实现具体的动作,其关系如下表所示: I/OB13-11直流电机的电流方向继电器电流方向小车状态 0000 无 无 停止 1000 正 无 前进 1010 正 正 左拐 1001 正 反 右拐 0100 反 无 倒车 表2、I/OB口与小车状态关系当识别出命令时,就把I/OB13-11设置为相应的状态,通过Delay()延时函数来控制小车走过的距离,下面以前进子函数为例来说明动作的实现过程:oid GoAhead() /前进 unsigned int j;PlaySnd(S_ACT1,3); 播放“前进”语音*P_IOB_Data=0x2000; 设置输出口状态为1000for(j=0;jOpen ,在弹出的对话框中找到小车资料文件夹,选择其中的“CarDemo.spj”文件,打开该工程。(注意:如果看不到CarDemo.spj,请在弹出的对话框中选择打开类型为spj 或者所有文件)然后打开BUILDSTART DEBUGGO,进行软件的编译,找出错误并进行适当的修改。2.8程序代码下载:硬件连接完成之后,检查无误,接下来就可以下载程序了。具体的步骤为:第一步:打开集成开发环境IDE1.16.1,点击菜单FileOpen ,在弹出的对话框中找到小车资料文件夹,再进入到CarDemo 文件夹,选择其中的“CarDemo.spj”文件,打开该工程。第二步:点击菜单ProjectSelect Body,或者直接点击图标打开如所下图所示的对话框: 图8、类型选择对话框第三步:在弹出的对话框中选择Body Name 为SPCE060A_061A,选择Probe 为Auto,点击OK 按钮确定。第四步:点击IDE 工具栏上的图标,选择Use ICE 模式第五步:按F8 快捷下载按钮,下载代码。三、小车的操作说明:3.1使用方法连接好硬件并载入程序后小车就

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论