1、 编号:C甲00102 2011年全国大学生电子设计竞赛智能小车(C题)参赛队员:张纪宽(18769648957)高 军(15066999034)朱真真(18769627569)专 业:电气工程与自动化电子信息科学与技术14智能小车摘 要:本系统主要设计和制作了甲乙两辆智能小车,使用软件编程控制小车完成交替超车。两车均采用两片ATmega16单片机作为主控芯片,使用L298N驱动两个减速电机为小车提供动力,行进中使用激光发射与接收模块检测路面标志线,运用NRF2401无线传输模块实现甲乙两车的即时通讯,在两车行驶过程中通过无线通信确定哪辆车在前面,当到达超车区时后面的车赶超前面的车从而实现交替
2、超车。本系统还增加了光电传感器用于防止小车撞车,并通过12864液晶屏实时显示小车行进的时间和行驶的圈数。经过多次测试,小车运行良好,能够很好的完成基本部分和发挥部分的要求。关键词:无线通信;激光检测;交替超车;Atmeg16单片机;光电开关Abstract: This system mainly design and the manufacture of the a b two vehicles intelligence, use the software control car finish alternate overtake. Two car all USES two pieces o
3、f ATmega16 monolithic processor as the main control chip, using L298N drive two reduction motor for the car to provide power, using a laser on the emitting and receiving module inspection mark line, use the NRF24L01 wireless transmission modules realize a b two car of instant messaging, in two drivi
4、ng process through the wireless communication determine which car in front, and when you get to the overtaking area the car behind, catch up the car in front and thus realizes the overtaking alternately. The system also increases the photoelectric sensor used to prevent the car crash, and through th
5、e 12864 LCD displays real time travel time and driving the car number of turns. After DuoCi test the car is running well, be better able to complete basic part and play a part of the request.Keywords: wireless communication;laser detection alternate;Atmeg16; overtaking photoelectric switch;single-ch
6、ip microcomputer目 录1.系统结构和功能介绍11.1设计任务与要求11.1.1设计任务11.1.2设计要求11.2理论分析与计算11.2.1信号检测与控制11.2.2两车之间的通信方法11.2.3系统节能减排方面的优化设计11.3系统基本方案11.4各模块方案的选择与论证21.4.1控制器的选择与论证21.4.2电机的选择与论证21.4.3电机驱动电路的选择与论证31.4.4无线通讯模块的选择与论证31.4.5标志线检测传感器的选择与论证32.系统硬件设计42.1 ATMega16的最小系统42.2 nRF24L01无线收发模块42.3电机驱动的电路设计52.4激光传感器收发电
7、路63.软件设计63.1系统主程序流程图64.系统测试74.1测试方案及测试条件74.2测试表格74.3测试结果分析75.结束语86.参考文献8附录91. 系统的结构和功能介绍1. 1设计任务与要求1.1.1设计任务设计并制作甲乙两辆小车通过软件编程,完成甲乙交替超车领跑的功能。1.1.2设计要求1甲乙分别从起跑线开始,在跑道上各正常行驶一圈。2将甲乙分别放置在规定位置并同时启动,乙车通过超车标志线后在超车区内实现超车功能,并先于甲车到达终点标志线,即第一圈实现乙车超过甲车。两车继续行驶,甲车检测到超车标志线后在超车区实现超车。3甲、乙两车继续行驶第三圈和第四圈,并交替领跑。4重新设定甲车起始
8、位置(在离起点标志线前进方向40cm 范围内任意设定),实现甲、乙两车四圈交替领跑功能。1. 2理论分析与计算1.2.1信号检测与控制采用激光传感器用于检测路面标志线,在车头的左中右三侧分别装上激光传感器。当检测到黑线时,指示灯亮,小车做相应运动;当检测到白线时,指示灯灭,小车沿直线行驶。1.2.2两车之间的通信方法系统采用NRF2401无线传输模块用于两车的通信。当到达超车区时,最先检测到超车标志的小车向后面的小车发出信号,并立即减速。后面的小车检查测到前面小车发出的信号后,加速行驶完成超车运动。超车完成后前面的小车再发出信号通知后面的小车超车已完成,最后两车都以正常的速度行驶。1.2.3系
9、统节能减排方面的优化设计为实现节能减排、绿色环保的目的我们采用功耗比较小的直流减速电机和ATMEGA16单片机,并且使用体积最小,功耗最低的NRF2401无线传输模块。在小车的设计中尽量的采用体积小、重量轻的元器件等,用于减轻小车的重量,降低小车运行时的功耗。1.3系统基本方案本系统使用两片ATmega16单片机作为核心控制芯片, 采用L298芯片驱动直流减速电机,并使用NRF2401无线传输模块实现两车即时通讯,控制两车的速度完成超车,使用12864液晶显示屏实时显示,超车前后会发出语音提示人机界面人性化、直观化。,系统的整体框图如图1所示。 图1 系统框图1.4各模块方案的选择与论证1.4
10、.1控制器的选择与论证方案一:采用ATMEL公司的AT89S52单片机52单片机软件编程灵活,自由度大,可用软件编程实现各种算法和逻辑控制,成本低,被各个领域广泛应用。但52单片机功耗较大,内存只有8Kb,驱动能力差,速度较慢,考虑到本系统软件编程较为复杂,对单片机内存要求较高,需要精确的计时等功能,因此,我们放弃了这个方案。方案二:选择ATMEL公司的ATmega16单片机AVR单片机具有体积小、集成度高、功耗低(3.3V电压)、可直接输出两路PWM、中断处理能力强等特点,内嵌16k FLASH,处理速度高,自身带有PWM功能和AD转换功能,运算速度快,驱动能力强,性价比高,符合低功耗标准。
11、为简化电路和降低功耗我们采用方案二。1.4.2电机的选择与论证方案一:使用步进电机作为驱动部分步进电机的优点在于转速以及转动距离易于调节,便于软件控制。缺点是:体积大,功耗大,价格高,转速相对较慢,低速运行时易出现低频振动现象。方案二:使用直流电机作为驱动部分其优点在于调速精度比较高,调速性能优良,调速方便、调速方式多,力矩大,工作效率高、应用范围广、体积比较小且关停时耗能也小;控制的精确度虽然没有步进电机那样高,但完全可以满足题目的要求,在价格方面相对于步进电机相对便宜。因为小车运行需要较高的速度,所以我们选择用动力和力矩较大的直流电机来驱动小车,综上所述为实现系统的功耗和性能的最优化,我们
12、采用方案二。1.4.3电机驱动电路的选择与论证方案一:采用MOS管构成的H桥通过H桥搭建的H桥电路,可以提高效率,降低功耗,但MOS管构成的H桥实现起来比较复杂,同时管子的参数不同,很难避免MOS管发热烧坏等问题。方案二:采用L298驱动模块L298内含四个驱动通道,输出电流可达4A,并且此芯片专门为电机驱动设计使用,工作性能稳定。通过L298控制电机的正反转,可以很好的控制小车的速度与转向,而且成本低,使用起来简单方便。考虑到产品的成本和系统的性能我们决定使用L298电机驱动芯片,采用方案二。1.4.4无线通讯模块的选择与论证方案一:采用红外光方式。红外通信只适用于室内静止或慢速移动中的点对
13、点通信,方向性要求高,对于运动的小汽车在传输过程中易产生误码,性能不稳定。无法满足系统的要求。方案二:采用Nordic公司生产的nRF24L01芯片。该芯片超低功耗(发送 10.5mA-5dBm;接收 18mA),nRF2401A支持多点间通信,最高传输速率超过1Mbit/s, 它采用Soc方法设计,需要极少的外围电路,且没有复杂的通信协议,工作电压范围宽(1.9V到3.6V),基于nRF2401A的工作原理,自行设计了无线收发电路,完全可以达到设计的要求。更为重要的是nRF2401A价格经济,是业界体积最小、功耗最少、外围元件最少的低成本射频系统级芯片。 从电路工作的稳定性,低功耗及性价比的
14、角度考虑,我们选择方案二。1.4.5标志线检测传感器的选择与论证方案一:使用TK-20黑白线检测传感器TK-20黑白线检测传感器是TK-10的升级版,有效探测距离达5cm。虽然具有受可见光干扰小,使用方便的优点,但是检测的精度比较低,需要传感器的个数较多,且道路参数的检测种类少,检测的前瞻距离比较小,不能满足精确控制的要求。方案二:利用激光发射接收装置进行检测。激光发射接收装置由激光发射器、激光接收器组成。它的优点是能实现无接触远距离测量,速度快,精度高,量程大,抗光、电干扰能力强等可以很好的完成对路面的检测,精确控制小车的行驶的路径。为简化设计和实现对小车的精确控制,我们决定采用方案二。2.
15、 系统硬件设计2.1 ATMega16的最小系统ATMega16的最小系统包括复位电路、ISP接口、JTAG接口、PAPD四个端口全部引出,支持JTAG仿真。ATmega16最小系统电路图如图2所示:图2 ATMEGA16最小系统2.2 nRF24L01无线收发模块无线收发子系统以nRF24l01芯片为核心,辅助以稳压部分、晶振部分、无线部分电路。电压VDD经电容C1、C2、C3处理后为芯片提供工作电压,晶振部分包括Y1、C9、C10,当晶振设为16MHz时,通信速率为1Mbps,天线部分包括L1、L2,用来将nRF2401A芯片的ANT1、ANT2管脚产生的2.4G电平信号转换为电磁波信号,
16、或者将电磁波信号转换为电平信号输入芯片的ANT1、ANT2管脚。子系统框图如图3所示,电路具体原理图如图4所示。图3 子系统原理框图图4无线收发子系统原理图2.3电机驱动的电路设计由于要驱动两个电机,显然只需利用MMC_1的两个通道,将MMC_1的CH1DCPWM端、CH1DCDIR端、CH2DCPWM端、CH2DCDIR端分别与L298的4个输入端相连,利用SPI模式软件编程控制,电路原理图如图5所示。图5直流电机驱动电路2.4激光传感器收发电路发射部分,经过调制管,便输出180khz 的频率,经过三极管8050 放大之后驱动发射管,使发射管以180KHZ 的频率,20%-30%的占空比发射
17、出650nm 的光线,经过反射后,接收管接收到反射回来的黑白信号,输出高低电平,由单片机识别,从而达到识别路径的功能。发射和接收原理电路图如图6所示。 图7 接收部分 图6发射和接收原理电路图3. 软件设计3.1系统主程序流程框图系统主要通过检测起点标志线的个数来计算小车跑的圈数,当甲乙中任何一个先检测到超车标志就会通过无线传输模块向另一辆小车发出超车信号完成替超车。停止停止停止停止停止图7 主程序流程图4. 系统测试4.1测试方案及测试条件在室内环境下使用按规定制作的跑道,依次测试两辆小车分别跑一周运行的时间,超车运行一周的时间,改变初始位置运行一周的时间等,通过多次测试后求出平均值。4.
18、2测试表格表一:甲乙两车分别运行一周的时间第一次(百分秒)第二次(百分秒)第三次(百分秒)第四次百分秒)平均值(百分秒)甲18501825193019151815乙19322010205319621992表二:第一轮超车运行一周的时间第一次(百分秒)第二次(百分秒)第三次百分秒)第四次(百分秒)平均值(百分秒)甲22502225233023152320乙22322310215322622214表三:第二轮超车运行一周的时间第一次(百分秒)第二次(百分秒)第三次(百分秒)第四次(百分秒)平均值(百分秒)甲22552277230322452230乙223223102353236223184.3测试
19、结果分析由于小车暴露在外界环境中测试时难免会受到外界环境的干扰,因此测试结果会存在一些误差。而且在经过多次测试后电池的电量有所损耗,不能保证每次提供的电量都相等。所以小车的运行时间会有较小的差距,经过多次测试和分析后可以得出结论:小车运行的时间在22秒左右,其所产生的误差都在误差允许范围内,能够较好的满足设计的要求。5. 结束语本系统使用两片ATMEGA16作为主控芯片,该系统主要由NRF2401无线收发模块、L298N驱动模块、激光检测模块、显示模块等组成。小车行驶过程中使用激光检测器检测标志线,NRF2401无线收发模块实现两车的通讯,我们还增设了光电开关防止小车相撞,并使用12864实时
20、显示小车运行的时间和运行的圈数等功能,使系统更加直观。在这次设计中我们完成了基本部分和发挥部分的要求,经过测试很好的满足了题目的要求。当然在比赛中我们也遇到了很多困难,比如在激光的检测黑白线的过程中调试了很多次效果都不是很理想,小车的实际转速与理论值不相符等等,但是功夫不负有心人经过小组成员的相互讨论和统一协作我们终于将问题解决了。通过这次比赛我们不但增强了实践能力和协作精神,而且懂得了理论联系实际的重要性,这对我们以后的工作和学习都将是一笔宝贵的财富。由于经验不足,我们的设计和制作中难免还存在着一些缺陷,需要进一步改正,再此希望各位评委老师能够给予批评指正。最后感谢大赛组委会和学校能够给我们
21、提供这次锻炼的机会。6. 参考文献【1】 陈杰,黄鸿编著. 传感器与检测技M.高等教育出版社,2002【2】 卓晴,黄开胜,邵贝贝著,学做智能车M.北京航空航天大学出版社,2007【3】 华成英,童诗白.模拟电子线路基础M.北京:高等教育出版社,2006【4】 康华光.数字电子技术基础M.北京:高等教育出版社,2005【5】 严国萍,周龙占著.通信电子线路基础M.北京:科学出版社,2006 附 录1 元器件清单名称型号数量简易小车2辆Avr单片机ATMEGA162片无线收发模块NRF24012个激光传感器模块6个光电开关C38-D50NK2个LCD屏12864液晶显示器2个锂电池3.7V8节电
22、池盒2个2主要程序/甲车#include L298.h/#include wuxian.h#include delay.h#include 12864.h#pragma interrupt_handler int0:2 #pragma interrupt_handler int1:3 /声明中断1 /#pragma interrupt_handler int1:3 uchar com;/2401接受uchar hengxian=0;/检测横线uchar chaoche=0;/检测超车标志void PWM_INIT(void) DDRD|=BIT(4)|BIT(5);/设置为输出PWM TCCR
23、1A=0XA2;/1010 0011 CO1M1A1,CO1M1A0,CO1M1B1,CO1M1B0=1010 TCCR1B=0X1A;/0001 1010 WGM13 WGM12 WGM11 WGM10=1110模式14ICR1;CS12 CS11 CS10=010为8分频 ICR1=999;/f=1K 8M晶振 TOP=FOSC/Focn/N-1 /OCR1A=468.75;/2.5ms 8M晶振 /OCR1B=92.75;/0.5ms 8M晶振 void PWM_CTR(uint a,uint b) OCR1A=a;/2.5ms 12M晶振 左边 OCR1B=b;/0.5ms 12M晶振
24、 右边uchar a=0,biaozhi=0;void init_INT0(void) SREG|=BIT(7); MCUCR=0X02;/ 下降沿中断 GICR=0XC0;/*void init_INT1(void) SREG|=BIT(7); MCUCR&=0X00;/ 低电平中断 GICR=0X40;*/void int0(void) a+;biaozhi=1;void int1(void)/蜂鸣器 PWM_CTR(500,500); void main(void) delay_ms(1000); init_L298(); /SPI_Init(); /RF2401_Init(); /DD
25、RA|=BIT(7); PWM_INIT(); init_INT0();/ lcd_init(); while(1) if(biaozhi=1) biaozhi=0; if(a=1)/起跑线 forward();/一起前进 PWM_CTR(830,800); delay_ms(10); /延时1s if(a=2)/第1个转弯 forward();/一起前进 PWM_CTR(825,950); delay_ms(600); /延时1s if(a=3)/第2个转弯 forward();/一起前进 PWM_CTR(825,950); delay_ms(600); /延时1s if(a=4)/超车标志
26、 chaoche+; forward();/一起前进 PWM_CTR(825,950); delay_ms(600); /延时1s if(a=9)/第四个转弯 forward();/一起前进 PWM_CTR(825,950); delay_ms(600); /延时1s if(a=10)/起跑线 a=1; forward();/一起前进 PWM_CTR(825,800); delay_ms(100); /延时1s /* if(!(PINB&0X02)/仅中间 白线高,黑线低 hengxian+;/检测黑线数目forward();/一起前进PWM_CTR(820,800);/全速delay_ms(
27、200);if(!(PINB&0X02)/又检测到表示超车标志区 chaoche=1; forward();/一起前进 PWM_CTR(700,950); delay_ms(500); /延时1selseif(PINB&0X02)/未检测到表示转弯标志线 chaoche=0; forward();/一起前进 PWM_CTR(700,950); delay_ms(500); /延时1s else*/ /仅左侧 白线低,黑线高 if(PINB&0X01)/仅检测到左面PB0 delay_ms(20); /左右同时检测到 白线低,黑线高 if(PINB&0X01)&(PINB&0X04)/仅检测到右
28、面PB2 forward();/直线 PWM_CTR(822,800); else if(PINB&0X01)&(!(PINB&0X04) A_runB_back();/大右拐 PWM_CTR(500,750); else /仅右侧 白线低,黑线高 if(PINB&0X04)/仅检测到右面PB2 delay_ms(20); /左右同时检测到 白线低,黑线高 if(PINB&0X01)&(PINB&0X04)/仅检测到右面PB2 forward();/直线 PWM_CTR(822,800); else if(!(PINB&0X01)&(PINB&0X04) A_backB_run();/大左拐
29、PWM_CTR(750,500); else if(!(PINB&0X01)&(!(PINB&0X02)&(!(PINB&0X04) forward();/一起前进 PWM_CTR(822,800); /显示横线数 /*lcd_weizhi(0,0);/从第1行,第0列开始write_date(dis1hengxian/100);lcd_weizhi(0,1);write_date(dis1hengxian%100/10);lcd_weizhi(0,2);write_date(dis1hengxian%10);/显示超车区lcd_weizhi(1,0);write_date(dis1chaoc
30、he);*/ /* while(1) if(PINC&0X01=0X01)/发送 a=1; else if(PINC&0X02=0X02)/接收 a=2;if(a=1)/发送Buffer0=1; TX_Mode();delay_ms(10);if(!(PINB&(1IRQ) unsigned char irq_sta; irq_sta=SPI_Read(STATUS);/ read register STATUSs valueif(irq_sta&RX_DR)/ if renRF24L01_CEive data ready (RX_DR) interruptSPI_Read_Buf(RD_RX
31、_PLOAD,Buffer,TX_PLOAD_WIDTH);/ read renRF24L01_CEive payload from RX_FIFO bufferif(irq_sta&MAX_RT) SPI_RW_Reg(FLUSH_TX,0);/if(irq_sta&(1TX_DS)SPI_RW_Reg(WRITE_REG+STATUS,0xff);/ clear RX_DR or TX_DS or MAX_RT interrupt flag if(a=2)/接收 RX_Mode();if(!(PINB&(1IRQ) unsigned char irq_sta; irq_sta=SPI_Re
32、ad(STATUS);/ read register STATUSs valueif(irq_sta&RX_DR)/ if renRF24L01_CEive data ready (RX_DR) interruptSPI_Read_Buf(RD_RX_PLOAD,Buffer,TX_PLOAD_WIDTH);/ read renRF24L01_CEive payload from RX_FIFO buffercom=Buffer0;/flag=1;/a+;PORTD=com;/Bufer0=0;if(irq_sta&MAX_RT) SPI_RW_Reg(FLUSH_TX,0);/if(irq_sta&(1TX_DS)SPI_RW_Reg(WRITE_REG+STATUS,0xff);/ clear RX_DR or TX_DS or MAX_RT interrupt flag */