ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:73.21KB ,
资源ID:19903640      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19903640.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机的自动往返小车Word文档下载推荐.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于单片机的自动往返小车Word文档下载推荐.docx

1、1. 光电检测部分:我们采用反射式光电检测电路对跑道上的黑线进行检测,并用两个遮光套管套住发光管和接收管以一定的角度紧贴跑道,这样可以消除外界光线的干扰,用LM358电压比较器输出高低电平检测信号。如图所示:2. STC89C52单片机基本系统此系统以89C52为核心,每检测到一个黑带由光电检测部分产生一个的脉冲,使单片机产生一个外部中断1,定义检测黑带数的变量加1,同时车轮每转一圈,霍尔元件输出一个脉冲,是安单片机产生一个外部中断0,定义圈数的变量加1.通过和控制L298来控制电机的正转与反转及刹车。当输出低电平,输出高电平时,电机正转,相反则电机反转,当和都是低电平时,使电动机被短路,提高

2、了刹车效率,基本杜绝了由于制动惯性造成的小车的前冲现象。通过P0口进行两个数码管的位选,P2口进行段码输出,其中一个数码管显示行驶时间,另外一个数码管显示行驶路程。3. L298N电动机驱动模块部分该电路采用电动机驱动芯片L298来控制电动机的正转与反转,加以第二路电机电源保证了电动机启动时有足够的电流。在试验中控制电压为单片机输出的高低电平直接控制。具体电路图连接如下:4. 电源部分由于电动机工作电流大,需要选用内阻小,供电电流强,质量轻,可反复使用的经济型电池,我们选用可充电电池组。为使单片机工作稳定,避免电动机开关机和其转动时对其电源的影响,在此用两个电池组和稳压块7805分别为89C5

3、2和电动机驱动显示部分分别进行供电。保证小车工作和显示的稳定性。5.软件设计部分单片机控制电路主要由一片STC89C52组成,通过P3口控制小车正转与反转,刹车,加速减速,通过两个四联数码管控制显示时间和里程以及小车行驶的时间。其中P0口进行位选,P2口进行显示段码输出。该系统采用上电复位加上手动复位联合复位系统进行初始化,单片机通过,输出脉冲控制电机正转反转以及刹车,当,分别输出01是电动机正转,输出10时电动机反转,输出00时电动机两边短路,小车立即刹车。流程图如下:(1)外部中断0车轮美转一次,霍尔元件产生一个脉冲,通过下降沿触发外部中断0,并且在每进行一次外部中断记录圈数的变量加1.(

4、2)外中断1光电检测每检测到一条黑带就产生一个脉冲输入口,通过下降沿的方式触发外中断1,每中断一次记录黑带的变量加1,当检测到第六条黑带时,=1,=1,小车的电动机由于短路刹车,当检测到第十二条黑带时,小车再次刹车同时关掉所有中断(3)定时器中断0使用定时器T0产生5ms定时中断,每次执行该中断前要先给定时器0赋初值,定时器中断每执行一次,变量加1。当i=200时,即每当计时1秒时,时间变量t加1,速度等于一秒转的圈数和小车车轮的周长相乘。(4)定时器中断1主要用来产生不同的占空比的波型进行高低速控制,每次执行时,定时器1要赋初值。(5)主程序主程序主要用来控制两个四联数码管的显示,通过循环语

5、句不断的调用显示程序,使两个四联数码管按位不断循环亮点,当小车行驶时动态显示时间和路程,小车停止时显示小车行驶过程中的时间和路程。6.安装与调试自动小车为玩具遥控小汽车的改装品,在改装的过程中最重要的是考虑设计光电检测管的位置,检测黑带的光电管放在车体的中央,用遮光管将其以一定反射角度压到跑道上。路程检测用槽型光耦,放在小车的从动轮上。轮子的周长约为厘米,在轮子上用了一个霍尔元件,每转一圈一个脉冲。在组装前对每一个单元电路进行测试,以保证外部硬件电路的无误,有利于最后的统调。调整是以点到线,最后到整体调试的方法。在调整的过程中我们发现了许多问题,如响应中断的次数的调整等。并且为了小车碰到墙壁不

6、至于停车,我们在小车的四角上都加上了导向轮,导向轮用随身听的压带轮制作即可。7.附录元器件及程序如下:基本元器件列表一个STC89C52单片机2个四位共阳数码管一个L298N芯片 一个霍尔元件和小磁钢片一路循迹模块晶振(12M)及30pf电容开关电阻 10k 100欧姆 1k 20k可调程序:#include /包含头文件#define uint unsigned int /宏常量定义#define uchar unsigned char /宏常量定义sbit dianji1=P10; /P1_0设置为电机控制一sbit dianji2=P11; /P1_1设置为电机控制二sbit hdjc=

7、P32; /P3_2设置为黑带检测位uchar code duma=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /段编码uchar 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; /

8、定义几个整形变量long int qs; /定义一个长整形变量用来记录小车所转的圈数void fenwei(uint); /声明一个分位函数用来把要显示的数分位void shuma(uchar,uchar); /声明一个数码上显示函数用来在数码管上显示数据void shumadian(uchar,uchar); /声明另一个数码显示函数用来显示带小数点的数据void miaoxianshi(uint); /声明一个显示时间的函数void lcxs(uint); /声明一个显示路程的函数void djkz(); /声明一个电机控制函数void delay(uchar); /声明一个延时函数voi

9、d delay10s(); /声明另一个延时函数用来延时十秒钟void fenwei(uint x) /把需要在数码管上显示的数据分位 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) /将需要显示的数据显示在数码管上 P2=diandumax;void miaoxianshi(uint x) /将定时器

10、0输出的时间显示在数码管上 fenwei(x); shuma(ge,3); shuma(shi,2); shumadian(bai,1); shuma(qian,0);void lcxs(uint z) /将外部中断1输出的路程显示在数码 fenwei(z); shuma(ge,7); shuma(shi,6); shumadian(bai,5); shuma(qian,4);void djkz() /控制电机运转 uchar n=20,m=60; switch(heidai) case 0: case 1: case 2: dianji1=1; dianji2=0; miaoxianshi(

11、miao); lcxs(lc); break; case 3: while(m-) dianji1=1; dianji2=0; delay(70); dianji1=0; delay(30); miaoxianshi(miao); lcxs(lc); while(heidai=3) dianji1=1; dianji2=0; delay(13); dianji1=0; delay(1); miaoxianshi(miao); lcxs(lc); case 4: while(heidai=4) delay(25); case 5: case 6: while(n-) delay(50); dia

12、nji2=1; delay10s(); while(heidai=6) dianji2=1; case 7: case 8: dianji1=0; case 9: while(heidai=7) delay(90); delay(1); case 10: case 11: case 12: TR0=0; while(1) default: void delay(uchar x) /延时 uchar i,j; for(i=x;i0;i-) for(j=50;jj-);void delay10s() /延时十秒钟 uint i,j; for(i=15; for(j=123;j-) void ext

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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1