另一篇语音控制智能小车-方向电机控制电路设计毕业综合实践报告_第1页
另一篇语音控制智能小车-方向电机控制电路设计毕业综合实践报告_第2页
另一篇语音控制智能小车-方向电机控制电路设计毕业综合实践报告_第3页
另一篇语音控制智能小车-方向电机控制电路设计毕业综合实践报告_第4页
另一篇语音控制智能小车-方向电机控制电路设计毕业综合实践报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

-.z语音控制小车系别:专业:姓名:学号:目录1关于语音控制小车2语音控制小车简介2.1功能介绍…………2.2设计要求…………2.3参数说明…………3硬件介绍3.1硬件框图…………3.2SPCE061A精简开发板……………3.3控制板框图…………4小车的功能实现原理4.1直走的实现过程…………4.2转弯的实现…………4.3PWM调速的原理…………4.4语音识别原理简介…………5软件系统设计5.1软件流程…………红外接收模块5.2红外解码程序设计…………红外接收模块5.3控制器控制程序…………6常见问题1关于语音控制小车语音控制小车是凌阳大学方案推出的基于SPCE061A的代表性应用作品,它配合61板推出,综合应用了SPCE061A的众多资源,小车控制系统使用单片机芯片控制直流电机的调速、正转、反转。配合语音识别功能使小车更具趣味性,提高学习的积极性,更使我们对学习的科学实践局部得到完整的验证。2语音控制小车简介2.1功能介绍:1.小车运动控制:通过SPCE061A的I/O端口,驱动控制板的H桥电路,进而控制前轮电机和后轮电机。2.声控功能:利用特定人语音识别实现小车的名称和动作训练,并根据相应的语音指令输入执行前进、后退、左转、右转、停车等动作。3.定时控制功能:利用时基定时器设定运行时间,小车运行同时启动定时器,时间到小车停顿运行。2.2设计要求:利用SPCE061A单片机和智能小车控制电路板,实现下述功能:1.可以通过简单的I/O操作实现小车的前进、后退、左转、右转功能;2.配合SPCE061A的语音特色,利用系统的语音播放和语音识别资源,实现语音控制的功能;3.可以在行走过程中声控改变小车运动状态;4.在超出语音控制*围时能够自动停车。可以自行安装各类传感器,配合程序实现小车的循迹、避障等功能.2.3参数说明:车体:双电机四轮驱动供电:电池〔四节AA电池:1.2V*4或1.5V*4〕工作电压:DC4V~6V工作电流:运动时约200mA3硬件介绍3.1硬件框图系统组成主要包括以下两局部:SPCE061A精简开发板、语音小车控制电路板。图中的语音输入局部MIC_IN、按键输入KEY、声音输出局部的功率放大环节等已经做到了精简开发板——61板上,为我们使用提供了很大的方便。在电机的驱动方面,采用全桥驱动技术,利用四个I/O端口分为两组分别实现两个电机的正传、反转和停三态运行,如下列图所示。3.2SPCE061A精简开发板“61板〞是SPCE061AEMUBOARD的简称,是以凌阳16位单片机SPCE061A为核心的精简开发-仿真-实验板,大小相当于一*扑克牌。“61板〞除了具备单片机最小系统电路外,还包括有电源电路、复位电路、ICE电路、音频电路〔含MIC输入局部和DAC音频输出局部〕等,“61板〞可以采用电池供电。图3-1所示为该精简开发板的实物图。-.z3.3控制板框图控制板的构造框图如下图,它包括接口模块,两路电机控制模块,预留传感器接口,以及电源模块四大局部。1电源模块由于小车采用4节AA电池供电,电压最高可以到达6V,考虑到61板的平安参加了电源模块。电源模块的电路原理图如下图,电源模块的作用是将电池组提供的电压稳定在5V以内为61板供电。电源模块采用集成稳压芯片7805,在输出端〔控制板的JP11〕并接一个470μF滤波电容和一个0.1μF的去藕电容,增强系统电压的稳定性和抗干扰性能。2传感器扩展接口为了小车后期开发的方便,在小车的控制板上预留了很多的传感器接口和模组接口。如果在设计中需要添加传感器或者相关的模组,只要参照电路原理图以及相关说明连接电路就可以了,十分的方便。图2.13是一个开关型传感器的接口电路,其中1、2为传感器信号输入,3、4为电源,5、6为地。考虑到很多的开关型传感器的信号输出为集电极开路的OC门构造,所以在电源端和信号端之间参加一个4.7KΩ的上拉电阻。应用时,只需要将电源线、地线、信号线按照图中标注连接好,然后再将信号端〔图中的1端或2端〕接到SPCE061A的相应I/O端口,在程序中把对应的端口设置为输入即可。3方向电机控制电路方向控制由前轮驱动实现,包括左转和右转,前轮驱动电路也是一个全桥驱动电路,如图5-12所示:Q7、Q8、Q9、Q10四个三极管组成四个桥臂,Q7和Q10组成一组,Q8和Q9组成一组,Q11控制Q8、Q9的导通与关断,Q12控制Q7和Q10的导通与关断,而Q11、Q12由IOB10和IOB11控制,这样就可以通过IOB10和IOB11控制前轮电机的正转和反转,进而控制小车的左转和右转。4动力电机驱动电路动力驱动由后轮驱动实现,负责小车的直线方向运动,包括前进和后退,后轮驱动电路是一个全桥驱动电路,如图5-12所示:Q1、Q2、Q3、Q4四个三极管组成四个桥臂,Q1和Q4组成一组,Q2和Q3组成一组,Q5控制Q2、Q3的导通与关断,Q6控制Q1和Q4的导通与关断,而Q5、Q6由IOB9和IOB8控制,这样就可以通过IOB8和IOB9控制四个桥臂的导通与关断控制后轮电机的运行状态,使之正转反转或者停转,进而控制小车的前进和后退。4小车的功能实现原理4.1直走的实现过程只要让小车的左右两侧的轮子同时朝前旋转,小车就会受到向前的作用力而朝前运动,这样就实现了小车的前进功能。由于小车每一侧的轮子由同侧的电机控制,所以要实现两侧的四个轮子同时朝前转,只需要左右两个电机正转即可。由表2.2可知两个电机都正转的控制组合为IOB13~IOB10=1010,也就是说只要把IOB13~IOB10设置为“1010”同理,只要让两个电机同时反转,就实现了小车的倒退功能。此时的IOB13~IOB10端口数据为“0101〞。4.2转弯的实现过程在*些场合,小车还需要转弯,则小车又是怎样实现转弯的呢.其实只要让一侧的轮子停转,让另一侧的旋转,这样小车就会朝着一个方向偏转。比方让右侧的轮子停转,左侧的轮子前转,对应的端口输出状态为IOB13~IOB10=0010,此时小车就会向右前方旋转,最终实现右前转。另外还有左前转,右后转,左后转等动作,详细的端口输出状态见表2.2。但是这种转弯的实现方案在实际的测试中并不理想,小车转弯所走的弧线半径比拟大,有时近似在走直线。造成这种现象的原因是:小车转弯是通过一侧的轮子停转,另一侧的轮子正转或者反转实现的。但是虽然一侧的电机停转了,另一侧旋转的轮子会带着停转的轮子一起运动,这样小车偏转的趋势就不明显,小车转弯的半径就会比拟大,不能到达理想的目的。我们应用了一种近似插补的实现方案,如图3.1所示。将所要走的弧线切割成假设干个小段,在段与段的连接处,作一定角度的原地旋转,然后再直走到下一个连接点。如图3.1示,从A点出发,让小车在原地做一定角度的旋转〔即一侧的轮子正转,另一侧的轮子反转〕,然后让小车直行,到B点处再重复执行原地旋转动作,然后再直行到达C点。如此一直到弧线的终点H,这样就完成了一定弧度的转弯。图示为左拐的过程,右拐的原理是一样的,只是原地旋转的方向不同而已。在实际的操作中需要注意的有两点:一是顺时针旋转还是逆时针旋转一定要清楚,可以参看表;第二是时间的分配,也就是在每个点上旋转所占时间和直走所占时间分别为多长,二者要合理搭配,如果旋转的时间过短,每次旋转角度很小,整体的旋转趋势就不明显,转弯的弧度太小;如果旋转时间过长,小车可能就不会正常的走弧线。图3.1:采用近似插补方案实现小车的转弯过程4.3PWM调速的原理如果需要调速,可以直接调用SPCE061A的PWM资源,通过调节PWM的占空比来实现速度的调节。由第节调速电路分析可知:调速局部直接连接到了61板的PWM输出,只要在程序中对PWM相关端口进展合理的设置,在MOTSP端就有PWM信号产生,加在小车电机两端的电压就是一PWM电压信号,对应的电机电压波形如图示:PWM调速原理图此时加在电机两端的平均电压Uo=Th/(Th+Tl)*VCC。可以通过调整PWM的占空比,来改变Th和Tl的比值,从而改变Uo的大小。这样就通过PWM资源调节加在电机两端的平均电压,从而改变电机的转速,最终实现调节小车速度的目的。另外也可以利用其他的方式让端口输出如图3.2所示的波形,即软件模拟的PWM,在这里就不对这种方案做过多的说明。4.4语音识别原理简介语音识别主要分为“训练〞和“识别〞两个阶段。在训练阶段,单片机对采集到的语音样本进展分析处理,从中提取出语音特征信息,建立一个特征模型;在识别阶段,单片机对采集到的语音样本也进展类似的分析处理,提取出语音的特征信息,然后将这个特征信息模型与已有的特征模型进展比照,如果二者到达了一定的匹配度,则输入的语音被识别。语音识别的具体流程如下图:5软件系统设计5.1软件流程主程序流程图流程说明:语音识别小车的程序流程如上图所示,分为四大局部来说明:初始化局部、训练局部、识别局部、重训操作。初始化局部:初始化操作将IOB13~IOB10设置为输出端,用以控制电机,将IOA的低8位设置为下拉的输入端,用来连接按键。训练局部:训练局部完成的工作就是建立语音模型。程序一开场就会去判断小车是否被训练过,如果没有训练过则会要求对其进展训练,并且会在训练成功之后将训练的模型存储到Flash当中,在以后使用时就不需要重新训练了;如果已经训练过会把存储在Flash中的模型调出来装载到辨识器中。识别局部:在识别环节当中,如果辨识结果是名字,直接置待命标志,然后等待动作命令。只有检测到待命标志,小车才会根据相应的辨识结果执行动作,如果没有待命标志即使识别到动作命令也不会执行动作。小车在执行完对应的命令之后,将去除待命标志,完毕待命状态。重训操作:考虑到有重新训练的需求,所以在这里设置了重新训练的按键,程序运行时循环扫描该按键,什么时间检测到此键按下,则将擦除语音模型存储区首单元〔0*e000〕所在的页,等待复位到来。复位后,程序重新从头开场执行,当检测到语音模型存储区首地址为0*ffff〔擦除后的值〕时会要求重新对其进展训练。红外接收模块5.2红外解码程序设计红外接收模块红外解码程序主要工作为等待红外线信号出现,并跳过引导信号,开场收集连续32位的外表数据,存入内存的连续空间。位信号解码的原则是:以判断各个位的波宽信号来决定上下信号。位解码原理如下:解码为0:低电平的宽度0.56ms+高电平的宽度0.56ms。解码为1:低电平的宽度1.68ms+高电平的宽度0.56ms。程序中必须设计一准确的0.1ms延时时间作为根底时间,以计数实际的波形宽度,假设读值为5表示波形宽度为0.5ms,假设读值为16表示波形宽度为1.6ms,以此类推。高电平的宽度1.12ms为固定,因此可以直接判断低电平的宽度的计数值5或时16,来确定编码为0或是1。程序中可以减法指令SUBB来完成判断,指令“SUBBA,R2”当“8-R2”当“8-R2”将借位标志C经过右移指令“RRCA〞转入A存放器中,再经由R0存放器间接寻址存入内存中。5.3控制器控制程序;红外遥控机器人ASM程序;-----------------------------------------------------------------------------------------------------------------------------------------HOME EQU14 ;伺服马达回到中点时间常数BACK EQU3;伺服马达反转时间常数FOREQU25;伺服马达正转时间常数;----------------------------------------------------------------------------------------------------------------------------------------;遥控器按键1~6比拟码CODE_K1EQU19H;机器人前进比拟码CODE_K2EQU18H;机器人后退比拟码CODE_K3EQU0AH;机器人左转比拟码CODE_K4EQU09H;机器人右转比拟码CODE_K5EQU0BH;机器人回到中点比拟码CODE_K6EQU14H;机器人行走启动进比拟码;----------------------------------------------------------------------------------------------------------------------------------------IR EQU30H;红外线信号解码数据放置变量起始地址EQU32H;比拟第3字节变量;----------------------------------------------------------------------------------------------------------------------------------------IRIN EQUP3.2;红外线IR信号输入位引脚定义WLED EQUP3.7;发光二极管引脚定义SPK EQUP3.4;压电喇叭引脚定义DJL EQUP1.0;左侧伺服马达引脚定义DJREQUP1.1;右侧伺服马达引脚定义;---------------------------------------------------------------------------------------------------------------------------------------- ORG0H;程序代码由地址0开场执行 JMPBEGIN;进入主程序;----------------------------------------------------------------------------------------------------------------------------------------BEGIN:CLRDJL;关闭左侧伺服马达CLRDJR;关闭右侧伺服马达CLRSPK;关闭压电喇叭CALLLED_BL;发光二极管闪烁,表示程序开场执行CALLBZ;压电喇叭发出嘀的一声CALLGO_HOME;全部伺服马达回到中点CALLLED_BL;发光二极管闪烁,表示机器人准备完毕CALLBZ;压电喇叭发出嘀的一声CALLQD;运行行走启动子程序,摆好行走姿态SETBIRIN ;红外线信号IR输入位设为高电平,准备接收红外信号LOOP: MOVR0,*IR ;设置IR解码起始地址 CALLIR_IN;进展IR解码CALLOP;进展解码比拟,并控制机器人动作JMPLOOP;继续循环执行;----------------------------------------------------------------------------------------------------------------------------------------DELAY:MOVR6,*50;10ms延时子程序D1: MOVR7,*99 DJNZR7,$ DJNZR6,D1 DJNZR5,DELAY RET;----------------------------------------------------------------------------------------------------------------------------------------LED_BL:MOVR1,*4;发光二极管闪烁子程序LE1:CPLWLED;发光二极管反向MOVR5,*10 CALLDELAY;进展100ms延时 DJNZR1,LE1 RET;----------------------------------------------------------------------------------------------------------------------------------------BZ:MOVR6,*0;压电喇叭发声子程序B1:SETBSPK;压电喇叭得电,开场发声DJNZR6,B1MOVR5,*5CALLDELAY;进展50ms延时CLRSPK;关闭压电喇叭RET;----------------------------------------------------------------------------------------------------------------------------------------DEL:;0.1ms延时子程序 MOVR5,*1DELAY1: MOVR6,*2E1: MOVR7,*22E2: DJNZR7,E2 DJNZR6,E1 DJNZR5,DELAY1 RET;----------------------------------------------------------------------------------------------------------------------------------------IR_IN:;红外解码子程序I1: JNBIRIN,I2;等待红外IR信号出现JMPI1I2: MOVR4,*20;发现红外IR信号,延时一下I20: CALLDEL DJNZR4,I20 IRIN,I1;确认红外IR信号出现I21: IRIN,I3;等待IR变为高电平 CALLDEL JMPI21I3: MOVR3,*0;8位数清0LL: JNBIRIN,I4;等待IR变为低电平 CALLDEL JMPLLI4: IRIN,I5;等待IR变为高电平 CALLDEL JMPI4I5: MOVR2,*0;0.1ms计数L1: CALLDEL IRIN,N1;等待IR变为高电平 MOVA,*8;设置减数为8 CLRC;去除借位标志C SUBBA,R2;判断上下位 MOVA,R0;取出内存中原先数据 RRCA;右移指令,将借位标志C右移进入A存放器中 MOVR0,A;将数据写入内存中 INCR3;处理完成一位,R3+1〔R3计数〕 CJNER3,*8,LL;循环处理8位 MOVR3,*0 ;R3清0 INCR0;处理完成1个字节,R0+1〔R0计数〕CJNER0,*34H,LL;循环收集到4个字节 JMPOK;至完成返回N1: INCR2;R2+1〔R2计数〕 CJNER2,*30,L1;0.1ms计数过长,时间到自动离开OK: RET;完成返回;----------------------------------------------------------------------------------------------------------------------------------------OP:执行解码动作子程序 MOVA, CJNEA,*CODE_K5,A1;对解码进展比拟,看是否是回到中点指令,否就转至下一项比拟CALLLED_BL;发光二极管闪烁CALLBZ;压电喇叭发出嘀的一声CALLGO_HOME;执行回到中点CALLLED_BL;发光二极管闪烁CALLBZ;压电喇叭发出嘀的一声RETA1: MOVA, CJNEA,*CODE_K1,A2;对解码进展比拟,看是否是前进指令,否就转至下一项比拟 CALLBZ;压电喇叭发出嘀的一声 CALLGO_FOR;执行前进RETA2: MOVA, CJNEA,*CODE_K2,A3;对解码进展比拟,看是否是后退指令,否就转至下一项比拟 CALLBZ;压电喇叭发出嘀的一声CALLGO_BACK;执行后退RETA3:;L MOVA, CJNEA,*CODE_K3,A4;对解码进展比拟,看是否是左转指令,否就转至下一项比拟 CALLBZ;压电喇叭发出嘀的一声CALLGO_L;执行左转RETA4:;RMOVA, CJNEA,*CODE_K4,A5;对解码进展比拟,看是否是右转指令,否就转至下一项比拟 CALLBZ;压电喇叭发出嘀的一声CALLGO_R;执行右转 RETA5:MOVA,CJNEA,*CODE_K6,A6;对解码进展比拟,看是否是行走启动指令,否就转至下一项CALLLED_BL;发光二极管闪烁CALLBZ;压电喇叭发出嘀的一声CALLQD;执行行走启动 CALLLED_BL;发光二极管闪烁CALLBZ;压电喇叭发出嘀的一声 RETA6:RET;返回;----------------------------------------------------------------------------------------------------------------------------------------HOME1:SETBDJZ;各伺服电机回中点控制子程序 SETBDJL SETBDJR MOVR4,*HOMEG1: CALLDEL DJNZR4,G1 CLRDJZCLRDJL CLRDJR MOVR4,*(200-HOME)G2: CALLDEL DJNZR4,G2 RET;----------------------------------------------------------------------------------------------------------------------------------------GO_HOME:MOVR3,*15;机器人回中点子程序H1: CALLHOME1 DJNZR3,H1 RET;----------------------------------------------------------------------------------------------------------------------------------------DJL_FOR:SETBDJL;左侧电机正转子程序MOVR4,*FORFL1:CALLDELDJNZR4,FL1CLRDJLMOVR4,*(200-FOR)FL2:CALLDELDJNZR4,FL2RET;----------------------------------------------------------------------------------------------------------------------------------------DJR_FOR:SETBDJR;右侧电机正转子程序MOVR4,*FORFR1:CALLDELDJNZR4,FR1CLRDJRMOVR4,*(200-FOR)FR2:CALLDELDJNZR4,FR2RET;----------------------------------------------------------------------------------------------------------------------------------------DJL_BACK:SETBDJL;左侧电机反转子程序MOVR4,*BACKDJLBA1:CALLDELDJNZR4,DJLBA1CLRDJLMOVR4,*(200-BACK)DJLB2:CALLDELDJNZR4,DJLB2RET;----------------------------------------------------------------------------------------------------------------------------------------DJR_BACK:SETBDJR;右侧电机反转子程序MOVR4,*BACKDJRBA1:CALLDELDJNZR4,DJRBA1CLRDJRMOVR4,*(200-BACK)DJRB2:CALLDELDJNZR4,DJRB2RET;----------------------------------------------------------------------------------------------------------------------------------------GO_FOR:MOVR3,*5;机器人向前行走子程序F1:CALLDJZ_FORDJNZR3,F1MOVR3,*10F2:CALLDJR_BACKDJNZR3,F2MOVR3,*10F3:CALLDJL_BACKDJNZR3,F3MOVR3,*5F4:CALLDJZ_BACKDJNZR3,F4MOVR3,*10F5:CALLDJL_FORDJNZR3,F5MOVR3,*10F6:CALLDJR_FORDJNZR3,F6RET;----------------------------------------------------------------------------------------------------------------------------------------GO_BACK:MOVR3,*10;机器人向后行走子程序BA1:CALLDJL_BACKDJNZR3,BA1 MOVR3,*10BA2:CALLDJR_BACKDJNZR3,BA2MOVR3,*5BA4:CALLDJZ_FORDJNZR3,BA4 MOVR3,*10BA5:CALLDJR_FORDJNZR3,BA5 MOVR3,*10BA6:CALLDJL_FORDJNZR3,BA6 MOVR3,*5BA7:CALLDJZ_BACKDJNZR3,BA7RET;----------------------------------------------------------------------------------------------------------------------------------------GO_L:MOVR3,*10;机器人左转行走子程序GL1:CALLDJL_BACKDJNZR3,GL1 MOVR3,*5GL2:CALLDJZ_FORDJNZR3,GL2 MOVR3,*10GL3:CALLDJR_BACKDJNZR3,GL3MOVR3,*10GL7:CALLDJL_FORDJNZR3,GL7MOVR3,*5GL4:CALLDJZ_BACKDJNZR3,GL4 MOVR3,*10GL5:CALLDJR_FORDJNZR3,GL5 RET;----------------------------------------------------------------------------------------------------------------------------------------GO_R:MOVR3,*10;机器人右转行走子程序GR1:CALL

温馨提示

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

评论

0/150

提交评论