081250135曹红泽.docx
- 文档编号:11033762
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:38
- 大小:375.09KB
081250135曹红泽.docx
《081250135曹红泽.docx》由会员分享,可在线阅读,更多相关《081250135曹红泽.docx(38页珍藏版)》请在冰豆网上搜索。
081250135曹红泽
单片机课程设计报告书
课题名称
基于单片机的自动循迹智能小车的设计
姓名
曹红泽
学号
081250135
院系
物理与电信工程系
专业
电子科学与技术
指导教师
肖卫初副教授
2011年6月10日
一、设计任务及要求:
本课程设计以ATmega16为核心,用L298N驱动两个减速电机,当产生信号驱动小车前进时,是通过循迹模块里的红外对管是否寻到黑线产生的电平信号通过LM324再返回到单片机,单片机根据程序设计的要求做出相应的判断送给电机驱动模块,让小车来实现前进、左转、右转、停车等基本功能。
本设计要求设计的模块主要有:
单片机最小系统模块、传感器循迹模块、L298驱动直流电机模块、LCD12864液晶显示模块、稳压电源模块等。
指导教师签名:
2011年04月 22日
二、指导教师评语:
指导教师签名:
2011年 6 月 16 日
三、成绩
验收盖章
2011年6 月 16日
基于单片机的自动循迹智能小车的设计
曹红泽
(湖南城市学院物理与电信工程系电子科学与技术专业,益阳,413000)
1设计目的
本课程设计的主要目的是设计一智能循迹小车,通过设计把所学的知识运用到实践中,通过本次设计更好的掌握单片机的控制原理以及传感器的知识,并培养独立查阅资料、设计、安装和调试的实践能力。
真正的做到学以致用。
2设计的主要内容和要求
当前的电动小汽车基本上采取的是基于纯硬件电路的一种开环控制方法,或者是直线行使,或者是在遥控下作出前进、后退、转弯、停车等基本功能。
但是它们不能实现在某些特殊的场合下,我们需要能够自动控制的小型设备先采集到一些有用的信息的功能。
本设计正是在这种需要之下设计的一种智能的电动小车的自动控制系统。
它是以单片机ATmega16为控制核心,附以外围电路,在画有黑线的白纸“路面”上行使,由于黑线和白线对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”——黑线。
判断信号可通过单片机控制驱动模块修正前进方向,以使其保持沿着黑线行进。
轨迹探测模块用5只光电开关。
通过检测5只光电开关的电平状态,来判断小车的运行状况,当小车有偏转时,做出相应的转向调整,直到中间的光电开关重新检测到黑线(即回到轨道)再恢复正向行驶等智能控制系统。
3整体设计方案
经过反复论证,最终确定了如下整体设计方案:
(1)车体用现成的玩具小车改装,前轮驱动,后轮为万向轮。
(2)采用ATmega16单片机作为主控制器。
(3)L298N作为直流电机的驱动芯片。
(4)用TCRT5000型光电对管进行循迹。
(5)用LCD12864液晶显示小车的运行时间。
(6)用自制的直流稳压电源给单片机和驱动芯片L298等供电,稳压电源可以输出12V和5V。
系统的总体设计方框图如下图所示:
图3.1系统总体方框图
系统总体方框图如图3.1所示所示,整个电路系统分为TCRT5000循迹模块、STC89C51控制模块、L298驱动模块、LCD12864显示模块、电源模块等五个模块。
工作原理为:
首先利用光电对管对路面信号进行检测,经过比较器LM324处理之后,送给软件控制模块进行实时控制,当任意一个光电对管检测黑线后,小车进入寻线环节,光电对管继续对路面信号进行检测,同时根据检测的结果小车输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。
4.系统方案论证与比较
4.1主控制器选择
方案一选用51单片机,该控制器具有性能稳定,价格便宜,I/O端口分布简单,便于接口电路的设计,易于控制和操作,执行程序速度和功耗可以满足一般系统的要求,是实现阶段比较常用的微处理器。
方案二采用ATMEL公司的ATmage16单片机,该控制器属于增强型内置Flash的RISC精简指令集高速8位单片机,有多种频率的内部RC振荡器、上电自动复位、看门狗、启动延时等功能,使得电路设计变得非常简单,并且内部资源丰富,一般都集成模/数转换器、SPI、PWM、USART、TWI通信口和丰富的中断源等。
小车控制时需要控制小车的速度,ATmage16单片机的定时器可以直接输出PWM,方便速度的控制。
综合考虑采用方案二。
4.2控制电机选择的比较与论证
方案一利用步进电机的准确定长步进性能方便的实现调速和方向的偏转,且能准确的测量速度、路程以及时间,简化编程和硬件连接的工作量。
但是步进电机在与机械配合的小车改装上难度极大,非短时间所能完成。
该方案实现较困难。
方案二用小车上自带的双直流电机分别负责小车的驱动的功能,依据外围红外反射传感器所采集到的信息可以补足直流电机定位不准的缺点,同时红外反射传感器的使用还能实现比较准确的寻迹行驶,用较好的控制算法及特色硬件来提高小车的整体性能,可具有很高的性能/价格比。
电机驱动可采用PWM调速方案可以很方便地在程序中实现对电机的调速,减少硬件电路。
经比较验证,显然方案一的机械结构也短时间内难以满足题目的要求,而方案二本身是与小车相兼容的,性能也比较好,采用方案二。
4.3循迹模块设计与比较
方案一采用发光二极管+光敏电阻,该方案缺点:
易受到外界光源的干扰,有时甚至检测不到黑线,主要是因为可见光的反射效果跟地表的平坦程度、地表材料的反射情况均对检测效果产生直接影响。
克服此缺点的方法:
采用超高亮度的发光二极管能降低一定的干扰,但这又会增加检测系统的功耗。
方案二脉冲调制的反射式红外发射接收器。
由于采用带有交流分量的调制信号,则可大幅度减少外界的干扰;此外红外发射接收管的工作电流取决于平均电流,如果采用占空比小的调制信号,在平均电流不变的情况下,瞬时电流很大(50~100mA),则大大提高了信噪比。
此种测试方案反应速度大约在5us。
方案三采用多路阵列式光敏电阻组成的光电探测器。
根据以上分析我们采用方案2,同时能实现的反射式红外发射接收器众多,我选择了市场比较多见的TCRT5000作为检测黑线的传感器。
4.4时间显示模块的设计与比较
方案一:
采用LED数码管显示小车行驶的时间,在本系统中用到LED数码管进行动态显示即可达到要求。
其优点是价格便宜,寿命长;缺点是只能显示0~9的数字和一些简单的字符,且数码管的驱动电路以为段选、位选电路设计繁锁,且占用空间。
方案二:
采用LCD12864液晶显示,其优点是能显示更多的字符、汉字,工作电流比LED小,故其功耗低,硬件电路设计简单,且可以有良好的人机界面,直观,显示效果漂亮,体积小。
综合考虑选择此方案。
4.5电源选择
方案一采用4节1.5V干电池供电,电压达到6V,经7805稳压后给单片机、电机和其他芯片供电。
但干电池电量有限,使用大量的干电池给系统调试带来很大的不便,因此,放弃了这种方案。
方案二采用自制的稳压电源,该自制的稳压电源可以输出12V、9V、5V。
5V供给ATmega16单片机、L298的TTL逻辑电平信号VSS电压(VSS可接4.5~7V)和LM324芯片等,9V作为L298电压VS(VS电压范围VIH为+2.5~46V)。
综上考虑,选择了方案二。
5系统的硬件设计
5.1ATmega16单片机最小系统设计
ATmega16单片机最小系统主要包括复位电路和时钟晶振电路。
复位电路采用的是低电平复位,晶振电路中晶振频率为12Mhz。
ATmega16单片机最小系统如下图所示:
图5.1ATmega16单片机最小系统
5.1.1时钟电路
单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通
常用两种电路形式得到:
内部振荡和外部振荡。
ATmega16单片机内部有一个用于
构成振荡器的高增益反向放大器,引脚XTALl和XTAL2分别是此放大电器的输
入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实
际使用中常采用这种方式,如图3.2所示在其外接晶体振荡器(简称晶振)或陶
瓷谐振器就构成了内部振荡方式,片内高增益反向放大器与作为反馈元件的片外
石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。
图5.1中外接晶体以及电容C2和C1构成并联谐振电路,它们起稳定振荡频
率、快速起振的作用,其值均为30P左右,晶振频率选12MHz。
5.1.2复位电路
为了初始化单片机内部的某些特殊功能寄存器,必须采用复位的方式,复位
后可使CPU及系统各部件处于确定的初始状态,并从初始状态开始正常工作。
单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST引脚上低电平持续时间大于最小脉宽时即触发复位过程,此时没有时钟信号在运行,当外加信号达到复位门限电压时,复位延时开始,延时结束后单片机开始工作。
ATmega16采用的是低电平复位。
图5.1中R和C组成复位电路,其值R取为10K,C取为10uF。
5.2电机驱动电路的设计
本系统采用电机驱动芯片L298配合8个二极管1N4148的过流保护作用作为电机驱动模块,驱动电路的设计如下图所示:
图5.2L298电机驱动模块
L298N是SGS公司的产品,内部包含4通道逻辑驱动电路。
是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。
1脚和15脚可单独引出连接电流采样电阻器,形成电流传感信号。
L298的逻辑功能如下表所示:
表5.1L298的逻辑功能
ENA(B)
IN1(IN3)
IN2(IN4)
电机运行情况
H
H
L
正转
H
L
H
反转
H
同IN2(IN4)
同IN1(IN3)
快速停止
L
X
X
停止
下图是L298的引脚封装图:
图5.3L298芯片封装图
L298可驱动2个电机,OUTl、OUT2和OUT3、OUT4之间分别接2个电动机。
5、7、10、12脚接输入控制电平,控制电机的正反转,ENA,ENB接控制使能端,控制电机的停转。
L298N的5、7、10、12四个引脚接到单片机上,通过对单片机的编程就可以实现两个直流电机的PWM调速以及正反转等功能。
5.3循迹模块设计
本循迹模块采用的是红外反射对管TCRT5000,TCRT5000的实物和引脚图如下图所示:
图5.4TCRT5000实物、引脚图
红外反射对管TCRT5000循迹的原理图如下图所示:
图5.5TCRT5000循迹模块原理图
循迹原理分析:
红外反射对管TCRT5000的红外发射二极管不断发射红外线,当小车在白色地面行驶时,装在车下的红外发射管发射红外线信号,经白色反射后,被接收管接收,一旦接收管接收到信号,那么图中光敏三极管将导通,比较器输出为低电平,指示二极管点亮;当小车行驶到黑色引导线时,红外线信号被黑色吸收后,光敏三极管截止,比较器输出高电平,指示二极管熄灭。
从而实现了通过红外线检测信号的功能。
将检测到的信号送到单片机I/O口,当I/O口检测到的信号为高电平时,表明红外光被地上的黑色引导线吸收了,表明小车处在黑色的引导线上;同理,当I/O口检测到的信号为低电平时,表明小车行驶在白色地面上。
通过装在小车上的五个指示二极管可以判断小车的状态。
5.4显示模块设计
本模块采用不带字库的LCD12864液晶显示小车的运行时间。
LCD12864液晶显示模块引脚说明如下:
◆第1脚:
VSS为电源地。
◆第2脚:
VDD接+5V电源。
◆第3脚:
对比度调整,使用时可以通过一个10K的电位器调整对比度。
◆第4脚:
RS为寄存器选择:
RS=H,选择数据寄存器,RS=L,选择指令寄存器。
◆第5脚:
RW为读写选择信号线。
◆第6脚:
EN为使能端,当EN由高电平跳变到低电平时,液晶模块执行命令。
◆第7-14脚:
DB0-DB7为8位双向数据线。
◆第15脚:
CS1,选择左屏。
◆第16脚:
CS2,选择右屏。
◆第17脚:
RST,复位
◆第18脚:
VOUT,LED驱动负电压。
◆第19脚:
背光电源正极,接+5V。
◆第20脚:
背光电源地。
LCD12864液晶模块与单片机的接法如下图所示:
图5.6LCD12864液晶原理图
5.5稳压电源模块设计
由于小车功耗比较大,干电池难以满足要求,故设计一直流稳压电源,可以同时输出5V和12V。
市电AC220V/50HZ经过变压、整流、滤波、稳压后可以输出稳定的5V和12V。
稳压芯片采用的是LM7805和LM7812。
电源电路原理图如下图所示:
图5.7稳压电源模块原理图
6系统的软件设计
软件设计部分主要包括主函数和循迹函数:
6.1主函数流程图
图6.1主函数流程图
6.2循迹函数流程图
图6.2循迹函数流程图
7系统仿真
在Proteus的ISIS7.5sp3软件环境下画出电路原理图,接下来就是将设计的程序在AVRstudio4开发集成环境上编译成机器语言,进入Proteus的ISIS,鼠标左键点击菜单“Debug”,选中“useromotedebugermonitor”,便可实现AVRstudio4与Proteus连接调试。
首先在Proteus中双击单片机ATmega16,将AVRstudio4下编程生成的.HEX文件导入到ATmega16中,可在Proteus中单击全速仿真运行按钮
,进行现象的查看,能清楚地观察到芯片上每一个引脚的电平变化,红色代表高电平,蓝色代表低电平;如果现象不正确,则在AVRstudio4中单步调试程序,并在Proteus观察现象,哪一步不正确则对该段的程序进行修改,调试直到仿真完全成功为止。
图7.1系统仿真图
如图7.1所示,该仿真验证的过程为,首先按开始按
,然后按下“模拟传感器动作”的开关,切换高低电平。
当模拟不同的传感器动作的时候直流电机左右转速是不相同的,这时可以通过“观察PWM”的示波器观察左右轮的转速(如图7.2所示)。
同时在液晶12864显示屏上可以显示小车当前运行的时间。
图7.2左右车轮PWM调速仿真图
8使用说明
各模块电路与ATmega16单片机引脚的接线说明:
◆循迹模块中的五个传感器得到路面信息后通过LM324比较输出接到单片机的PA7--PA0;
◆L298电机驱动模块中的IN1、IN2、IN3、IN4分别接单片机的PB3、PB2、PB1、PB0,其中IN1、IN2控制左轮,IN3、IN4控制右轮。
ENA、ENB分别接单片机的PD5、PD4,输出PWM波分别控制左右轮的速度;
◆LCD12864液晶显示模块中八位数据线DB0--DB7分别接单片机的PC0--PC7,RS、RW、EN分别接单片机的PD0、PD1、PD2,CS1、CS2、RST分别接单片机的PD3、PD6、PD7。
◆给系统上电后,把小车放在画有黑线的白色地面上,小车将循着黑线运行。
9设计总结
在完成本设计的过程中,我把注意力主要集中在程序编程电路调试上。
合理地运用软件设计模块电路可以节省很多功夫,但完全照搬也不能达到预想的效果,因为实际参数无法与设计精确匹配,因此做到精益求精,尽量达到指标要求。
本次设计综合运用了各类传感器。
同时查阅了大量相关资料,包括查阅相关书籍和网上的资料,获得了一些相关信息。
在方案设计方面,讨论筛选出最优的设计方案,比如在设计显示电路时放弃数码管显示电路,而直接运用了LCD12864液晶来显示。
通过这次的设计与制作,让我了解设计电路的程序与设计理念,要设计一个电路总要先用仿真,仿真成功之后才实际接线的。
但是最后的作品却不一定与仿真时完全一样,因为,在实际接线中有着各种各样的条件制约着。
通过这次学习,让我对各种电路都有了深刻的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。
通过本次设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我的创新精神。
创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,从为人类造福的意愿出发,做自己力所能及的,别人却没想到的事。
使之不断地战胜别人,超越前人。
同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。
设计过程,也好比是我人生成长的历程,常有一些不如意,也许这就是在对我提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我而敲响。
参考文献
[1]徐益民,范红刚,苏凤武.零基础学AVR单片机—基于ATmega16、汇编及C语言[M].北京:
机械工业出版社,2011:
136-167
[2]彭伟.单片机C语言程序设计实训100例—基于AVR+Proteus仿真[M].北京:
北京航空航天大学出版社,2010:
217-226
[3]秦志强,彭建盛,谭立新.AVR单片机与小型机器人制作[M].北京:
电子工业出版社,2009:
72-93
[4]黄智伟.全国大学生电子设计竞赛训练教程[M].北京:
电子工业出版社,2005:
348-371
[5]吴建平.传感器原理及应用[M].北京:
机械工业出版社,2009:
95-118
[6]陈学平,兰帆,胡勇.Protel2004电路设计与电路仿真[M].清华大学出版社,2007:
184-264
附录A:
程序代码
/*以下代码为主程序*/
#include
#include
#include
#include"xun_ji_xiao_che.h"
#include"ziku.h"
#include"12864.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineF_CPU12000000UL
#definePI3.1415926
externvoidTimer0_init(void);
voidport_init();
uchartime,COUNT=0;
intmain()
{
//端口初始化
Port_init();
//液晶初始化
LCD_Initialize();
ClearScreen(0);
_delay_ms(10);
Display_A_WORD_String(3,0,8,(uchar*)(hanzi));//小车运行的时间为
Display_A_Char_8X16(5,24,(uchar*)(digital+16*10));//s
//定时器初始化
Timer0_init();
Timer1_init();
sei();
while
(1)
{
sensor_state();
}
}
//定时器0溢出中断服务程序
ISR(TIMER0_OVF_vect)
{
TCNT0=256-F_CPU/1024*0.02;//置初值定时0.02s
COUNT++;
if(COUNT==1)//1S时间到
{
COUNT=0;
time++;
Display_A_Char_8X16(5,0,(uchar*)(digital+(time/100)*16));
Display_A_Char_8X16(5,8,(uchar*)(digital+(time/10%10)*16));
Display_A_Char_8X16(5,16,(uchar*)(digital+(time%10)*16));
}
}
voidPort_init()
{
DDRA=0X00;//输入
PORTA=0XFF;
DDRB=0XFF;//输出
//PORTB=0XFF;
DDRD=0XFF;//输出
PORTD=0XFF;
}
/*以下代码为LGM12864LCD显示驱动程序(不带字库)*/
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
//LCD起始行/页/列指令定义
#defineLCD_START_ROW0xC0//起始行
#defineLCD_PAGE0xB8//页指令
#defineLCD_COL0x40//列指令
//液晶控制引脚
#defineRSPD0//数据/指令
#defineRWPD1//读写
#defineENPD2//使能
#defineCS1PD3//右半屏选择
#defineCS2PD6//右半屏选择
#defineRSTPD7//复位
//液晶端口
#defineLCD_PORTPORTC//液晶DB0-DB7
#defineLCD_DDRDDRC//设置数据方向
#defineLCD_PINPINC//读状态数据
#defineLCD_CTRLDPORTD//液晶控制端口
//#defineLCD_CTRLBPORTB//液晶控制端口
//液晶引脚操作定义
#defineRS1()LCD_CTRLD|=_BV(RS)
#defineRS0()LCD_CTRLD&=~_BV(RS)
#defineRW1()LCD_CTRLD|=_BV(RW)
#defineRW0()LCD_CTRLD&=~_BV(RW)
#defineEN1()LCD_CTRLD|=_BV(EN)
#defineEN0()LCD_CTRLD&=~_BV(EN)
#defineCS11()LCD_CTRLD|=_BV(CS1)
#defineCS10()LCD_CTRLD&=~_BV(CS1)
#defineCS21()LCD_CTRLD|=_BV(CS2)
#defineCS20()LCD_CTRLD&=~_BV(CS2)
#defineRST1()LCD_CTRLD|=_BV(RST)
#defineRST0()LCD_CTRLD&=~_BV(RST)
//是否反相显示(白底黑字/黑底白字)
ucharReverse_Display=0;
//等待液晶就绪
voidWait_LCD_Ready()
{
Check_Busy:
LCD_DDR=0x00;
LCD_PORT=0xff;
RW1();asm("nop");RS0();
EN1();asm("nop");EN0();
if(LCD_PIN&0x80)
gotoCheck_Busy;
}
//向LCD发送命令
voidLCD_Write_Command(ucharcmd)
{
Wait_LCD_Ready();
LCD_DDR=0xff;//输出高电平
LCD_PORT=0xff;
RW0();asm("nop");RS0();
LCD_PORT=cmd;
EN1();asm("nop");EN0();
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 081250135 曹红泽