循迹小车讲解一:原理分析

it2025-03-01  21

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 1 AIN2 0 1 0 停止 正传 反转 A01 和AO2 接电机1的两个脚; (F) 驱动2路 PWMB:接单片机的PWM口,通过PWM的占空比,控制电机的速度;

BIN1和BIN2,接单片机的IO引脚; 通过控制00,01,10组合,控制电机的方向,顺时针,逆时针转动。 真值表: BIN1 0 0 1 BIN2 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—P15 P10是1号模块 P11是2号模块 。。。。。 P15是5号模块;

从而得到实际的小车的状态。 如果3号模块检测到黑线,(0或者1)那么,小车继续直行; 如果1号检测到黑线,那么就左转,而且是左大转弯; 如果是2号,检测到,那么就左小转弯 同理,进行右转弯,大转弯。

通过PWMA和PWMB的实际差值,差值越大,转弯越大;

如果有十字路口, 5个传感器,有3个以上碰到黑线,那么就是判断,到了十字路口

如果在其他地方也放置传感器,那么可以检测多种道路的状态。

上面就是循迹小车的原理。

后面说下如果用单片机进行循迹。如何导入文件,如何使用函数。 待续。。。。。。。。。。。

最新回复(0)