基于16位微控制器的小车语音控制系统
扫描二维码
随时随地手机看文章
引言
SPCE061A是一款16位微控制器,其高速的处理和特殊的内核结构使它能够非常快速地处理复杂的数字信号,同时其内嵌32KB的FLASH ROM和2KB的SRAM能够存储所需的数据和程序,特别是其所提供的语音识别函数可供方便地进行调用,不需要过多地考虑语音算法,为语音识别设计带来了很大的方便。本文选用SPCE061A作为该系统的控制核心,系统硬件结构如图1所示。
图1 系统硬件结构图
方案论证
主控模块和语音处理模块的选择
较MCS-51系列单片机而言, SPCE061A单片机内部集成有32KB的ROM、2KB的SRAM,更能满足软件对空间的要求,且不需要扩展相关存储器。另外,该类单片机完全支持C语言,软件编写比较方便,语音处理模块采用凌阳的语音压缩算法,也用软件来实现。该单片机内部集成有A/D、D/A转换功能,方便实现语音录放功能。
电机模块的选择
电机模块选择直流电机。与步进电机相比较而言,直流电机具有转速快、控制方便等特点,更能够满足小车较高速行驶情况的要求,如图2所示。
图2 电机控制模块原理图
测路程方案的选择
本文利用红外对管来实现对小车的路程测量。在小车的车轮转轴上安装一个不透光转盘,在转盘边缘均匀地打N个孔,当红外发射管发射的红外光经小孔照射到接收管时,接收管的反向端电平将发生变化,单片机通过检测这种电平的变化便可以自行计算出小车的运行路程。红外对管还具有体积较小、安装较霍尔传感器更方便、成本低等特点。
系统硬件结构
语音控制小车的系统硬件结构主要由两部分组成:一部分是SPCE061A精简开发板,另外一部分是电机控制板。SPCE061A精简开发板为系统主控模块,电机控制板则驱动小车的前后两个电机按系统的要求工作。
小车控制板主要包括接口模块、电机控制模块、预留传感器接口以及电源模块等几部分。其中,电源模块采用集成稳压芯片 L7805,在输出端(控制板的JP11)并接了一个470μF的去耦电容和一个 0.1μF的滤波电容,增强了系统电压的稳定性和抗干扰性能。
电机控制模块是整个控制板的核心部分,其根据61板的具体输出信号启动或停止相应的电机,并调整电机的正反转方向,实现小车的前进、倒退等功能。后电机的控制电路包括方向控制和速度控制两个单元,前电机的控制电路则只有方向控制单元。控制单元负责小车电机的正转、反转和停止三态控制。速度控制单元是扩展单元,以适应不同的场合需求。
红外对管测小车运行路程部分的原理图如图3所示。
图3 红外对管电路原理图
红外发光管D2和接收管U4安装在同一水平线上,发射管D2一直处于发射工作状态。当D2和U4间没有被挡住,即D2发射的红外线照射在U4上时,U4的2脚和3脚导通,同时2脚和1脚也导通,此时晶体管Q1的基极电压为Ub=VDD×R12/(R12+R10),Q1导通,SPEED端近似于接地,呈低电平状态。当D2和U4间被挡住时,即D2发射的红外线不能照射在U4上时,U4的2脚和3脚截止,同时2脚和1脚也截止,此时Q1的基极经电阻R12和R10接地,即基极电压为0V,此时Q1截止,SPEED端经电阻R11接到VDD,呈高电平状态。单片机通过检测这种高低电平的变化来实现小车的路程测量。
[!--empirenews.page--]软件部分
主程序流程
小车的主程序流程图如图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) 预留多路开关型传感器接口,可以自行安装各类传感器,配合程序实现小车的循迹、避障等功能。