基于51单片机的自动往返小车.docx

上传人:牧羊曲112 文档编号:4529178 上传时间:2023-04-26 格式:DOCX 页数:16 大小:227.31KB
返回 下载 相关 举报
基于51单片机的自动往返小车.docx_第1页
第1页 / 共16页
基于51单片机的自动往返小车.docx_第2页
第2页 / 共16页
基于51单片机的自动往返小车.docx_第3页
第3页 / 共16页
基于51单片机的自动往返小车.docx_第4页
第4页 / 共16页
基于51单片机的自动往返小车.docx_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《基于51单片机的自动往返小车.docx》由会员分享,可在线阅读,更多相关《基于51单片机的自动往返小车.docx(16页珍藏版)》请在三一办公上搜索。

1、基于单片机的自动往返小车摘要本设计以一片单片机 STC89C52 作为核心来控制自动往返小车,加以控 制芯片 L298N 和单片机联合控制小车的前进与后退。 路面的黑带检测使用反 射式红外传感器,通过 STC89C52 对输入的信号进行处理,以动态显示的形 式通过一个四位的数码管显示即时里程,另外一个四位数码管动态显示小车 行驶时间。以红外传感器对路面黑线检测用,行驶距离使用霍尔元件进行检 测。关键词: 光电检测 霍尔检测 动态显示 L298N 控制电动机 小组成员:李亚昊、陈国翠、成晓斌、丁玉娇黑带检测1. 电机驱动调速模块采用 L298N 来控制电机的正转和反转来实现小车的前进和后退。加上

2、单片机 的程序 PWM ,实现整车的加速与减速,精确小车的速度。2. 路面黑带检测模块 黑带检测的原理是:红外光线照射到路面并反射,由于黑带和白纸的系数不 同,可根据接的红外线的强弱判断是否到达黑带。反射式的红外发射接收器。由于采用红外管代替普通可见光管,可以降低 环境干扰。3. 电源选择 双电源供电,将电动机驱动电源与单片机以及周边电路电源完全隔离,这样 做虽然不如单电源方便灵活,但可以将电动机驱动所造成的干扰彻底消除,提高 了系统的稳定性。4. 控制单元模块 用单片机控制 用光电检测不同的信号,并经单片机对其处理,传送给 L298 信号,使其控制 电机的正转和反转,配合 PWM 程序控制,

3、来实现加速减速和刹车。通过单片机 内部定数器 /计数器进行定时、计数,在用单片机串行输入 /输出口进行显示控制。 此方案电路成熟、工作稳定、容易实现控制。1. 光电检测部分:我们采用反射式光电检测电路对跑道上的黑线进行检测,并用两个遮光套管 套住发光管和接收管以一定的角度紧贴跑道,这样可以消除外界光线的干扰,用LM358 电压比较器输出高低电平检测信号。如图所示:2. STC89C52 单片机基本系统此系统以 89C52 为核心,每检测到一个黑带由光电检测部分产生一个的脉冲, 使单片机产生一个外部中断 1,定义检测黑带数的变量加 1,同时车轮每转一圈, 霍尔元件输出一个脉冲,是安单片机产生一个

4、外部中断0,定义圈数的变量加 1.通过P1.0和P1.1控制L298来控制电机的正转与反转及刹车。 当P1.0输出低电平, P1.1输出高电平时,电机正转,相反则电机反转,当 P1.0和 P1.1都是低电平时, 使电动机被短路,提高了刹车效率,基本杜绝了由于制动惯性造成的小车的前冲 现象。通过P0口进行两个数码管的位选, P2口进行段码输出, 其中一个数码管显 示行驶时间,另外一个数码管显示行驶路程。如图所示:3. L298N 电动机驱动模块部分该电路采用电动机驱动芯片 L298 来控制电动机的正转与反转, 加以第二路电 机电源保证了电动机启动时有足够的电流。在试验中控制电压为单片机输出的高

5、低电平直接控制。具体电路图连接如下:4. 电源部分 由于电动机工作电流大,需要选用内阻小,供电电流强,质量轻,可反复使 用的经济型电池,我们选用可充电电池组。为使单片机工作稳定,避免电动机开 关机和其转动时对其电源的影响,在此用两个电池组和稳压块 7805 分别为 89C52 和电动机驱动显示部分分别进行供电。保证小车工作和显示的稳定性。5. 软件设计部分单片机控制电路主要由一片 STC89C52组成,通过 P3 口控制小车正转与反转, 刹车,加速减速,通过两个四联数码管控制显示时间和里程以及小车行驶的时间。 其中 P0 口进行位选, P2口进行显示段码输出。该系统采用上电复位加上手动复位联合

6、复位系统进行初始化,单片机通过P1.0,P1.1输出脉冲控制电机正转反转以及刹车,当 P1.0,P1.1分别输出 01 是电 动机正转,输出 10 时电动机反转,输出 00 时电动机两边短路,小车立即刹车。 流程图如下:( 1)外部中断 0 车轮美转一次, 霍尔元件产生一个脉冲 P3.3,通过下降沿触发外部中断 0,并 且在每进行一次外部中断记录圈数的变量加 1.( 2)外中断 1 光电检测每检测到一条黑带就产生一个脉冲输入 P3.2 口,通过下降沿的方式 触发外中断 1,每中断一次记录黑带的变量加 1,当检测到第六条黑带时, p1.0=1, p1.1=1,小车的电动机由于短路刹车, 当检测到

7、第十二条黑带时, 小车再次刹车同 时关掉所有中断退出( 3)定时器中断 0 使用定时器 T0 产生 5ms定时中断,每次执行该中断前要先给定时器 0赋初值, 定时器中断每执行一次,变量加 1。当 i=200 时,即每当计时 1 秒时,时间变量 t 加 1 ,速度等于一秒转的圈数和小车车轮的周长相乘。( 4)定时器中断 1 主要用来产生不同的占空比的波型进行高低速控制,每次执行时,定时器 1 要赋初值。( 5)主程序 主程序主要用来控制两个四联数码管的显示,通过循环语句不断的调用显示 程序,使两个四联数码管按位不断循环亮点,当小车行驶时动态显示时间和路程, 小车停止时显示小车行驶过程中的时间和路

8、程。6. 安装与调试 自动小车为玩具遥控小汽车的改装品,在改装的过程中最重要的是考虑设计 光电检测管的位置,检测黑带的光电管放在车体的中央,用遮光管将其以一定反 射角度压到跑道上。路程检测用槽型光耦,放在小车的从动轮上。轮子的周长约 为 21.6 厘米,在轮子上用了一个霍尔元件,每转一圈一个脉冲。在组装前对每一 个单元电路进行测试,以保证外部硬件电路的无误,有利于最后的统调。调整是 以点到线,最后到整体调试的方法。在调整的过程中我们发现了许多问题,如响 应中断的次数的调整等。并且为了小车碰到墙壁不至于停车,我们在小车的四角 上都加上了导向轮,导向轮用随身听的压带轮制作即可。7. 附录元器件及程

9、序如下: 基本元器件列表一个 STC89C52 单片机2 个四位共阳数码管 一个 L298N 芯片 一个霍尔元件和小磁钢片 一路循迹模块 晶振( 12M)及 30pf 电容 开关电阻 10k 100欧姆 1k 20k 可调程序: #include #define uint unsigned int #define uchar unsigned char sbit dianji1=P10; sbit dianji2=P11; sbit hdjc=P32; uchar code duma= 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f;uc

10、har code dianduma= 0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd,0x87, 0xff,0xef;uchar code wema= 0x01,0x02,0x04,0x08, 0x10,0x20,0x40,0x80, 0x00,0xff;uchar num,ge,shi,bai,qian; uint miao,lc,heidai=0; long int qs;void fenwei(uint); void shuma(uchar,uchar);/包含头文件/宏常量定义/宏常量定义/P1_0 设置为电机控制一/P1_1 设置为电机控制二/P3_2 设置为

11、黑带检测位/段编码/带小数点段编码void shumadian(uchar,uchar); 数据void miaoxianshi(uint);void lcxs(uint); void djkz();void delay(uchar); void delay10s(); void fenwei(uint x) /位编码/定义几个字符型变量 /定义几个整形变量 /定义一个长整形变量用来记录小车所转的圈数 /声明一个分位函数用来把要显示的数分位 /声明一个数码上显示函数用来在数码管上显示数据 /声明另一个数码显示函数用来显示带小数点的/声明一个显示时间的函数/声明一个显示路程的函数/声明一个电机控

12、制函数/声明一个延时函数 /声明另一个延时函数用来延时十秒钟 /把需要在数码管上显示的数据分位ge=x%10;shi=(x%100)/10;bai=(x%1000)/100;qian=x/1000;void shuma(uchar x,uchar y)P0=wema8;P2=dumax;P0=wemay;delay(5);void shumadian(uchar x,uchar y)P0=wema8;P2=diandumax;P0=wemay;delay(5);void miaoxianshi(uint x)f enwei(x);shuma(ge,3);shuma(shi,2);shumadi

13、an(bai,1); shuma(qian,0);void lcxs(uint z)f enwei(z);shuma(ge,7);shuma(shi,6);shumadian(bai,5);shuma(qian,4);void djkz()uchar n=20,m=60;switch(heidai)/将需要显示的数据显示在数码管上/将需要显示的数据显示在数码管上/将定时器 0 输出的时间显示在数码管上/将外部中断 1 输出的路程显示在数码/控制电机运转case 0:case 1:case 2:dianji1=1;dianji2=0; miaoxianshi(miao); lcxs(lc);br

14、eak;case 3:while(m-)dianji1=1;dianji2=0; delay(70);dianji1=0;dianji2=0; delay(30); miaoxianshi(miao); lcxs(lc);while(heidai=3)dianji1=1;dianji2=0;delay(13);dianji1=0;dianji2=0;delay(1); miaoxianshi(miao); lcxs(lc); break;case 4:while(heidai=4)dianji1=1;dianji2=0;delay(25);dianji1=0;dianji2=0;delay(1

15、); miaoxianshi(miao); lcxs(lc); break; case 5:case 6:while(n-)dianji1=1; dianji2=0; delay(50); dianji1=0; dianji2=0; delay(50); miaoxianshi(miao); lcxs(lc);dianji1=1;dianji2=1; delay10s(); while(heidai=6) dianji1=0;dianji2=1;break;case 7:break;case 8:dianji1=0;dianji2=1; miaoxianshi(miao); lcxs(lc);

16、case 9:while(n-)dianji1=0; dianji2=1; delay(50); dianji1=0; dianji2=0; delay(50); miaoxianshi(miao); lcxs(lc); while(heidai=7)dianji1=0;dianji2=1; delay(90); dianji1=0; dianji2=0; delay(1); miaoxianshi(miao); lcxs(lc);break;case 10:dianji1=0;dianji2=1; miaoxianshi(miao); lcxs(lc);break;case 11:dianj

17、i1=0;dianji2=1; miaoxianshi(miao); lcxs(lc);case 12: while(n-) dianji1=0; dianji2=1; delay(50); dianji1=0; dianji2=0; delay(50); miaoxianshi(miao); lcxs(lc);dianji1=1;dianji2=1;TR0=0;while(1)miaoxianshi(miao);lcxs(lc);default: break;void delay(uchar x)uchar i,j;f or(i=x;i0;i-)for(j=50;j0;j-);void de

18、lay10s()uint i,j;for(i=15;i0;i-) for(j=123;j0;j-) miaoxianshi(miao); lcxs(lc);void ext0() interrupt 0delay(50);i f(hdjc=0)heidai+;void time0() interrupt 1TH0=(65536-500)/256; TL0=(65536-500)%256; num+;i f(num=20)num=0;miao+;void ext1() interrupt 2qs+;lc=(int)(qs*38.5);void main()EA=1;ET0=1;EX0=1;IT0=1;/延时/延时十秒钟/外部中断 0,用来检测黑带/函数功能:定时器中断 0,用来记录时间/函数功能:外部中断 1,记录车轮转过的圈数/打开总中断/打开定时器中断 0/打开外部中断 1/外部中断 0 设置为跳变沿触发方式/打开外部中断 1/外部中断 1 设置为跳变沿触发方式/设置定时器 0 为方式 1/定时器 0 高八位装初值/定时器 0 低八位装初值/打开定时器 0/进入主循环/进入电机控制函数EX1=1;IT1=1;TMOD=0x01;TH0=(65536-500)/256;TL0=(65536-500)%256;TR0=1;while(1)djkz();

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号