基于单片机的声控小车的控制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

江苏科技大学
本科毕业设计(论文)
学院江苏科技大学
专业机械电子工程
学生姓名***
班级学号05******
指导教师李磊
二零零九年六月
江苏科技大学本科毕业论文
江苏科技大学本科毕业论文
基于单片机的声控小车控制
The control of V oice-activated car based on Single Chip
摘要
随着电子工业的发展,具有语音控制功能的小车越来越受到人们的青睐,在人们的日常消费生活中起着不可忽视的作用。

目前,声控技术已在很多领域得到使用。

比如声控手机、声控洗衣机、电视机、电脑等设备。

本文对声控小车概况做了阐述。

在硬件设计方面,本论文以凌阳公司的SPCE061A 单片机为控制核心,以语音小车控制电路板为辅,设计小车的动作。

在软件方面,利用C语言进行编程,进行语音的“训练”和“识别”。

设计出具有如下功能的语音声控小车:能够根据录制的语音命令来控制小车的启动、停止、返回、拐弯。

论文首先对系统的方案进行论证,然后对各单元的软件、硬件工作原理进行了阐述,并介绍了系统的主要组成部分情况。

关键词:SPCE061A,语音识别,全桥驱动,小车
Abstract
With the development of the electronics industry,the voice-control car become more and more popular to people. And it plays an important role in people's daily life. At present, the voice-activated technology has been used in many fields. For example, voice-activated phone. Only if you called out the names you want and it automatically called the telephone. There are also voice-activated washing machines, televisions, computers and other equipments.
This article gives a detail to the voice-activated car. In hardware design, the paper use Sunplus SPCE061A as the control of core. On the software, we use C language programming for voice "training" and "recognition". It has the following features: According to recorded the voice command to control the car to start, stop, return, and turn.
First of all ,papers confirm the system of program, and then describe the unit's software, hardware as well as introduce the main components of the situation.
Key words: SPCE061A,Speech Recognition,Full-bridge driver,Trolley
目录
第一章绪论 (1)
1.1引言 (1)
1.2国内外研究状况 (1)
1.3存在的不足或有待解决的问题 (2)
1.4课题的目的任务和要求 (2)
第二章设计方案论证 (3)
2.1系统总体方案 (3)
2.2系统硬件方案 (4)
2.3系统控制方案 (5)
2.4小结 (5)
第三章系统硬件设计 (6)
3.1SPCE061A 特性简介 (6)
3.2精简开发板——61 板 (7)
3.3车体介绍 (8)
3.3.1小车的行走原理 (9)
3.4控制板原理图 (11)
3.4.1全桥驱动原理 (12)
3.4.2动力电机驱动电路 (15)
3.4.3方向电机控制电路 (15)
3.5小结 (17)
第四章系统软件设计 (18)
4.1 系统的总体程序流程 (18)
4.1.1 语音识别的原理简介 (19)
4.1.2 训练子程序 (20)
4.1.3 语音识别子程序 (22)
4.1.4 动作子程序 (22)
4.1.5 中断子程序 (24)
4.2 程序中需要说明的几个问题 (25)
4.3小结 (26)
结语 (27)
致谢 (28)
参考文献 (29)
附录 (31)
第一章绪论
1.1引言
所谓声控技术其实也就是利用语音识别技术来达到控制或者操作的一种技术,而语音识别技术这近五年来已经有很大的进步,最新的语音识别技术可以辨识90%以上的人类说出的字。

声控技术虽然是一项比较先进的技术,但不可否认的是,声控技术在无限传输时的合成的质量不是很好,它尚需进一步提高,因为无线环境中的背景噪音太大了,当然还有其他方面的因素影响着声控功能的发挥。

然而随着微电子技术、计算机技术、及传感器技术的迅速发展,现今声控技术应用广泛,这种崭露头角的声控技术,给严重伤残人的生活带来了极大的方便。

伤残病人用声音就可以打开门窗、窗帘、电视机、电灯等。

在其他领域里,声控技术也大有用武之地。

比如飞机在飞行或空战中,一旦飞行员负了伤,他可以用声音来驾驶飞机。

声音识别器将飞行员的讲话声音与贮存的声音相比较,只要声音一致,飞机就能自动地完成各种动作,从而化险为夷。

那么能不能做到“君子动口不动手”呢?本文介绍用凌阳单片机61A设计并制作的一套基于语音识别技术的声控小车。

1.2国内外研究状况
随着微电子技术、计算机技术、及传感器技术的迅速发展,现今声控技术已经应用到社会中的各个角落,为人们提供着各种便利。

1、声控玩具车:进一步提高系统的滤噪性能,和识别的准确率,并利用已有的软件开发出独具特色的语音芯片,并将其集成在遥控上即可做出声控玩具车。

2、能识别主人的看门狗:在本系统的基础上扩充对说话者的识别功能,并将软件硬件化,集成在芯片上。

将芯片置于防盗门上,使之可以完成主人叫门即开门的功能。

3、真实汽车上的声控系统:在驾驶的过程中,不便于用手来完成的其它操作可以用声控系统来实现。

这于我们的系统是极其相似的。

但是实际的汽车中可能存在这大量的噪声,所以,滤噪便成为最为关键的技术。

1.3存在的不足或有待解决的问题
声控技术虽然是一项比较先进的技术,但不可否认的是,声控技术在无限传输时的合成的质量不是很好,它尚需进一步提高,因为无线环境中的背景噪音太大了,当然还有其他方面的因素影响着声控功能的发挥,具体来说表现在以下几个方面:
1 、时效型。

从发出指令到执行指令,有一段延迟时间,虽已降低到尽可能的小,但还是很明显。

可行的方法就是改用高效的DSP芯片,这在经费上和时间上都是不允许的。

2.、对环境的适应。

如果环境噪声很大,或偶尔出现较大的噪声,则会出现误识。

这个不足之处还没有很有效的解决方案。

3、多人识别。

各人的发音不尽相同,因此该系统还限于单人识别。

若要做多人识别,则识别的时效性会降低,即有很大的延迟。

另外,多人识别,也没有较为有效、成熟的算法供参考。

1.4课题的目的任务和要求
声控小车其技术要求是通过相关语音对小车进行操作控制。

使用了“前、后、左、右、停”五个字作为小车行驶的指令。

本毕业设计有助于培养我们的独立动手能力、思考能力。

具体的项目制作过程分为两部分:软件部分和硬件部分。

其目的让我们熟悉61板的设计与制作,并掌握其原理;学会运用C语言进行编程且运用protel软件进行电子图的设计。

第二章设计方案论证
2.1系统总体方案
方案一:
采用MCS-51系列单片机实现,由于有语音识别和语音播放功能,所以需要扩展语音识别模块和语音播放模块,这样必然造成端口的资源紧张,所以还必须加入接口扩展芯片。

该实现方案结构如图 2-1所示。

图 2-1 采用MCS-51系列单片机实现语音控制小车
方案二:
采用SPCE061A实现语音控制小车方案,由于SPCE061A内部具有语音识别和语音播放功能,所以只需要扩展基本的MIC和语音功放即可,该方案结构如图 2-2所示。

图 2-2 基于SPCE061A的语音控制小车实现方案比较以上两个方案,方案二结构简单,易于操作,故选则方案二。

2.2系统硬件方案
系统的结构框图如图2-3示。

图 2-3 系统结构框图
系统组成主要包括以下两部分:SPCE061A精简开发板、语音小车控制电路板。

图中的语音输入部分 MIC_ IN、按键输入 KEY、声音输出部分的功率放大环节等已经做到了精简开发板——61 板上,为我们使用提供了很大的方便。

在电机的驱动方面,采用全桥驱动技术,利用四个 I/O端口分为两组分别实现两个电机的正转、反转和停三态运行。

2.3系统控制方案
小车的运动控制采用语音控制和中断定时控制相结合,通过语音触发小车动作,小车动作之后,随时可以通过语音指令改变小车的运动状态。

在每一次动作触发的同时启动定时器,如果小车由于某些原因不能正常的接收语音指令,则只要定时时间到,中断服务程序会发出指令让小车停下来。

2.4小结
本章对声控小车方案进行确认,最终确定以凌阳61板为主板,小车控制板为辅助板。

小车的控制采用语音控制和中断控制相结合。

语音控制:通过语音触发小车动作。

中断控制:通过设置小车行驶时间来控制小车中断。

第三章系统硬件设计
3.1SPCE061A 特性简介
SPCE061A 是凌阳科技研发生产的性价比很高的一款十六位单片机,使用它可以非常方便灵活的实现语音的录放,该芯片拥有 8 路 10 位精度的 ADC,其中一路为音频转换通道,并且内置有自动增益电路。

这为实现语音录入提供了方便的硬件条件。

两路 10 位精度的 DAC,只需要外接功放(SPY0030A)即可完成语音的播放。

另外凌阳十六位单片机具有一套易学易用的指令系统和集成开发环境,在此环境中,它支持标准 C语言编程,也支持 C 语言与汇编语言的互相调用。

另外还提供了语音录放的库函数,只要了解库函数的使用,就可以很容易的完成语音的录放、识别等功能,这些都为软件开发提供了方便的条件。

SPCE061A特性:
◆16 位μ’nSP 微处理器;
◆工作电压:内核工作电压 VDD为 3.0V~3.6V(CPU),I/O口工作电压
VDDH为 VDD~5.5V(I/O);
◆CPU时钟:0.32MHz~49.152MHz;
◆内置 2K字 SRAM;
◆内置 32K闪存 ROM;
◆可编程音频处理;
◆晶体振荡器;
◆系统处于备用状态下(时钟处于停止状态),耗电小于2μ******;
◆ 2 个 16 位可编程定时器/计数器(可自动预置初始计数值);
◆ 2 个 10 位 DAC(数-模转换)输出通道;
◆32 位通用可编程输入/输出端口;
◆14 个中断源可来自定时器 A / B,时基,2 个外部时钟源输入,键
唤醒;
◆具备触键唤醒的功能;
◆使用凌阳音频编码 SACM_S240 方式(2.4K位/秒),能容纳 210 秒的
语音数据;
◆锁相环 PLL 振荡器提供系统时钟信号;
◆32768Hz 实时时钟;
◆7 通道 10 位电压模-数转换器(ADC)和单通道声音模-数转换器;
◆声音模-数转换器输入通道内置麦克风放大器和自动增益控制(AGC)
功能;
◆具备串行设备接口;
◆低电压复位(LVR)功和低电压监测(LVD)功能;
◆内置在线仿真板
3.2精简开发板——61 板
“61 板”是SPCE061A EMU BOARD的简称,是以凌阳 16 位单片机 SPCE061A为核心的精简开发-仿真-实验板,大小相当于一张扑克牌。

“61板”除了具备单片机最小系统电路外,还包括有电源电路、复位电路、ICE 电路、音频电路(含 MIC 输入部分和 DAC 音频输出部分)等,“61 板”可以采用电池供电。

图 3-1 所示为该精简开发板的实物图。

图 3-1 61 板实物图
3.3车体介绍
语音控制小车为四轮结构,如图 3-2 所示。

其中前面两个车轮由前轮电机控制,在连杆和支点作用下控制前轮左右摆动,来调节小车的前进方向。

在自然状态下,前轮在弹簧作用下保持中间位置。

后面两个车轮由后轮电机驱动,为整个小车提供动力。

所以又称前面的轮子为方向轮,后面的两个轮子为驱动轮,如图 3-3 所示。

图 3-2 车体侧视图
图 3-3 车体侧视图
3.3.1小车的行走原理
直走:由小车的结构分析,在自然状态下,前轮在弹簧作用下保持中间状态,这是只要后轮电机正转小车就会前进。

如图 3-4 所示;
倒车:倒车动作和前进动作刚好相反,前轮电机仍然保持中间状态,后轮电机反转,小车就会向后运动,如图 3-5 所示;
左转:前轮电机逆时针旋转(规定为正转),后轮电机正转,这时小车就会在前后轮共同作用下朝左侧前进,如图 3-6 所示;
右转:前轮电机反转,后轮电机正转,这时小车就是会在前后轮共同作用下朝右侧前进,如图 3-7所示。

图 3-4 小车前进原理图
图 3-5 小车倒车示意图图 3-6 小车左转示意图
图 3-7 小车右转示意图
3.4控制板原理图
控制板主要包括:接口电路、电源电路和两路电机的驱动电路,控制板原理图如图 3-8 所示。

接口电路:接口电路负责将 61 板的 I/O 接口信号传送给控制电路板,I/O 信号主要为控制电机需要的IOB8~IOB11这四路信号,同时为了方便后续的开发和完善,预留了 IOB12~IOB15 以及 IOA8~IOA15 接口,可以在这些接口上添加一些传感器。

电源部分:整个小车有 4 个电源信号:电池电源,控制板工作电源,61板工作电源,61 板的 I/O输出电源。

系统供电由电池提供,控制板直接采用电池供电(VCC),然后经二极管 D1 后产生 61 板电源(VCC_61),通过 61 板的 Vio 跳线产生 61 板的端口电源(V1)。

二极管 D1 作用:
1、降压,4 节电池提供的电压 VCC 最大可达到 6V,D1 可有效地降压。

2、保护,D1 可以防止电源接反烧坏 61 板。

图 3-8 控制板原理图
3.4.1全桥驱动原理
全桥驱动又称 H桥驱动,下面介绍一下 H桥的工作原理:
H桥一共有四个臂,分别为 B1~B4,每个臂由一个开关控制,示例中为三极管
Q1~Q4。

如果让 Q1、Q2 导通 Q3、Q4 关断,如图 3-9 所示,此时电流将会流经 Q1、负载、Q2 组成的回路,电机正转。

图 3-9 B1、B2 工作时的 H 桥电路简图
图 3-10 B3、B4 工作时的 H 桥电路简图
如果让 Q1、Q2 关断 Q3、Q4 导通,如图 3-10 所示,此时电流将会流经 Q3、负载、Q4 组成的回路,电机反转。

如果让 Q1、Q2 关断 Q3、Q4 也关断,负载 Load 两端悬空,如图 3-11 所示,此时电机停转。

这样就实现了电机的正转、反转、停止三态控制。

如果让 Q1、Q2 导通 Q3、Q4 也导通,那么电流将会流经 Q1、Q4 组成的回路以及 Q2和 Q3 组成的回路,如图 3-12 所示,这时桥臂上会出现很大的短路电流。

在实际应用时注意避免出现桥臂短路的情况,这会给电路带来很大的危害,严重的会烧毁电路。

图 3-11 B1~B4 全部停止工作时的 H 桥简图
图 3-12 B1~B4 全部工作时的 H 桥简图
3.4.2动力电机驱动电路
动力驱动由后轮驱动实现,负责小车的直线方向运动,包括前进和后退,后轮驱动电路是一个全桥驱动电路,如图 3-13 所示:Q1、Q2、Q3、Q4 四个三极管组成四个桥臂,Q1 和 Q4 组成一组,Q2 和Q3 组成一组,Q5 控制 Q2、Q3 的导通与关断,Q6 控制 Q1 和 Q4 的导通与关断,而 Q5、Q6 由 IOB9 和 IOB8控制,这样就可以通过 IOB8 和 IOB9 控制四个桥臂的导通与关断控制后轮电机的运行状态,使之正转反转或者停转,进而控制小车的前进和后退。

图 3-13 后轮电机驱动电路
当 IOB8 为高电平、IOB9 为低电平时 Q1 和 Q4 导通,Q2 和 Q3 截止,后轮电机正转,小车前进;反之当 IOB8 为低电平、IOB9 为高电平时 Q1 和 Q4 截止,Q2 和Q3 导通,后轮电机反转,小车倒退;而当IOB8、IOB9 同为低电平时 Q1、Q2、Q3 和Q4 都截止,后轮电机停转,小车停止运动。

注意:IOB8 和 IOB9 不能同时置高电平,这样会造成后轮驱动全桥短路现象。

3.4.3方向电机控制电路
方向控制由前轮驱动实现,包括左转和右转,前轮驱动电路也是一个全桥驱动电路,如图 3-14 所示:Q7、Q8、Q9、Q10 四个三极管组成四个桥臂,Q7 和 Q10 组成一组,Q8 和 Q9 组成一组,Q11 控制 Q8、Q9 的导通与关断,Q12 控制 Q7 和 Q10 的导通与关断,而 Q11、Q12 由 IOB10 和IOB11 控制,这样就可以通过 IOB10 和IOB11 控制前轮电机的正转和反转,进而控制小车的左转和右转。

图 3-14 前轮电机驱动电路
当 IOB10 为高电平、IOB11 为低电平时 Q8 和 Q9导通,Q7 和 Q10 截止,前轮电机正转,小车前轮朝左偏转;反之当 IOB10为低电平、IOB11 为高电平时 Q8 和Q9 截止,Q7和 Q10 导通,前轮电机反转,小车前轮朝右偏转;而当 IOB10、IOB11 同为低电平时 Q8 和 Q9截止,Q7 和Q10 也截止,前轮电机停转,在弹簧作用下前轮被拉回到中间位置,保持直向。

注意:IOB10、IOB11 不能同时为高电平,这样会造成前轮驱动全桥的桥臂短路。

结合以上对前轮和后轮的状态分析,得到小车的运行状态与输入的对照表,如下表所示:
表 3.1基本的输入与小车运动状态对照表
另外还有一些不常用的运行状态,比如右后转、左后转等,结合以上对前轮和后轮的状态分析,其端口对照如表 3.2 所示:
表 3.2 输入与小车的运动状态对照表
注意:为了小车的安全请不要出现以下两种组合情况:
表 3.3 禁止的输入状态列表
3.5小结
本章是对小车的硬件进行设计。

小车为后轮驱动,通过前后轮电机来实现行走。

前轮电机控制前轮的方向,后轮电机控制后轮的驱动。

通过改变IOB的高低电平来控制电机的正反转。

第四章系统软件设计
4.1 系统的总体程序流程
系统的总体程序流程如图 4-1 所示:
图 4-1 系统总体程序流程图
语音识别小车的主程序流程如图 4-1 所示,分为四大部分:初始化部分、训练
部分、识别部分、重训操作。

初始化部分:初始化操作将 IOB8~IOB11 设置为输出端,用以控制电机。

必要时还要有对应的输入端设置和 PWM 端口设置等。

训练部分:训练部分完成的工作就是建立语音模型。

程序一开始判断小车是否被训练过,如果没有训练过则要求对其进行训练,并且会在训练成功之后将训练的模型存储到 Flash,在以后使用时不需要重新训练;如果已经训练过会把存储在 Flash 中的模型调出来装载到辨识器中。

识别部分:在识别环节当中,如果辨识结果是名字,停止当前的动作并进入待命状态,然后等待动作命令。

如果辨识结果为动作指令小车会语音告知相应动作并执行该动作,在运动过程中可以通过呼叫小车的名字使小车停下来。

重训操作:考虑到有重新训练的需求,设置了重新训练的按键(61 板的 KEY3),循环扫描该按键,一旦检测到此键按下,则将擦除训练标志位(0xe000 单元),并等待复位。

复位后,程序重新执行,当检测到训练标志位为 0xffff时会要求重新对其进行训练。

下面详细介绍以上提到的子程序。

4.1.1 语音识别的原理简介
在介绍子程序之前首先介绍一下语音识别的原理。

语音识别主要分为“训练”和“识别”两个阶段。

在训练阶段,单片机对采集到的语音样本进行分析处理,从中提取出语音特征信息,建立一个特征模型;在识别阶段,单片机对采集到的语音样本也进行类似的分析处理,提取出语音的特征信息,然后将这个特征信息模型与已有的特征模型进行对比,如果二者达到了一定的匹配度,则输入的语音被识别。

语音识别的具体流程如图 4-2 所示:
图 4-2 语音识别流程说明框图
4.1.2 训练子程序
当程序检测到训练标志位 BS_Flag 内容为 0xffff,就会要求操作者对它进行训练操作,训练操作的过程如图 4-3所示:训练采用两次训练获取结果的方式,以训练名字为例:小车首先会提示:给我取个名字吧,这时你可以告诉它一个名字(比如Jack);然后它会提示:请再说一遍,这时再次告诉它名字(Jack),如果两次的声音差别不大,小车就能够成功的建立模型,名称训练成功;如果没能够成功的建立模型,小车会告知失败的原因并要求重新训练。

成功训练名称后会给出下一条待训练指令提示音:前进,参照名称训练方式训练前进指令。

依次训练小车的名称—前进指令—倒车指令—左转指令—右转指令,全部训练成功子程序返回,训练结束。

图 4-3 训练流程图
下面是训练部分的子程序,在训练时如果训练不成功 TrainWord()返回值不为0,要求重复训练,只有当训练成功,TrainWord()返回 0,进行下一条指令训练。

V oid TranSD( )
{ 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);//训练3个动作
while(TrainWord(COMMAND_RIGHT_ID,S_ACT4)!=0);//训练第4个动作}
4.1.3 语音识别子程序
语音识别流程如图 4-4所示:首先获取辨识器的辨识结果,判断是否有语音触发,如果有语音触发则会返回识别结果的 ID 号,ID 号对应名称或者对应不同的动作。

如果 ID 号为名称,则结束运动(如果当前在运动状态),进入待命状态,等待下一次的指令触发;如果 ID 号为动作,则语音告知将要执行的动作,并执行该动作。

图 4-4 语音识别部分流程图
4.1.4 动作子程序
动作子程序包括:前进、倒车、左拐、右拐、停车子程序;
前进:由小车的结构原理和驱动电路分析知:只要 IOB8 为高电平,IOB9,IOB10,IOB11 全部为低电平即可实现小车的前进。

前进子程序包括语音提示、置端口数据、启动定时器操作,该部分程序如下:
voidGoAhead( ) //前进
{
PlaySnd(S_ACT1,3); //语音提示
*P_IOB_Data=0x0100; //前进
*P_INT_Mask|=0x0004; //开2Hz中断
_asm("int fiq,irq");
uiTimecont=0; //清定时器}
倒车:由小车的结构原理分析和驱动电路分析知:只要 IOB9 为高电平,IOB8,IOB10,IOB11 全部为低电平即可实现小车的倒退。

倒退子程序包括语音提示、置端口数据、启动定时器操作,程序如下:
V oid BackUp( ) //倒退
{
PlaySnd(s_ACT2,3); //语音提示
*P_IOB_Data=0x0200; //倒车
*P_INT_Mask|=ox0004; //开2Hz中断
_asm("int fiq,irq");
uiTimecont=0; //清定时器}
左转:由小车的结构原理分析和驱动电路分析知:小车左转需要两个条件:1.前轮左偏 2.后轮前进,这时对应的 I/O状态为:IOB8、IOB10为高电平,IOB9、IOB11为低电平。

左转子程序包括语音提示、置端口数据、启动定时器操作,该部分程序如下:
V oid TumLeft( ) //左转
{
PlaySnd(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为高电平,IOB9、IOB10为低电平。

右转子程序包括语音提示、置端口数据、启动定时器操作,该部分程序如下:
V oid TumRight( ) //右转
{
PlaySnd(S_GJG,3); //播放提示音
*P_IOB_Data=0x0900; //前轮右偏
Delay(); //延时
*P_IOB_Data=0x0500; //前轮左偏
*P_INT_Mask|=0x0004; //打开2Hz中断
_asm("int fiq,irq"); //允许总中断
uiTimecont=0; //清定时器}
注:在右转之前首先让前轮左偏,然后再让前轮朝右偏,这样前轮的摆动范围更大,惯性更大,摆幅也最大,能更好实现转弯。

4.1.5 中断子程序
虽然已经有了前进、后退以及停车(通过直接呼叫小车的名字使其停车)等语音控制指令,但是考虑环境的干扰因素,小车运行时的噪音影响和有效距离的限制,小车运行后可能接收不到语音指令而一直运行。

为了防止出现这种情况,加入了时间控
制,在启动小车运行的同时启动定时器,定时器时间到停止小车的运行,该定时器借助于2Hz时基中断完成,图 4-5所示为该程序的流程图。

可以在程序中修改uiTimeset参数来控制运行时间,当 uiTimeset=2 时,运行时间为 1s,以此类推。

图 4-5 2Hz定时中断子函数
4.2 程序中需要说明的几个问题
在程序中可能有几个地方不易理解,下面我向大家说明一下:
首先,小车有没有被训练过是怎么知道的?
在这里利用了一个特殊的 Flash 单元,语音模型存储区首单元(该示例程序中为 0xe000单元)。

当 Flash在初始化以后,或者在擦除后为 0xffff,在成功训练并存储后为 0x0055(该值由辨识器自动生成)。

这样就可以根据这个单元的值来判断是否经过训练。

其次,为什么已经训练过的系统在重新运行时还要进行模型装载?
在首次训练完成之后,辨识器中保存着训练的模型,但是系统一旦复位辨识器中的模型就会丢失,所以在重新运行时必须把存储在 Flash 中的语音模型装载到辨识
器(RAM)中去。

第三,在转弯时为什么前轮要先做一个反方向的摆动?
这是为了克服车体的限制,由于前轮电机的驱动能力有限,有时会出现前轮偏转不到位的情况,所以在转弯前首先让前轮朝反方向摆动,然后再朝目标方向摆动。

这样前轮的摆动范围更大,惯性更大,摆幅也最大,能更好实现转弯。

第四,关于语音的一些具体问题,关于语音的一些具体问题请参看 SPCE061A 相关书籍中关于语音的详细介绍。

4.3小结
本小车采用C语言进行编程,采用一个主程序和四个子程序控制方法对其进行控制。

本章通过部分主要程序对照说明的方式详细剖析了声控小车从程序到对其每一步的控制过程。

相关文档
最新文档