基于单片机STC89C52的直流电机PWM调速实验.docx
《基于单片机STC89C52的直流电机PWM调速实验.docx》由会员分享,可在线阅读,更多相关《基于单片机STC89C52的直流电机PWM调速实验.docx(22页珍藏版)》请在冰豆网上搜索。
基于单片机STC89C52的直流电机PWM调速实验
电机调速设计报告
课程名称电机与拖动
姓名沈跃
学号
专业班级自动化1101
组号
学期2013-2014-1
学分3分
指导教师王雪洁
一、引言
概况
现代工业的电力拖动一般都要求局部或全部的自动化,因此必然要与各种控制元件组成的自动控制系统联系起来,而电力拖动则可视为自动化电力拖动系统的简称。
在这一系统中可对生产机械进行自动控制。
随着近代电力电子技术和计算机技术的发展以及现代控制理论的应用,自动化电力拖动正朝着计算机控制的生产过程自动化的方向迈进。
以达到高速、优质、高效率地生产。
在大多数综合自动化系统中,自动化的电力拖动系统仍然是不可缺少的组成部分。
另外,低成本自动化技术与设备的开发,越来越引起国内外的注意。
特别对于小型企业,应用适用技术的设备,不仅有益于获得经济效益,而且能提高生产率、可靠性与柔性,还有易于应用的优点。
自动化的电力拖动系统更是低成本自动化系统的重要组成部分。
在如今的现实生活中,自动化控制系统已在各行各业得到广泛的应用和发展,其中自动调速系统的应用则起着尤为重要的作用。
虽然直流电机不如交流电机那样结构简单、价格便宜、制造方便、容易维护,但是它具有良好的起、制动性能,宜于在广泛的范围内平滑调速,所以直流调速系统至今仍是自动调速系统中的主要形式。
现在电动机的控制从简单走向复杂,并逐渐成熟成为主流。
其应用领域极为广泛,例如:
军事和宇航方面的雷达天线、火炮瞄准、惯性导航等的控制;工业方面的数控机床、工业机器人、印刷机械等设备的控制;计算机外围设备和办公设备中的打印机、传真机、复印机、扫描仪等的控制;音像设备和家用电器中的录音机、数码相机、洗衣机、空调等的控制。
随着电力电子技术的发展,开关速度更快、控制更容易的全控型功率器件MOSFET和IGBT成为主流,脉宽调制技术表现出较大的优越性:
主电路线路简单,需要用的功率元件少;开关频率高,电流容易连续,谐波少,电机损耗和发热都较小;低速性能好,稳速精度高,因而调速范围宽;系统快速响应性能好,动态抗扰能力强;主电路元件工作在开关状态,导通损耗小,装置效率较高;近年来,微型计算机技术发展速度飞快,以计算机为主导的信息技术作为一崭新的生产力,正向社会的各个领域渗透,直流调速系统向数字化方向发展成为趋势。
随着计算机进入控制领域以及高开关频率、全控型电力半导体器件的发展,脉宽调制(PWM)的直流调速系统在调速控制中得到越来越普遍的使用。
PWM(脉冲宽度调制)功率放大器具有功耗低,效率高,体积小,价格低,工作可靠等优点,并且大大降低了电路的复杂度,提高了系统的可靠性。
因此,直流电动机采用PWM调速已经得到了广泛的应用,在传统的调速系统中一般采用硬件作为脉冲发生器的方式,应用的元件较多,同样会增加电路的复杂程度。
为此,本文介绍一种靠软件发出脉冲信号来实现直流电动机调速控制的方法,本系统具有功率器件体积小,功率大,损耗低,控制灵活简单,效率高的特点。
电机的转速
由推导的公式可知,对于一个已经制造好的电机,当励磁电压和负载转矩恒定时,它的转速由回在电枢两端的电压Ea决定,电枢电压越高,电机转速就越快,电枢电压降低到0V时,电机就停止转动;改变电枢电压的极性,电机就反转。
直流电动机的工作原理
根据电磁学基本知识可知,载流导体在磁场中要受到电磁力的作用。
如果导体在磁场中的长度l,其中流过的电流为i,导体所在处的磁通密度为B,那末导体受到的电磁力的值为式F=Bil
如图中N、S极下各根导体所受电磁力的方向,如图中箭头所示。
电磁力对转轴形成顺时针方向的转矩,驱动转子而使其旋转。
由于每个磁极下元件中电流方向不变,故此转矩方向恒定,称为直流电动机的电磁转矩。
如果直流电动机轴上带有负载,它便输出机械能,可见直流电动机是一种将电能够转化成机械能的电气装置。
直流电动机是可逆的,他根据不同的外界条件而处于不同的运行状态。
当外力作用使其旋转,驶入机械能时,电机处于发电机状态,输出电能;当在电刷两端施加电压输入电能时,电机处于电动机状态,带动负载旋转输出机械能。
PWM直流调速原理
PWM(PulseWideModulation脉冲宽度调制)是通过控制固定直流电压的开关频率从而改变负载两端电压进而达到控制要求的一种电压调整方法。
通过改变之路电机电枢电压的占空比来改变平均电压的大小,从而控制电机的转速。
因此,PWM又被称为“开关驱动装置”。
由右图可知,平均速度与占空比不是严格的线性关系,原因是电枢本身有电阻,不过一般直流电机的内阻较小,可以近视为线性关系。
但是在一般应用中可以近似地看成线性关系。
由此可见,只要改变施加在电枢端电压的导通时间就可以改变电机的转速。
这就是本次实验需要实现的PWM调速。
设计目的和意义
本文设计的直流PWM调速系统采用的是调压调速。
系统主电路采用大功率GTR为开关器件、H桥单极式电路为功率放大电路的结构。
PWM调制部分是在单片机开发平台之上,运用汇编语言编程控制。
由定时器来产生宽度可调的矩形波。
通过调节波形的宽度来控制H电路中的GTR通断时间,以达到调节电机速度的目的。
增加了系统的灵活性和精确性,使整个PWM脉冲的产生过程得到了大大的简化。
本设计以AT89C51单片机为核心,以键盘作为输入达到控制直流电机的启停、速度和方向,完成了基本要求和发挥部分的要求。
在设计中,采用了PWM技术对电机进行控制,通过对占空比的计算达到精确调速的目的。
本文介绍了直流电机的工作原理和数学模型、脉宽调制(PWM)控制原理和H桥电路基本原理设计了驱动电路的总体结构,根据模型,利用PROTEUS软件对各个子电路及整体电路进行了仿真,确保设计的电路能够满足性能指标要求,并给出了仿真结果。
二、设计方案
设计要求
通过STC89C52单片机,对电机进行PWM调速,设计的主要内容为
<1>直流电机的转速调节
<2>直流电机的测速
<3>直流电机的转速显示
总体设计
<1>框图
键盘K0~K3向单片机输入相应控制指令,由单片机通过T1与T0其中一口输出与转速相应的PWM脉冲,另一口输出低电平,经过信号放大,驱动H型桥式电动机控制电路,实现电动机转向与转速的控制。
电动机的运转状态通过数码管显示出来。
电动机所处速度级以速度档级数显示。
另外,与电机转轴相连的码盘将电机的转速通过红外接收管将读入的高低电平经由INT1将电机的转速读入至单片机中。
电机转动一周,码盘遮挡光电门产生2次下降沿。
<2>电路分析
PWM电路由复合体管组成H型桥式电路构成,四部分晶体管以对角组合分为两组:
根据两个输入端的高低电平决定晶体管的导通和截止。
4个二极管在电路中起防止晶体管产生反向电压的保护作用,防止电动机两端的电流和晶体管上的电流过大的保护作用。
在电动机驱动信号方面,采用了占空比可调的周期矩形信号控制。
脉冲频率对电动机转速有影响,脉冲频率高连续性好,但带带负载能力差脉冲频率低则反之。
经实验发现,当电动机转动平稳,但加负载后,速度下降明显,低速时甚至会停转;脉冲频率在10Hz以下,电动机转动有明显跳动现象。
而具体采用的频率可根据个别电动机性能在此范围内调节。
通过T1输入高电平信号,T0输入低电平,电机正转;通过T0输入低电平信号,T1输入高电平,电机反转;T0、T1同时为高电平或低电平时,电机不转。
通过对信号占空比的调整来对电机转速进行调节。
系统软件设计
本系统编程全部工作由KELI-C51完成,产生的HEX文件对单片机进行烧录。
采用模块化的设计方法,与各子程序做为实现各部分功能和过程的入口,完成键盘输入、按键识别和功能、PWM脉宽控制、转速检测和数码管显示等部分的设计。
单片机资源分配如下表:
P0,P2
显示模块接口
键盘中断
P1
键盘模块接口
,
PWM电机驱动接口
系统时钟
电机转速检测-INT1
外部中断1
①PWM脉宽控制定时器0在定时产生PWM
②键盘中断处理子程序:
采用扫描方式,在while
(1)中反复执行。
若按下键,完成延时去抖动、键码识别、按键功能执行。
要实现每次按住加速键时只增加一级速度,就需在判断是否松开该按键时,每一次增加一定的占空比。
同时,当按下按键,计时与计数的全局变量time_counter与ct清零。
③显示子程序:
采用动态显示,P2控制数码管位选有效,P0控制字段有效。
利用数组方式定义显示缓存区,缓存区有8位,分别存放各个数码管要显示的值。
④定时中断处理程序:
采用外部中断1计数电机转动一周,码盘遮挡光电门产生2次下降沿。
采用定时方式1,因为单片机使用12M晶振,可产生最高约为的延时。
对定时器定时50ms,即系统时钟精度可达。
每50ms定时器溢出则响应该定时中断处理程序,完成对定时器的再次赋值,并对全局变量time_counter加1,这样,通过变量time_counter可计算出系统的运行时间。
10个循环后,即当500ms定时时间到,输出外部中断1中计数的电机转速(1s)。
主程序流程图:
三、电路设计
硬件整体电路
见附录1
元件清单
见附录2
四、总结
源程序
见附录3
遇到的问题
可能由于焊接或是其他问题,本次实验使用的单片机连接的按键K0~K2都不能使用,故难以实现正反转的切换以及开始、停止及减速的实验。
这部分的程序也已写就,将放于附录3后部供查阅。
心得
通过各种方案的讨论及尝试,再经过多次的整体软硬件结合调试,不断地对系统进行优化。
同时对电动机控制不是一个简单的电子控制问题,它涉及很多方面的知识。
相信单片机在今后的自动控制领域中将有更广阔的应用前景。
相信该系统能成功运用于直流电机转速系统的实时监控,简化控制逻辑系统,而且成本低廉、功能完整、抗干扰性能好。
能成功应用于直流电机转速调节、监控、保护场合,并且监控界面友好,使用方便。
能够对直流电机实行实时监控,不仅大大改善了高速运行时的稳定性,而且还实现了保护功能。
由于采用的是PWM控制,其硬件结构要更简单一些,并且也减少了对电动机的机械磨损,电压电流检测和速度检测都需要软件来实现,这就增加了软件编程的困难,但其几乎不用维护也是它的优点。
通过本次设计,我的知识领域得到进一步扩展,专业技能得到进一步提高,同时锻炼了自己独立完成任务的能力,并掌握了很多软件、硬件开发方面的知识。
另外,我还认识到无论做什么工作,都需要踏实,勤奋,严谨的态度,这对我以后的工作将会产生深远的影响。
同时,也培养了自己认真的科学态度和严谨的工作作风,为将来能更好的适应工作岗位打下了良好的基础。
当然,本次设计还存在一些不足之处,例如:
界面设计不够人性化,不能实现远程监控功能等。
另外,由于实际条件的限制,本设计不能进行现场调试和试运行都是无法完成的。
若以后条件允许,可以对以上设计进行进一步完善。
当然,设计中肯定还有其他不足和纰漏之处,请各位老师指正。
附录1
附录2
附录3
/**/
/**/
/**/
/*
1、外中断1检测转速:
电机转动一周,码盘遮挡光电门产生2次下降沿
2、定时器0或1一秒读取一次外中断1的计数值得到2倍电机转速频率值
3、定时器0
(1)或2在定时产生PWM;PWM的频率一般选取1K~10KHz
4、正转/反转控制端为互斥关系时电机转动
*/
/**/
/**/
/**/
/**/
//#include<>
#include<>//头文件包含
#defineDigSegP0//数码管字段口L有效
#defineDigBitP2//数码管位选口H有效
sbitSpeedIRQ=P3^3;//电机转速检测-INT1
sbitMotoP=P3^4;//电机正转PWM控制
sbitMotoN=P3^5;//电机反转PWM控制
sbitS1=P1^0;//按键1
sbitS2=P1^1;//按键2
sbitS3=P1^2;//按键3
sbitS4=P1^3;//按键4
unsignedchartime_counter,num;
longct,put_ct;
//共阳数码管字段表0——9
unsignedcharcodeSegNum[]=
{
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
};
//数码管位选表从右至左
unsignedcharcodeSegBit[]=
{
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
};
voiddelay(void)
{unsignedchari;
for(i=200;i>0;i--);
}
voiddelay2(intm)//延时程序,延时m*毫秒
{
unsignedinti;
unsignedintj;
for(i=0;i{
for(j=0;j<500;j++){}
}
}
voidPRINT1(intx)
{
chari;
for(i=0;(x>0)&&(i<4);i++)
{
DigBit=SegBit[i];
DigSeg=SegNum[x%10];delay2
(1);
x=x/10;
}
}
voidPRINT2(intx)
{
chari;
for(i=4;(x>0)&&(i<8);i++)
{
DigBit=SegBit[i];
DigSeg=SegNum[x%10];delay2
(1);
x=x/10;
}
}
voidkey(void)//仅剩按键4完好=。
=
{
if(S4==0)
{
delay2
(1);
time_counter=0;
ct=0;
EA=0;
TR0=0;
while(!
S4);
if(num<9)
{
num++;
}
elsenum=1;
EA=1;
TR0=1;
}
}
voidmain()
{
chart;
intnum_out,ct_out;
DigSeg=0XFF;
DigBit=0XFF;
EA=1;
EX1=1;
IT1=1;
ET0=1;
TR0=1;
TCON=0X04;
TMOD=0X01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
time_counter=0;
put_ct=ct=0;
//正转
MotoP=1;MotoN=0;
num=10;
PRINT1(num);
//反转
//MotoP=0;MotoN=1;
while
(1)
{
key();
for(t=0,num_out=0,ct_out=0;t<20;t++)
{
num_out+=num;
ct_out+=put_ct;
}
PRINT1(num_out/20);
PRINT2(ct_out/20);
}
}
voidtimer_0()interrupt1//定时0,1s读数
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
time_counter++;
if(time_counter==10)
{
ET0=0;
TR0=0;
time_counter=0;
put_ct=ct;
ct=0;
ET0=1;
TR0=1;
}
if(num>=time_counter-1)
{
MotoP=1;MotoN=0;
}
else
{
MotoP=0;MotoN=0;
}
}
voidint_1()interrupt2//外部中断1测速
{
EA=0;
while(!
SpeedIRQ);
ct++;
EA=1;
}
/**/
/***完整版按键函数****/
/**
voidkey(void)
{
if(S1==0)//按键1控制开始/停止
{
delay2
(1);
time_counter=0;
ct=0;
EA=0;
TR0=0;
while(!
S1);
flag=~flag;
if(flag)
{
MotoP=1;MotoN=0;
}
else
{
MotoP=0;MotoN=0;
}
EA=1;
TR0=1;
}
if(S2==0)//按键2控制正转/反转(默认为正转)
{
delay2
(1);
ct=0;
EA=0;
TR0=0;
time_counter=0;
while(!
S2);
rflag=~rflag;
if(rflag)
{
MotoP=1;MotoN=0;
}
else
{
MotoP=0;MotoN=1;
}
EA=1;
TR0=1;
}
if(S3==0)//按键3控制减速
{
delay2
(1);
time_counter=0;
ct=0;
EA=0;
TR0=0;
while(!
S3);
if(num>1)
{
num--;
}
elsenum=9;
EA=1;
TR0=1;
}
if(S4==0)
{
delay2
(1);
time_counter=0;
ct=0;
EA=0;
TR0=0;
while(!
S4);
if(num<9)
{
num++;
}
elsenum=1;
EA=1;
TR0=1;
}
}
**/
/**/
/**/