摘 要:利用凌阳16位单片机的特性, 根据语音识别的基本原理, 设计了一种语音控制机器人, 利用C语言和汇编语言进行系统软件编程,最终完成了可以通过对语音的识别,自动完成向前走、倒退、左转、右转、跳舞、向左瞄准、向右瞄准、发射、连续发射等功能的智能机器人的设计。
关键词:语音识别 语音控制 单片机
语音是人类交流的最自然、最方便的手段,因而也必然成为人与计算机之间交流最自然、最方便的手段之一。随着语音技术的发展和成熟,利用语音识别技术进行对各种设备的控制已成为当今识别技术的研究的前沿课题和发展方向之一。语音识别技术近几年来的飞速发展,无论是语音识别的识别效果、识别方式的多样化、抗噪声性及功能价格比等方面均有了质的变化,已经达到全面应用的阶段;特别是陆续推出的低价位、高识别性能、具有SD、SI、SV、SA等丰富语音识别内容的语音识别处理器,掀开了语音识别技术在电子产品普及应用的新局面。
能听话、讲话、唱歌的机器人才是真正的智能机器人,凌阳SPCE061A单片机提供的语音识别软件模块是极好的语音识别控制平台,实现了语音控制机器人的目的[1]。本设计就是在这样的基础上,利用凌阳SPCE061A单片机技术实现语音识别的控制系统,采用人声控制,使操作向简单,方便,高效发展。
一、凌阳SPCE061A单片机的主要特点
SPCE061A 是凌阳科技公司µ’nSPTM (Microcontroller And Signal Processor) 系列产品中的16位微控制器芯片, 内置32k闪存, 其较高的处理速度使芯片能够非常容易、快速地处理复杂的数字信号, 适用于数字语音识别等应用领域。在2.6V~3.6V工作电压范围内, SPCE061A 的工作速度范围为0.32~49.152MHz, 具备8通道10位ADC 输入功能,内置的具有自动增益控制的麦克风输入功能,双通道10位DAC音频输出功能及A、B两个I/O口输入输出功能[2]。
语音处理功能: SPCE061A的语音处理功能是由凌阳公司自行开发的具有音频编解码及各种语音压缩算法实现的。各种算法相应的程序模块存放在语音算法库SCAM-LIB中, 使用时只需调用相应的模块就可方便地实现语音合成、语音播放、录音、识别等功能。
A/D 转换功能: SPCE061A内部集成了8 通道10 位的A/D 转换器, 采用逐次逼近原理实现模/数转换, 在检测连续变化的模拟量, 如温度、压力、流量、转速、声音、亮度时非常方便, 在语音类仪器仪表、家用电器中得到较好的应用。
开发调试方便: SPCE061A的开发是通过在线调试器PROBE 实现的。它既是一个编程器(即程序烧写器) , 又是一个实时在线调试器, 因此在其应用项目开发调试中非常方便。
二、语音控制机器人系统组成
1.硬件组成
图1 系统总体框图
凌阳SPCE061A单片机不仅具有体积小、集成度高、可靠性好且易于扩展;较强的中断处理能力;高性能价格比;低功耗、低电压等优点外,还有很强的模块化,例如:位操作模块、自动语音录音以及播放模块。另外,它还配有专门的编译环境IDE,这些都为软件的设计提供了方便。在硬件方面,单片机有输入输出端口,这就方便了单片机与机器人、计算机的连接。利用凌阳SPCE061A单片机作为整个系统的主控板[3],驱动机器人中的五个电机和机器人头部的扬声器。另外增加了特定人语音识别的功能,通过命令来控制机器人,使机器人智能化。
系统的总体框图如图1所示。
系统将完成的功能为:(1)通过语音命令对其进行控制(2)跳舞模式(3)走步功能、转向功能、转头功能(4)发射飞盘功能2.软件组成
图2 软件流程图
对于智能机器人软件编程是重要的一环。在软件方面,需要利用C语言和汇编语言在IDE编译环境下对单片机进行编程,主要采取主函数调用子函数的形式。在主函数中,定义在不同的识别结果运行那一个子函数;在子函数中,对各个功能模块进行定义。另外,还需要定义头函数和语音资源模块,在头函数主要定义系统涉及到的中断和存储模块,在语音资源模块主要定义系统所涉及的语音资源,方便在程序中调用。
通过利用集成开发环境IDE提供的大量库函数以及C语言、汇编语言的软件编程语句,对机器人所涉及的接口、芯片等硬件和如何根据命令完成各项动作进行编程。软件编程的主要形式就是在主函数中调用相关子函数完成特定人语音的训练,然后在训练成功后进行语音识别,并根据识别的命令进行相关的操作[4]。
在程序的编制过程中,由于要用到许多函数,不仅要用到C语言的,还需要用到汇编语言的一些指令,所以为了简化程序的编制流程,在设计时,定义了许多模块,便于程序中的调用。整个软件设计基本思路是:程序开始以后,首先初始化IOB端口,在判断是否第一次下载,如果是第一次下载不需要擦除闪存FLASH,直接进入语音识别阶段;否则,就要首先擦除闪存中的内容,进入语音训练与存储阶段,完成后置相关位,再进入语音识别阶段。在语音识别阶段,由于命令比较多,采用了分组方式,每组都是以机器人的名字为触发指令,然后根据识别器识别的结果,执行对应组中的命令。在识别过程中,还需要考虑到延时问题,如果出现延时,就消除触发标志,重新返回语音识别初始化阶段,这就是整个程序的流程如图2所示。