主程序流程
小车的主程序流程图如图4所示,主要分为四部分:初始化部分、训练部分、识别部分和重训操作。
图4 主程序流程图
初始化部分的初始化操作会将SPCE061A单片机上的IOB13~IOB10设置为输出端,用以控制电机。将其IOA的低8位IOA0~IOA7设置为下拉的输入端,用来连接按键。
训练部分完成的工作是建立语音模型。程序一开始会判断小车是否被训练过,如果没有训练过,系统会要求对其进行训练,并且会在训练成功之后将训练的模型存储到Flash中;如果已经训练过则会把存储在Flash中的模型调出,装载到辨识器中。
在识别环节当中,如果辨识结果是名字,直接置待命标志,然后等待动作命令。只有检测到待命标志,小车才会根据相应的辨识结果执行动作。如果没有待命标志,即使识别到动作命令也不会执行动作。小车在执行完对应的命令之后清除待命标志,结束待命状态。
考虑到有重新训练的需求,这里设置了重新训练的按键。程序运行时循环扫描该按键,什么时间检测到此键按下,则将擦除语音模型存储区首单元(0xe000)所在的页,等待复位到来。复位后,程序重新从头开始执行,当检测到语音模型存储区首地址为0xffff(擦除后的值)时,系统会要求重新对其进行训练。
FIQ中断服务程序
FIQ中断服务程序用来调用语音辨识子程序,并对a2000格式的语音进行解码播放。
调试及性能分析
系统的调试以程序为主。硬件调试时,首先检查电路的焊接是否正确,然后用万用表测试或通电检测。软件调试则需要分别进行主程序、FIQ中断服务程序、显示子程序等的编程及调试。本程序采用单片机汇编语言编写,用KEIL uVision2编译器编程调试。软件调试直到语音能够控制小车的行驶状态,并显示出小车的行驶距离等功能为止。
结语
本文设计的语音控制系统主要采用16位单片机SPCE061A来实现。软件编程则是采用C语言和汇编语言的混合编程来实现的,集两种语言的优点于一体,实现对硬件的实时控制。通过实验验证,该语音控制系统主要可实现以下功能:
(1) 可以通过语音命令来控制小车的行驶状态,实现前进、后退、左转、右转等功能;
(2) 显示小车的运行时间以及运行路程;
(3) 可以扩展控制板的调速环节,利用系统的PWM资源,实现小车的PWM调速;
(4) 预留多路开关型传感器接口,可以自行安装各类传感器,配合程序实现小车的循迹、避障等功能。