PWM控制直流电机实验报告.doc
《PWM控制直流电机实验报告.doc》由会员分享,可在线阅读,更多相关《PWM控制直流电机实验报告.doc(7页珍藏版)》请在冰豆网上搜索。
PWM控制直流电机实验报告
PWM控制直流电机实验
一、实验目的
1、熟悉PWM调制的原理和运用。
2、熟悉直流电机的工作原理。
3、能够读懂和编写直流电机的控制程序。
二、实验原理:
运动控制系统是以机械运动的驱动设备──电机为控制对象,以控制器为核心,以电力电子器件及功率变换装置为执行机构,在自动控制理论的指导下组成的电气传动自动控制系统。
这类系统控制电机的转矩、转速和转角,将电能转换为机械能,实现运动控制的运动要求。
可以看出,控制技术的发展是通过电机实现系统的要求,电机的进步带来了对驱动和控制的要求。
电机的发展和控制、驱动技术的不断成熟,使运动控制经历了不同的发展阶段。
1、直流电机的工作原理:
直流电机的原理图
图中,固定部分有磁铁,这里称作主磁极;固定部分还有电刷。
转动部分有环形铁心和绕在环形铁心上的绕组。
(其中2个小圆圈是为了方便表示该位置上的导体电势或电流的方向而设置的)。
上图表示一台最简单的两极直流电机模型,它的固定部分(定子)上,装设了一对直流励磁的静止的主磁极N和S,在旋转部分(转子)上装设电枢铁心。
定子与转子之间有一气隙。
在电枢铁心上放置了由A和X两根导体连成的电枢线圈,线圈的首端和末端分别连到两个圆弧形的铜片上,此铜片称为换向片。
换向片之间互相绝缘,由换向片构成的整体称为换向器。
换向器固定在转轴上,换向片与转轴之间亦互相绝缘。
在换向片上放置着一对固定不动的电刷B1和B2,当电枢旋转时,电枢线圈通过换向片和电刷与外电路接通。
当给电刷加一直流电压,绕组线圈中就有电流流过,由电磁力定律可知导体会受到电磁力作用。
导体处于N极下与电刷A接触电流向里流,产生电磁力矩为逆时针;导体处于S极下与电刷B接触电流向外流,产生电磁力矩仍为逆时针。
转子在该电磁力矩作用下开始旋转。
2、PWM调制原理
脉冲宽度调节(PWM)是英文PulseWidthModulation的缩写,简称脉宽调制。
它是利用微控制器输出的数字信号来控制模拟电路的ON或OFF,广泛应用于测量,通信,功率控制与变换等许多领域。
PWM信号只有两种状态,高电平和低电平,对于一个给定的周期来说,高电平所占的时间和总的一个周期时间之比叫做占空比,电机的速度与施加的平均电压成正比,输出转矩则与电流成正比。
直流电机高效运行的最常见方法是施加一个 PWM(脉宽调制)方波,其通-断比率对应于所需速度。
即直流电机的转速正比于在一个周期内PWM的电压有效值。
电机起到一个低通滤波器作用,将 PWM 信号转换为有效直流电平。
PWM 驱动信号很常用,因为使用微处理器的控制器很容易产生 PWM 信号。
虽然用精确的脉冲宽度可以调节电机的速度,实际应用中的 PWM 频率却是可变的。
驱动器由功率电子器件和集成电路等构成,其功能是:
接受电动机的启动、停止、制动信号,以控制电动机的启动、停止和制动;接受位置传感器信号和正反转信号,用来控制逆变桥各功率管的通断,产生连续转矩;接受速度指令和速度反馈信号,用来控制和调整转速;提供保护和显示等等。
系统的软件设计
本系统编程部分工作采用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可计算出系统的运行时间。
三、软件编程
对于电机的启停,在PWM控制上使用渐变的脉宽调整,即开启后由停止匀加速到默认速度,停止则由于当前速度逐渐降至零。
这样有利于保护电机。
键盘处理上采用中断方式,不必使程序对键盘反复扫描,提高了程序的效率。
测试程序:
#include
sbitjia=P3^4;
sbitjian=P3^5;
sbitzf=P3^6;
sbitin1=P1^0;
sbitin2=P1^1;
sbitpwm=P1^2;
sbitwela=P2^7;
sbitdula=P2^6;
intzf_flag=1;
intnum=00;
intT_N=100;
unsignedcharcodetable1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsignedcharcodetable2[]={0xfe,0xfd};
voiddelay(intk)
{ inti,j;
for(i=k;i>0;i--)
for(j=1000;j>0;j--);
}
voidkey()
{
if(jia==0)
{
delay
(1);
if(jia==0)
{
if(num!
=100)
num++;
else
num=100;
while(jia==0);
}
}
if(jian==0)
{
delay
(1);
if(jian==0)
{
if(num!
=0)
num--;
else
num=0;
while(jian==0);
}
}
if(zf==0)
{
delay
(1);
if(zf==0)
{
zf_flag=~zf_flag;
while(jian==0);
}
}
}
voiddisplay()
{
dula=0;
wela=0;
dula=1;
P0=table1[num/10];
dula=0;
wela=1;
P0=table2[0];
delay(3);
wela=0;
dula=1;
P0=table1[num%10];
dula=0;
wela=1;
P0=table2[1];
delay(3);
wela=0;
}
voidmain()
{
TMOD=0x01;
TH0=(65535-1000)/256;
TL0=(65535-1000)%256;
EA=1;
ET0=1;
TR0=1;
pwm=1;
while
(1)
{
key();
display();
if(zf_flag==1)
{
in1=1;
in2=0;
}
else
{
in1=0;
in2=1;
}
}
}
voidTimer0()interrupt0
{
TH0=(65535-1000)/256;
TL0=(65535-1000)%256;
T_N--;
if(T_N>=num)
{
pwm=1;
}
if(T_N<=num)
{
pwm=0;
}
if(T_N==0)
T_N=100;
}
四、实验心得
本次实验中,巩固了在电机拖动课程中学习的关于PWM控制电机的理论知识,了解到直流电机的驱动电路。
在编程的过程中,遇到的难题是如可控制正转反转过程中的加减速问题,最终经过老师指导解决了该问题。
6