1 引言 为了提高广大单片机爱好者学习单片机的兴趣,凌阳科技教育推广中心推出了应用SPCE061A作为主控制器,外加电机驱动电路制作的智能机器人。该机器人采用特定人语音识别对机器人进行控制,可以完成向前走、倒退、左转、右转、跳两首舞曲、向左瞄准、向右瞄准、发射、连续发射等功能。在此基础上,配合凌阳科技教育推广中心推出的超声波测距模组,为机器人增加了活动过程中实时检测前方障碍物、遇到障碍停止运动并向前方发射飞盘等功能,进一步丰富了机器人的功能,可以大大提高在校学生学习单片机的兴趣。 2 模组特性简介
2.1 SPCE061A特性简介
SPCE061A是凌阳科技研发生产的性价比很高的一款十六位单片机,使用它可以非常方便灵活的实现语音的录放系统,该芯片拥有8路10位精度的ADC,其中一路为音频转换通道,并且内置有自动增益电路。这为实现语音录入提供了方便的硬件条件。两路10位精度的DAC,只需要外接功放(SPY0030A)即可完成语音的播放。另外凌阳十六位单片机具有易学易用的效率较高的一套指令系统和集成开发环境。在此环境中,支持标准C语言,可以实现C语言与凌阳汇编语言的互相调用,并且,提供了语音录放的库函数,只要了解库函数的使用,就会很容易完成语音录放,这些都为软件开发提供了方便的条件:
特性:
16位μ'nSP微处理器;
工作电压:内核工作电压VDD为3.0~3.6V(CPU),IO口工作电压VDDH为VDD~5.5V(I/O);
CPU时钟:0.32MHz~49.152MHz;
内置2K字SRAM;
内置32K闪存ROM;
可编程音频处理;
晶体振荡器;
系统处于备用状态下(时钟处于停止状态),耗电小于2μA@3.6V;
2个16位可编程定时器/计数器(可自动预置初始计数值);
2个10位DAC(数-模转换)输出通道;
32位通用可编程输入/输出端口;
14个中断源可来自定时器A / B,时基,2个外部时钟源输入,键唤醒;
具备触键唤醒的功能;
使用凌阳音频编码SACM_S240方式(2.4K位/秒),能容纳210秒的语音数据;
锁相环PLL振荡器提供系统时钟信号;
32768Hz实时时钟;
7通道10位电压模-数转换器(ADC)和单通道声音模-数转换器;
声音模-数转换器输入通道内置麦克风放大器和自动增益控制(AGC)功能;
具备串行设备接口;
低电压复位(LVR)功和低电压监测(LVD)功能;
内置在线仿真板(ICE,In- Circuit Emulator)接口。 2.2 超声波模组简介
2.2.1 功能简介
三种测距模式选择跳线J1(短距、中距、可调距):
短距:20cm~100cm左右(根据被测物表面材料决定),精度1cm;
中距:70cm~400cm左右(根据被测物表面材料决定);
可调:范围由可调节参数确定,当调节在合适的值时,最远测距700cm左右; 2.2.2 电气参数
超声波传感器谐振频率:40KHz
模组传感器工作电压:4.5V~9V
模组接口电压:4.5V~5.5V 2.2.3 超声波发射电路原理图





◆提供给模组的电源必须在4.5V以上,而且尽量保持电源电压的稳定。
◆模组外接电源接口J3接入的电源不要超过12V。
◆模组工作的性能与被测物表面材料有很大关系,如毛料、布料对超声波的反射率很小,会严重影响测量结果。
◆模组的中距测距模式的精度与程序设计有关,提供的范例程序中没有对测距结果进行标定,所以有3~5cm的距离误差时是正常的。 2.3 机器人简介
2.3.1 机器人驱动电路图
机器人驱动电路图如图2-6所示:

◆通过语音命令对其进行控制;
◆可以跳两首舞曲;
◆走步功能、转向功能、转头功能;
◆发射飞盘功能; 2.3.3 机器人实物图

◆机器人在发射飞盘时不要面向人,避免受伤
◆机器人要轻拿轻放应该避免摔打
◆在安装电池时注意正负极,否则容易烧坏机器人电机或主控制板 3 系统总体方案介绍
用61板来控制机器人,使用了IOA7-IOA15以及IOB2和IOB9资源,另外使用了扬声器。如图3-1所示:

在主函数中调用相关函数完成特定人语音的训练,然后在训练成功后进行语音识别,根据识别的命令执行相关的操作。程序流程如图4-1所示:

避障的实现是在机器人活动期间完成的。
在机器人活动期间会播放背景声音或音乐。播放采用后台方式,使用4096Hz时基中断处理语音解码。这样可以释放大量CPU资源在前台处理其他事务。
语音播放函数流程图如图4-2所示。




步骤三:打开机器人的电源,进行语音训练,训练过程按照下面进行:
按顺序训练以下15条指令:"名称","开始","准备","跳舞","再来一曲","开始","向前走","倒退","右转","左转","准备","向左瞄准","向右瞄准","发射","连续发射"。每条指令要训练两遍。当一条指令被正确识别时会提示进入下一条;如没有被识别会要求重复该指令,直到正确识别为止。
步骤三:如果训练成功则进入语音识别状态,如果训练没有成功则重复训练。由于SPCE061A的FLASH存储器只有32K,所以15条指令需要分组存放。在这里分成3组,每组5条指令。在不同组指令中交换需要根据触发名称,所以在识别状态,要执行动作首先需要触发名称,就是训练的第一条命令,然后可以识别第一组的其余四条命令。在触发第一条指令,然后再触发第二条指令,就可以识别第三条指令,参考下图:
