「技术文章」电动小车的循迹原理及设计
在2001、2003年连续两届全国大学生电子设计竞赛中,均出现了简易智能小车这种集光、机、电于一体的题目。本文具体介绍一下小车如何正确地进行循迹并给出必要的源代码。
1.小车控制及驱动单元的选择
此部分是整个小车的大脑,是整个小车运行的核心部件,起着控制小车所有运行状态的作用。通常选用单片机作为小车的核心控制单元,本文以台湾凌阳公司的SPCE061A单片机为例予以介绍。SPCE061是一款拥有2K RAM、32KFlash、32 个I/O 口,并集成了AD/DA功能强大的16位微处理器,它还拥有丰富的语音处理功能,为小车的功能扩展提供了相当大的空间。只要按照该单片机的要求对其编制程序就可以实现很多不同的功能。
小车驱动电机一般利用现成的玩具小车上的配套直流电机。考虑到小车必须能够前进、倒退、停止,并能灵活转向,在左右两轮各装一个电机分别进行驱动。当左轮电机转速高于右轮电机转速时小车向右转,反之则向左转。为了能控制车轮的转速,可以采取PWM调速法,即由单片机的IOB8、IOB9输出一系列频率固定的方波,再通过功率放大来驱动电机,在单片机中编程改变输出方波的占空比就可以改变加到电机上的平均电压,从而可以改变电机的转速。左右轮两个电机转速的配合就可以实现小车的前进、倒退、转弯等功能。
2.小车循迹的原理
这里的循迹是指小车在白色地板上循黑线行走,通常采取的方法是红外探测法。
红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。红外探测器探测距离有限,一般最大不应超过15cm。对于发射和接收红外线的红外探头,可以自己制作或直接采用集成式红外探头。
(1)自制红外探头电路如图1所示,红外光的发送接收选用型号为ST168的对管。当小车在白色地面行驶时,装在车下的红外发射管发射红外线信号,经白色反射后,被接收管接收,一旦接收管接收到信号,那么图中光敏三极管将导通,比较器输出为低电平;当小车行驶到黑色引导线时,红外线信号被黑色吸收后,光敏三极管截止,比较器输出高电平,从而实现了通过红外线检测信号的功能。将检测到的信号送到单片机I/O口,当I/O口检测到的信号为高电平时,表明红外光被地上的黑色引导线吸收了,表明小车处在黑色的引导线上;同理,当I/O口检测到的信号为低电平时,表明小车行驶在白色地面上。此种方法简单,价格便宜,灵敏度可调,但是容易受到周围环境的影响,特别是在图1较强的日光灯下,对检测到的信号有一定的影响。
(2)集成式红外探头可以采用型号为E3F-DS10C4集成断续式光电开关探测器,它具有简单、可靠的工作性能,只要调节探头上的一个旋钮就可以控制探头的灵敏度。该探头输出端只有三根线(电源线、地线、信号线),只要将信号线接在单片机的I/O口,然后不停地对该I/O口进行扫描检测,当其为高电平时则检测到白纸,当为低电平时则检测到黑线。此种探头还能有效地防止普通光源(如日光灯等)的干扰。其缺点则是体积比较大,占用了小车有限的空间。
3.红外探头的安装
在小车具体的循迹行走过程中,为了能精确测定黑线位置并确定小车行走的方向,需要同时在底盘装设4个红外探测头,进行两级方向纠正控制,提高其循迹的可靠性。这4个红外探头的具体位置如图2所示。图中循迹传感器共安装4个,全部在一条直线上。其中InfraredMR与InfraredML 为第一级方向控制传感器,InfraredSR 与InfraredSL 为第二级方向控制传感器。小车行走时,始终保持黑线(如图2 中所示的行走轨迹黑线)在InfraredMR和InfraredML这两个第一级传感器之间,当小车偏离黑线时,第一级探测器一旦探测到有黑线,单片机就会按照预先编定的程序发送指令给小车的控 制系统,控制系统再对小车路径予以纠正。若小车回到了轨道上,即4个探测器都只检测到白纸,则小车会继续行走;若小车由于惯性过大依旧偏离轨道,越出了第一级两个探测器的探测范围,这时第二级动作,再次对小车的运动进行纠正,使之回到正确轨道上去。可以看出,第二级方向探测器实际是第一级的后备保护,从而提高了小车循迹的可靠性。
4.软件控制
其程序控制框图如图3。小车进入循迹模式后,即开始不停地扫描与探测器连接的单片机I/O口,一旦检测到某个I/O口有信号,即进入判断处理程序(switch),先确定4个探测器中的哪一个探测到了黑线,如果InfraredML(左面第一级传感器)或者InfraredSL(左面第二级传感器)探测到黑线,即小车左半部分压到黑线,车身向右偏出,此时应使小车向左转;如果是InfraredMR(右面第一级传感 器)或InfraredSR(右面第二级传感器)探测到了黑线,即车身右半部压住黑线,小车向左偏出了轨迹,则应使小车向右转。在经过了方向调整后,小车再继续向前行走,并继续探测黑线重复上述动作。
由于第二级方向控制为第一级的后备,则两个等级间的转向力度必须相互配合。第二级通常是在超出第一级的控制范围的情况下发生作用,它也是最后一层保护,所以它必须要保证小车回到正确轨迹上来,则通常使第二级转向力度大于第一级,即level2>level1(level1、level2为小车转向力度,其大小通过改变单片机输出的占空比的大小来改变),具体数值在实地实验中得到。
专家点评:根据本文所讲述的方法,我们可以较容易地做出按照一定轨迹行走的智能电动小车。但是按照该方法行走的小车如果是走直线,有可能会是蛇形前进。为了使小车能够按轨迹行走的更流畅,可以在软件编程时运用一些简单的算法。例如,在对小车进行纠偏时,适当提前停止纠偏,而不要等到小车完全不偏时再停止,以防止小车的过冲。
循迹小车讲解一:原理分析(含代码)
大家好,今天给大家介绍循迹小车原理,文章末尾附有本文涉及的全部资料和源代码的获取方式,可进群免费领取。
1、循迹小车原理
(1)小车的类型: 常见的有三轮车,四轮车两种;三轮车,主要是后面两个主动轮,前面一个万向轮组成;
四轮车,比赛中常见的有4个都是直轮,或者4个是麦克纳姆轮两种;
(2)由于是新手,所以简单说下三轮车的原理; 四轮的,自己学习解决;
第一个; A、三轮车,主要有五种动作。前进;左转;右转;后退;停止;其中,左转,右转又可以分为大转弯,和小转弯;
B、其中左转,右转,都是根据两个轮子的速度差实现;
左轮速度>右轮速度;则向右边转弯;左轮速度<右轮速度;则向左转弯;
速度差越大,转弯越大;因此可以设置速度差,实现大转弯和小转弯的目的;
当一个轮子的速度为0,另外一个轮子有速度的时候,会绕着速度为0的轮子转圈,转圈的半径为两个轮子的轮间距,但是实际上,会发生轮子打滑的情况,所以会有点偏移;
由于是直流电机作为动力,因此,可以控制电机的速度,进行小车的速度控制。
因此,实际控制小车的几个动作,实际就转化为控制电机的速度;
(3)直流电机控制的基本内容:
直流电机,比赛常用的有几种,一种是黄色的T电机;一种是带编码的电机;带编码的电机可以测速等等,稍贵,但是扭矩大,运行性能好。因此在比赛常用。。这里由于黄色的电机比较便宜,用这个入手。进行学习。
控制方向: 由于是直流电机,所以两个引脚,A,B。如果给5V电压,A接正极,B接负极,那么电机往一个方向运动;如果A接负极,B接正极,那么电机反方向运动。
所以通过调节A和B的接线,就能控制电机正反转;
控制速度:如果给3.5V电压,那么电机的速度会比5V的慢,因此,可以通过控制电机的电压控制转速。
如果我们人为去交换A、B的接线,就太复杂了,怎么解决呢?
如果我们人为去改变电机的电压,调节滑动变阻器等,也比较复杂,而且不够实时,怎么办呢?
而且,一般要驱动电机,需要带电机驱动模块。
比如常用的有L298N模块,TB6612模块,或者mos管自己搭建驱动电路;
新手可以用TB6612模块或者L298N模块;
这里对TB6612模块进行讲解,如何对电机进行速度控制和方向控制。
首先介绍PWM的概念。PWM是脉冲宽度调制的意思。简单这么理解,如下图的波形。T是周期,t1是高电平的时间,t2是低电平的时间。t1高电平的时间越长,如果等于周期,那么整个周期,IO口的电平就是5V ,如果是50%,那么是2.5V.因此可以控制t1的时间,控制t1/T的比例,从而控制输出的电压,从而控制电机的速度。
一般直流电机的频率是7K-13K,没实验过,可以实验看下效果区别。
所以,控制小车的轮子的速度,就是控制各自的PWM的高电平比例,就是占空比。
那么怎么产生一个PWM波形,可以控制比例呢?我们者利用的51单片机,有四种方法产生PWM。第一,延时就是延时t1,P10(假如这个是PWM输出脚)=1,延时t2,P10=0
delay(t1);P10=1;delay(T-t1)P10=0
第二 定时器,定时一段时间,P10=1,定时一段时间,P10=0;
第三,就是增强型的51单片机,我们现在用的stc8a单片机,有内置的PWM模块。这里我们用的就是这个。
我已经写好函数,直接包含头文件,和c文件,初始化之后,就能直接使用了。我这里是低电平的时间,第三个参数,所以要1-0.3转为高电平比例。0,是P20通道,6000是频率6K。HPWM_Set(0,6000,1-0.3);所以改变最后的参数(比例,所以参数在0-1之间),就能控制电机的速度了。
TB6612模块的具体介绍,网上很多。
TB6612的的用法: (A),TB6612是双驱动,也就是可以驱动两个电机。这个合适我们三轮车,因为有两个电机,一个是万向轮,因此我们的小车,就需要一个TB6612模块就行了。
下面分别是控制两个电机的IO口(B)STBY口接单片机的IO口清零电机全部停止,置1通过AIN1 AIN2,BIN1,BIN2 来控制正反转。因此,我们可以设置STBY为5V,让电机可以得到单片机的控制;(C)VM 接12V以内电源。这个根据电机的特性和小车运动的场合进行选取。我们这里可以接5V。(D)VCC 接5V电源GND 就不多说了啊(E)驱动1路PWMA:接单片机的PWM口,通过PWM的占空比,控制电机的速度;通过控制下面的00,01,10组合,控制电机的方向,顺时针,逆时针转动。AIN1,AIN2接单片机的IO引脚;真值表:AIN1 0 0 1AIN2 0 1 0停止 正传 反转A01 和AO2 接电机1的两个脚;(F)驱动2路PWMB:接单片机的PWM口,通过PWM的占空比,控制电机的速度;
BIN1和BIN2,接单片机的IO引脚;通过控制00,01,10组合,控制电机的方向,顺时针,逆时针转动。真值表:BIN1 0 0 1BIN2 0 1 0停止 正传 反转B01,BO2 接电机2的两个脚
综上,根据电路原理图,我们的电机是
假如左轮是A路电机,右轮是B路电机。
那么A路电机: P20----PWMA—速度;P04-----0--------停止P05-----0
P20----PWMA—速度;P04-----1--------前进?P05-----0如果不是前进,调换A01, A02的两条电线。
P20----PWMA—速度;P04-----0--------后退?P05-----1如果不是后退,调换A01, A02的两条电线。
那么B路电机: P21----PWMB—速度;P06-----0--------停止P07----0
P21----PWMB—速度;P06-----1--------前进?P07-----0如果不是前进,调换B01, B02的两条电线。
P21----PWMB—速度;P06-----0--------后退?P07-----1如果不是后退,调换B01, B02的两条电线。
同时,可以调节PWMA和PWMB的比例大小,决定小车的转弯方向;
如果PWMA>PWMB,左轮速度大于右轮速度,那么右转;如PWMA=0.7,PWMB=0.4,速度差越大,转弯越大;如果PWMA<PWMB,左轮速度小于右轮速度,那么左转;如PWMA=0.4,PWMB=0.7,速度差越大,转弯越大;但是,由于电机的制造误差等等,特性会有偏差。因此相同的比例,小车也可能会偏离。如PWMA=0.4=PWMB。小车也可能越走越不是一条直线。。
因此,需要有一条引导线,引导小车直行。或者加测速装置,测得左轮的速度,右轮的速度,单片机调整到一样,就能直走了。
这里,我们用循迹的方法实现。
一般用的是黑线,白纸的方法。
那么怎识别到是黑线呢?
用的是传感器,当做小车的感觉器官;
这个传感器有多种类型,有视觉的,有光电的等等。
我们这里暂时红外传感器,比较便宜。
而且用的是数字式的红外传感器。。一般用的是TCRT5000红外模块,原理图等如下。
使用比较简单,接上VCC=5V,GND,将D0接到单片机的一个引脚IO,不断读取IO的状态电平,如果是得到0,那么是白线(黑线),如果是1,那么是相反的线。这里,用红外的模块划过黑线,看看是什么状态才确定。
如果接A0,那么需要ADC转换,后面有时间再做这个吧。
我们这里,用了5个IO口,检测5个模块。P10—P15P10是1号模块P11是2号模块。。。。。P15是5号模块;
从而得到实际的小车的状态。如果3号模块检测到黑线,(0或者1)那么,小车继续直行;如果1号检测到黑线,那么就左转,而且是左大转弯;如果是2号,检测到,那么就左小转弯同理,进行右转弯,大转弯。
通过PWMA和PWMB的实际差值,差值越大,转弯越大;
如果有十字路口,5个传感器,有3个以上碰到黑线,那么就是判断,到了十字路口
如果在其他地方也放置传感器,那么可以检测多种道路的状态。
完整工程代码可进群免费领取!!!
嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!
点击这里找小助理0元领取:扫码进群领资料
相关问答
agv寻迹 原理 ?原理一:AGV自动导引车采用发光二极管发光,用光敏二极管接收。当发光二极管发出的可见光照射到黑带时,光线被黑带吸收,光敏二极管为检测到信号,呈高阻抗...原...
单片机 寻迹什么意思?单片机寻迹是指利用单片机控制系统来实现对特定路径的跟踪和追踪。通常使用红外传感器或光电传感器来检测路径上的标记或线条,然后通过单片机的程序控制电机或...
Arduino nano优点?种开源项目目前已经得到广泛的认可和大范围的应用。它的硬件电路和软件开发环境都是完全公开的,在不从事商业用途的情况下,任何人都可以使用、修改和分发它。...
想学习 单片机 ,有什么好的书籍推荐?五年之前那是在大学期间,距离现在大约有4年了吧,教我们单片机的老师要离我们而去了,因为她要去她的城市教书去了。怎么形容她呢?那是一个风度翩翩,很有才华...2...
想学习 单片机 ,应该找个什么工作?哥们应该先学会了再去找工作哦,初学单片机,需要掌握数字电路基础,了解一定的模拟电路基础,掌握基本的c语言(指针,类和继承暂时了解就行),了解数字通讯(...哥...
arduino和51 单片机 的速度?arduino和51单片机都属于小型控制器,51单片机编和都是用低层代码来编写,而arduino不是,所以相对来说arduino速度要快点。arduino和51单片机都属于小型控制器,...
单片机 DIY,电路与程序已经完成,还需要买什么才能做出实物?单片机DIY最大的乐趣是除了学到相关知识外,就是亲眼看到自己的DIY作品上电后实现了想要的功能,这一刻的喜悦会让你忘记设计、调试的辛苦,反而会更加的喜欢DIY...
学电子好吗?这个问题我来回答,我对这个问题还是有点发言权的。我自参加工作以来,由于工作关系也从事多年的电子技术方面的工作,在工作中也参加过省市方面的技能大赛,并获...