单片机课程设计凌阳spce061a声控小车.doc

上传人:文库蛋蛋多 文档编号:4147517 上传时间:2023-04-07 格式:DOC 页数:13 大小:294KB
返回 下载 相关 举报
单片机课程设计凌阳spce061a声控小车.doc_第1页
第1页 / 共13页
单片机课程设计凌阳spce061a声控小车.doc_第2页
第2页 / 共13页
单片机课程设计凌阳spce061a声控小车.doc_第3页
第3页 / 共13页
单片机课程设计凌阳spce061a声控小车.doc_第4页
第4页 / 共13页
单片机课程设计凌阳spce061a声控小车.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《单片机课程设计凌阳spce061a声控小车.doc》由会员分享,可在线阅读,更多相关《单片机课程设计凌阳spce061a声控小车.doc(13页珍藏版)》请在三一办公上搜索。

1、课程设计说明书(论文)课程名称: 设计题目: 院 系: 班 级: 设 计 者: 学 号: 指导教师: 设计时间: 课程设计任务书 姓 名: 院 (系): 专 业: 班 号: 任务起至日期: 年 月 日至 年 月 日 课程设计题目: 智能声控小车 已知技术参数和设计要求:已知技术参数:1. 凌阳SPCE061A型单片机最小开发系统一套,包括电源接口、IO接口、音频输出接口、MIC输入接口及程序下载接口;2. 小车额定工作电压4.5V(3节干电池)。 设计要求:1. 正确焊接电路板,完成单片机最小系统的调试;2. 利用61板实现语音控制小车的基本功能,包括前进、倒车、左拐和右拐的功能; 3.根据自

2、己能力,完成机器人附加功能。 工作量: 总工作时间为10天; 完成凌阳SPCE061A型单片机最小系统的焊接与调试工作;设计程序流程图并编写、调试程序;车体与单片机最小系统连接调试,完成设定的功能;最后撰写开题报告和结题报告各一份。 工作计划安排: 同组设计者及分工: 指导教师签字_ 年 月 日 教研室主任意见: 教研室主任签字_ 年 月 日*注:此任务书由课程设计指导教师填写摘要:本文对声控小车概况做了阐述。在硬件设计方面,本文以凌阳科技公司的SPCE061A单片机为控制核心,以语音小车控制电路板为辅,设计小车的动作。在软件方面,利用C语言进行编程,进行语音的“训练”和“识别”。设计出具有如

3、下功能的语音识别声控小车:能够根据录制的语音命令来控制小车的前进、后退、左拐和右拐。关键词:SPCE061A 语音识别 声控小车一、 引言所谓声控技术其实也就是利用语音识别技术来达到控制或者操作的一种技术,而语音识别技术这近五年来已经有很大的进步,最新的语音识别技术可以辨识90%以上的人类说出的字。声控技术虽然是一项比较先进的技术,但不可否认的是,声控技术在无线传输时的合成的质量不是很好,它尚需进一步提高,因为无线环境中的背景噪声太大了,当然还有其他方面的因素影响着声控功能的发挥。然而随着微电机技术、计算机技术及传感器技术的迅速发展,现今声控技术应用广泛,这种崭露头角的声控技术,给严重伤残人士

4、的生活带来了极大的方便。伤残人士用声音就可以打开门窗、窗帘、电视机、电灯等。本次试验我们就采用了凌阳SPCE061A单片机设计并制作了一套基于语音识别技术的声控小车。课设实验介绍声控智能玩具车电路是一种装载到普通的玩具车上对玩具车进行控制的电路。该电路可利用声控口令使玩具车前进,并发出闪烁灯光。设计目的:通过对声控智能玩具车的设计与调试,使学生掌握电子系统的设计方法、调试过程,学会对电机、单片机、扬声器、驱动电路的使用方法。二、 设计要求及技术指标设计一个玩具车控制电路,要求通过口令声或猝发声音信号转换成相应的电信号,控制玩具车启动、前进,通过一段延迟时间后,玩具车自动停止。基本部分:电路由声

5、/电转换电路、声控开关、单稳态触发电路、功率驱动电路和发声电路等组成;采用电容话筒或录音用的微型话筒接收音响;汽车发声可选择发出警车声、救护车声、消防车声等。三、 综合设计方法声控式智能玩具车控制电路如图1所示,主要由三个部分组成。第一部分声音接收和转换电路主要用于接收口令或猝发声音,并将其转换成相应的电信号,经过放大整形驱动后级电路进行控制;第二部分控制电路接收信号后,发出控制信号启动电机,同时启动发声电路,并对玩具车行驶时间进行计时;第三部分主要由发声电路和计时电路组成,发声电路可发出任意一种或多种报警声音,计时电路是对玩具车开动到自动停止的时间段进行计时,时间长短可通过调节控制电路中相应

6、部分来进行。驱动电机发声电路声音接收及转换电路图1 声控智能玩具车电路计时电路控制电路设计方案:设计思路及工作原理采用凌阳SPCE061A单片机,利用它的高度集成性,完成对小车的控制。结构如图:凌阳单片机L298转向电机动力电机凌阳SPCE061A单片机选择凌阳单片机的原因:凌阳SPCE061A单片机内部集成了ICE,FLASH,SRAM,通用I/O接口,定时器/计数器,中断控制,CPU时钟锁相环,ADC,DAC输出,UART,SIO,低电压监测/低电压复位等模块。它将电路大大简化,节省小车空间,大大减小了系统复杂度。选择L298的原因:由于单片机的IO口驱动能力明显不足以驱动电机转动,所以采

7、用L298做一个过渡,一边是单片机,一边是电机,很好的解决了驱动问题。下面是L298的使用电路图。4.3车体介绍主要是对I/O口的读写控制。I./O数据与功能对应如下:I/O口转向电机驱动电机最终效果0010停止正转前进0001停止倒转倒车1010正转正转左拐0110倒转正转右拐 我们用IOB的0-3位控制电机,用8-11位控制灯。这是因为进过测试高位的驱动能力要更强,可以直接点亮LED灯。I/O口(二进制)I/O(十六进制)功能00000001000000100102前进00000010000000010201倒车0000100000001010080A左拐00000100000001100

8、406右拐四、 系统软件设计具体的主程序:/=#include s480.h#include bsrsd.h#defineP_IOA_Data (volatile unsigned int *)0x7000 #define P_IOA_Dir (volatile unsigned int *)0x7002#define P_IOA_Attrib (volatile unsigned int *)0x7003#define P_IOB_Data(volatile unsigned int *)0x7005 #define P_IOB_Dir(volatile unsigned int *)0x7

9、007 #define P_IOB_Attrib(volatile unsigned int *)0x7008 #define P_TimerA_Data(volatile unsigned int *)0x700A #define P_TimerA_Ctrl(volatile unsigned int *)0x700B #define P_TimerB_Data(volatile unsigned int *)0x700C #define P_TimerB_Ctrl(volatile unsigned int *)0x700D #define P_Watchdog_Clear(volatil

10、e unsigned int *)0x7012 #define NAME_ID 0x100#define COMMAND_GO_ID 0x101#define COMMAND_BACK_ID 0x102#define COMMAND_LEFT_ID 0x103#define COMMAND_RIGHT_ID 0x104#define S_NAME0/取名#define S_ACT11/前进#define S_ACT22/倒车,请注意#define S_ACT33/左拐#define S_ACT44/右拐#define S_RDY 5/Yeah#define S_AGAIN6/请再说一遍#def

11、ine S_NOVOICE7/没有听到任何声音#define S_CMDDIFF8/说什么暗语呀#define S_NOISY8/说什么暗语呀#define S_START9/准备就绪,开始辨识#define S_GJG 10/拐就拐extern unsigned int BSR_SDModel100;/外部变量BSR_SDModel100,辨识器自带extern void F_FlashWrite1Word(unsigned int addr,unsigned int Value);extern void F_FlashErase(unsigned int sector);/=/ 语法格式:

12、void Delay();/ 实现功能:延时/ 参数:无/ 返回值:无/=void Delay()unsigned int i;for(i=0;i0x3Fff;i+)*P_Watchdog_Clear=0x0001;/=/ 语法格式:void PlaySnd(unsigned SndIndex,unsigned DAC_Channel);/ 实现功能:语音播放函数/ 参数:SndIndex-播放语音资源索引号/DAC_Channel-播放声道选择/ 返回值:无/=void PlaySnd(unsigned SndIndex,unsigned DAC_Channel)BSR_StopRecogn

13、izer();/停止识别器SACM_S480_Initial(1);/初始化为自动播放SACM_S480_Play(SndIndex, DAC_Channel, 3);/开始播放一段语音while(SACM_S480_Status()&0x0001)!= 0)/是否播放完毕?SACM_S480_ServiceLoop();/解码并填充队列*P_Watchdog_Clear=0x0001;/清看门狗SACM_S480_Stop();/停止播放BSR_InitRecognizer(BSR_MIC);/初始化识别器/=/ 语法格式:int TrainWord(int WordID,int SndID

14、);/ 实现功能:训练一条指令/ 参数:WordID-指令编码/SndID-指令提示音索引号/ 返回值:无/=int TrainWord(unsigned int WordID,unsigned int SndID)int Result;PlaySnd(SndID,3);/引导训练,播放指令对应动作while(1)Result = BSR_Train(WordID,BSR_TRAIN_TWICE);/训练两次,获得训练结果if(Result=0)break;switch(Result)case -1:/没有检测出声音PlaySnd(S_NOVOICE,3);return -1;case -2:

15、 /需要训练第二次PlaySnd(S_AGAIN,3);break;case -3:/环境太吵PlaySnd(S_NOISY,3);return -3;case -4:/数据库满 return -4;case -5: /检测出声音不同PlaySnd(S_CMDDIFF,3);return -5;case -6: /序号错误return -6;default:break;return 0;/=/ 语法格式:void TrainSD();/ 实现功能:训练函数/ 参数:无/ 返回值:无/=void TrainSD()while(TrainWord(NAME_ID,S_NAME) != 0) ; /

16、训练名称while(TrainWord(COMMAND_GO_ID,S_ACT1) != 0) ; /训练第1个动作while(TrainWord(COMMAND_BACK_ID,S_ACT2) != 0) ; /训练第2个动作while(TrainWord(COMMAND_LEFT_ID,S_ACT3) != 0) ; /训练第3个动作while(TrainWord(COMMAND_RIGHT_ID,S_ACT4) != 0) ;/训练第4个动作/=/ 语法格式:void StoreSD();/ 实现功能:存储语音模型函数/ 参数:无/ 返回值:无/=void StoreSD() unsig

17、ned int ulAddr,i,commandID,g_Ret; F_FlashErase(0xe000); F_FlashErase(0xe100); ulAddr=0xe000;/*for(commandID=0x100;commandID0x105;commandID+)g_Ret=BSR_ExportSDWord(commandID);while(g_Ret!=0)/模型导出成功?g_Ret=BSR_ExportSDWord(commandID);for(i=0;i100;i+)/保存语音模型SD1(0xe000-0xe063) F_FlashWrite1Word(ulAddr,BS

18、R_SDModeli);ulAddr+=1;/=/ 语法格式:void StoreSD();/ 实现功能:装载语音模型函数/ 参数:无/ 返回值:无/=void LoadSD() unsigned int *p,k,jk,Ret,g_Ret;p=(int *)0xe000;for(jk=0;jk5;jk+)for(k=0;k100;k+)Ret=*p;BSR_SDModelk=Ret;/装载语音模型p+=1;g_Ret=BSR_ImportSDWord();while(g_Ret!=0)/模型装载成功?g_Ret=BSR_ImportSDWord();/=/ 语法格式:void GoAhead

19、();/ 实现功能:前进子函数/ 参数:无/ 返回值:无/=void GoAhead() /前进 unsigned int j;PlaySnd(S_ACT1,3);*P_IOB_Data=0x0102;for(j=0;j50;j+)/延时Delay();*P_IOB_Data=0x0000;/=/ 语法格式:void BackUp();/ 实现功能:后退子函数/ 参数:无/ 返回值:无/=void BackUp() /倒退unsigned int j;PlaySnd(S_ACT2,3);*P_IOB_Data=0x0201;/延时for(j=0;j50;j+)Delay();*P_IOB_Da

20、ta=0x0000;/=/ 语法格式:void TurnLeft();/ 实现功能:左转子函数/ 参数:无/ 返回值:无/=void TurnLeft() /左转unsigned int j;PlaySnd(S_GJG,3);*P_IOB_Data=0x080A;for(j=0;j30;j+)/延时Delay(); *P_IOB_Data=0x0802;for(j=0;j20;j+)/延时Delay();*P_IOB_Data=0x0000;/=/ 语法格式:void TurnRight();/ 实现功能:右转子函数/ 参数:无/ 返回值:无/=void TurnRight() /右转unsi

21、gned int j;PlaySnd(S_GJG,3);/延时*P_IOB_Data=0x0406;for(j=0;j30;j+)/延时Delay(); *P_IOB_Data=0x0402;for(j=0;j0)/有识别结果?if(Result=NAME_ID) /名称PlaySnd(S_RDY,3);/播放待命提示音Ready=1;/进入待命状态if(Ready=1)/待命状态?switch(Result)case COMMAND_GO_ID:/识别出第一条命令GoAhead();/执行动作一:直走Ready=0;break;case COMMAND_BACK_ID:/识别出第二条命令Ba

22、ckUp();/执行动作二:倒车Ready=0;break;case COMMAND_LEFT_ID:/识别出第三条命令TurnLeft();/执行动作三:左转Ready=0;break;case COMMAND_RIGHT_ID:/识别出第四条命令TurnRight();/执行动作四:右转Ready=0;break;default:break;if(*P_IOA_Data)&0x0004)/是否重新训练F_FlashErase(0xe000);while(1)/等待中断*P_Watchdog_Clear=0x0001;五、 参考文献1谢自美. 集成电路测试北京:高等教育出版社,2002.2张双庆等. 使用电子电路200例北京:机械工业出版社,2003.3陈永浦. 电子电路智能化设计实例与应用北京:电子工业出版社,2002.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号