式1.1中,Ra为电枢回路电阻,电枢回路串联保绕阻与电刷接触电阻的总和;
Rc是外接在电枢回路中的调节电阻。
由此可得到直流电机的转速公式为:
n=Ua-IR/CeΦ……………………………………………式1.2
式1.2中,Ce为电动势常数,Φ是磁通量。
由1.1式和1.2式得
n=Ea/CeΦ………………………………………………式1.3
由式1.3中可以看出,对于一个已经制造好的电机,当励磁电压和负载转矩恒定时,它的转速由回在电枢两端的电压Ea决定,电枢电压越高,电机转速就越快,电枢电压降低到0V时,电机就停止转动;改变电枢电压的极性,电机就反转。
<2)PWM电机调速原理
对于直流电机来说,如果加在电枢两端的电压脉动电流压<要求脉动电压的周期远小于电机的惯性常数),可以看出,在T不变的情况下,改变T1和T2宽度,得到的电压将发生变化。
图3.3为施加不同占空比时实测的数据绘制所得占空比与转速的关系图。
图3.3占空比与电机转速的关系
由图看出转速与占空比D并不是完全速的线性关系<图中实线),原因是电枢本身有电阻,不过一般直流电机的内阻较小,可以近视为线性关系。
由此可见,改变施加在电枢两端电压就能改变电机的转速成,这就是直流电机PWM调速原理。
1.2本设计任务:
任务:
单片机为控制核心的直流电机PWM调速控制系统
设计的主要内容以及技术参数:
功能主要包括:
1)直流电机的正转;
2)直流电机的反转;
3)直流电机的加速;
4)直流电机的减速;
5)直流电机的转速在数码管上显示;
6)直流电机的启动;
7)直流电机的停止;
第二章:
总体设计方案
总体设计方案的硬件部分详细框图如图一所示。
键盘向单片机输入相应控制指令,由单片机通过P1.0与P1.1其中一口输出与转速相应的PWM脉冲,另一口输出低电平,经过信号放大、光耦传递,驱动H型桥式电动机控制电路,实现电动机转向与转速的控制。
电动机的运转状态通过数码管显示出来。
电动机所处速度级以速度档级数显示。
正转时最高位显示“三”,其它三位为电机转速;反转时最高位显示“F”,其它三位为电机转速。
每次电动机启动后开始显示,停止时数码管显示出“0000”。
1、系统的硬件电路设计与分析
电动机PWM驱动模块的电路设计与实现具体电路见下图。
本电路采用的是基于PWM原理的H型桥式驱动电路。
PWM电路由复合体管组成H型桥式电路构成,四部分晶体管以对角组合分为两组:
根据两个输入端的高低电平决定晶体管的导通和截止。
4个二极管在电路中起防止晶体管产生反向电压的保护作用,防止电动机两端的电流和晶体管上的电流过大的保护作用。
在实验中的控制系统电压统一为5v电源,因此若复合管基极由控制系统直接控制,则控制电压最高为5V,再加上三极管本身压降,加到电动机两端的电压就只有4V左右,严重减弱了电动机的驱动力。
基于上述考虑,我们运用了TLP521-2光耦集成块,将控制部分与电动机的驱动部分隔离开来。
输入端各通过一个三极管增大光耦的驱动电流;电动机驱动部分通过外接12V电源驱动。
这样不仅增加了各系统模块之间的隔离度,也使驱动电流得到了大大的增强。
在电动机驱动信号方面,我们采用了占空比可调的周期矩形信号控制。
脉冲频率对电动机转速有影响,脉冲频率高连续性好,但带带负载能力差脉冲频率低则反之。
经实验发现,当电动机转动平稳,但加负载后,速度下降明显,低速时甚至会停转;脉冲频率在10Hz以下,电动机转动有明显跳动现象。
而具体采用的频率可根据个别电动机性能在此范围内调节。
通过P10输入高电平信号,P11输入低电平,电机正转;通过P10输入低电平信号,P11输入高电平,电机反转;P10、P11同时为高电平或低电平时,电机不转。
通过对信号占空比的调整来对电机转速进行调节。
2、系统的软件设计
本系统编程部分工作采用KELI-C51语言完成,采用模块化的设计方法,与各子程序做为实现各部分功能和过程的入口,完成键盘输入、按键识别和功能、PWM脉宽控制和数码管显示等部分的设计。
单片机资源分配如下表:
P0
显示模块接口
键盘中断
P1
键盘模块接口
P1.0/P1.1
PWM电机驱动接口
系统时钟
①PWM脉宽控制:
本设计中采用软件延时方式对脉冲宽度进行控制,延时程序函数如下:
/*****************延时函数*************************/
delays(>
{
uchari。
for(i=5000。
i>0。
i-->。
}
②键盘中断处理子程序:
采用中断方式,按下键,完成延时去抖动、键码识别、按键功能执行。
要实现按住加/减速键不放时恒加或恒减速直到放开停止,就需在判断是否松开该按键时,每进行一次增加/减少一定的占空比。
③显示子程序:
利用数组方式定义显示缓存区,缓存区有8位,分别存放各个数码管要显示的值。
④定时中断处理程序:
采用定时方式1,因为单片机使用12M晶振,可产生最高约为65.5ms的延时。
对定时器置初值B1E0H可定时20ms,即系统时钟精度可达0.02s。
当20ms定时时间到,定时器溢出则响应该定时中断处理程序,完成对定时器的再次赋值,并对全局变量time加1,这样,通过变量time可计算出系统的运行时间。
3、软件设计中的特点:
对于电机的启停,在PWM控制上使用渐变的脉宽调整,即开启后由停止匀加速到默认速度,停止则因为当前速度逐渐降至零。
这样有利于保护电机。
键盘处理上采用中断方式,不必使程序对键盘反复扫描,提高了程序的效率。
第三章:
系统硬件电路设计
整体框图如下:
第四章:
系统功能调试
仿真整体图如下:
直流电机的调试功能仿真如下图:
1、正转时,电机正转,数码管最高位显示“三”,其它三位先所给定频率,如下图:
2、反转时,电机反转,数码管最高位显示“F”,其它三位先所给定频率,
第五章:
程序
见附件1
见附件2
第六章:
元件清单
见附件3
第七章:
心得体会
略
附件1
/***************基于单片机AT89C51的直流电机PWM调速控制系统*************/
#include
#include
#include
/**************************/
/********自定义变量********/
#defineuintunsignedint//自定义变量
#defineucharunsignedchar
chargw,sw,bw,qw。
ucharj。
//定时次数,每次20ms
ucharf=5。
//计数的次数
sbitP10=P1^0。
//PWM输出波形1
sbitP11=P1^1。
//PWM输出波形2
sbitP12=P1^2。
//正反转
sbitP13=P1^3。
//加速
sbitP14=P1^4。
//减速
sbitP15=P1^5。
//停止
sbitP16=P1^6。
//启动
uchark。
uchart。
//脉冲加减
/**************************/*
/*********控制位定义********************/
ucharcodesmg[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x73,0x71}。
//程序存储区定义字型码表
chardataled[4]={0x08,0x04,0x02,0x01}。
//位码
uintx。
//数码管显示的数值
display(>。
//数码管显示
delays(>。
//延时函数
key(>。
displays(>。
/*****************************************/
/***************主函数********************/
main(void>
{
TMOD=0x51。
//T0方式1定时计数T1方式1计数
TH0=0xb1。
//装入初值20MS
TL0=0xe0。
TH1=0x00。
//计数567
TL1=0x00。
TR0=1。
//启动t0
TR1=1。
//启动t1
gw=sw=bw=qw=0。
//数码管初始化
P0=0xc0。
P2=1。
while(1>//无限循环
{
display(>。
//数码管显示
key(>。
}
}
/*****************************************/
/***************数码管显示****************/
display(>
{
uchari。
gw=x%10。
//求速度个位值,送到个位显示缓冲区
sw=(x/10>%10。
//求速度十位值,送到十位显示缓冲区
bw=(x/100>%10。
//求速度百位值,送到百位显示缓冲区
qw=x/1000。
//求速度千位值,送到千位显示缓冲区
for(i=0。
i<4。
>
{
P2=led[i]。
if(i==0>//显示个位
{
P0=smg[gw]。
delays(>。
}
elseif(i==1>//显示十位
{
P0=smg[sw]。
delays(>。
}
elseif(i==2>//显示百位
{
P0=smg[bw]。
delays(>。
}
elseif(i==3>//显示千位
{
if(k==0>//正转时显示"三"
{
P0=0x49。
delays(>。
}
else
{
P0=0x71。
//反转时显示"F"
}
}
i++。
}
}
/*******************************************************/
/*****************延时函数*************************/
delays(>
{
uchari。
for(i=5000。
i>0。
i-->。
}
/************************************************/
/*********t0定时*中断函数*************/
voidt0(>interrupt1using2
{
TH0=0xb1。
//重装t0
TL0=0xe0。
f--。
if(k==0>
{
if(f
P10=1。
else
P10=0。
P11=0。
}
else
{
if(f
P11=1。
else
P11=0。
P10=0。
}
if(f==0>
{
f=5。
}
j++。
if(j==50>
{
j=0。
x=TH1*256+TL1。
//t1方式1计数,读入计数值
TH1=0x00。
TL1=0x00。
x++。
display(>。
}
}
/****************按键扫描**************/
key(>
{
if(P12==0>//如果按下,
{
while(!
P12>//去抖动
display(>。
k=~k。
}
if(P16==0>//启动
{
while(P16==0>。
IE=0x8a。
}
if(P13==0>//加速
{
while(P13==0>。
t++。
}
if(t>=5>
t=5。
if(P14==0>//减速
{
while(P14==0>。
t--。
}
if(t<1>
t=1。
if(P15==0>//停止
{
while(P15==0>。
EA=0。
P10=0。
P11=0。
}
}
/******************************************************/
附件2:
元件
数量<个)
元件
数量<个)
光电耦合器:
TLP521-2
1
三极管8550
4
按键
5
三极管8050
5
自锁按键
1
1N4007
4
At89s52
1
四位一体数码管
1
12M晶振
1
电容104
1
Led
1
直流电机
1
电阻1K
3
电容22P
2
电阻10K
1
电解电容47P/16V
2
74LS04
1
下载口
1
参考文献
[1]王兆安等.电力电子技术[M].北京.机械工业出版社.2000年.
[2]周渊深.交直流调速系统与MATLAB仿真[M].北京.中国电力出版社,2007年.
[3]陈伯时.运动控制系统[M].北京.机械工业出版社.2003年.
[4]黄家善等.电力电子技术[M].北京.机械工业出版社.2007年.
[5]孙立志.PWM与数字化电动机控制技术应用[M].北京.中国电力出版社.2008年.
[6]杨素行.模拟电子技术基础[M].高等教育出版社.2003年.
[7]陈明荧.8051单片机基础教程[M].科学出版社.2003年.
[8]康华光.电子技术基础数字部分[M].高等教育出版社.2004年.
[9]李广第.单片机基础[M].北京航空航天大学出版社.1999年.