| | | | | 搭建控制环路
(初步先搭建电压环,后续完善系统可以在添加电流环)
//****************Boost电压环PID参数********************//
double Boost_u_PID;
double Boost_u_ref=72;
double U_bat=46;
const double Boost_u_K1=0.105;
const double Boost_u_K2=0.1;
double Boost_u_Error0=0;
double Boost_u_Error1=0;
//******************采样计算********************//
if(Time_200KHz==5/clock) //200KHz
{
Time_200KHz=0;
Boost_u=in[0];
Boost_u_20KHz=Boost_u_20KHz*9/10+Boost_u/10;
}
//*******************Boost电压环************************//
if(Time_20KHz==50/clock) //20KHz
{
Time_20KHz=0;
Boost_u_Error1 = Boost_u_Error0;
Boost_u_Error0 = Boost_u_ref - Boost_u_20KHz;
Boost_u_PID+=Boost_u_Error0*Boost_u_K1 -Boost_u_Error1*Boost_u_K2;
//PID计算式,更改系数以获得理想的输出
if(Boost_u_PID<0)
Boost_u_PID=0;
if(Boost_u_PID>100)
Boost_u_PID=100; //限幅
//********************PWM驱动计算*********************//
PWM=(Boost_u_PID)/U_bat/fs;
out[0]=PWM;
}
//*****************************************************//
|
|
|
| | | | | | | 验证环路设计参数
1、观看输出是否可控;
2、观察电感电流是否符合设计要求;
|
|
|
|
|
| | | | | | | | | 谢谢分享,psim例子少了,很多都靠摸索。相互学习
|
|
|
|
|
|
| | | | | | | | | 版主您好, 我最近在做boost变换器,120VDC-270VDC现在有几个简单的问题烦请您解答一下:问题一:用psim做的仿真(开环和闭环), 发现启动瞬间电压电流的冲击很大,如何减小冲击呢? 常用的方法是用继电器加热敏电阻做的缓起,还有一种是软件缓起。除了这两种方法外,您有什么其他方法。
问题二:之前做PFC的时候220vac-400vdc,一般先要空载启动,等输出电压达到400V后再加负载。为什么要这样做?我查阅资料上说是启动瞬间直流侧电容相当于短路,冲击大。空载和带载情况启动瞬间不都一样吗(直流侧电容都相当于短路)?
问题三:如果做BOOST的话,是否需要先空载起?等输出电压稳定后,再加负载。我看一些资料上,boost电路是不能空载启动。
谢谢!
|
|
|
| | | | | | | | | | | 问题一:用psim做的仿真(开环和闭环), 发现启动瞬间电压电流的冲击很大,如何减小冲击呢? 常用的方法是用继电器加热敏电阻做的缓起,还有一种是软件缓起。其他的我也没尝试过;
问题二:之前做PFC的时候220vac-400vdc,一般先要空载启动,等输出电压达到400V后再加负载。为什么要这样做?我查阅资料上说是启动瞬间直流侧电容相当于短路,冲击大。空载和带载情况启动瞬间不都一样吗(直流侧电容都相当于短路)?
因为刚开始升压(我理解是你的PFC输出是400V)系统还未进入稳态,这时候去突加载系统容易震荡,如果保护不及时容易炸机;如果直流侧电容很大,突加载瞬间是相当于短路的,只能是软件做限流处理;
问题三:如果做BOOST的话,是否需要先空载起?等输出电压稳定后,再加负载。我看一些资料上,boost电路是不能空载启动。
是可以空载启动的。不知道你资料是在哪里看到的,方便贴出来不,我觉得大概率是你解读错了;
|
|
|
|
|
| | | | | | | | | | | | | 问题一:用psim做的仿真(开环和闭环), 发现启动瞬间电压电流的冲击很大,如何减小冲击呢?
这个常用的办法有什么资料吗
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| | | | | | | | | 666666666666666666666666666
|
|
|
|
| | | | | | | Boost_u_20KHz=Boost_u_20KHz*9/10+Boost_u/10;
这句怎么理解呢?
为什么要 * 9 / 10 , Boost_u/10 ?
还有这句
Boost_u_PID += Boost_u_Error0*Boost_u_K1 - Boost_u_Error1*Boost_u_K2;
这个增量PI控制吧 ?
可不可以改成:
Boost_u_PID += Boost_u_Error0*Boost_u_K1 + Boost_u_Error1*Boost_u_K2;
把比例项和积分项相加
如下面的形式
iIncpid = ( int )( Proportion * iError + \
Integral *last_error + \
// Derivative * prev_error ); // 去掉微分项
|
|
|
| | | | | | | | | Boost_u_20KHz=Boost_u_20KHz*9/10+Boost_u/10;
是为了滤波,实际应用会有很多干扰,仿真去掉效果也是一样的;
Boost_u_PID += Boost_u_Error0*Boost_u_K1 - Boost_u_Error1*Boost_u_K2;
如下面的形式
iIncpid = ( int )( Proportion * iError + \
Integral *last_error + \
// Derivative * prev_error ); // 去掉微分项
一个是增量式和位置式PI,不能替换,因为两种的误差计算不一样
位置式 Error2=Error1-Error0 Error1=Error0-Error0';
增量式 Error1=Error0;
但是推算的结果是一样的,KP和Ki的计算不一样
|
|
|
| | | | | | | 哎,已设计的软件编码就彻底看不懂了,能不能用控制元件吧这个软件搭出来?
|
|
|
|
|
|
|
|
| | | | | △W 是怎么算的呢? Cmin=2*△W/(V1^2-V2^2)=P/2*Ts/(V1^2-V2^2) ?
还有你这个没有做环路的稳定补偿,有没有保证足够的相位裕度60度和增益欲度 10dB以上 ?
|
|
|
| | | | | | | △W是粗略估算的,假如占空比是0.5,那么在Boost电感充电时,后级靠的是电容在维持,按照这样的思维去估算的 |
|
|
| | | | | | | 环路的稳定补偿,有没有保证足够的相位裕度60度和增益欲度 10dB以上 ?
一般我是这样处理的,先用硬件PID模块调试参数,然后通过扫频看系统是否能有保证足够的相位裕度60度和增益欲度 10dB以上,然后在转化为C语言代码
|
|
|
| | | | | | | | | 你好,乘着还在假期,深夜拜读您的帖子,深感收获颇多!非常感谢您的分享!
刚看到前边网友问您关于环路稳定的问题,我想到我之前有个项目的问题想请教您一下,那个项目做的电源就是一个三相逆变电源,即DC/AC,双环控制,内环电流环,外环电压环,采用矢量控制。(由于签过保密协议,仿真文件就不上传了)。当时做闭环仿真的时候是用matlab仿的,通过调节PI参数,感觉没有啥问题。可是到了做试验阶段,发现傻眼了,实物的PI参数很不好调,仿真时的PI参数压根不能用;废了老大的劲终于调出了一组差不多的参数,但是动态响应跟不上。
我的问题如下:
1、仿真PI控制参数和实际程序的PI参数为何差的那麽多(数量级区别),仿真也是通过编程做的,PI都是增量式。仿真的那些环节欠妥可能会影响到与实际 参数的区别,当然寄生参数暂时不论。
2、关于您确定最终的电源稳定裕度如何,通过AC sweep方法应该是有效且便捷的,您能否展示一下具体操作过程,完善一下本帖呢?
|
|
|
|
|
|
|
|
|
|
|
| | | | | PWM=(Boost_u_PID)/U_bat/fs;
大神,你好,这个关系怎么得出来的,为什么要除以U_bat,麻烦帮忙解一下惑 |
|
|
|
| | | | | | | 由Duty=1-Vi/Vo可知,由于前面没有对72V采样进行缩放,除以Vi=46V是为了得到一个合适的占空比
|
|
|
| | | | | | | | | 赞同您说的为了得到一个合适的占空比,但具体推算我还是没有想明白。然后我将三角波形峰值设为1V,部分程序改为以下程序后就比较易懂了。
//*******************Boost电压环************************//
if(Time_20KHz==50/clock) //20KHz
{
Time_20KHz=0;
Boost_u_Error1 = Boost_u_Error0;
Boost_u_Error0 = Boost_u_ref - Boost_u_20KHz;
Boost_u_PID+=Boost_u_Error0*Boost_u_K1 -Boost_u_Error1*Boost_u_K2;
//PID计算式,更改系数以获得理想的输出 增量式
if(Boost_u_PID<10)//限幅
Boost_u_PID=10;
if(Boost_u_PID>90)
Boost_u_PID=90;
PWM=Boost_u_PID/100;//折算到占空比
out[0]=PWM;
}
|
|
|
|
|
|
|
|
|
|
|
| | | | | 我这边计算的 电感值
△I=P/U*20%=2000/72*0,2=5.6A
L=Ui*(Uo-Ui)/Uo/△I*Ts=16.61/5.6*0.0005=0.148mH
Cmin=2*△W/(V1^2-V2^2)=P/2*Ts/(V1^2-V2^2)=1388
△W跟P(20KW?)怎么对应的 v1 v2分别是?
能仔细说说? 谢谢 |
|
|
|
|
| | | | | 我采用的您的参数设置,只是把程序换成了PI和运放,原理同,但是仿真出来的结果却不正确,可不可以请教一下?
波形
原理图
|
|
|
|
| | | | | | | 请问,这里PI调节器起了什么作用?调参是怎么调的?
|
|
|
|
|
|
|
| | | | | 闪烁前辈 有PFC boost CRM模式的电路仿真吗 |
|
|
|
|
|
| | | | | 正好最近在重新研究boost的仿真应该会有帮助,非常感谢
|
|
|
|
| | | | | △W= C*(V1^2-V2^2)/2
-->Cmin=2*△W/(V1^2-V2^2)=P/2*Ts/(V1^2-V2^2)=1388uF 这个没看懂啊,有哪位大神解释下么? |
|
|
| | | | | 对于boost数字控制设计,应该先分析plant传递函数。数字控制延时,采用建模传递函数设计控制器,然后仿真验证控制器设计的合理性,这样才更好得到数字控制通解。 |
|
|
|
|
|
|
|
|
|
|
| | | | | △W= C*(V1^2-V2^2)/2
-->Cmin=2*△W/(V1^2-V2^2)=P/2*Ts/(V1^2-V2^2)=1388uF
没看出来怎么算的 谁给解释一下 |
|
|
|
|
|
|
|
|
|
|
| | | | | 您好版主,PWM=(Boost_u_PID)/U_bat/fs这句如何理解呢,为何PWM=(Boost_u_PID)/fs不可以呢? 还望赐教。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|