闭环控制的PWM直流调速系统课程设计正文.docx
《闭环控制的PWM直流调速系统课程设计正文.docx》由会员分享,可在线阅读,更多相关《闭环控制的PWM直流调速系统课程设计正文.docx(11页珍藏版)》请在冰点文库上搜索。
闭环控制的PWM直流调速系统课程设计正文
基于STC52单片机的直流电机单闭环调速系统课程设计
1系统概述
此次课程设计采用L298N芯片驱动直流电机,利用STC52单片机的定时计数器中断产生占空比和频率可调的PWM波,采用PI控制调节直流电机的转速。
使其达到给定不同转速时,电机能跟上给定速度;加载时,速度先降低然后能迅速调节回给定速度。
1.1设计方案
图1设计方案图
1.2L298N芯片简介
L298N是ST公司生产的一种高电压、大电流电机驱动芯片。
该芯片采用15脚封装。
主要特点是:
工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。
内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。
1.3数字PI调节器实现
PI调节器时域表达式:
将上式离散化成差分方程,其第k拍输出为:
PI算法有位置式和增量式两种算法:
(1)位置式算法——算法特点是:
比例部分只与当前的偏差有关,而积分部分则是系统过去所有偏差的累积。
位置式PI调节器的结构清晰,P和I两部分作用分明,参数调整简单明了,但需要存储的数据较多。
(2)增量式PI调节器算法:
PI调节器的输出可由下式求得:
与模拟调节器相似,在数字控制算法中,需要对u限幅,这里,只须在程序内设置限幅值um,当u(k)>um时,便以限幅值um作为输出。
不考虑限幅时,位置式和增量式两种算法完全等同,考虑限幅则两者略有差异。
增量式PI调节器算法只需输出限幅,而位置式算法必须同时设积分限幅和输出限幅,缺一不可。
本次设计采用增量式PI算法。
基本流程图如下:
图2PI程序设计流程图
1.4PWM波形产生
首先,确定PWM的周期T和占空比D,然后,用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间基准n',根据时间基准t去给定时器赋值初始化,然后开启定时器,定义一个标志位flag,根据flag的状态决定输出高平还是低电平,假设定义flag=1的时候输出高电平,用一个变量去记录定时器中断的次数,每次中断就让记录中断次数的变量+1,在中断程序里面判断这个变量的值是否到了n,如果到了说明高电平的时间够了,那么就改变flag为0,输出低电平,同时记录中断变量的值清零,每次中断的时候依旧+1,根据flag=0的情况跳去判断记录变量的值是否到了n'如果到了,说明PWM的低电平时间够了,那么就改flag=1,输出改高电平,同时记录次数变量清零,重新开始,如此循环得到想要的PWM波形。
1.5M法测速程序设计思路
根据图M法测速原理:
(1)由计数器记录PLG发出的脉冲信号;
(2)定时器每隔时间Tc向CPU发出中断请求INTt;
(3)CPU响应中断后,读出计数值M1,并将计数器清零重新计数;
(4)根据计数值M计算出对应的转速值n。
图3测速原理和波形
2系统MATLAB仿真
采用转速、电流反馈控制直流调速系统,首先选择ASR和ACR调节器的PI参数,使用调节器的工程设计方法。
具体设计详见运动控制系统课本例题3-3,这里不再赘述。
2.1电流环仿真模型
电流环仿真模型如图4所示:
图4电流环仿真原理图
仿真波形图如下:
图5电流环无超调的仿真结果(PI传递函数为0.5067+16.89/s)
图6电流环超调量较大的仿真结果(PI传递函数为2.027+67.567/s)
2.2转速环仿真模型
转速环仿真如图7所示:
图7转速环仿真原理图
仿真波形如下:
图8转速环空载高速起动仿真结果
图9转速环满载高速起动仿真结果
图10转速环抗扰仿真结果
3软件设计
系统程序如下:
#include
sbiti1=P2^1;
sbiti2=P2^2;
sbite=P2^3;
sbitan1=P3^7;
sbitan2=P3^6;
unsignedintp,i,en1,en2,en,v,vs,t,PWM=0;
voidPI()
{
en=vs-v;
PWM=PWM+p*(en-en1)+i*en;
en1=en;
RCAP2H=(65536-PWM)/256;//定时器2的16位捕捉/自动重载寄存器//TH2=RCAP2H;//TL2=RCAP2L;//
RCAP2L=(65536-PWM)%256;//控制PWM占空比//
}
voiddelay(unsignedintt)
{
unsignedinti,j;
for(i=0;ifor(j=0;j<110;j++);
}
unsignedcharcodeTab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管0~9//
voiddisplay()
{
P0=Tab[((v%1000)%100)/10];//显示速度十位//
P1=0xfb;//11111011//
delay(3);
P0=Tab[((v%1000)%100)%10];//显示个位//
P1=0xf7;//11110111//
delay(3);
}
voidmain()
{
i1=0;i2=1;vs=16;p=11;i=6;//反转//
TMOD=0x15;//定时计数器1工作于方式1定时,0工作于方式1计数//
T2CON=0;//C/T2=0,定时计数器2工作于定时状态//
TR0=1;//启动计数器0p3.3口//
TR1=1;//启动定时器1//
TR2=1;//启动定时器2//
EA=1;//开总中断//
ET1=1;//开定时器1中断//
ET2=1;//开定时器2中断//
while
(1)
{
PI();
display();
if(an1==0)
{
delay(200);
vs=vs+1;
}
if(an2==0)
{
delay(200);
vs=vs-1;
}
}
}
voidTime1()interrupt3
{
e=1;//使能端使能//
TR2=1;//启动定时器2//
TH1=(65536-400)/256;//定时0.4ms,控制PWM周期//
TL1=(65536-400)%256;
t++;
if(t==25)//计数到25次时,定时0.4x25=0.01s,计算速度//
{
v=(TH0*256+TL0)*100/334;//0.4x100x25=1s转速//
TH0=0;//计数器清零//
TL0=0;
t=0;
}
}
voidTime2()interrupt5
{
e=0;
TR2=0;//关闭定时器2//
TF2=0;//定时器2溢出标志位软件置0//
}
4系统调试
刚开始编好程序烧录进单片机后,起动后数码管显示不正确,分析可能是不同开发版的点亮数码管的方式不同的原因。
于是,我把其他的接线都拔了,烧了一个点亮数码管的程序进去,弄明白了所用开发版的数码管是共阳数码管。
修改了数码管的段选和位选程序后,再次烧进去单片机,终于正常显示转速了。
系统实物连接图如下:
图11系统实物图
实物结果演示详见
5结束语
课程设计刚开始时,碰到诸多难题,毫无头绪。
后来,在雷老师的指导下,慢慢理清了思路。
同时,在图书馆、网上查阅资料,找到了一些类似的控制直流电机的PWM调速案例。
在与搭档的连续两周的不断讨论与编程下,终于,完成了此次课程设计。
我们此次设计的直流单闭环调速系统实物参数如下:
调速范围:
5r/s—20r/s(300r/min—1200r/min),给定转速16r/s(960r/min)。
每次按下加减速按键实现速度+-1r/s。
在加小负载下可以实现很好的闭环调速。
可以改进的方向:
我们组的课程设计由于采用了转速每秒表示的方式,导致改变转速时,看上去跳变很稳定的样子,实际上转速跳变在60r/min的范围内都无法体现。
所以我们可以改变转速显示方式,使其为r/min。
此外,我们所采用的是PI调速,并不能很快速的稳定下来,可以改进成PID调速方法,使系统控制更加完善。
通过本次设计,使我对如何做好一个课程设计有了更加深刻的认识,对PI调节器的程序编写以及使用都有了新的突破。
同时进一步加强了我的动手能力和理论实际相结合的能力。
这次课程设计使我受益匪浅,让我知道做任何事情都应脚踏实地,求实笃实。
感谢雷老师的指导与同学们的帮助,感谢此次课程设计。
参考文献
[1]电机原理与设计的matlab分析,戴文进,电子工业出版社;
[2]电气传动的脉宽调制控制技术,吴守,机械工业出版社;
[3]电力电子技术,浣喜明,高等教育出版社;
[4]电动机的单片机控制,王晓明,北京航空航天出版社;
[5]电机与拖动基础,李发海,清华大学出版社。