实验三:51单片机平台---小车前进后退左右综合实验
1 .实验准备
图1-1 51单片机主控板
图1-2 4个直流减速电机
2.实验目的
单片机上电后,小车先延时2s,再前进1s,后退1s,左转2s,右转2s,原地左转3s,原地右转3s,停止0.5s。处于这样的循环状态。
3.实验原理
对于4路直流减速电机的控制我们采用的是TB6612FNG驱动芯片来驱动电机。通过控制驱动芯片的AIN1,AIN2,BIN1,BIN2,PWMA,PWMB的电平高低来控制电机的正转,反转,停止。本次实验主要是控制AIN1,AIN2,BIN1,BIN2的电平状态,进而通过控制PWMA,PWMB在0-255之间控制小车的速度。一路PWM控制小车一侧电机的速度。
脉冲宽度调制(PWM),是英文“Pulse Width Modulation” 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。
STC12C5A60S2系列单片机的PAC模块可以通过程序设定,使其工作于8位PWM模式。本次实验中我们是用定时器0开产生PWM控制电机,从而进一步控制小车的的运动。
表4-1 STC12C5A60S2系列单片机特殊功能寄存器表
下面我们就本次实验所用到的定时器0做一个简单的介绍:
GATE(TOMD.3) : GATE=1时表示必须是INT0脚为高以及TR0控制位置1时才可以打开定时器0/计数器0。
C/T(TOMD.2) :C/T=1时用作定计数器,C/T=0由TH和TL用作定时器。
M1,M0(TOMD.1,TOMD.0):用来选择定时器0/计数器0的工作模式。如下四种工作模式:
M1 | M0 | 模式 |
0 | 0 | 13位定时器/计数器,兼容8084定时模式,TL0只用第5位参与分频,TH0整个8全用。 |
0 | 1 | 16位定时器/计数器。TL0,TH0全用。 |
1 | 0 | 8位自动重装载定时器,当溢出时将TH0存放的值自动装入TL0。 |
1 | 1 | 定时器0此时作为双8位定时器/计数器。TL0作为一个8位定时器/计数器,通过标准定时器0的控制位控制,TH0仅作为一个8位定时器,由定时器1的控制位控制。 |
单片机的定时器/计数器是可编程的,具体步骤如下:
(1)对TMOD赋值,以确定定时器的工作模式。
根据我们上面的介绍,本次实验中我们设置定时器0为工作方式1
TMOD=0X01;
(2)设置定时/计数器初值,直接将初值写入寄存器TH0,TL0。
计算初值的方法如下:
设计数器的最大值为M,则置入的初值X为
计数方式X=M-计数值
定时方式由(M-X)T=定时值,得X=M-定时值/T
T为计数周期,是单片机的机器周期。
方式0时,M=213=8192.
方式1时,M=216=65536.方式2和3时,M=28=256。
根据我们上面的介绍,本次实验中我们所用的晶振是11.0592Mhz,设置定时器0为1ms定时。计算过程如下:
设机器周期为Tcy,定时器产生一次中断的时间为t,那么需要计数的个数N=t/Tcy。
可以得出:
Tcy=12(1/11.0592Mhz)
N=1ms/12(1/11.0592Mhz)=921.6(922)
TH0=(65536 - 922)/256, TL0=(65536-922)%256.
因此:
TH0=0XFC;
TL0=0X66;
(3)对TCON寄存器中的TR0置位,启动定时/计数器,置位以后,计数器即按规定的工作模式和初值进行计数或开始定时。
TR0=1;
(4)查询溢出标志TFx的状态,决定是否停止定时/计数器。
ET0=1;
EA =1;
下面我们来讲解我们的小车前后左右综合实验的硬件和软件设计。
4、实验步骤
4-1.看懂原理图
图4-1 单片机主控板电路图
图4-2 电机驱动芯片TB6612FNG
4-2.理解原理图
由图4-1和4-2 由电路原理图可知AIN1,AIN2,PWMA,BIN1,BIN2,PWMB分别接在单片机主控板上的P2.2,P2.1,P2.0 ,P2.3,P2.4,P2.5。
图4-3 引脚控制逻辑表
4-3.程序核心代码如下:
1.基本变量以及引脚的定义:
2. 电机驱动函数:
3. 小车运动控制函数:
4. 产生PWM函数:
5,主函数