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

如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个以上碰到黑线,那么就是判断,到了十字路口

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

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

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

待续。。。。。。。。。。。