《基于AVRmega16单片机作小车的检测和控制设计.docx》由会员分享,可在线阅读,更多相关《基于AVRmega16单片机作小车的检测和控制设计.docx(12页珍藏版)》请在第一文库网上搜索。
1、B甲141摘要本系统采用自制的电动小车,作为可移动声源的运动平台,以AVRmega16单片机作为小车的检测和控制核心,以NEC公司的电机控制ASSP芯片MMC-I驱动电机。通过蜂鸣器产生周期性音频信号,麦克作为声音接收器。误差信号由无线模块传输至可移动声源,并引导其运动。整个系统结构清晰,经测试,完成了题目所要求的各项指标且运行可靠。关键字:VRmega16;ASSP芯片MMCT;声音定位;无线模块AbstractThissystemadoptsdynamoe1ectricsma11carmadebyourse1vesasamobi1esoundsourcemovingp1atformandt
2、akesAVRmega16asthecontro1andcenter.ThetwomotorsaredrivenbyICASSPMMC-IofNECcompany.Thereisabuzzertoproducetheperiodicsigna1andaMICmicrophoneisusedasthesoundreceiver.Theerrorsigna1istrans1atedthroughthewire1essmodu1etotransportab1eacousticsourcetoguideitsmovement.Thewho1esystemwithc1eatstructurehasbee
3、ntestedtocomp1etea11thedesignofthistopicrequestedbythevariousindicatorsandre1iab1eoperation.Keyword:AVRmega16;ASSPMMC-I;buzzer;wire1essmodu1e声源模块1系统方案1.1系统总体设计根据题目要求,本系统主要由AVRmega16作为检测和控制核心,直流减速电机驱动。蜂鸣器作为发声声源,麦克接收。根据检测声音到达A、B、C的时间差确定声源的位置。产生的误差信号由无线模块传输,并引导运动。系电机驱动模块显示模块控制器模块无线模块接收模块统总体框架图见右图.系统总体框
4、图12方案论证与比较1.2.1核心控制模块选择方案一:采用可编程逻辑器件CP1D,可以实现各种复杂的逻辑功能,速度快,控制能力强大、结构灵活,集成度高,易扩展各种功能,但价格较高,适合作为大规模控制系统的控制核心。方案二:采用AtmeI公司的AT89S52单片机,AT89S52低功耗,高性能,但其本身功能少,速度较低,不适合本题目中对信号处理的要求。方案三:采用AVRmega16单片机,AVR单片机速度高,低功耗,内部集成的功能多,不需要复杂的外围电路。其较高的速度可以使其能够快速处理较复杂的数字信号,对可移动声源的控制可完全满足要求。从实用度和价格两方面考虑,我们选用方案三。1.2.2电机的
5、选择方案一:采用步进电机。步进电机可以准确定位,单输出力矩低,速度慢,且体积大,重量大,达不到题目对时间的要求。方案二:选用直流减速电机。直流减速电机转动力矩大,体积小,重量轻,操作简单,使用方便。可利用PWM控制转速,控制灵活。选用150转min减速电机即可满足题目对时间上的要求。基于上述理论分析,故选择方案二。12.3电机驱动模块选择方案一:采用三极管等分立元件搭建直流电机的驱动电路。分立元件价格低廉,但此方案搭建的驱动电路结构复杂,总体性能不够稳定。我们不采用此方案。方案二:采用电机驱动芯片MMCT。MMC-1是多通道两相四线式步进电机直流电机控制芯片,可同时控制三路步进电机或直流电机,
6、主控MCU通过UART或SPI串行接口控制。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。基于上述理论分析,故选择方案二。1.2.4声源模块选择方案一:采用扬声器发声。扬声器是一种常用的电能换声器件,其发声频率较杂,不容易捕捉,且功率低。方案二:采用蜂鸣器发声。蜂鸣器发出的声音是固定频率的音频信号,常用的蜂鸣器频率为2.7KHz经过捕捉放大并滤波提取后容易处理,而且可以选择高功率,高频率的蜂鸣器来提高准确度。基于上述理论分析,故选择方案二。12.5无线模块选择方案一:采用无线收发模块NRF2401.NFR2401是体积小,功耗低,外围元件少的射频级芯片,工作在2.4GHZ自由频段。但NR
7、F2401程序调试复杂,价格高,不适合应用于本系统。方案一:采用PT2262、PT2272无线收发模块。PT2262和PT2272是常用的遥控解码芯片。此模块编码简单,控制灵活,价格低廉。通过实验发现,此无线模块的速度可以很好地满足题目要求。基于以上分析,故选择方案二。2理论分析与计算2.1 设计、计算在基础部分,通过计算接收器A、B接收到声音信号的时间差口的大小得出反馈给声源的误差信号。在可移动声源向OX运动过程中判断t1是否大于当t1大于t2时,则表明S未到达OX,控制声源继续运动。首先计算并约定好设定误差允许时间差At1和4t2,当t1-t2vt1时,声源停止运动。在发挥部分,可移动声源
8、向W运动过程中判断是否Ht3vZt2,若不满足,则表明S未到W点,控制声源继续运动,否则,表明到达W点,停止运动。2.2 误差信号的产生声音信号通过触发AVRmega16外部中断来启动定时器和关闭定时器,由AVRmega16计算声音接收器收到音频信号的时间差,得出可移动声源离目标线的距离,从而判断可移动声源的位置来决定运动的方向,将此运动方向信号用无线方式传送给可移动声源,此即误差信号的产生。2.3控制理论简单计算误差允许时间差atI和4t2计算如下:假定一种远满足题目误差要求的参考情况:当声源S在CD线上移动向C点移动时,在移动到离Ox线还有定位误差ICn1时,可以算出SA与SB之间的距离差
9、1,则at1=Z1340mso声源在向Oy线移动时可同理算出4t2,3电路设计3.1 单元电路设计3.1.1 电机驱动模块设计电机驱动模块采用NEC专用的MMC-I芯片,具体电路图见附录二3.1.2无线模块设计无线收发模块采用PT2262,PT2272,具体实现电路见图2,图3图2Pt2262发射模块图3Pt2272接收模块3.1 .3声音接收模块设计声音接收器我们采用麦克、放大器和高通滤波器,检测出周期性的音频信号,采用两级同相放大器将音频信号放大,并采用电压比较器1M393将检测到的正弦波转化为方波。为了将从麦克获得的微弱语音信号放大,我们采用两级高输入阻抗的同相放大电路,两级放大倍数分别
10、为Au=1+RtR,Av2=1+RtR。根据高通滤波器设计公式:=1RC截止频率选取2.7KHz。具体的电路图见图4。图4声音接收模块电路图3.2 软件程序流程图检测声源计算时间差发送停止运动信号图5软件程序流程图4系统测试4.1测试方法和仪器数字万用表,数字示波器,自制地形仿真(长1米,宽1米),秒表,米尺4.2联机测试数据结果表1基本部分测试数据项目第一次第二次第三次平均平均速度(cm/s)7.07.07.17.0定位误差(cm)2.00.61.31.3超过OX左侧距离(cm)3.11.82.62.5表2发挥部分测试数据项目第一次第二次第三次平均平均速度(cm/s)13.013.213.2
11、13.1定位误差(cm)0.40.10.90.5超过OX左侧距离(Cm)1.00.20.80.7声源据W处的直线距离(Cm)0.30.90.50.64.3测试数据分析及总结从测试数据可以得到,系统的测试指标已经达到要求,但受环境噪声和实际路面的不同,测试会因外界干扰产生一定误差,但在题目允许的误差范围之内。5结束语经过为期四天的设计,感触颇深的是解决问题的方法、技巧。在这四天中,我们遇到许许多多问题,对待问题要多方法处理,多角度处理。通过这几天的设计竞赛,我们不但增强了实践能力和协作精神,而且懂得了联系实际的重要性,这对我们以后的学习和工作不无裨益。当然,我们的设计还存在着一些缺陷,有待于在将
12、来的设计中进一步提高,在此恳请各位老师批评指正。6参考文献【1】全国大学生电子设计竞赛组委会编编全国大学生电子设计竞赛获奖作品汇编北京理工大学出版社【2】马潮编AVR单片机嵌入式系统原理与应用实践北京航空航天大学出版社【3】戴仙金编51单片机及其C语言开发实例清华大学出版社RIGO1DSI1O2E数字示波器数字万用表秒表附录一:主要元器件清单SS1792C型可跟踪直流稳压电源EE1641D型函数信号发生器/计数器米尺附录二:系统的电路连接图C1105MM105图电机驱动模块电路图附录三:部分程序清单*函数名:motor,c*功能:通过UART传输给MMC-1两路直流电机控制信号ttinc1ud
13、e*电机控制寄存器地址*#defineCH1ModeOxOO#defineCH2Mode0x04#defineCH1Duty0x03#defineCH2Duty0x07电机控制寄存器的写入地址#defineCH1Modreg0x50#defineCH2Mode_reg0x54#defineCH1Dutyreg0x53#defineCH2Dutyreg0x57*MMBT睡眠及工作模式选择*/S1eep引脚连接PB4voidinit(void)(DDRB.2=1;PORTB.2=0;de1ayms(10);voidweak(void)(DDRB.2=1;PORTB.2=0;de1ayms(100)
14、;voidMccWritedata(ucharaddr,uchardata)(putchar(addr);de1ayms(2);putchar(data);charReaddata(ucharaddr)chard;addr=OxaO;putchar(addr);de1ayus(20);d=getchar();returnd;* 函数名:电机运动函数* n=1iftRight* dir=forwand/backward* 占空比为v/255voidRunmotor(ucharn,uchardir,ucharv)(ucharrun;if(dirbackward)run=xe;e1serun=xc;if(n=1ift)(MccWritedata(CHIDuty_reg,v);de1ayms(2);MccWrite_data(CH1Modereg,run);e1seMccWritedata(CH2Dutyreg,v);de1ayms(2);MccWritedata(CH2Modereg,run);*函数名:电机停止函数*说明:停止n(1ift/Right)号电机voidStopmotor(ucharn)(ucharstop=0x40;if(n=1ift)(MccWr