在直流电机调速中增量式PID控制算法的输出是怎么与PWM建立关系

purplemm   2010-4-24 22:53 楼主
各位大侠:我是菜鸟,最近我用单片机做一个PWM直流电机调速的实验,我用的是增量式PID控制算法,我有个问题不是很明白:那就是在这个系统中是怎样通过增量式PID控制算法的输出来控制PWM的,增量式PID控制算法的输出是怎么与PWM建立关系的,假设增量式PID控制算法输出a那么PWM应该是多少呢,啥关系呢? 还有就是在增量式PID控制算法中 P与电机速度的关系什么,反映的什么?

回复评论 (2)

#define uint unsigned int  //ki=0.003,kd=1084.0;kp=1.3;//80度;
#define uchar unsigned char//ki=0.003,kd=1284.0;kp=0.82;//80度;
float ki=0.003;//
float kd=1084.0;//
float kp=1.3;//
float ek;//当前偏差
float ek1;//上一次偏差
float ek2;//上上一次偏差
float d_uk;//当前偏差电压
float uk1;//上一次输出电压
float uk; //本次输出电压
//float ukmax;//第一次偏差最大值
//float sumerror;//历史偏差和
/*void calcpiid(float s_temp,float now_temp)   //积分分离增量式pid;
{
  ukmax=5.0*(kp+kd);


  ek=s_temp-now_temp;
  if(ek>1.0)                                                  
     d_uk=kp*(ek-ek1)+kd*(ek-2*ek1+ek2);
  else
         d_uk=kp*(ek-ek1)+ki*ek+kd*(ek-2*ek1+ek2);
  uk=d_uk+uk1;
  ek2=ek1;
  ek1=ek;
  uk1=uk;
} */
/*void calcpiiid(float s_temp,float now_temp)//遇限削弱积分法;
{
  ukmax=5.0*(kp+kd);
  ek=s_temp-now_temp;
  d_uk=kp*(ek-ek1)+kd*(ek-2*ek1+ek2);
  if(uk1>=ukmax)
    {
          if(ek>0);
          else
          d_uk+=ki*ek;
        }
  else
    {
          if(uk1<=ukmax)
          if(ek<0);
          else
          d_uk+=I*ek;         
        }
  uk=uk1+d_uk;
  ek2=ek1;
  ek1=ek;
  uk1=uk;
} */
void calcpid(float s_temp,float now_temp)//增量式
{
  //ukmax=5.0*(kp+ki+kd);
  ek=s_temp-now_temp;
  d_uk=kp*(ek-ek1)+ki*ek+kd*(ek-2*ek1+ek2);
  uk=d_uk+uk1;          
  ek2=ek1;
  ek1=ek;
  uk1=uk;
}
点赞  2010-4-25 14:56
请问各位:基于PID算法的有刷直流电机PWM调速系统中对有刷直流电机调速用到的算法是模拟 PID控制原理还是增量式PID控制或者别的PID控制原理?能否将PID算法式子告诉我?谢谢各位了!!QQ:286410824
点赞  2010-4-26 09:33
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复