声音引导系统完整版.docx
- 文档编号:26680752
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:18
- 大小:133.42KB
声音引导系统完整版.docx
《声音引导系统完整版.docx》由会员分享,可在线阅读,更多相关《声音引导系统完整版.docx(18页珍藏版)》请在冰豆网上搜索。
声音引导系统完整版
2009全国大学生电子设计竞赛题目B:
《声音导引系统》
参赛学生:
指导教师:
学校:
院系:
信息学院
声音导引系统设计与总结报告
摘要:
本文描述了声音导引系统的设计原理和实现方法。
该系统由AT89S52单片机控制,双直流电机双轮驱动小车。
通过NEC公司的ASSP电机控制芯片和单片机之间的串行通信实现可移动声源的运动。
主控制器利用不同声音接收器间产生的误差信号,并用无线通信方式将此误差信号传输至可移动声源,引导其运动。
到达目的地,发出声光信号。
系统最大特点在于软件设计采用层次化、模块化的设计方法,使得复杂数学模型和控制算法得以简化和快速开发。
经调试和测试,系统各项性能参数已基本达到设计指标。
且本系统在设计中注意低功耗处理和力求高性价比等细节。
关键词:
声音导引89S52单片机ASSP芯片算法
Abstract
ThissystemusetwoSTC12C5A60S2enhanced51-seriesmicrocomputer,doubledcmotordrivecaroutfit.Throughdifferentvoicesignalmethod-thepeak-troughreceivedfromvariousterminal,thecarofdistance,throughwirelesstransmissionmodulecontrolvehicle,andcontrolchipcarmovement,destination,asoundsignal.Thissysteminthedesignoflowpowerconsumptionandhighperformancetosuchdetails.
一、设计任务与要求
设计并制作一个声音导引系统,可移动声源运动的起始点必须在Ox线右侧,位置可以任意指定。
利用声音接收器和可移动声源之间的不同距离,产生可移动声源和目标线之间的误差信号,并利用无线通信方式将此误差信号传输至可移动声源,引导其运动。
二、系统整体设计方案比较与选择
根据题目要求,系统可以分为两个基本模块,由两片八位单片机分别实现,本声音导引系统的控制关键在于,精确检测误差信号,使可移动声源按要求运动。
系统示意图如下,初步分析设计方案:
方案一、在可移动声源向Ox线逼近时,把接收器A和B接收到声源的声音的强弱分别转换成它们与声源之间的距离,从而判断声源是否到达目的地。
方案二、启用单片机定时器,根据接收器A和B接收到声音的时间差来判断声源的位置,进而调节电机运行的速度,直至声源是否到达目的地。
方案分析:
鉴于方案一中声音的强弱受外界干扰太大,检测到的声音信号不定,而测量时间差则相对精确,所以本系统采用方案二。
三、设计与论证
1、电机运行速度设计
根据题目要求,可移动声源发出声音后开始运动,到达Ox线并停止。
要求平均速度大于5cm/s。
如上图1所示,鉴于此要求,可以采用霍尔传感器直接测出电机的转速,并将此速度反馈给辅控制单片机,由此来调节占空比,进而调节电机的转速。
但由于比赛时间有限,此方案并未落实。
2、误差信号的产生
声源发出声音并移动,辅助控制器控制A、B接收器同时启动,利用A、B接收器接收到声音的时间差来判断声源与Ox线之间的误差,若时间差大于零则说明声源与Ox线之间有误差,声源继续移动,直到时间差为零时停止。
3、控制理论简单计算
由上图1所示,声源从右至左行驶时,计声音接收器A、B接收到声源的时间分别为TAs、TBs。
其时间差为为TAs-TBs,主控制器将此时间差通过无线通信方式传给辅控制单片机,进而来调节PWM波的占空比。
从而改变电机的转速。
以达到由声音控制电机转速的目的。
直到TAs-TBs=0,声源停在Ox线。
四、电路设计
1、系统整体设计框
如图2所示:
本系统由两片单片机完成控制任务,电机控制ASSP芯片可以由硬件直接产生PWM波,因此主控制器单片机可以通过ASSP芯片产生的PWM波形来控制直流电机的运转,省去了用单片机产生PWM波,提高了编程效率。
只需再接上L298驱动电路,就可以轻松的达到控制直流电机的目的。
声源是通过主控制单片机的P3^7脚输出一定频率的波形,再经过放大电路放大,最终产生声音。
声音接收器接收声音并传给辅助单片机,辅控制器和主控制器之间无线传输信息。
进而判断声源的前进方向,并通过液晶显示器显示系统运行状态。
图2系统总体框图
2、单元电路设计
1)可移动声源及声音接收器
可移动声源的信号频率由单片机产生,经功率放大电路放大后由喇叭输出音频信号。
电路图如下:
图3声音发生器电路
音频接收处理
方案一:
由于声源离各接收站距离不等,所以各接收站收到声音信号所需时间不等,进而可以判断出小车方位,引导小车前进。
方案二:
由于声源离各接收站距离不等,所以各接收站收到声音信号的强度不等,通过AD转换器测出电压大小,进而可以判断出小车大概方位,引导小车前进。
由于接收站离主控单片机有1米距离,传输距离比较远,需要导线比较长,容易受分布电容等干扰,直接传输电压信号容易导致不精确,所以我们采用测时间差的方法。
通过MIC接收,音频信号经放大和滤波后再整形成方波,测出响应时间。
具体工作原理:
主控单片机通过无线给从机发送触发信息,并开始计时,当车载单片机接收到信号后发出4Khz音频信号。
当MIC接收到小车上发来的音频信号,从而停止计时,再根据声速便可测出声源距3个接收点之间的距离,通过主控单片机计算,给小车发送指令,引导小车到达目的地。
图4音频接收原理图
2)电机驱动电路设计
方案一、在电动机前段加电位器使之分压减少以降低转速,同时在前端并联一个电容可以使电动机缓慢加速,从而避免突然加速对系统的冲击,避免轮子打滑。
这种方案的缺点是调节转速需要人工手动调节电位器,非常不方便,小车刹车时由于电容放电,刹车也很缓慢,不能及时刹车。
方案二、采用专用集成电机控制芯片L298驱动电机,通过单片机调节MMC-1芯片产生PWM波的占空比,来控制L298的输入使之工作在占空比可调的状态,精确调整电动机转速。
综合以上两种方案,本系统采用方案二。
MMC-1为多通道两相四线式步进电机/直流电机控制芯片,基于NEC电子16位通用MCU固化专用程序实现,通过UART或SPI串行接口,为主控MCU扩展专用电机控制功能,可同时控制三路步进电机或直流电机。
用于直流电机控制时,通道输出频率固定为16KHZ,通过设定给定寄存器选定不同占空比,进而调节了两个直流电机的转速,直至达到设计要求,ASSP芯片通过L298驱动电路驱动两个直流电机运行。
由于ASSP芯片自身具有PWM输出,所以两台电机都采用PWM控制,通过调节占空比,实现电机的速度调节。
L298是双H桥高电压大电流功率集成电路,可以用来驱动2个直流电机或1个步进电机等感性负载。
采用L298作为电机驱动电路,可靠性高,可以方便的控制电机正反转。
单片机、ASSP芯片和L298的连接电路图如下:
图5单片机、ASSP芯片和L298的连接电路图
3)无线收发模块
方案一:
红外通信,红外通信器件易得,价格低廉,但必须直线收发是其致命弱点。
方案二:
采用nFR24L01无线通信模块,此无线通信协议工作于2.4~2.5GHzISM频段,数据传输率最快可达2Mb/s。
?
方案分析:
选用nFR24L01无线通信模块,确保通信的流畅性和准确性。
方案三、采用SUNRF-2051无线通信模块。
方案四、采用无线发射模块PT2262,接收模块采用PT2272超再生接收板。
?
方案分析:
超再生式接收板具有电路简单、性能适中、成本低廉的优点,接收电路自身辐射极小,加上电路模块背面网状接地铜箔的屏蔽作用,可以减少自身振荡的泄漏和外界干扰信号的侵入。
内含放大整形及解码电路,使用极为方便。
因此本系统采用方案?
。
3、电源设计
方案一、所有器件采用单一电源。
这样供电比较简单。
但是由于声源小车有两台电机,电动机起动瞬间电流很大,而且PWM驱动的电机电流波动较大,会造成电压不稳、有毛刺等干扰,严重时可能造成单片机系统掉电,缺点十分明显。
方案二、双电源供电。
将电机驱动电源与单片机以及其周边电路完全隔离,各自分别供电。
这样做虽然不如单电源方便灵活,但是可以将电机所造成的干扰彻底消除,提高了系统稳定性。
故本系统采用方案二。
五、软件设计
设可移动声源为S点,如果AS距离大于BS距离,则车向9点钟方向前进,如果AS距离小于BS距离,则车向3点钟方向倒车,如果AS等于BS,则说明小车在AB的中垂线上。
如果AS距离大于CS距离,则车向6点方向前进,如果AS距离小于CS距离,则小车向12点钟方向倒车,如果AS等于CS,则小车到达W点。
图6小车行驶示意图
图7系统整体流程图
六、运行情况测试
1、声源速度测试
测试工具:
秒表(精确度:
0.01S)、2米卷尺(精确度:
0.1mm)
2.测试方法
将声源置于图1所示OX线右侧任意位置,启动声源小车,声源发出声音,在该场地外用接收器接收声音信号。
通过改变小车的起始位置,测量小车走完全程所需时间,计算出平均速度。
3.测试数据
设小车离W点水平线的垂直距离为H,单位厘米。
测试结果如下:
次数
H(cm)
时间1/s
平均速度1/(cm/s)
时间2/s
平均速度2(cm/s)
误差(cm)
第一次
0
4.7
10.63
0
0
0
第二次
10
4.5
11.11
0.8
12.5
2.1
第三次
20
4.9
10.20
1.8
11.1
1.9
由测试结果可见,本小车基本达到题目的基本要求和发挥部分要求。
4.误差分析
小车有时并不能完全直线行走,略微有点跑偏,经分析原因有两个:
1)小车是新买的,齿轮磨合情况不同,导致两个轮子速度不一致。
2)因为小车上装置比较多,导致重心偏移,轮子受到的阻力不同,导致小车跑偏。
七.设计总结
本作品以两片STC12C5A60S2增强型51单片机为核心部件,通过个接收站收到音频信号的响应时间不同,配合一套完整的程序,实现了小车的精确定位。
在设计中,我们尽量采用低功耗器件,力求硬件电路的经济性和精简性,充分发挥软件控制灵活方便的特点,来满足设计要求。
八.参考文献
[1]全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品选编[M].北京理工大学出版社,2007
[2]黄开胜.学做智能车——挑战“飞思卡尔”杯[M].北京航天航空大学出版社,2007
[3]万福君,潘松峰.单片微机原理系统设计及应用[M].合肥:
中国科学技术大学出版社,2001
[4](日)森政弘,(日)铃木泰博.机器人竞赛指南[M].北京:
科学出版社,2002
[5]王灏,毛宗源.机器人的智能控制方法[M].北京:
国际工业出版社,2002
[6]张培仁,张志坚.基于16/32位DSP机器人控制系统设计与实现[M].北京:
清华大学出版社
九.附录
附1:
部分元器件清单
芯片:
STC12C5A60S2*2NEC_MMC*1L293*174LHC04*1,
LM386*3LM567*3TP521*1nFR24L01无线通信模块*2
MIC*3喇叭*1电阻电容若干导线若干
单片机最小系统
附2:
仪器设备清单
秒表米尺万用表函数信号发生器示波器
附3.:
程序清单
/********************************************************************************
*FileName:
carmotorSPI.C(beincludedinprojectfts-89c52.Uv2)
*
*BriefIntroduction:
2009年全国大学生电子设计竞赛本科组题目B中需要用到的对电机
控制芯片(C公司的MMC-1)的单片机控制程序。
单片机采用STC12C5A60S2芯片,接PWM或步进
电机波形产生芯片MMC-1,通过L293驱动芯片驱动直流电机。
*
*Author:
吴飞
*
*Date:
2009.9.2~2009.5
*
*Edition:
*
*note:
STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,
是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。
所以本系统中的延时程序delay_10us(ucharn);delay_ms(uintn);延时时间只有设定值的1/10左右!
!
!
!
********************************************************************************/
//#include
//fortheintended8051derivative*/
#include
//fortheintendedSTC12C5A60S2derivative*/
#include
#defineucharunsignedchar
#defineuintunsignedint
//==========================================
//定义空指令
#define_Nop()_nop_()
//==========================================
//端口定义
//uchartemp1,temp2;
sbitSPISO=P1^3;
sbitMOSI=P1^4;
sbitSPICLK=P1^5;
//变量定义
ucharmotor;
//常量定义
#definemotorL0x50//小车左轮直流电机受MMC电机通道0(CH1DCPWM及CH1DCDIR)
//0x50为该通道命令寄存器地址
#definemotorR0x54//小车右轮直流电机受MMC电机通道1(CH2DCPWM及CH2DCDIR)
//0x50为该通道命令寄存器地址
#definedirfront1
#definedirback0
//===========================================
//函数声明
voidWT_BYT_SPI(unsignedcharcByte);
voiddrivemotor(ucharmotor,ucharspeed,bitdir);
voidstopmotor(ucharmotor);
voiddelay_10us(ucharn);
voiddelay_ms(uintn);
//voidSPI_Write(chardat);
//unsignedcharRD_BYT_SPI(void);
//voidWT_WORD_SPI(unsignedintcWord);
voidmain()
{
EA=0;//关中断
delay_ms(10);//等待系统及MMC-1初始化
while
(1)
{
drivemotor(motorL,0x1F,dirfront);//fortesting
delay_ms(30000);
stopmotor(motorL);//fortesting
delay_ms(30000);
drivemotor(motorL,0x1F,dirback);//fortesting
delay_ms(30000);
stopmotor(motorL);//fortesting
delay_ms(30000);
}
}
/*********************************************************************
*FunctionName:
drivemotor
*Functiondescription:
驱动电机运转.可控制且必须依次正确填写以下输入参数。
*Parameter:
IN:
motor:
电机编号,取值范围---motorL、motorR;
speed:
电机转速等级,取值范围从慢到快为---0xff至0x0,注意顺序;
dir:
电机转动方向,取值范围---dirfront、dirback.
OUT:
void
**********************************************************************/
voiddrivemotor(ucharmotor,ucharspeed,bitdir)
{
ucharcommand;
if(dir==dirfront){command=0xc0;}
else{command=0xe0;}
WT_BYT_SPI(motor+3);
WT_BYT_SPI(speed);
WT_BYT_SPI(motor);
WT_BYT_SPI(command);
}
/*********************************************************************
*FunctionName:
stopmotor
*Functiondescription:
停止电机运转.可控制且必须依次正确填写要停止的电机编号。
*Parameter:
IN:
motor:
电机编号,取值范围---motorL、motorR;
OUT:
void
**********************************************************************/
voidstopmotor(ucharmotor)
{
WT_BYT_SPI(motor);
WT_BYT_SPI(0x40);
}
/*********************************************************************
*FunctionName:
WT_BYT_SPI
*Functiondescription:
向SPI总线写出一个字节。
*Parameter:
IN:
cByte:
写出的内容,取值范围---0x0至0xff;
OUT:
void
**********************************************************************/
voidWT_BYT_SPI(unsignedcharcByte)
{
unsignedchari;
SPICLK=0;
delay_10us(10);
for(i=0;i<8;i++)
{
if((cByte&0x80)==0)MOSI=0;
elseMOSI=1;
delay_10us(10);//根据MMC-1用户手册sck频率:
500HZ~100KHZ即周期0.2ms~10us
//注意定时时间约为1/10的10*10us即10us,周期为20us9
SPICLK=1;
delay_10us(10);
SPICLK=0;
cByte<<=1;
}
}
/*********************************************************************
*FunctionName:
delay_10us
*Functiondescription:
1.delayn*10us.
*Parameter:
IN:
void
OUT:
void
**********************************************************************/
voiddelay_10us(ucharn)
{do
{_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}while(--n);
}
/*********************************************************************
*FunctionName:
delay_ms
*Functiondescription:
1.delayn*1msfunction.
*Parameter:
IN:
void
OUT:
void
**********************************************************************/
voiddelay_ms(uintn)
{dodelay_10us(131);
while(--n);
//WDI=~WDI;
十、结束语
通过本次大赛,我们学到了很多在课本中学不到的知识,在实验室的实践经验让我们对单片机这门课有了更深的了解,同时也更快的掌握了单片机的运用。
声音导引系统就是通过两个单片机控制单元之间的无线通信来完成控制要求的。
这就更加体现了单片机控制的重要性。
相信单片机在控制领域中将会有更加广阔的应用前景。
由于比赛时间和现场条件的限制,发挥部分基本完成,有待于日后完善。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 声音 引导 系统 完整版