标签:style blog http color strong 文件
PWM控制电路完工了,接下来得把电路接到单片机,由单片机进行控制了。回想电路图:
这个图中,输入有3根组,A,B,C,其中,A入口,我们可以当成PWM控制线,B,C为正反转、停止控制线,整个状态可以罗列为下面表格:
A控制 | B控制 | C控制 | Q1 | Q2 | Q3 | Q4 | 电机状态 |
X | 0 | 0 | 0/导通 | 0/导通 | 0/截止 | 0/截止 | 刹车 |
PWM | 1 | 0 | 1/截止 | 0/导通 | PWM | 0/截止 | 正转 |
PWM | 0 | 1 | 0/导通 | 1/截止 | 0/截止 | PWM | 反转 |
0 | 1 | 1 | 1/截止 | 1/截止 | 0/截止 | 0/截止 | 惰行 |
1 | 1 | 1 | 1/截止 | 1/截止 | 1/导通 | 1/导通 | 刹车 |
为了方便代码管理,我们在工程中建一个car.c和car.h文件,专门编写控制小车的程序:
void CarGo(int left,int right)
将两个函数的函数体写入到car.c中,将函数的定义,写入到car.h中。
好了,测试工作总是逐步的,而不是一步到位,我们先来试一下基本的正反转及停,调速的后面再来。
void CarGo(int left,int right)
好了,简单的程序,应该很容易能看懂,测试么,得写个main函数咯。
经常会用到一些通用函数,如里面的delay之类的,所以我们又建一个common.c和common.h文件,将一些通用的方法写入,比如这里的:
/*****************************************************
***************************************************/
for(;i>0;i--) //变量i由实际参数传入一个值,因此i不能赋初值
整个程序也容易看清的,每隔2秒后,可以看到电机会变换一个状态。将程序烧写到单片机中,运行,观察吧。
一切调通后,就剩下PWM了,上一章中,我们知道速度通过占空比来实现的。
换句话说,我们要针对PWM引脚要连续的输出0和1变换值。所以这里我们得引入单片的计数器和中断。
void timer0(void) interrupt 1 using 2
static uchar click=0; //中断次数计数器变量
if (click<=ZKB1) //当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整
if (click<=ZKB2) //当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整
说明:iitcar中对定时器进行初使化。timer0函数中不对的计数,当click计值到ZKB1时,把PWM值反转一下。这个ZKB1在就是在CarGo中赋值的left,right值的绝对值。
OK,到此,这个Car.c文件,就可以收功了,后面只需要调用一下这里面的函数,就可以相应的来控制小车的电机了。
标签:style blog http color strong 文件
原文地址:http://www.cnblogs.com/zjfstudio/p/3841616.html