收藏 分享(赏)

超快循迹小车教程 锐角、直角、十字路口无障碍.pdf

上传人:HR专家 文档编号:6274208 上传时间:2019-04-03 格式:PDF 页数:7 大小:226.58KB
下载 相关 举报
超快循迹小车教程 锐角、直角、十字路口无障碍.pdf_第1页
第1页 / 共7页
超快循迹小车教程 锐角、直角、十字路口无障碍.pdf_第2页
第2页 / 共7页
超快循迹小车教程 锐角、直角、十字路口无障碍.pdf_第3页
第3页 / 共7页
超快循迹小车教程 锐角、直角、十字路口无障碍.pdf_第4页
第4页 / 共7页
超快循迹小车教程 锐角、直角、十字路口无障碍.pdf_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、高 性 能 高 性 能 高 性 能 高 性 能 快 速 快 速 快 速 快 速 循 迹 小 车 循 迹 小 车 循 迹 小 车 循 迹 小 车 史 上 史 上 史 上 史 上 最 全 最 简 明 最 全 最 简 明 最 全 最 简 明 最 全 最 简 明 教 程 教 程 教 程 教 程胡 胡 熊 ( 艺 名 胡 胡 熊 ( 艺 名 胡 胡 熊 ( 艺 名 胡 胡 熊 ( 艺 名 ) ) ) ) 、 顾 林 馨 ( 真 名 ) 、 顾 林 馨 ( 真 名 ) 、 顾 林 馨 ( 真 名 ) 、 顾 林 馨 ( 真 名 ) 2012.38前言 : 循迹小车实在不算一个上得了台面的项目 , 之所以把

2、教程的名字取的这么牛 , 归因于大学生的一个通病 : 喜欢把自己的小项目描述得很伟大 。 我也是名大三学生,为了参加院比赛花了几天时间和 顾哥 顾哥 顾哥 顾哥 一起做了辆小车 。 不为什么名次 , 就是喜欢做点 DIY, 喜欢做小车 , 纯属兴趣 。 小车基本成型 ,看起来性能还不错 , 速度快抖动小 , 所以把自己的一些心得写出来供大家交流。 Q:32809327(胡胡 熊 胡胡 熊 胡胡 熊 胡胡 熊 )Q:75125246(顾林 馨 顾林 馨 顾林 馨 顾林 馨 )希望 喜欢 电子 制作 的人 一起 交流 希望 喜欢 电子 制作 的人 一起 交流 希望 喜欢 电子 制作 的人 一起 交

3、流 希望 喜欢 电子 制作 的人 一起 交流一 、 一 、 一 、 一 、 小 车运 行演 示: 小 车运 行演 示: 小 车运 行演 示: 小 车运 行演 示:htp:/ 、 二 、 二 、 二 、 一 些最 最基 本的 电路 : 一 些最 最基 本的 电路 : 一 些最 最基 本的 电路 : 一 些最 最基 本的 电路 :我的小车都是用最基本的电路搭起来的 , 没有用光耦或是 A/D采样 ( 听说比用比较器采集速度更快)的方法。 这是电机驱动部分的电路图:用的是 L298N的芯片L298N的 5、 7和 10、 12各 控 制 一 个 电 机 。 例 如 当 5接 高 电 平 , 7接 低

4、 电 平时 , 其 中 一 个 电 机 正 转 ; 5接 低 电 平 , 7接 高 电 平 时 , 那 个 电 机 反 转 。 所 以焊 板 子 的 时 候 直 接 把 7和 12接 地 吧 ( 也 可 能 我 记 反 了 , 试 一 下 ) 。 两 个 EN使能端当然直接焊在高电平上 。 5、 7直接接在单片机的 pwm输出口上 , 在第四节的第一个程序里面有详细的 pwm介绍。注意: 1)电源并联的那些电容为了方便可以不接,但 8个二极管最好接上。2) 图中 6V的电源我实际用的是 9V, 电机还能承受的了 , 速度更快 。 用一 个7805降压到 5V供给其他各个芯片作电源。三 、 三

5、、 三 、 三 、 怎 么样 能使 小车 抖动 减小 ? 怎 么样 能使 小车 抖动 减小 ? 怎 么样 能使 小车 抖动 减小 ? 怎 么样 能使 小车 抖动 减小 ?很多同学做出来小车发现抖动很大,走起线来歪歪扭扭。这里提供三个 小方法:1 .把 红外 循迹 模块 和主 动轮 的距 离拉 大 把 红外 循迹 模块 和主 动轮 的距 离拉 大 把 红外 循迹 模块 和主 动轮 的距 离拉 大 把 红外 循迹 模块 和主 动轮 的距 离拉 大 , 视频中可以看到我用两个电路板锯下来的条固定红外循迹模块就是为了使和后面轮子的距离变大 ,这样可以减少抖动原因应该不难吧,自己想想就懂了。2 .红 外

6、探 测头 的距 离最 好和 黑线 宽度 一致 或者 略多 出一 点 红 外探 测头 的距 离最 好和 黑线 宽度 一致 或者 略多 出一 点 红 外探 测头 的距 离最 好和 黑线 宽度 一致 或者 略多 出一 点 红 外探 测头 的距 离最 好和 黑线 宽度 一致 或者 略多 出一 点 , 距离过大造成小车扭动幅度较大。注意 ! ! !1) 这 是 从 底 盘 往 上 看 的 图 , 实 际 安 装 后 , 从 上 面 看 下 去这 是 从 底 盘 往 上 看 的 图 , 实 际 安 装 后 , 从 上 面 看 下 去这 是 从 底 盘 往 上 看 的 图 , 实 际 安 装 后 , 从 上

7、 面 看 下 去这 是 从 底 盘 往 上 看 的 图 , 实 际 安 装 后 , 从 上 面 看 下 去 SS1应 该 应 该 应 该 应 该在 最 左 边 。 在 最 左 边 。 在 最 左 边 。 在 最 左 边 。 这 一 点 在 后 面 程 序 指 导 小 车 到 底 向 左 向 右 的 时 候 要 注意啊。2) 其中 SS4和 SS3的距离为 1.65cm, 黑线宽度为 1.50cm, 所以这样的距离是可以接受的。3 .程序要设计好 程序要设计好 程序要设计好 程序要设计好 ,这一点比较复杂,第四节重点铺开讲。四 、 四 、 四 、 四 、 普 通循 迹的 程序 设计 (即 不包

8、括锐 角走 法) 普 通循 迹的 程序 设计 (即 不包 括锐 角走 法) 普 通循 迹的 程序 设计 (即 不包 括锐 角走 法) 普 通循 迹的 程序 设计 (即 不包 括锐 角走 法)1.PWM波的 产生 : 波的 产生 : 波的 产生 : 波的 产生 :首 先 我 要 介 绍 我 使 用 的 单 片 机 , 我 使 用 的 是 STC12C2052AD, 是 一 款 20引 脚的 小 51单 片 机 。 别 看 它 小 性 能 可 比 40引 脚 的 大 51好 不 少 : 内 置 8路 AD,SPI接 口 等 。 这 些 我 都 不 说 了 , 它 比 普 通 89C52做 小 车

9、方 便 的 地 方 在 于 它 有内置的 PWM模块 ,只需要 设置几个寄存器就可以按指示输出 PWM波了。STC12C2052AD的编程方法 和 89C52完全一样 , 89C52的程序可直接复制过来 。不 同 点 在 于 头 文 件 是 #include” STC12C2052.h” , 到 网 上 下 一 个 2052的 头文 件 放 到 keil的 INC文 件 夹 里 面 再 include一 下 就 好 了 。 再 到 网 上 下 一 个STC12C2052AD的芯片资料, SS1和 SS5是接在它的 INT0和 INT1引脚上的 ,电机驱动的 L298N的 5、 10两个也是接在

10、芯片图中 pwm0和 pwm1的两个引脚。/*pwm调 制控 制电 机转 速 */voidpwm(unsignedcharx,unsignedchary)CMOD=0x2;/SetupPCAtimerCL=0x0;CH=0x0;CAP0L=x;/SetheintialvaluesameasCAP0HCAP0H=x;/DutyCycleCAPM0=0x42;/010,01SetupPCAmodule0inPWMmodeCAP1L=y;CAP1H=y;CAPM1=0x42;CR=1; /startimer之后就可以这么写了: pwm(0xff,0x00)表示右轮全速,左轮停止。 定义为 CarTu

11、rnLeft_H函数Pwm(0x00,0xff)表示左轮全速 , 右轮停止 。 定义为 CarTurnRight_H函数pwm(0x20,0x00)表示右轮全速,左轮稍慢。 定义为 CarTurnLeft函数Pwm(0x00,0x20)表示左轮全速,右轮稍慢。 定义为 CarTurnRight函数可以看出 可以看出 可以看出 可以看出 来 来 来 来 CarTurnLeft_H是较大幅度的左转 是较大幅度的左转 是较大幅度的左转 是较大幅度的左转 而 而 而 而 CarTurnLeft是小幅度的左转 是小幅度的左转 是小幅度的左转 是小幅度的左转 。 。 。 。2.普通 循迹 模块 : 普通

12、循迹 模块 : 普通 循迹 模块 : 普通 循迹 模块 :/*普 通循 迹 */voidCarGoLine()/小 车沿 黑线 走if(S2=0)CarTurnLeft();flag=1;if(S4=0)CarTurnRight();flag=0;if(S3=0)if(lag=0)CarTurnLeft();elseCarTurnRight();我是利用 SS3-SS4或者 SS3-SS2来完成普通寻线的 。 Flag其实就是标志着上次黑线碰到的是 SS4还是 SS2,例如如果是 SS4那就 向左转使得下一次还能让 SS4碰到黑线 。 相当于 SS3-SS4和 SS3-SS2是两个轨道挂在哪个

13、上面都可以。 这里用的全都是轻微的左转或右转 , 很多同学所有的左转右转都是一个轮子挺一个轮子,那样扭动就很大。3.当黑 线不 处于 当黑 线不 处于 当黑 线不 处于 当黑 线不 处于 S2和 和 和 和 S4之间 的时 候: 之间 的时 候: 之间 的时 候: 之间 的时 候:当遇到大的弯道,因小车速度过快 SS2和 SS4冲出赛道,这时候就靠最边上两个红外探测来 “ 拯救 ” 了 。 因为这是救急 , 不能有一点耽误 , 稍微耽误一点时间,小车可能就冲出去回不来了,所以 SS1和 SS5是 接在外部中断引脚上的。/*外 部中 断初 始化 */voidINT_int()EA=1;/开 总中

14、 断EX1=1;/允 许外 部中 断 1EX0=1;/允 许外 部中 断 0IT1=1;/下 降沿 触发IT0=1;/下 降沿 触发/*中 断服 务程 序 */voidINT_0(void)interupt0CarTurnLeft_H();while(S3);voidINT_1(void)interupt2CarTurnRight_H();while(S3);这里所有的左转右转都是一边停止一边全速的转动 , 并且都要求转到 SS3探测到黑线才恢复正常的普通巡线。 到这里 , 一般的赛道都没有问题了 ! ! ! 即便是直角弯道也是不在话下 , 竟然连 十 字 路 口 也 畅 通 无 阻 ( 这

15、点 自 己 考 虑 为 什 么 ) ! ! ! 就 靠 这 么 多 程 序 已 经 能解决这么多问题了,还有什么要改进的呢?对了还有锐角怎么走 ! ! ! 下面请看锐角的解决方案。五 、 五 、 五 、 五 、 锐 角的 解决 方案 锐 角的 解决 方案 锐 角的 解决 方案 锐 角的 解决 方案在我看来,锐角的解决方法我做得并不完善,但也能解决实际问题 , 出错率也很低,就介绍给大家,供大家指正。 思 路 : 思 路 : 思 路 : 思 路 : 每 当五 路循 迹模 块都 检测 不到 黑线 的时 候我 就启 动定 时器 。一旦有任何一路检测到黑线后 , 立即关闭定时器并将定时器清零 。 如果

16、当定时器计时 2S(按各自情况调整)还没有检测到黑线时,认为小车达到锐角 。很多同学会疑问两秒会不会小车已经跑出赛道了,大家看视频就知道 ,小车发现锐角的位置还是很合理的 , 并没有超出跑到 。 但这个方法有一个很大的毛病 , 就是检测到锐角后它要停 2S, 说实话我也不是非常理解 , 希望大家解决这个问题或是告诉我更好的方案。不胜感激。 但至少还是完成赛道的,还是把程序给大家看看:/*定 时器 0初 始化 函数 */voidTime0_Init()TMOD=0x1;IE=0x82;TH0=0x4c;TL0=0x0;TR0=0;/*也 是放 在 也 是放 在 也 是放 在 也 是放 在 Car

17、GoLine函 数中 的 函 数中 的 函 数中 的 函 数中 的 */if(S2=1)/*定 时器 中断 服务 程序 */voidTime0_Int()interupt1TH0=0x4c; /每 50ms溢 出一 次TL0=0x0;Count+;if(Count=40) /到 达两 秒时TR0=0;Count=0;pwm(0xf,0x3c);while(S2);注意:其他所有的黑线检测程序( SS2、 SS3、 SS4)中都要加上 TR0=0;Count=0;六 、 六 、 六 、 六 、 最 后给 大家 主程 序 最 后给 大家 主程 序 最 后给 大家 主程 序 最 后给 大家 主程 序 voidmain()Time0_Init();INT_int();CarGo();while(1)CarGoLine();

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

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报