我在做毕业设计,超声波避障小车,用单片机stc89c52 驱动程序,驱动L298N,但是不能同时驱动两个直流减速电机。

君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于51单片机的超声波智能避障小车论文
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
基于STC89C52单片机的智能循迹小车【毕业论文】.doc43页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:200 &&
你可能关注的文档:
··········
··········
沈阳理工大学
毕业设计(论文)
目: 基于单片机的智能循迹小车
信息与控制学院
班级学号:
学生姓名:
指导教师:
本文论述了基于单片机的智能循迹小车的控制过程。智能循迹是基于自动引导机器人系统,用以实现小车自动识别路线,以及选择正确的路线。智能循迹小车是一个运用传感器、单片机、电机驱动及自动控制等技术来实现按照预先设定的模式下,不受人为管理时能够自动实现循迹导航的高新科技。该技术已经应用于无人驾驶机动车,无人工厂,仓库,服务机器人等多种领域。
本设计采用STC89C52单片机作为小车的控制核心;采用TCRT5000红外反射式开关传感器作为小车的循迹模块来识别白色路面中央的黑色引导线,采集信号并将信号转换为能被单片机识别的数字信号;采用驱动芯片L298N构成双H桥控制直流电机,其中软件系统采用C程序,本设计的电路结构简单,容易实现,可靠性高。
关键词:单片机;自动循迹;驱动电路
This paper discusses the intelligent tracing electric trolley control process. Automatic tracing is used to make the car indentify route automatically , and choosing the right route, based on the automatic guide robot system. Intelligent tracing electric trolley is an advanced technology to realize automatic tracing navigation. It is out of human management but under the designed mode that use of the use of a transducer, single chip, motor drive and automatic control .This technology has been applied in unmanned vehicle, unmanned factory, warehouse, service robot and many other fields.
During the design of Intelligent tracing electric trolley, STC89C52 single cli
正在加载中,请稍后...基于STC89C52单片机红外智能循迹小车_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于STC89C52单片机红外智能循迹小车
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩12页未读,继续阅读
你可能喜欢基于51单片机的蓝牙控制小车的简单实现(有源代码,无图) - 单片机论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
基于51单片机的蓝牙控制小车的简单实现(有源代码,无图)
21:50:37  
本帖最后由 lpstudy 于
21:37 编辑
今天想跟大家聊聊最近在玩的事情。
上上周突然有了玩玩单片机的兴趣,于是在本论坛注册了一个账户,并共享了一些文章,同时也问了一些问题。
此帖子现在有一个后续版本,实现了手机端的蓝牙程序控制小车运动以及接收小车状态并展示,链接地址:
最初的想法是做一个红外遥控的装置,链接地址:
我只需要前进和停止,二路遥控,想使用模拟电路搭建,但最后也没能完成,这个想法依然在,现在只能留带以后是否有想法再做了。
第二个想法是想做一个小车,小车的功能如下: 前进,后退,转弯,遥控控制,自主智能运转。 上某宝买了一个小车的底座(4驱动的,带电机), 买了两个L298N驱动模块用来驱动小车,买了蓝牙模块(HC05)用来充当遥控。
1,首先根据51单片机的最小系统的电路图,焊接了一个最小系统板,使用的STC89c52的单片机(晶振6Mhz,带复位电路,复位指示灯显示),为了便于测试,又焊接了一个发光二极管连接一个I/O口,用于测试最小系统。
2,然后开始测试最小系统,不过我很多年没有用过keil和下载器了,就上网寻找了一下关于这方面的帖子,过程总结如下:
最小系统测试篇:
要测试最小系统,首先需要编译代码的工具(我用的keil),下载代码到单片机的工具(stc-isp),usb转ttl硬件设备(某宝上2块多钱买的),串口调试助手(使用的是单片机多功能调试助手PortHelper.exe),于是从网上下载了keil4破解版本,stc-isp下载软件,单片机多功能调试助手三个软件。
第一步:测试usb转ttl是否可用(就4个引脚,5v,GND, TX, RX)
打开串口调试助手,设置波特率,打开,发现打开失败,比较郁闷,为何呢? 极有可能是串口号不对,于是打开我的电脑-》管理-》设备管理器,找到串口的条目,查看它的串口号,我的竟然是串口号12.于是设置串口号,重新打开,OK。 如何测试usb转ttl呢? 我的想法是如果发送数据的话,对应的tx引脚应该有信号,如果将TX和RX连接到一起,那么发送出去的应该自己可以接收到。我没有示波器,就简单的使用万用表量它的TX引脚的电压,点击发送按钮,发现TX引脚的电压有波动即可。
第二步: 将usb转ttl的四个引脚接入到单片机的对应引脚即可(其实就是VCC接VCC,GND接GND,TX接RX,RX接TX)。没有采用外部供电,直接利用usb转ttl进行的5v供电
第三步:在keil中写代码,对单片机的某一个I/O进行翻转电平的操作,代码如下
sbit LED=P0^0;
& & LED = !LED
& & Delay10ms(100);
第四步:编译程序,生成HEX文件
第五步:打开stc-isp下载工具,选择单片机型号,hex程序位置,点击下载即可,如果识别了单片机的话,会出现给MCU重新上电的字样,这个时候只需要关闭再打开MCU的电源开关即可,就会出现烧写程序的过程。
最小系统测试篇遇到的问题,回忆篇:
51单片机的电源供电问题,忘了接单片机的VCC引脚了(如果是这方面的问题,就检查几个关键地方,vcc和地接好了吗,tx和rx接好了吗,晶振接好了吗,复位电路先不用管,我是使用的万用表一个个的量的)
晶振的电路没焊好(万用表搞定)
usb转ttl找不到串口(软件问题的话,容易解决,也有可能是usb转ttl硬件有问题,驱动没有安装成功,导致识别不了硬件)
第六步: 用万用表量P0^0口,查看电压是否1秒一次变化即可。
3,蓝牙模块工作篇
从某宝上花了17大洋买了一个HC05蓝牙主从模块,有6个引脚(VCC,GND,TX,RX,AT,STATUS),前4个引脚与usb转ttl的接法相同(注意RX,TX交叉接线接入到单片机),AT和STatus引脚是我自己命的名字。 AT引脚高电平有效,用于蓝牙模块进入AT状态(所谓AT状态,即是其他程序可以通过它的引脚向蓝牙模块发送AT控制命令,例如设置波特率,查看版本号,设置主从模式),AT引脚悬空默认为低电平。Status引脚用于显示配对的状态(配对成功输出高电平,未配对输出低电平)
蓝牙模块测试篇:
第一步:蓝牙模块既然包含串口,那么它应该可以跟usb转ttl直接连接,使用电脑向蓝牙模块发送命令。于是连接蓝牙模块与usb转ttl的对应引脚。
第二步:将AT引脚悬空,使用手机搜索周围的蓝牙设备,发现有HC05的蓝牙(因为这个蓝牙模块默认是从模块,可以被收到)
第三步:将AT引脚拉高电平,使其进入AT状态(按照文档描述,如果上电之后再置位AT,指示灯无变化,依旧是,如果上电之前拉高AT,指示灯转为1秒一次),然后通过电脑串口发送AT+VERSION?(注意需要换行)查看版本号,使用AT+UART?查看波特率(默认9600,不带校验)
此文档有用: ATK-HC05-V11用户手册_V1.0.pdf
第四步:实验了一下,我的模块有问题,就是上电之前拉高AT,模块不接受AT命令,只有上电后拉高AT才有用,不过不影响使用。
第五步:将蓝牙模块和usb转ttl连接后,AT保持悬空,即蓝牙模块为从模块,手机安装蓝牙串口助手,打开手机蓝牙,然后搜索HC05,配对,然后打开手机端的蓝牙串口助手软件,向HC05发送消息,如果蓝牙模块工作正常,那么电脑端的串口调试助手应该收到手机发送的消息。同样的也可以通过电脑端发送消息,到手机端。
消息传递流程如下: 手机端蓝牙串口助手 -& 手机蓝牙 -&空气&&-& HC05蓝牙模块 -& USB转ttl模块 -& 电脑的串口调试助手,反过来也是可行的(注意线路连接方式都是RX与TX交叉连接)
蓝牙模块与单片机集成调试篇:
上面的测试已经证明了蓝牙模块是可以发送接收手机端消息的,现在开始将蓝牙模块与单片机的TX,RX接口连接起来,通过程序控制蓝牙模块与手机蓝牙进行沟通,从而达到利用手机蓝牙进行遥控的目的。
main函数如下,主要设置串口波特率,以及开启串口中断
//PCON:SMOD位默认为0,串行口波特率加倍位
PCON = 0x80;& && && && && & //SMOD=1;
TMOD=0x20;& && && & //8位自动加载计数器
//TH1=0&&TL1=0& &for 11.0592MHZ and SMOD=0,
TH1 = 0xf3;//2400bps
TL1 = 0xf3;
TR1=1;& & // T1
//SCON: 0x50=SM0=0, SM1=1,REN=1
SM1=1; //串口
EA=1; //中断
串口中断函数
void serial() interrupt 4
& && && &sbuf=SBUF;
& && && &switch (sbuf)
& && && &{
& && && && && &&&case 'f': direc=4;
& && && && && &&&case 'b': direc=5;
& && && && && &&&case 'l': direc=6;
& && && && && &&&case 'r': direc=7;
& && && && && &&&case 's': direc=-1;
& && && && && &&&default : LED = !LED; //LED为一个I/O引脚,控制发光二极管
& && && &}
& && && &RI=0;
遇到的问题:
利用手机给蓝牙HC05发送消息,如果不是switch中的几个case的话,那么LED灯会明暗变化,但是刚开始的测试却始终不如意。而后仔细查看了代码,并没有发现什么错误,后来怀疑是波特率的问题,因为我的晶振是6Mhz的,蓝牙模块的波特率是9600. 我手动计算了一下:
采用波特率倍频,那么计算如下 6* / 12 / 32 / 9600 = 3.255, 取整为3. 然后使用3反代入到此式子中
6* / 12 / 32 /3 = 10416.7 与9600相差1000多,这个似乎差距太大了。我又尝试了其他几个参数,像,38400都相差挺大的,估计就是这个原因。于是继续尝试,发现2400的话,相差不多。6*/12/32/2400 = 13.02 ,然后使用13代入进去结果为2403.8,与2400的波特率相差很小,估计是可以用的。但是看蓝牙模块的文档,发现它说不支持2400的,我不甘心,就使用usb转ttl模块设置了一下2400,没想到AT命令还真的返回OK了,单片机程序也可以正常工作了。
4,小车驱动篇:
将两个L298N模块与单片机的P2口直接相连(小车4轮驱动,每个电机需要两个输入引脚,以及一个使能引脚,那就是12个引脚,我刚开始并不想支持调速的功能,因此使能引脚直接高电平了,就连接了8个I/O口)。注意L298N的GND引脚一定要和单片机的GND共地。
关于L298N: 它的EN引脚用于使能,EN为高电平,才使能。另外两个输入引脚IN1,IN2根据电平的组合变化会有4种情况(00,10,01,11),电机相应的在00和11停止(这个停止是带电的,类似于锁死的感觉),在10正转,01反转。可以直接使用单片机的VCC和GND连接L298N的IN1和IN2,同时将EN端接VCC,看电机转不转就可以测试L298N模块了。
编写程序,控制轮子的正转,翻转,停止等。基本上就是以下的这种代码
void wheelForward(uchar which)
& && &&&switch(which)
& && && && && & case 1:
& && && && && & {& && &&&
& && && && && && && && &wheel_1_1 = 0;
& && && && && && && && &wheel_1_2 = 1;
& && && && && && && && &
& && && && && & }
& && && && && & case 2:
& && && && && & {
& && && && && && && && &wheel_2_1 = 0;
& && && && && && && && &wheel_2_2 = 1;
& && && && && && && && &
& && && && && & }
& && && && && & case 3:
& && && && && & {
& && && && && && && && &wheel_3_1 = 0;
& && && && && && && && &wheel_3_2 = 1;
& && && && && && && && && && && && && &
& && && && && & }
& && && && && & case 4:
& && && && && & {
& && && && && && && && &wheel_4_1 = 0;
& && && && && && && && &wheel_4_2 = 1;
& && && && && && && && &
& && && && && & }
遇到的问题:
问题1: 刚开始L298N直接连接P0口,死活不转,而直接引出高低电平到某一个电机的IN1,IN2口,电机正常运转。于是猜测是I/O有问题,使用万用表测量,发现P0的I/O在输出高电平的时候,根本不是高电平,而后发了帖子,询问了一下才知道P0口在高电平是呈现高阻态的,需要外部焊接电路加上拉电阻才可工作。我不想焊接过多的电路,就将其I/O换到P2口,可以正常工作
帖子链接地址:
问题2: 我使用的是路由器的9v直流电源,使用其带动两个L298N,同时将L298N的输出的一个5V高电平接到单片机上给单片机供电,启动4轮驱动,电机只会翁的一声,然后啥也没有,二轮驱动也不转。 上网查看了不少资料,基本上都是电源功率过低,需要将单片机与L298N分别供电才可以。 于是使用笔记本的usb口给单片机供电,使用9v直流电源给电机供电,比刚才好了一些,两轮可以转,但是4个轮子还是转不了。没办法,想到自己有一个小的卡片相机,有镍氢电池8节,然后上网买了一个电池盒,装上去,电机转的吼吼叫,同时L298N给单片机供电也没问题。
关于L298N同时给单片机供电的问题,大家可以在启动轮子转动的时候量一量单片机的电源电压,会发现在电机启动的一刹那,单片机的电压有一个瞬时的拉低,这样单片机就会复位了。
5,蓝牙遥控小车汇总篇
第一步:部署小车,L298N,镍氢电池盒,蓝牙模块组装到一起
第二步:编写代码,本来可以使用EN口进行调速控制的,但是考虑到还需要使用额外的I/O口,就先不打算做了。
代码完成的功能:
小车前进,后退,停止,左转,右转
小车单个轮子的转动(用于测试)
小车当前状态的获取(用于后期给小车增加其他模块的时候,例如温度模块,就可以读取温度了)
小车命令帮助
代码思路:
首先完成单个轮子的控制
再完成小车的控制
再加入串口接收中断,收到不同命令,设置方向变量
main程序读取方向变量控制不同的方向
一些比较有特点的思路:
思路1:一个棘手的问题想实现这样的功能: 用户按键,小车才走,用户松开按键,小车停止。
我的想法如下: 小车使用一个定时器T0,控制定时器的延时时间为100ms,用户每发送一个前进信号,小车会前进100ms,但是这100ms内小车还需要能够响应外部的命令。例如如果用户在t=0ms发送前进命令,然后在t=50ms发送左转命令,小车能够立刻左转,而不是继续前进100ms,然后才执行左转的命令。基本的代码思路是用户的每一个命令,都会重置timer0,timer0的超时中断函数会将小车停止。这样用户只要以连续的小于100ms间隔发送前进命令,小车就会一直前进,也就是说timer0的中断没有执行,如果用户间隔100ms还没有发送命令,那么小车停止。 当前我使用的蓝牙串口助手它的按键不支持连续发送,只能按下松开手,才会发送消息,这样我现在就把时间间隔设置为1000ms,用户只要以小于1000ms的间隔连续按键,小车就会一直前进,如果不按键,小车会继续前进1000ms才会停止。 后期打算找到蓝牙串口调试助手的源代码,修改它的源代码,设置成如果用户按下不丢,小车前进命令能够一直发送。
思路2: 既然有了手机蓝牙,那么小车再想展示一些状态信息,就没必要使用像之类的东东了,直接定时发给手机蓝牙模块就OK了。我现在并没有实现定时发送,不过支持了命令获取的功能。 当用户发送命令h到单片机,单片机会返回一个帮助界面,告知如何控制小车,例如&f&控制小车前进,&b&控制小车后退,当用户发送命令i到单片机,单片机会返回小车的一些状态信息,我当前只返回了一些简单的变量状态(后面想加入距离,温度,光敏都是可行的)。
思路3:有了蓝牙,这个小车就可以被我们随心所欲的控制了。你既可以推命令到单片机,控制它,你又可以把单片机内部的当前状态拉出来。单片机本身又可以定期将它的状态向你的手机进行推送。这个我感觉还是很好玩的,有了这个代码的基本框架,后面有可能的话像实现一个小车的扩展功能,加上红外对管让它不撞墙,加上超声波让它测距,加上麦克风让它向着声音跑,加上人体感应让它做一个跟屁虫,甚至于加上一个智能化点的程序,让它能够在一个屋子里随便的转悠,然后记录屋里的情况。还想做的是加入一个wifi模块,能将它的状态信息上传到路由器里面(手里有一个坏的路由器华为hg255d,正在修理中,还没有摸清楚如何修),这样远在千里之外都可以访问小车上面传感器的情况了。还想加的是一个摄像头模块,不过单片机的处理能力有限,摄像头的解码对它是个大问题,估计很难办到(手头有优龙fs2401开发板,刚修好它的电源模块,正在研究中,不过前天它突然bios引导不起来了,也不知道是什么问题,关于这种arm的东西,还没有接触过,完全不懂刷bios,uboot等等的东西,看情况是要重新刷bios了)。
21:47 上传
点击文件名下载附件
下载积分: 积分 -1 分
41.46 KB, 下载次数: 158, 下载积分: 积分 -1 分
最终代码,感觉不错请点赞
15:49:28  
看下 感谢分享- -
10:30:28  
太感谢楼主了!
等待验证会员
15:29:06  
谢谢分享,学习学习
19:49:19  
借鉴一下& && && && && && && && && && && && &
高级工程师
10:34:41  
21:50:11  
课程设计刚好要做蓝牙小车,来借鉴一下,谢谢楼主大大
22:46:23  
借鉴借鉴,谢谢楼主
09:54:06  
感谢楼主大大的分享啦
22:48:33  
666666,刚想做个小车
20:26:59  
学习中,谢谢分享
18:10:40  
ll海地i阿訇点解啊螺丝钉看见卡死极度恐惧阿斯利康点解啊累块积苏老卡机德拉克赛季打进来的
18:21:53  
棒棒棒& && && && && && && && &
18:35:42  
很不错的资料,以后备用
18:39:03  
好想看看你的资料,在这里学习
12:32:26  
用C语言生成HEX,车子不会动。直接下载HEX,车子右轮直接动
11:58:56  
用C语言生成HEX,车子不会动。直接下载HEX,车子右轮直接动
这个需要注意你的小车的车轮控制引脚与单片机I/O口的连接关系。
我为了方便将相应的I/O口定义了一下,你需要修改这些定义以适配你自己的单片机I/O口。
下载Hex进入到小车内部,小车是不自动运转的。 我的c语言主程序是一个死循环,不断检测是否接收到串口命令。根据不同的命令执行不同的操作。 这个串口命令是通过蓝牙模块传递的。 手机安装蓝牙APK程序,然后手机和单片机的蓝牙模块连接, 手机按相应的按钮,单片机的蓝牙模块接收到手机发送的指令,然后发送到单片机串口,继而引起单片机串口中断。 单片机内部代码根据中断设置不同的指令,主main函数不断循环,发现有指令设置则执行相应的指令。
12:06:47  
上面的包括后序版本的,是我上学期期末花了大约2周的时间来玩的一个东东。
连接地址:
第一条帖子是蓝牙小车的基本版本,蓝牙程序为网上下载,小车程序自己实现的。
第二条为蓝牙小车的升级版本,蓝牙程序为自己修改的开源代码, 小车程序做了进一步的更新。
真的很对不住大家了,本来想加入一些传感器功能的,但是我这半年来实在是太忙了,后面估计也没时间搞了。 如果有更新的话,我会及时发帖的。
非常感谢大家的关注。
助理工程师
20:21:38  
幸运偏爱有准备的人 与楼主共勉
14:54:31  
谢谢你得分享 如果方便的话能留下你QQ吗 有什么问题及时向你请教 我的
Powered by

我要回帖

更多关于 stc89c52 的文章

 

随机推荐