1 系统的总体设计方案及硬件设计
1. 1系统的总体设计描述
本设计以凌阳单片机SPCE061A为核心控制部件,采用减速直流电机LS17RU419i、电机驱动芯片L298N、红外线光电传感器ST178等为主要元件,以智能控制技术为理论基础,通过程序利用SPCE061A的语音模块,根据麦克风采集的语音信号与事先训练好的语音库的特征语音进行对比,进行语音辨识并通过语音命令小车行进、转向及倒库等操作。音控小车总体结构如图1所示。
1. 2系统的核心部件
SPCE061A 芯片内部集成了 ICE、FLASH、SRAM、通用 I/O 端口、定时器/计数器、中断控制、CPU 时钟锁相环、ADC、DAC输出、UART、SIO、低电压监测/低电压复位等模块[2-3]。SPCE061A可以使外围电路大大简化,节省小车内部的空间,并且凌阳单片机具有语音功能,可以加入语音识别模块。
1. 3 小车电机驱动设计
L298是SGS公司的产品,L298N为15个管角的单块集成电路,高电压,高电流,四通道驱动,设计用L298N来接收DTL或者TTL逻辑电平,驱动感性负载(比如继电器,直流和步进马达)和开关电源晶体管。内部包含4通道逻辑驱动电路,其额定工作电流为 1 A,最大可达 1.5 A,Vss 电压最小 4.5 V,最大可达 36 V;Vs 电压最大值也是 36 V。L298N可直接对电机进行控制,无须隔离电路,可以驱动双电机。根据L298N芯片的特点以及SPCE061A自身的特点,把IOA4~IOA7作为输出口,分别与L298N的IN1~IN4相接,其VS、VSS分别接+12 V、+5 V电源,其输出口OUT1~OUT2接转向电机,OUT3~OUT4接驱动电机,根据设计要求,结合所编好的程序,根据所发语音命令,接收信号,便可给[P_IOA_DATA]传送数据,从而控制转向电机和驱动电机。其连接图如图2所示。
1. 4车身微调装置
车身的微调装置采用红外线光电传感器ST178,ST178由4个管脚组成,是集发射和接收于一体的传感器。发射和接收管分别采用高发射功率红外线光电二极管和高灵敏度光电晶体管组成。工作的范围可达到4 mm~10 mm左右,采用非接触监测的方式。
经过反复试验证实,ST178红外线光电传感器的发射管要加500 Ω的电阻用来限流,而接收管则要接20 kΩ上拉电阻,两管均接5 V电源,工作时电压达到4.8 V,当距离发射头或接收头1cm左右的位置有障碍物阻挡时电压迅速降到1 V。具体电路如图3所示。
1. 5系统硬件部分设计
音控小车主要由电机和电机驱动部分组成,电机有2个分别用来控制后轮的驱动和前轮的转向,采用芯片L298做为电机的驱动电路,可以驱动双电机。小车为4轮结构,其中前面2个车轮由前轮电机控制,在连杆和支点作用下控制前轮左右摆动,来调节小车的前进方向。在自然状态下,前轮在弹簧作用下保持中间位置。后面2个车轮由后轮电机驱动,为整个小车提供动力,所以又称前面的轮子为方向轮,后面的两个轮子为驱动轮。利用直流减速电机控制小车的驱动,可以不考虑调速,利用步进电机控制小车的转向来提高小车的整体性能,具有很高的性价比。供电电源选用3块4 V手机电池串联成12 V电源给小车提供电能。车身装有5个传感器在不同方向用来进行微调,防止撞壁。小车前进过程中当接收到语音命令时,可执行行进、转向及倒库等操作。
本设计最终实现了对音控小车的设计,图4所示是基于凌阳单片机语音控制小车的实物图,其具体结构是1喇叭、2车轮、3凌阳单片机、4光电传感器、5电池及驱动板、6电机。
2系统的软件设计
2. 1语音识别模块设计
小车的语音识别模块选用凌阳科技公司SPCE061A开发板。SPCE061A内嵌7通道10位电压A/D转换器(ADC)和单通道声音A/D转换,声音A/D转换器输入通道内置麦克风放大器和自动增益控制功能,其本身已经成为基本的语音处理平台。本系统采用A2000模块,其语音压缩编码率为24 kb/s,采样频率为16 kHz[4]。
语音识别主要分为“训练”和“识别”两个阶段。在训练阶段,单片机对采集到的语音样本进行分析处理,从中提取出语音特征信息,建立一个特征模型;在识别阶段,单片机对采集到的语音样本也进行类似的分析处理,提取出语音的特征信息,然后将这个特征信息模型与已有的特征模型进行对比,如果二者达到了一定的匹配度,则输入的语音被识别。
语音识别小车过程分为以下4大部分:
(1)初始化部分:初始化操作将 IOB8~IOB11 设置为输出端,用以控制电机。必要时还要有对应的输入端设置。整个小车的行驶状态由2个电机来控制,电机1控制左拐和右拐,电机2控制前进、倒退。具体行使状态控制如表1所示。
(2)训练部分:训练部分完成的工作就是建立语音模型。程序一开始判断小车是否被训练过,如果没有训练过则要求对其进行训练,整个训练过程共有 5 次,依次为:名称—前进—倒车—左拐—右拐。在训练成功之后将训练的模型存储到 FLASH,在以后使用时不需要重新训练;如果已经训练过会把存储在 FLASH 中的模型调出来装载到辨识器中。
(3)识别部分:在识别环节当中,如果辨识结果是名字,停止当前的动作并进入待命状态,然后等待动作命令。如果辨识结果为动作指令,小车会语音告知相应动作,并执行该动作,在运动过程中可以通过呼叫小车的名字使小车停下来。
(4)重训操作:考虑到有重新训练的需求,设置了重新训练的按键(61 板的 KEY3),循环扫描该按键,一旦检测到此键按下,则将擦除训练标志位(0xe000 单元),并等待复位。复位后,程序重新执行,当检测到训练标志位为 0xffff 时会要求重新对其进行训练。小车训练流程图如图5所示[5]。
2. 2系统的软件设计流程图
系统的软件设计流程如图6所示。本设计采用C语言和汇编语言联合编程的方法。其中,C语言作为主程序编程,可以充分利用C语言的优点,调用其他程序模块。汇编语言主要用在子程序的模块中,利用它的中断、延时等方面的优点。汇编语言的主要优点是占用硬件资源少、程序直接对硬件操作加快了处理速度。本设计的所有程序均在凌阳单片机集成开发环境IDE中进行。本系统的软件部分采用模块化程序结构,其软件设计主要包括初始化、系统主程序、语音提示程序、小车微调程序等部分。
本文设计并制作的小车以凌阳单片机为控制核心,完成了语音辨识功能,并在实现语音控制的基础上扩展了SPCE061AI/O接口,实现了紧急避障微调功能,能够按照语音指令很好地完成前进、倒车、左转、右转以及倒库。能够识别人的语音命令,并根据命令的含义执行相应的动作。整个部分设计合理,小车运行正常。