51智能小车系列
智能小车(二)-------- 小车的红外遥控调速
智能小车(三)-------- 小车的红外循迹
前言
这篇文章我主要讲的是怎么让基于51单片机下的智能小车动起来,智能小车的项目非常多,比如说循迹避障、蓝牙遥控、视觉控制等等,我将会一步一步带大家走进单片机的项目当中。我也是第一次写文章,可能会有很多不足的地方,还请各位大佬多指教。
一、硬件选择
1.1 小车底盘
底盘的形状,大家可以根据自己的意愿去选择,我在这里选择的是4WD智能小车底盘,组装起来也比较的方便,容易上手。
1.2 电机
我采用的是工作电压3-6v直流减速电机TT马达(如果你想要双轮(四轮)驱动的话,那就需要装上两个(四个)直流减速电机,电机接线需要自己焊接)。
1.3 51单片机最小系统板
对于最小系统板的话,没有什么特殊的要求,用你自己熟悉的芯片就行,这里我采用的是STC89C52芯片。
1.4 L298N双路电机驱动模块
L298N,是一款接受高电压的电机驱动器,直流电机和步进电机都可以驱动。一片驱动芯片可同时控制两个直流减速电机做不同动作,在6V到46V的电压范围内,提供2安培的电流,并且具有过热自断和反馈检测功能,可对电机进行直接控制,通过主控芯片的I/O输入对其控制电平进行设定,就可为电机进行正转反转驱动,操作简单、稳定性好,可以满足直流电机的大电流驱动条件。
L298N是比较常用的直流电机驱动模块,也是比较适合新手的,本节中A、B使能用跳线帽盖住,具体各引脚的使用在如下图中已做出标注,基本属性也可参照下表。
1.5 电源
我用的是18650锂电池3.7V移动电源2500mAh可充电电池,当然也需要对应的电池组进行组合,具体也可根据自己的需求进行选择,选择时要注意电池的电压和电容。
1.6 杜邦线
分为公对公、公对母、母对母三种线形,主要用于电路实验,在进行电路实验的时候可以和插针进行连接,而且具有非常好的牢靠性,也能够省略焊接的过程,快速的进入电路实验,在电子产品的应用中非常广泛,是必备的辅件。
二、硬件连接
这里我采用的是双轮驱动,所以硬件部分为:两个直流减速电机、3节3.7v电池及电池组、一个51最小系统板(由于设备缺陷,我用的是STC89C52开发板11.0592MHz)、一个小车底板、四个车轮、一个L298N双路电机驱动模块、若干铜柱螺丝和杜邦线等。
示例(请忽略小车左边的5路红外循迹模块和对应杜邦线的连接):
三、程序编写
这里我用的是双轮驱动,只需两个电机M1、M2对小车进行驱动,在IN1~IN4的逻辑输入中,由IN1、IN2控制电机M1;IN3、IN4控制 电机M2,再改变电机的电平变化使电机进行正反转,无电平变化即电机停止转动,例如IN1输入高电平1,IN2输入低电平0,对应电机M1正转;IN1输入低电平0,IN2输入高电平1,对应电机M1反转,IN1和IN2都输入低电平0或高电平1,对应电机M1停止转动,IN3和IN4同理可得。
具体代码如下(示例):
#include<reg52.h>
sbit IN1=P2^0; //使IN1~IN4端通过杜邦线接到不同的P口,这里我接的是P2
sbit IN2=P2^1; //其中IN1、IN2控制电机M1;IN3、IN4控制电机M2
sbit IN3=P2^2;
sbit IN4=P2^3;
void Delay1000ms() //延迟函数,一个延迟函数为1s
{ //@11.0592MHz
unsigned char i, j, k;
i = 43;
j = 6;
k = 203;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main()
{
while(1)
{
//未调制pwm前小车速度可能比较快
IN1=1;IN2=0; //两电机正转,小车前进
IN3=1;IN4=0;
Delay1000ms(); //延迟1s
IN1=0;IN2=0; //两电机停转,小车不动
IN3=1;IN4=1;
Delay1000ms(); //延迟1s
IN1=0;IN2=1; //两电机反转,小车后退
IN3=0;IN4=1;
Delay1000ms(); //延迟1s
}
return 0;
}
总结
本节是以STC89C52单片机为CPU,通过一些外围电路和软件编程实现小车前进、后退、停止的功能。整个设计过程中最大的特点是利用简单的原理图将TT电机、L298N驱动模块、51单片机这三个模块有效的结合起来,利用经典的H桥路作为小车前进、后退和停止的编程理论基础,提高了效率,降低了编程的复杂度,具有很强的研究的意义,智能化的发展促使了智能小车往功能更加强大的方向发展。