• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

发下我的数字电源的控制算法,,什么地方需要改变??

现在对PFC和软开关都没有要求,,只要稳压,,我这个程序如何 ??单环控制可以不???

 

void PI()                /* PI调节算法 */
{
  float V_REF=3.3;          
        Kp=100;          /* PI调节的比例常数 */
        Ti=0.005;        /* PI调节的积分常数 */
        T=0.001;         /* 周期,Ki=KpT/Ti=40*0.001/0.005=8 */                    
        Ki=8;
        ek=0;            /* 偏差e[k] */
        ek1=0;           /* 偏差e[k-1] */
        uk=0;            /* u[k] */
        uk1=0;           /* 对u[k]四舍五入取整 */
        adjust=0;        /* 调节器输出调整量 */
        XPWM=0;          /* 占空比调节 */

 { 
  ek=V_REF-AD_SIG0;
  if(ek<0.1)             /* 偏差小于0.1则调整值为0 */
  {
    adjust=0;
  }
  else 
  {   
    uk=Kp*(ek-ek1)+Ki*ek;/* 否则计算控制增量 */
    ek1=ek;
    uk1=(signed int)uk;
    if(uk>0)
    {
      if(uk-uk1>=0.5)
      {
        uk1=uk1+1;
      }
    }
    if(uk<0)
    {
      if(uk1-uk>=0.5)
      {
        uk1=uk1-1;
      }
    }
    adjust=uk1;
    XPWM=XPWM+adjust;
  } 
  return;
 }
 asm(" NOP ");           /* 请将光标移到此处设置断点,并用debug->Animate监测数据 */
}

全部回复(8)
正序查看
倒序查看
2010-10-23 00:16

楼主电压环路控制如何?

你的系数不用Q格式转换?还是没有贴出来?

0
回复
2010-10-23 00:21
@dongfangruxiao
楼主电压环路控制如何?你的系数不用Q格式转换?还是没有贴出来?

楼主是用浮点数运算?很好时间的。你是用什么芯片?

你的开关频率大概多少?

0
回复
2010-10-27 08:59
@dongfangruxiao
楼主是用浮点数运算?很好时间的。你是用什么芯片?你的开关频率大概多少?

我就是不会如何转化为Q格式,,你会不会???

0
回复
2010-10-27 10:22
@zhuzhouren
我就是不会如何转化为Q格式,,你会不会???
**此帖已被管理员删除**
0
回复
2011-01-01 16:53
@zhuzhouren
**此帖已被管理员删除**

Q格式简单,没你想象那么难,

简而言之:把小数y先放大2^n倍,计算后再把乘积左移n位。能把除法转换为乘法和右边解决,在保证精度前提下大大减少运算时间。例如:

 213*x/1000 = 0.213*x = (872*x)>>12.

详细请看教材《C2000程序员高手进阶》。

0
回复
2011-01-01 16:55
@dongfangruxiao
Q格式简单,没你想象那么难,简而言之:把小数y先放大2^n倍,计算后再把乘积左移n位。能把除法转换为乘法和右边解决,在保证精度前提下大大减少运算时间。例如: 213*x/1000=0.213*x=(872*x)>>12.详细请看教材《C2000程序员高手进阶》。
或找TI例程看看,更容易理解怎么使用。
0
回复
ovie
LV.1
8
2012-04-30 18:04

程序只是个实现过程而已,关键是你的参数是否正确

0
回复
ovie
LV.1
9
2012-04-30 18:05
光看的你程序有那么小的数,没有使用定标,程序肯定不行,光数据截断误差都已经无法忍受了
0
回复