.引言
随着计算机技术的发展,单片机作为计算机的一个分支,广泛用于工业控制、智能仪器、家用电气、高科技玩具等领域。语音技术的发展,缩短了人机界面的距离,增强了互动性和智能性。具有语音识别功能的智能遥控小车,集语音识别、无线遥控、机械控制于一体。以单片机为主控元件,完成前进、后退、转弯等预定的工作,但是一般的单片机不具备语音处理功能,需外挂专门的语音识别芯片,如采用集成语音识别芯片RSC-364来完成语音识别 [1],RSC-364是Sensory公司的一款8位MCU,很方便与51单片机连接,但是需要外接编解码电路,使得电路复杂化。采用凌阳公司具有语音处理功能的SPCE061A作为控制核心可以方便的实现语音控制[2~3],但由于将SPCE061A单片机置于小车车体内, 在小车运行时,电机及周围环境的噪音,会干扰对语音命令的识别,且距离稍远便会出现小车“听不到任何声音”。本文采用凌阳SPCE061A单片机结合红外线发射芯片TX-2B组成遥控部分,克服了芯片处于小车车体内会受到噪音影响的缺陷,对要实现远距离无线语音控制的设备具有一定的参考价值。
1.系统总体结构
本系统主要包括语音识别模块、红外遥控模块、电机驱动模块。系统总体结构框图如图1所示。凌阳SPCE061A单片机负责语音识别,接收到有效语音信号,将语音信号转换成数字信号传送给红外线发射芯片TX-2B,TX-2B发射的信号由红外接收芯片RX-2B接收后,经解码控制电机驱动电路,从而实现对小车的远距离语音遥控。 图1系统总体结构框图
1.1语音识别
凌阳SPCE061A单片机是一个16位结构的控制器,具有DSP运算功能,内置8通道10位A/D及2路D/A转换器,较高的处理速度使其能够具有数字语音识别的能力。软件编程采用C语言和汇编语言混合编程,集两种语言之优点于一体,简化了编程过程[4~5]。SPCE061A将语音模拟信号直接转换成电压信号,再经内置自动增益控制,内部ADC模块将信号转换为数字信号,经编码后存入存储器,与存储器中的原语音数字信号编码匹配,进行模式识别,若识别成功,则相应的命令由61AIOA 0~IOA 3传送给红外发射芯片TX-2B的控制端。
1.2 红外遥控
TX-2B/ RX-2B是士兰公司生产的配对使用的红外线发射和接收芯片,是一款专用于玩具小车的成对遥控芯片,采用CMOS工艺制造,功耗小,工作电压1.5-5V。TX-2B/RX-2B内部己含有编码电路和解码电路,无需在后续的电路中对接收到的信号进行软件编程解码,因此硬件电路简单。红外发射电路如图2所示,TX-2B中的1、4、5、14引脚分别为右转(RIGHT)、后退(BACKWORD)、前进(FORWORD)、左转(LEFT)控制端,接收从061A的IOA 0~IOA 3 发送的信号。红外接收电路如图3所示,RX-2B包括内置放大器、运算器及锁存器等。外接250 kΩ电阻形成RC振荡器,与发射电路的频率匹配。RX-2B接收信号后,经解码后将右转、左传、后退、前进的控制信号由对应的引脚6、7、10、11输出,传送给电机驱动电路,控制小车产生相应的动作。
1.3 电机驱动电路
小车为四轮结构,两个前轮为转向机构,控制小车左转、右转;两个后轮为前进、后退驱动轮。两个电机均采用直流小电机,驱动采用 H桥式功率驱动电路,该电路可以很方便的实现电机的正、反转的变化 [6],从而控制小车的左右转、前进、后退的状态变化。由于电路简单,这里不再赘述。
2.系统软件设计SPCE061A提供了很好的语音播放和录制机制以及简单的API接口编程,大大简化了小车的软件设计。在此主要阐述,语音辨识(包括:语音训练、语音识别)以及定时中断控制部分的软件设计。
2.1 语音辨识
凌阳SPCE061A将语音识别功能做成模块,通过API函数调用来实现,内带的SACM-LIB解决了语音文件占用存储空间大的问题。本设计采用SD模式,小车只能识别特定使用者的语音命令,语音辨识的过程包括语音训练和语音识别 [7]。具体包括以下几个步骤:
2.1.1 RAM初始化 调用int BSR_Delete SDGroup(0),用于SRAM初始化。当返回值为0,代表擦除成功。否则返回-1。
2.1.2 语音训练调用int BSR_Train (int WordID, int TraindMode),用于上电后的语音命令训练。 BSR_TRAIN_TWICE 表示每条指令训练两次。训练成功,返回值为0。
2.1.3 语音辨识
调用int BSR_InitRecognizer(int AudioSource),用于语音识别器初始化。语音识别器打开8KH Z采样频率的FIQ_TMA中断,开始将采样的语音数据填入语音识别器的数据队列中。
2.1.4 启动实时监控调用函数VoidBSR_EnableCPUIndicator(void) 启动实时监控,保证辨识器正常执行。
2.1.5 获取识别结果调用int BSR_GetResult(void),用于完成语音识别,并返回语音识别结果。返回值为0,无命令识别;返回值-1,识别器停止、未初始化;返回值-2,识别不合格;识别成功返回命令的序号。
2.1.6 停止识别调用void BSR_StopRecognizer(void),用于停止识别。调用此函数时,FIQ_TMA中断关闭。
小车语音训练流程图如图4所示。语音识别部分在main函数中,A口的设置即小车的逻辑控制部分放在InitIO.asm文件中。
2.2 定时中断 小车的运动控制采用语音控制和中断定时控制相结合,通过语音触发小车动作,小车行驶中可通过语音指令改变小车的运动状态。在每一次动作触发的同时启动定时器,如果小车由于某些原因不能正常的接收语音指令,则定时时间一到,中断服务程序就会发出指令让小车停下来。
3.结束语
设计完成的小车经测试,遥控有效距离可达 5米,对特定使用者语音识别可达95%以上,在有效范围内小车能够实时响应使用者的语音命令,实现前进、后退、左转及右转,且在每一次状态改变时会有语音应答,增强了互动性。在 10秒内若没有语音命令发布,小车会自动停止。
本设计的创新点在于采用了具有语音处理功能的凌阳 SPCE061A单片机与专用的红外遥控芯片TX-2B结合形成遥控电路,将声控与红外遥控相结合,增强了小车抗噪音能力,也增加了小车的可控距离,并且系统的实现方便简单。