[MSP-EXP430F5529LP] MSP430PID调速求助

[复制链接]

1

主题

2

帖子

627

积分

单晶硅锭

Rank: 3Rank: 3

积分
627
楼主
查看: 5830回复: 2 发表于 2021-6-14 08:48:57   只看该作者
大佬们,有没有MSP430F5529LP的PID调速的代码?可以分享一下源代码吗?

2

主题

4

帖子

111

积分

二氧化硅

Rank: 2

积分
111
沙发
发表于 2021-8-2 18:42:06   只看该作者




float P=0.800,I=0.15,D=800.0,Set_Temp=60;//初始化P,I,D,当前值,设置值 常数
float PID_OUT=0,PWM_Duty=0;    //PID输出           
float P_OUT=0,I_OUT=0,D_OUT=0;    //比例输出,积分输出,微分输出
float Current_Error=0, Last_Error=0;    //当前误差  最后误差
float Sum_Error=0,Prev_Error=0;     //误差积分
float Gain=1.2,PID_I_MAX=100.0,PID_I_MIN=-100.0,V_DATA_MAX=100,V_DATA_MIN=0;



float Set_Temp2=60;//初始化P,I,D,当前值,设置值 常数
float PID_OUT2=0,PWM_Duty2=0;    //PID输出           
float P_OUT2=0,I_OUT2=0,D_OUT2=0;    //比例输出,积分输出,微分输出
float Current_Error2=0, Last_Error2=0;    //当前误差  最后误差
float Sum_Error2=0,Prev_Error2=0;     //误差积分
float Gain2=1.2,PID_I_MAX2=100.0,PID_I_MIN2=-100.0,V_DATA_MAX2=100,V_DATA_MIN2=0;


void PID_calc(void)//PID算法
{
  float Rate;//误差变化率
  Current_Error = Set_Temp - V_1;//当前误差
  Sum_Error +=Current_Error;//误差积分
  Prev_Error = Last_Error;//存储误差积分
  Last_Error = Current_Error;//存储误差分析
  Rate = Prev_Error-Last_Error;//变化速率计算
  
        
  if(Rate>10)//不让ta大于5也不让ta小于5
    Rate = 10;
  if(Rate<-10)
    Rate = -10;
  
  P_OUT = P*Gain*Current_Error;//比列项
  I_OUT = I*Gain*Sum_Error;//积分项
  
  //积分限幅处理
  if( I_OUT>PID_I_MAX )  I_OUT = PID_I_MAX;//不能超过最大值不能低于最小值
  if( I_OUT<PID_I_MIN )  I_OUT = PID_I_MIN;

  //微分输出处理
  D_OUT = D*Gain*Rate;
  PID_OUT =  P_OUT  +  I_OUT  +  D_OUT ;
  if ( PID_OUT >= V_DATA_MAX )  PID_OUT = V_DATA_MAX;
  if ( PID_OUT <= V_DATA_MIN )  PID_OUT = V_DATA_MIN;
/*******************************************************/

/*******************************************************/
  float Rate2;//误差变化率
  Current_Error2 = Set_Temp2 - V_3;//当前误差
  Sum_Error2 +=Current_Error2;//误差积分
  Prev_Error2 = Last_Error2;//存储误差积分
  Last_Error2 = Current_Error2;//存储误差分析
  Rate2 = Prev_Error2-Last_Error2;//变化速率计算
  
        
  if(Rate2>10)//不让ta大于5也不让ta小于5
    Rate2 = 10;
  if(Rate2<-10)
    Rate2 = -10;
  
  P_OUT2 = P*Gain2*Current_Error2;//比列项
  I_OUT2 = I*Gain2*Sum_Error2;//积分项
  
  //积分限幅处理
  if( I_OUT2>PID_I_MAX2 )  I_OUT2 = PID_I_MAX2;//不能超过最大值不能低于最小值
  if( I_OUT2<PID_I_MIN2)  I_OUT2 = PID_I_MIN2;

  //微分输出处理
  D_OUT2 = D*Gain2*Rate2;
  PID_OUT2 =  P_OUT2  +  I_OUT2  +  D_OUT2 ;
  if ( PID_OUT2 >= V_DATA_MAX2 )  PID_OUT2 = V_DATA_MAX2;
  if ( PID_OUT2 <= V_DATA_MIN2 )  PID_OUT2 = V_DATA_MIN2;
  




别的地方找的大佬的代码 输入是V 输出是PID_OUT2 这些代码没有涉及型号 里面的一些常数系数需要按你调试的情况来改

1

主题

12

帖子

1

积分

一粒轻沙

Rank: 1

积分
1
板凳
发表于 2021-10-30 19:32:53   只看该作者
凉雨停歇的那天 发表于 2021-8-2 18:42
float P=0.800,I=0.15,D=800.0,Set_Temp=60;//初始化P,I,D,当前值,设置值 常数
float PID_OUT=0,PWM_ ...

openmv颜色识别及坐标返回
快速回复 返回顶部 返回列表