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 超声波发射电路原理图
图 2-1 超声波谐振频率调理电路原理图
由单片机产生40KHz的方波,并通过模组接口(J4)送到模组的CD4049,而后面的CD4049则对40KHz频率信号进行调理,以使超声波传感器产生谐振。
2.2.4 超声波回波接收处理电路
图 2-2 超声波回波接收处理电路
超声波接收处理部分电路前级采用NE5532构成10000倍放大器,对接收信号进行放大;后级采用LM311比较器对接收信号进行调整,比较电压为LM311的3管脚的输入,可由J1跳线选择不同的比较电压以选择不同的测距模式。
2.2.5 电源接口
图 2-3 超声波模组的电源接口电路
为外部电源接口,最高电压不要超过12V,J2为电源选择跳线,VCC_5即为由61板通过10PIN排线引入模组的电源;VCC即为模组的放大器、调理电路的供电电源。当用户使用61板为其供电时,要把VCC与VCC_5V短接;而使用外部电源时,要把VCC与VCC_IN短接。
2.2.6 测距模式选择跳线
图2-4 超声波测距模式选择跳线电路
模组提供了测距模式选择跳线J1,可以选择短距测量模式、中距测量模式,或距离可调模式。跳线选择LOW时为近距测量模式,选择HIG时为中距测量模式;选择SET时为距离可调模式。凌阳科技大学计划提供了短距测量模式和中距测量模式的完整程序(其中ultrasonic_Low为短距测量模式程序;ultrasonic_long为中距测量模式程序)。
2.2.7 模组接口
图 2-5 超声波模组接口电路
用户只需要把前面的电源输入跳线J2、测量模式选择跳线J1设置好后,用排线把J5与SPCE061A的IOB口低八位相接,J4与IOB口高八位相接,即可使用了。
2.2.8 注意事项
◆提供给模组的电源必须在4.5V以上,而且尽量保持电源电压的稳定。
◆模组外接电源接口J3接入的电源不要超过12V。
◆模组工作的性能与被测物表面材料有很大关系,如毛料、布料对超声波的反射率很小,会严重影响测量结果。
◆模组的中距测距模式的精度与程序设计有关,提供的范例程序中没有对测距结果进行标定,所以有3~5cm的距离误差时是正常的。
2.3 机器人简介
2.3.1 机器人驱动电路图
机器人驱动电路图如图2-6所示:
图 2-6 机器人驱动电路图
机器人驱动电路采用功率较大的三极管搭成H桥来驱动电机,可以实现电机的正向旋转与电机的反向旋转。这些电机包括2个用于走路的电机与一个头部转向的电机。另外用了一个三极管驱动单向旋转的电机,包括加速电机与发射电机,驱动电路比较简单。
2.3.2 主要功能
◆通过语音命令对其进行控制;
◆可以跳两首舞曲;
◆走步功能、转向功能、转头功能;
◆发射飞盘功能;
2.3.3 机器人实物图
图 2-7 机器人实物图
2.3.4 注意事项
◆机器人在发射飞盘时不要面向人,避免受伤
◆机器人要轻拿轻放应该避免摔打
◆在安装电池时注意正负极,否则容易烧坏机器人电机或主控制板
3 系统总体方案介绍
用61板来控制机器人,使用了IOA7-IOA15以及IOB2和IOB9资源,另外使用了扬声器。如图3-1所示:
图 3-1 系统的结构框图
系统主要由61板、超声波测距模组和机器人驱动电路构成。61板作为整个系统的主控板,超声波测距模组在机器人运动期间定期检测前方是否存在障碍物,驱动电路驱动电机,在主控板61板的控制下完成各个动作。另外增加了特定人语音识别的功能,通过命令来控制机器人,使机器人智能化。
4 系统软件设计
在主函数中调用相关函数完成特定人语音的训练,然后在训练成功后进行语音识别,根据识别的命令执行相关的操作。程序流程如图4-1所示:
图 4-1 主程序流程图
根据FLASH中的标志位来进行判断是否为第一次下载。使用库函数BSR_ExportSDWord(uiCommandID)将训练好的语音模型导出存储到FLASH中进行操作,然后再调用读写FLASH函数。在进行语音识别时,首先读取FLASH将语音模型取得,然后调用BSR_ImportSDWord(uiCommandID)函数将语音资源载入内存。在识别出命令后,执行相关动作,相关动作操作就是操作电机的正向或反向旋转同时配合延时与播放声音组合起来形成不同的动作。
避障的实现是在机器人活动期间完成的。
在机器人活动期间会播放背景声音或音乐。播放采用后台方式,使用4096Hz时基中断处理语音解码。这样可以释放大量CPU资源在前台处理其他事务。
语音播放函数流程图如图4-2所示。
图 4-2 语音播放程序流程图
在4096Hz时基中断中进行的处理流程如图4-3所示。
图 4-3 语音播放中断服务程序流程图
在播放背景音乐的同时,程序将调用超声波测距函数进行机器人前方障碍物检测。测距函数利用TimerB产生40KHz的PWM方波驱动超声波发射传感器。当接收传感器接收到回波后经过处理电路处理将引起SPCE061A的外部中断,计算从发射超声波到产生中断的时间,即可计算出目标物体的距离。测距函数流程如图4-4所示。
图 4-3 语音播放中断服务程序流程图
在播放背景音乐的同时,程序将调用超声波测距函数进行机器人前方障碍物检测。测距函数利用TimerB产生40KHz的PWM方波驱动超声波发射传感器。当接收传感器接收到回波后经过处理电路处理将引起SPCE061A的外部中断,计算从发射超声波到产生中断的时间,即可计算出目标物体的距离。测距函数流程如图4-4所示。
图4-5 编译、链接图
步骤二:下载程序代码到机器人的61板上。
步骤三:打开机器人的电源,进行语音训练,训练过程按照下面进行:
按顺序训练以下15条指令:"名称","开始","准备","跳舞","再来一曲","开始","向前走","倒退","右转","左转","准备","向左瞄准","向右瞄准","发射","连续发射"。每条指令要训练两遍。当一条指令被正确识别时会提示进入下一条;如没有被识别会要求重复该指令,直到正确识别为止。
步骤三:如果训练成功则进入语音识别状态,如果训练没有成功则重复训练。由于SPCE061A的FLASH存储器只有32K,所以15条指令需要分组存放。在这里分成3组,每组5条指令。在不同组指令中交换需要根据触发名称,所以在识别状态,要执行动作首先需要触发名称,就是训练的第一条命令,然后可以识别第一组的其余四条命令。在触发第一条指令,然后再触发第二条指令,就可以识别第三条指令,参考下图:
图 4-6 机器人操作示意图
步骤四:在机器人前进、倒退、跳舞时,用手或其他物体靠近机器人前方,机器人会发出"HoHooHoHoo"的声音,并停止动作,接着,向前方发射飞盘。
应用SPCE061A外加电机驱动控制电路可以实现多个电机的控制,完成机器人的许多动作。配合超声波传感器等感测装置,可以为机器人增加更多的功能。单片机爱好者可以自己制作电机驱动电路,选择多式多样的传感器,发挥想象力制作出自己的机器人。
本文网址: