数字PID调节双闭环PWM调速系统的设计Word文档格式.docx
《数字PID调节双闭环PWM调速系统的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《数字PID调节双闭环PWM调速系统的设计Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
2用比较器产生锯齿波或三角波统同可调的基准比较获得脉宽调制。
开关芯片TL494基本组成原理便属于这一种。
②数字脉宽调制。
采用微机控制系统,直接采用IO获得PWM波形,程序繁琐,通常采用带片上PWM资源的处理器,如C8051F040的PCA很容易产生PWM波形。
2.1.2PI调节器
1模拟PID特别容易实现,只需要用运算放大器构成比例、积分和微分电路即可,应用的意义已不太大。
2数字PID算法。
其使用已越来越广泛,而且更容易实现微机的数字控制,因此已成为主流。
2.1.3最终选择
综合以上,本文选择数字PID算法实现PI调节器,用有固定频率的开关芯片的TL494,实现PWI波调制。
通过模拟与数字结合,最终完成双闭环直流调速系统。
图1.2系统原理框图
3.1直接参数
Uim
1nom
3参数计算
101.35
2*3.7
Unma—
nmax
-10-0.05
200
3.2电流环:
3.2.1时间常数
失控时间,即滞后时间:
Ts^*=o,.oois电流反馈滤波时间常数Toi=0.001s
按小时间常数近似处理T7=TsTo^0.002S
3.2.2选择电流调节器结构
根据设计要求:
「空5%,而且
因此可按典型I型系统设计。
电流调节器选用PI型,其传递函数为:
电流环开环增益:
要求J*5%,按表2-2,应取心匚严0.5,因此
于是ACR比例系数为:
3.2.3检验近似条件:
电流环截止频率wc^K^250S4
现在,——333.3SAwci,满足近似条件
3Ts3x0.0005s
现在,1二=3-0.20.015宀5心叫满足近似条件
3电流环小时间常数近似处理条件:
wci空11
3耳Ts「i
现在,111sA-333.3sJWci
3\TsToi3^0.001汉0.001
3.2.4计算调节器电阻电容
R=心Ro=4.62540kQ-185k1,取185kJ
按照上述参数,电流环可以达到的动态跟随性能指标为「%=4.3%:
:
5%
图3-1电压调节器
3.3转速环:
3.3.1确定时间常数
①电流环等效时间常数为:
K,=2T7=0.004S
②转速滤波时间常数Ton.
③转速环小时间常数T荀
3.3.2选择转速调节器结构
该按典型II型系统设计转速环
由于设计要求无静差,转速调节器必须含有积分环节,又根据动态要求,应故ASR选用PI调节器,其传递函数为
Wasr卡亠
JS
3.3.3选择转速调节器参数
取h=5,则ASR的超前时间常数为
按跟随和抗扰性都较好的原则,
n=hT^=50.009=0.045s
转速环开环增益
334检验近似条件转速环截止频率为
K
N-KNn-14710.045=66.645s'
W-!
现在,1K,J250S—117.8S「Wen,满足简化条件。
3\T1L3\0.02
现在,=1J上=74.5>
Wen,满足近似条件。
3\Ton3\0.005
335计算调节器电阻和电容
转速调节器原理如下图所示,取R。
=47心,则
Rn=KnR°
=5.440k—-216kj,取200k;
_:
.
Cnn^045^106吓=0.208」,取0.20平
Rn216103
Con=理=40.005106吓=0~F,取05F
Ro40103
3.3.5校核转速超调量
IiCmaxnnomTn
-n一%2-Z一-
CbnnomTm
当h=5时,玉竺%=81.2%;
而.:
nnom=也込二3^8=246.67r/min,因此
CbCe0.12
图3-2电流调节器
4数字PI
4.1程序算法:
算法是程序的核心,因此PID算法的实现至关重要。
开始
图4-1PID算法框图图4-2主程序流程框图
在电流环和转速环的设计中,我选择的是PI调节器,我设计的是一个PID所有参数均可调
的函数,所以使用时只要改变相应的参数即可得到所要的PI控制器,具体设置方法请参考
主程序。
4.1.1PID算法
#inelude<
stdio.h>
#include<
math.h>
#include"
PID.H"
/******************************************************************************
*功能:
定义结构体变量
******************************************************************************/struct_pid{
intpv;
/*integerthatcontainstheprocessvalue*/
intsp;
/*integerthatcontainsthesetpoint*/
floatintegral;
floatpgain;
floatigain;
floatdgain;
intdeadband;
intlast_error;
};
struct_pidwarm,*pid;
intprocess_point,set_point,dead_band;
floatp_gain,i_gain,d_gain,integral_val,new_integ;
****************************************************************************
*函数名:
pid_init
功能描述:
PID初始化,通过设定*pv、*sp赋值修改日期:
20011.05.24******************************************************************************/voidpid_init(struct_pid*warm,intprocess_point,intset_point)
{
struct_pid*pid;
pid=warm;
pid->
pv=process_point;
sp=set_point;
}/******************************************************************************
pid_tune功能描述:
结构体变量一致.
修改日期:
20011.05.24
******************************************************************************/voidpid_tune(struct_pid*pid,floatp_gain,floati_gain,floatd_gain,intdead_band){
pgain=p_gain;
pid->
igain=i_gain;
dgain=d_gain;
deadband=dead_band;
integral=integral_val;
last_error=0;
}
pid_setinteg功能描述:
//PID结构体中的偏差成员更新修改日期:
******************************************************************************/
voidpid_setinteg(struct_pid*pid,floatnew_integ)
integral=new_integ;
last_error=0;
pid_bumpless功能描述:
修改日期:
voidpid_bumpless(struct_pid*pid)
last_error=(pid->
sp)-(pid->
pv);
功能描述:
pid_calc
PID核心计算
20011.05.24
****************************************************************************
floatpid_calc(struct_pid*pid){
interr;
floatpterm,dterm,result,ferror;
err=(pid->
sp)-(pid->
if(abs(err)>
deadband)
ferror=(float)err;
/*dointegertofloatconversiononlyonce*/pterm=pid->
pgain*ferror;
if(pterm>
100||pterm<
-100)
{//积分分离pid->
integral=0.0;
else{
integral+=pid->
igain*ferror;
if(pid->
integral>
100.0)//抗积分饱和,防最大溢出
integral=100.0;
elsei