1、语音控制小车语音控制小车摘 要本文主要以SPCE061A为基础介绍了如何应用SPCE061A芯片进行语音控制小车的硬件和软件设计。SPCE061A是一种16位nSP结构的微控制器。该芯片带有硬件乘法器,能够实现乘法运算、内积运算等复杂的运算。它不仅运算能力强,而且处理速度快,单周期最高可以达到49MHz。SPCE061A内嵌32K字的FLASH程序存储器以及2K的SRAM。同时该SOC芯片具有ADC和DAC功能,其MIC_ADC通道带有AGC自动增益环节,能够很轻松的将语音信号采集到芯片内部,两路10位的电流输出型DAC,只要外接一个功放就可以完成声音的播放。以上介绍的这些硬件资源使得该SPC
2、E061A能够单芯片实现语音处理功能。SPCE061A 是继µnSP系列产品SPCE500A等之后凌阳科技推出的又一款16位结构的微控制器。与SPCE500A不同的是,在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能,SPCE061A里只内嵌32K字的闪存(FLASH)。较高的处理速度使µnSP能够非常容易地、快速地处理复杂的数字信号。因此,与SPCE500A相比,以µnSP为核心的SPCE061A微控制器是适用于数字语音识别应用领域产品的一种最经济的选择。借助于SPCE061A的语音特色,我们开发出了这款语音控制小车。小车不仅具有前进、后退
3、、左转、右转停车等基本功能;同时配合SPCE061A的语音特色,实现语音控制功能。 目 录 第一章 前言1第二章 语音控制小车设计要求22.1 功能设计要求 2 2.2 参数说明2 2.3 注意事项 22.4 备 注 3第三章 芯片特性简介 4 3.1 SPCE061A特性简介 4 3.2 精简开发板61板 5第四章 系统总体方案介绍 7 4.1 系统硬件方案 7 4.2 系统控制方案7第五章 系统硬件设计95.1 车体介绍 9 5.1.1 小车的行走原理 10 5.2 控制板原理图 11 5.2.1 全桥驱动原理 12 5.2.2 动力电机驱路 145.2.3 方向电机控制电路 14第六章
4、系统软件设计 17 6.1 系统的总体程序流程 17 6.2 程序中需要说明的几个问题 24第七章 连接与操作说明26 7.1 硬件连接 26 7.2 硬件模块连接图 26 7.3 功能说明 27 7.4 代码下载 27 7.5 训练小车 28 7.6 声控小车 29 7.7 重新训练 29结语30参考文献31致 谢32语音控制小车前言语音处理技术是一门新兴的技术,它不仅包括语音的录制和播放,还涉及语音的压缩编码和解码,语音的识别等各种处理技术。做这方面的设计,一般有两个途径:一种方案是单片机扩展设计,另一种就是借助于专门的语音处理芯片。普通的单片机往往不能实现这么复杂的过程和算法,即使勉强实
5、现也要加很多的外围器件。专门的语音处理芯片也比较多,像ISD系列、PM50系列等,但是专门的语音处理芯片功能比较单一,想在语音之外的其他方面应用基本是不可能的。 SPCE061A是一种16位nSP结构的微控制器。该芯片带有硬件乘法器,能够实现乘法运算、内积运算等复杂的运算。它不仅运算能力强,而且处理速度快,单周期最高可以达到49MHz。SPCE061A内嵌32K字的FLASH程序存储器以及2K的SRAM。同时该SOC芯片具有ADC和DAC功能,其MIC_ADC通道带有AGC自动增益环节,能够很轻松的将语音信号采集到芯片内部,两路10位的电流输出型DAC,只要外接一个功放就可以完成声音的播放。以
6、上介绍的这些硬件资源使得该SPCE061A能够单芯片实现语音处理功能。借助于SPCE061A的语音特色,我们设计出了这款语音控制小车。小车不仅具有前进、后退、左转、右转停车等基本功能;同时配合SPCE061A的语音特色,实现语音控制功能。 30第二章 语音控制小车设计要求2.1 功能设计要求语音控制小车是凌阳大学计划推出的基于SPCE061A的代表性兴趣产品,它配合61板推出,综合应用了SPCE061A的众多资源,打破了传统教学中单片机学习枯燥和低效的现状。小车采用语音识别技术,可通过语音命令对其行驶状态进行控制。 语音控制小车的主要功能:1 可以通过简单的I/O操作实现小车的前进、后退、左转
7、、右转功能; 2 配合SPCE061A的语音特色,利用系统的语音播放和语音识别资源,实现语音控制的功能; 3 可以在行走过程中声控改变小车运动状态; 4 在超出语音控制范围时能够自动停车。 2.2 参数说明 车体:双电机两轮驱动 供电:电池(四节AA:1.2V4 或1.5V4) 工作电压:DC 4V6V 工作电流:运动时约200mA 2.3 注意事项 1 一定要注意电池的正负极性,切勿装反; 2 长期不用请将电池取出电池盒; 3 由于语音信号的不确定性,语音识别的过程会出现一定的误差和不准确性; 4 由于小车行动比较灵活,速度比较快,在使用时一定要注意保持场地足够大,且保证不会对周围的物体造成
8、伤害; 5 不要让小车长时间运行在堵转状态(堵转状态:由于小车所受阻力过大,造成小车电机加电但并不转动的现象),这样会造成很大的堵转电流,有可能会损坏小车的控制电路。 2.4 备注 可以自行添加各种传感器,实现避障、循迹、跟踪等功能。第三章 核心器件简介3.1 SPCE061A特性简介 SPCE061A是一种十六位单片机,使用它可以非常方便灵活的实现语音的录放,该芯片拥有8路10位精度的ADC,其中一路为音频转换通道,并且内置有自动增益电路。这为实现语音录入提供了方便的硬件条件。两路10位精度的DAC,只需要外接功放(SPY0030A)即可完成语音的播放。另外十六位单片机具有一套易学易用的指令
9、系统和集成开发环境,在此环境中,它支持标准C语言编程,也支持C语言与汇编语言的互相调用。另外还提供了语音录放的库函数,只要了解库函数的使用,就可以很容易的完成语音的录放、识别等功能,这些都为软件开发提供了方便的条件。SPCE061是一款拥有2KRAM、32KFlash、32个I/O口,并集成了AD/DA功能强大的16位微处理器,它还拥有丰富的语音处理功能,为小车的功能扩展提供了相当大的空间。只要按照该单片机的要求对其编制程序就可以实现很多不同的功能。SPCE061A 是继µnSP系列产品SPCE500A等之后凌阳科技推出的又一款16位结构的微控制器。与SPCE500A不同的是,在存
10、储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能,SPCE061A里只内嵌32K字的闪存(FLASH)。较高的处理速度使µnSP能够非常容易地、快速地处理复杂的数字信号。因此,与SPCE500A相比,以µnSP为核心的SPCE061A微控制器是适用于数字语音识别应用领域产品的一种最经济的选择。SPCE061A特性: 16位nSP微处理器; 工作电压:内核工作电压VDD为3.0V3.6V(CPU),I/O口工作电压VDDH为VDD5.5V(I/O); CPU时钟:0.32MHz49.152MHz
11、; 内置2K字SRAM; 内置32K闪存ROM; 可编程音频处理; 晶体振荡器; 系统处于备用状态下(时钟处于停止状态),耗电小于2A3.6V; 2个16位可编程定时器/计数器(可自动预置初始计数值); 2个10位DAC(数-模转换)输出通道; 32位通用可编程输入/输出端口; 14个中断源可来自定时器A / B,时基,2个外部时钟源输入,键唤醒; 具备触键唤醒的功能;
12、048715; 使用音频编码SACM_S240方式(2.4K位/秒),能容纳210秒的语音数据; 锁相环PLL振荡器提供系统时钟信号; 32768Hz实时时钟; 7通道10位电压模-数转换器(ADC)和单通道声音模-数转换器; 声音模-数转换器输入通道内置麦克风放大器和自动增益控制(AGC)功能; 具备串行设备接口; 低电压复位(LVR)功和低电压监测(LVD)功能; 内置在线仿真板(IC E,In- C ircuit E m ulator)
13、接口。3.2 精简开发板61板 “61板”是SPCE061A EMU BOARD的简称,是以凌阳16位单片机SPCE061A为核心的精简开发仿真实验板,大小相当于一张扑克牌。 “61板”除了具备单片机最小系统电路外,还包括有电源电路、复位电路、ICE电路、音频电路(含MIC输入部分和DAC音频输出部分)等,“61板”可以采用电池供电。图3-1所示为该精简开发板的实物图。 图3-1 61板实物图 第四章 系统总体方案4.1 系统硬件方案 系统的结构框图如图4-1示。 图4-1 系统结构框图系统组成主要包括以下两部分:SPCE061A精简开发板、语音小车控制电路板。 图中的语音输入部分MIC_ I
14、N、按键输入KEY、声音输出部分的功率放大环节等已经做到了精简开发板61板上,为我们使用提供了很大的方便。在电机的驱动方面,采用全桥驱动技术,利用四个I/O端口分为两组分别实现两个电机的正传、反转和停三态运行。4.2 系统控制方案 小车的运动控制采用语音控制和中断定时控制相结合,通过语音触发小车动作,小车动作之后,随时可以通过语音指令改变小车的运动状态。在每一次动作触发的同时启动定时器,如果小车由于某些原因不能正常的接收语音指令,则只要定时时间到,中断服务程序会发出指令让小车停下来。 详细的控制过程请参看第6节程序设计部分。 第五章 系统硬件设计小车驱动电机一般利用现成的玩具小车上的配套直流电
15、机。考虑到小车必须能够前进、倒退、停止,并能灵活转向,在左右两轮各装一个电机分别进行驱动。当左轮电机转速高于右轮电机转速时小车向右转,反之则向左转。为了能控制车轮的转速,可以采取PWM调速法,即由单片机的IOB8、IOB9输出一系列频率固定的方波,再通过功率放大来驱动电机,在单片机中编程改变输出方波的占空比就可以改变加到电机上的平均电压,从而可以改变电机的转速。左右轮两个电机转速的配合就可以实现小车的前进、倒退、转弯等功能。5.1 车体介绍 语音控制小车为四轮结构,如图5-1所示。其中前面两个车轮由前轮电机控制,在连杆和支点作用下控制前轮左右摆动,来调节小车的前进方向。在自然状态下,前轮在弹簧
16、作用下保持中间位置。后面两个车轮由后轮电机驱动,为整个小车提供动力。所以又称前面的轮子为方向轮,后面的两个轮子为驱动轮,如图5-2所示。图5-1 车体侧视图 图5-2 车体顶视图5.1.1 小车的行走原理 直走:由小车的结构分析,在自然状态下,前轮在弹簧作用下保持中间状态,这是只要后轮电机正转小车就会前进。如图 5-3所示; 倒车:倒车动作和前进动作刚好相反,前轮电机仍然保持中间状态,后轮电机反转,小车就会向后运动,如图 5-4所示; 左转:前轮电机逆时针旋转(规定为正转),后轮电机正转,这时小车就会在前后轮共同作用下朝左侧前进,如图 5-5所示; 右转:前轮电机反转,后轮电机正转,这时小车就
17、是会在前后轮共同作用下朝右侧前进,如图5-6所示。 图5-3 小车前进原理图 图5-4 小车倒车示意图 图5-5 小车左转示意图 图5-6 小车右转示意图5.2 控制板原理图 控制板主要包括:接口电路、电源电路和两路电机的驱动电路,控制板原理图如图 5-7所示。 接口电路:接口电路负责将61板的I/O接口信号传送给控制电路板,I/O信号主要为控制电机需要的IOB8IOB11这四路信号,同时为了方便后续的开发和完善,预留了IOB12IOB15以及IOA8IOA15接口,可以在这些接口上添加一些传感器。 电源部分:整个小车有4个电源信号:电池电源,控制板工作电源,61板工作电源,61板的I/O输出
18、电源。系统供电由电池提供,控制板直接采用电池供电(VCC),然后经二极管D1后产生61板电源 (VCC_61),通过61板的Vio跳线产生61板的端口电源(V1)。 二极管D1作用: 1.降压,4节电池提供的电压VCC最大可达到6V,D1可有效地降压。 2.2.保护,D1可以防止电源接反烧坏61板。 图5-7 控制板原理图 5.2.1 全桥驱动原理 全桥驱动又称H桥驱动,下面介绍一下H桥的工作原理: H桥一共有四个臂,分别为B1B4,每个臂由一个开关控制,示例中为三极管Q1Q4。 如果让Q1、Q2导通Q3、Q4关断,如图 5-8所示,此时电流将会流经Q1、负载、Q2组成的回路,电机正转。 图5
19、-8 B1、B2工作时的H桥电路简图 图5-9 B3、B4工作时的H桥电路简图 如果让Q1、Q2关断Q3、Q4导通,如图 5-9所示,此时电流将会流经Q3、负载、Q4组成的回路,电机反转。 如果让Q1、Q2关断Q3、Q4也关断,负载Load两端悬空,如图 5-10所示,此时电机停转。这样就实现了电机的正转、反转、停止三态控制。 如果让Q1、Q2导通Q3、Q4也导通,那么电流将会流经Q1、Q4组成的回路以及Q2和Q3组成的回路,如图 5-11所示,这时桥臂上会出现很大的短路电流。在实际应用时注意避免出现桥臂短路的情况,这会给电路带来很大的危害,严重会烧毁电路 图5-10 B1B4全部停止工作时的
20、H桥简图 图5-11 B1B4全部工作时的H桥简图5.2.2 动力电机驱动电路 动力驱动由后轮驱动实现,负责小车的直线方向运动,包括前进和后退,后轮驱动电路是一个全桥驱动电路,如图3-12所示:Q1、Q2、Q3、Q4四个三极管组成四个桥臂,Q1和Q4组成一组,Q2和Q3组成一组,Q5控制Q2、Q3的导通与关断,Q6控制Q1和Q4的导通与关断,而Q5、Q6由IOB9和IOB8控制,这样就可以通过IOB8和IOB9控制四个桥臂的导通与关断控制后轮电机的运行状态,使之正转反转或者停转,进而控制小车的前进和后退。 图5-12 后轮电机驱动电路 当IOB8为高电平、IOB9为低电平时Q1和Q4导通,Q2
21、和Q3截止,后轮电机正转,小车前进;反之当IOB8为低电平、IOB9为高电平时Q1和Q4截止,Q2和Q3导通,后轮电机反转,小车倒退;而当IOB8、IOB9同为低电平时Q1、Q2、Q3和Q4都截止,后轮电机停转,小车停止运动。 注意:IOB8和IOB9不能同时置高电平,这样会造成后轮驱动全桥短路现象。 5.2.3 方向电机控制电路 方向控制由前轮驱动实现,包括左转和右转,前轮驱动电路也是一个全桥驱动电路,如图3-12所示:Q7、Q8、Q9、Q10四个三极管组成四个桥臂,Q7和Q10组成一组,Q8和Q9组成一组,Q11控制Q8、Q9的导通与关断,Q12控制Q7和Q10的导通与关断,而Q11、Q1
22、2由IOB10和IOB11控制,这样就可以通过IOB10和IOB11控制前轮电机的正转和反转,进而控制小车的左转和右转。 语音控制小车图5-13 前轮电机驱动电路 当IOB10为高电平、IOB11为低电平时Q8和Q9导通,Q7和Q10截止,前轮电机正转,小车前轮朝左偏转;反之当IOB10为低电平、IOB11为高电平时Q8和Q9截止,Q7和Q10导通,前轮电机反转,小车前轮朝右偏转;而当IOB10、IOB11同为低电平时Q8和Q9截止,Q7和Q10也截止,前轮电机停转,在弹簧作用下前轮被拉回到中间位置,保持直向。 注意:IOB10、IOB11不能同时为高电平,这样会造成前轮驱动全桥的桥臂短路。
23、结合以上对前轮和后轮的状态分析,得到小车的运行状态与输入的对照表,如下表所示: 表5.1 基本的输入与小车运动状态对照表 IOB11 IOB10 IOB9 IOB8 后电机 前电机 小车 0 0 0 0 停转 停转 停 0 0 0 1 正转 停转 前进 0 0 1 0 反转 停转 倒退 0 1 0 1 正转 正转 左前转 1 0 0 1 正转 反转 右前转 另外还有一些不常用的运行状态,比如右后转、左后转等,结合以上对前轮和后轮的状态分析,其端口对照如表5.2所示: 表5.2 输入与小车的运动状态对照表IOB11IOB10IOB9IOB8后电机前电机小车0110正转正转右后转1010正转反转左
24、后转 注意:为了小车的安全请不要出现以下两种组合情况: 表5.3 禁止的输入状态列表 IOB11 IOB10 IOB9 IOB8 后电机 前电机 小车 * * 1 1 停转 * 停 1 1 * * * 停转 停 )第六章 系统软件设计6.1 系统的总体程序流程 系统的总体程序流程如图 6-1所示: 图6-1 系统总体程序流程图 语音识别小车的主程序流程如图 6-1所示,分为四大部分:初始化部分、训练部分、识别部分、重训操作。 初始化部分:初始化操作将IOB8IOB11设置为输出端,用以控制电机。必要时还要有对应的输入端设置和PWM端口设置等。 训练部分:训练部分完成的工作就是建立语音模型。程序
25、一开始判断小车是否被训练过,如果没有训练过则要求对其进行训练,并且会在训练成功之后将训练的模型存储到Flash,在以后使用时不需要重新训练;如果已经训练过会把存储在Flash中的模型调出来装载到辨识器中。 识别部分:在识别环节当中,如果辨识结果是名字,停止当前的动作并进入待命状态,然后等待动作命令。如果辨识结果为动作指令小车会语音告知相应动作并执行该动作,在运动过程中可以通过呼叫小车的名字使小车停下来。 重训操作:考虑到有重新训练的需求,设置了重新训练的按键(61板的KEY3),循环扫描该按键,一旦检测到此键按下,则将擦除训练标志位(0xe000单元),并等待复位。复位后,程序重新执行,当检测
26、到训练标志位为0xffff时会要求重新对其进行训练。 下面详细介绍以上提到的子程序。 6.1.1 语音识别的原理简介 在介绍子程序之前首先介绍一下语音识别的原理。 语音识别主要分为“训练”和“识别”两个阶段。在训练阶段,单片机对采集到的语音样本进行分析处理,从中提取出语音特征信息,建立一个特征模型;在识别阶段,单片机对采集到的语音样本也进行类似的分析处理,提取出语音的特征信息,然后将这个特征信息模型与已有的特征模型进行对比,如果二者达到了一定的匹配度,则输入的语音被识别。 语音识别的具体流程如图6-2所示: 图6-2 语音识别流程说明框图 6.1.2 训练子程序 当程序检测到训练标志位BS_F
27、lag内容为0xffff,就会要求操作者对它进行训练操作,训练操作的过程如图 6-3所示:训练采用两次训练获取结果的方式,以训练名字为例:小车首先会提示:给我取个名字吧,这时你可以告诉它一个名字(比如Jack);然后它会提示:请再说一遍,这时再次告诉它名字(Jack),如果两次的声音差别不大,小车就能够成功的建立模型,名称训练成功;如果没能够成功的建立模型,小车会告知失败的原因并要求重新训练。成功训练名称后会给出下一条待训练指令提示音:前进,参照名称训练方式训练前进指令。依次训练小车的名称前进指令倒车指令左转指令右转指令,全部训练成功子程序返回,训练结束。 图6-3 训练流程图 下面是训练部分
28、的子程序,在训练时如果训练不成功TrainWord()返回值不为0,要求重复训练,只有当训练成功,TrainWord()返回0,进行下一条指令训练。 void TrainSD( ) while(TrainWord(NAME_ID,S_NAME) != 0) ; /训练名称 while(TrainWord(COMMAND_GO_ID,S_ACT1) != 0) ; /训练第1个动作 while(TrainWord(COMMAND_BACK_ID,S_ACT2) != 0) ; /训练第2个动作 while(TrainWord(COMMAND_LEFT_ID,S_ACT3) != 0) ; /训练
29、第3个动作 while(TrainWord(COMMAND_RIGHT_ID,S_ACT4) != 0) ; /训练第4个动作 6.1.3 语音识别子程序 语音识别流程如图6-4所示:首先获取辨识器的辨识结果,判断是否有语音触发,如果有语音触发则会返回识别结果的ID号,ID号对应名称或者对应不同的动作。如果ID号为名称,则结束运动(如果当前在运动状态),进入待命状态,等待下一次的指令触发;如果ID号为动作,则语音告知将要执行的动作,并执行该动作。 图6-4 语音识别部分流程图 6.1.4 动作子程序 动作子程序包括:前进、倒车、左拐、右拐、停车子程序; 前进:由小车的结构原理和驱动电路分析知:
30、只要IOB8为高电平,IOB9,IOB10,IOB11全部为低电平即可实现小车的前进。前进子程序包括语音提示、置端口数据、启动定时器操作,该部分程序如下: void GoAhead() /前进 PlaySnd(S_ACT1,3); /语音提示 *P_IOB_Data=0x0100; /前进 *P_INT_Mask |= 0x0004; /开2Hz中断 _asm(int fiq,irq); uiTimecont = 0; /清定时器 倒车:由小车的结构原理分析和驱动电路分析知:只要IOB9为高电平,IOB8,IOB10,IOB11全部为低电平即可实现小车的倒退。倒退子程序包括语音提示、置端口数据
31、、启动定时器操作,程序如下: void BackUp() /倒退 PlaySnd(S_ACT2,3); /语音提示 *P_IOB_Data=0x0200; /倒车 *P_INT_Mask |= 0x0004; /开2Hz中断 _asm(int fiq,irq); uiTimecont = 0; /清定时器 左转:由小车的结构原理分析和驱动电路分析知:小车左转需要两个条件:1.前轮左偏2.后轮前进,这时对应的I/O状态为:IOB8、IOB10为高电平,IOB9、IOB11为低电平。左转子程序包括语音提示、置端口数据、启动定时器操作,该部分程序如下: void TurnLeft() /左转 Pla
32、ySnd(S_GJG,3); /播放提示音 *P_IOB_Data=0x0900; /前轮右偏 Delay(); /延时 *P_IOB_Data=0x0500; /前轮左偏 *P_INT_Mask |= 0x0004; /打开2Hz中断 _asm(int fiq,irq); /允许总中断 uiTimecont = 0; /清定时器 注:在左转之前首先让前轮右偏,然后再让前轮朝左偏,这样前轮的摆动范围更大,惯性更大,摆幅也最大,能更好实现转弯。 右转:由小车的结构原理分析和驱动电路分析知:小车右转需要两个条件:1.前轮右偏2.后轮前进,这时对应的I/O状态为:IOB8、IOB11为高电平,IOB
33、9、IOB10为低电平。右转子程序包括语音提示、置端口数据、启动定时器操作,该部分程序如下: void TurnLeft() /左转 PlaySnd(S_GJG,3); /播放提示音 *P_IOB_Data=0x0500; /前轮左偏 Delay(); /延时 *P_IOB_Data=0x0900; /前轮右偏 *P_INT_Mask |= 0x0004; /打开2Hz中断 _asm(int fiq,irq); /允许总中断 uiTimecont = 0; /清定时器 注:在右转之前首先让前轮左偏,然后再让前轮朝右偏,这样前轮的摆动范围更大,惯性更大,摆幅也最大,能更好实现转弯。 6.1.5
34、中断子程序 虽然已经有了前进、后退以及停车(通过直接呼叫小车的名字使其停车)等语音控制指令,但是考虑环境的干扰因素,小车运行时的噪音影响和有效距离的限制,小车运行后可能接收不到语音指令而一直运行。为了防止出现这种情况,加入了时间控制,在启动小车运行的同时启动定时器,定时器时间到停止小车的运行,该定时器借助于2Hz时基中断完成,图 6-5所示为该程序的流程图。可以在程序中修改uiTimeset参数来控制运行时间,当uiTimeset=2时,运行时间为1s,以此类推。 图6-5 2Hz定时中断子函数 6.2 程序中需要说明的几个问题 在程序中有几个地方不易理解,需要特别说明一下: 首先,小车有没有
35、被训练过是怎么知道的? 在这里利用了一个特殊的Flash单元,语音模型存储区首单元(该示例程序中为0xe000单元)。当Flash在初始化以后,或者在擦除后为0xffff,在成功训练并存储后为0x0055(该值由辨识器自动生成)。这样就可以根据这个单元的值来判断是否经过训练。 其次,为什么已经训练过的系统在重新运行时还要进行模型装载? 在首次训练完成之后,辨识器中保存着训练的模型,但是系统一旦复位辨识器中的模型就会丢失,所以在重新运行时必须把存储在Flash中的语音模型装载到辨识器(RAM)中去。 第三,在转弯时为什么前轮要先做一个反方向的摆动? 这是为了克服车体的限制,由于前轮电机的驱动能力
36、有限,有时会出现前轮偏转不到位的情况,所以在转弯前首先让前轮朝反方向摆动,然后再朝目标方向摆动。这样前轮的摆动范围更大,惯性更大,摆幅也最大,能更好实现转弯。 第四,关于语音的一些具体问题,关于语音的一些具体问题请参看SPCE061A相关书籍中关于语音的详细介绍。调试结果及数据(包括电路装配、焊接、电路调试所用仪器和仪表工具,调试的具体步骤,发现的问题、原因分析及修正方法等,也包括PCB图)电路调试及故障分析第七章 连接与操作说明7.1 硬件连接 语音控制小车电路包括两大部分:61板部分和控制板部分,硬件部分的连接如图7-1示,主要用到SPCE061A的IOB8IOB11来控制小车的状态。 电
37、源部分连接:电池电源直接接控制板电源接口J1, J2接61板的电源,连接时注意电源极性。 61板和控制板的I/O连接有两种情况: 采用I/O排针向下的61板,直接将61板和控制板扣接在一起即可,61板的IOBH通过J6与控制电路连通; 采用I/O排针向上的61板,直接用排线将61板的IOBH和J5相连接即可。图7-1 系统结构框图7.2 硬件模块连线图 图7-2 连线图7.3 功能说明 1. 小车运动控制:通过SPCE061A的I/O端口,驱动控制板的H桥电路,进而控制前轮电机和后轮电机。2. 声控功能:利用特定人语音识别实现小车的名称和动作训练,并根据相应的语音指令输入执行前进、后退、左转、
38、右转、停车等动作。3. 定时控制功能:利用时基定时器设定运行时间,小车运行同时启动定时器,时间到小车停止运行。 7.4 代码下载 硬件连接完成之后,检查无误,接下来就可以下载程序了。具体的步骤为: 第一步:打开集成开发环境,打开“CarDemo.spj”文件,编译链接。(注意:如果看不到CarDemo.spj,请在弹出的对话框中选择打开类型为spj或者所有文件) 第二步:点击菜单ProjectSelect Body,或者直接点击 图标打开如图 3-2所示的对话框: 图 7-3 Select Body对话框 第三步:在弹出的对话框中选择Body Name为SPCE060A_061A,选择Prob
39、e为Auto,点击OK按钮确定。 第四步:点击IDE工具栏上的图标选择Use ICE模式。 第五步:按F8快捷下载按钮,下载代码。 7.5 训练小车 成功下载程序以后,去掉下载线并复位系统(如果使用EZ-Probe还应将Probe选择跳线S5拔去),小车就会提示对它进行训练。训练采用应答式训练,每条指令的训练次数为两次,每一条命令的训练过程都是一样的,以“前进”为例说明: 步骤一:小车提示“前进”; 步骤二:告诉小车“前进”; 步骤三:小车提示“请再说一遍”(重复训练提示音); 步骤四:再次告诉小车“前进”(重复训练一次)。 这是一个完整的训练过程,如果训练成功,小车会自动进入下一条指令的训练
40、,并会提示下一条指令对应的动作;如果没有训练成功,小车会提示“说什么暗语呀”或者“没有听到任何声音”等信息,这样的话就要重复刚才所说的四个步骤,直到成功为止。 整个的训练过程共有5次这样的训练,依次为:名称前进后退左拐右拐。整个的训练流程如图 7-4所示: 图7-4 小车训练流程7.6 声控小车 训练完小车之后,怎样进行声控操作,让小车运动或者停下来呢? 可以直接对小车说前进,或者倒车、左拐、右拐等,小车如果识别出指令会有一个回应信号,告知你它要执行的动作,然后执行该动作。如果想要小车执行其它动作,直接告诉小车将要执行动作对应的指令即可。比如在前进时告诉小车“倒车”,小车识别出之后就会直接倒车
41、。 如果在小车运动的过程中想要小车停下来,可以直接呼叫小车的名字,小车准确识别之后就会停下来。7.7 重新训练 在实际的使用过程当中,可能会对训练的结果不满意,或者其他人也想对它进行训练、控制。这样就要求小车可以被重新训练。为此,我们把61板的KEY3键定义为重新训练按钮,系统运行之后就会不断的扫描61板的KEY3键。如果检测到KEY3键按下,那么程序首先会把训练标志位(0xe000)单元擦除,并会进入一个死循环等待复位的到来。复位到来之后,程序检测到训练标志单元内容为0xffff,认为小车没有经过训练,就会要求对它进行训练。 语音控制小车第八章 结束语本设计综合应用了SPCE061A丰富的软
42、硬件资源,成功的实现了语音控制功能。下面简单的介绍一下实际应用中的一些资源优势:在硬件方面,较高的执行速度、内置的硬件乘法器、ADC和DAC功能、内置的AGC自动增益环节,这些为语音处理提供了强大基础。在软件方面,标准的C语言编程,丰富的语音资源函数为编程提供了很大的方便。 该设计方案结构简单,以单芯片实现了语音播放与识别以及电机控制功能,相当于“语音识别芯片+普通单片机”的功能。但是比“语音识别芯片+普通单片机”方案实现起来要简单很多,而且成本也会降低很多。 该语音控制小车操作比较简单,训练和识别成功的几率也比较高,是一个典型的语音识别应用方案。 参考文献、资料索引文献、资料名称编著者出版单位凌阳16位单片机应用基础M 凌阳16位单片机原理及应用M 单片机应用系统设计与产品开M 单片机创新开发与机器人制作机器人制作提高篇凌阳大学计划网罗亚非张彦斌薛钧义赵亮耿德根 詹卫前李青David Cook 毕树生 李大寨 高志慧 译北京航空航天大学出版社清