您现在所在的是:

自控设计

回帖:2个,阅读:1271 [上一页] [1] [下一页]
1194
star7953
文章数:95
年度积分:50
历史总积分:1194
注册时间:2005/4/28
发站内信
发表于:2007/5/11 16:38:00
#0楼
请帮我看看这个PID算法,怎么转速一直都是增大的, 而不是按照正弦曲线变化,

谢谢  

PID()
{      


 Integrate      =Pre_Integrate+errspeed;
 Derivative     =errspeed-Pre_Errspeed;    
     
 /***********计算PID的输出*********************

   Control_Output =speedKp*errspeed+speedTi*Integrate+speedTd*Derivative;     //PWM输出


 Pre_Errspeed   =errspeed;
 Pre_Integrate  =Integrate;
}

CAL()         // 定时做PID计算
{
 
     pulse_error=prepulse-pulse;   // pulse_error为脉冲差值
                   
     prepulse=pulse;            //PULSE为光电编码器测出的电机转速(脉冲个数),
   
   temp1=6*sin(temp);        // 模拟正弦函数曲线
   temp=temp+0.1;                  
   
   errspeed=((int)temp1-pulse_error;  // 期望值与当前值的差值, 用来作PID计算
           
      PID();      
  }


943
yushanguanji
文章数:20
年度积分:50
历史总积分:943
注册时间:2006/3/12
发站内信
发表于:2007/5/22 12:39:00
#1楼
PID()
{      
 LDN    inverting_PI                (初始值可以设定为1)
 ST      error_single_is_positive  (判断偏差为+还是-)
 LD      temp1
 SUB     pulse_error
 IsOverflow
 JMPCN  I_ACTION
 LD       inverting_PI
 ST       error_single_is_positive
 LD       pulse_error
 SUB     temp1
I_ACTION:
 LD       error_single_is_positive
 JMPC NEXT
 Integrate      =Pre_Integrate+errspeed;
 Derivative     =errspeed-Pre_Errspeed;    
NEXT:
 Integrate      =Pre_Integrate-errspeed;
     
 /***********计算PID的输出*********************

   Control_Output =speedKp*errspeed+speedTi*Integrate+speedTd*Derivative;     //PWM输出


 Pre_Errspeed   =errspeed;
 Pre_Integrate  =Integrate;
}

CAL()         // 定时做PID计算
{
   
     pulse_error=prepulse-pulse;   // pulse_error为脉冲差值
                   
     prepulse=pulse;            //PULSE为光电编码器测出的电机转速(脉冲个数),
   
   temp1=6*sin(temp);        // 模拟正弦函数曲线
   temp=temp+0.1;                  
   
   errspeed=((int)temp1-pulse_error;  // 期望值与当前值的差值, 用来作PID计算
           
      PID();      
  }

一点愚见,不知道能不能帮助你.
943
yushanguanji
文章数:20
年度积分:50
历史总积分:943
注册时间:2006/3/12
发站内信
发表于:2007/5/22 12:44:00
#2楼
PID()
{      
 LDN    inverting_PI                (初始值可以设定为1)
 ST      error_single_is_positive  (判断偏差为+还是-)
 LD      temp1
 SUB     pulse_error
 ST       errspeed
 IsOverflow
 JMPCN  I_ACTION
 LD       inverting_PI
 ST       error_single_is_positive
 LD       pulse_error
 SUB     temp1
 ST       errspeed
I_ACTION:
 LD       error_single_is_positive
 JMPC NEXT
 Integrate      =Pre_Integrate+errspeed;
 Derivative     =errspeed-Pre_Errspeed;    
NEXT:
 Integrate      =Pre_Integrate-errspeed;
     
 /***********计算PID的输出*********************

   Control_Output =speedKp*errspeed+speedTi*Integrate+speedTd*Derivative;     //PWM输出


 Pre_Errspeed   =errspeed;
 Pre_Integrate  =Integrate;
}

CAL()         // 定时做PID计算
{
   
     pulse_error=prepulse-pulse;   // pulse_error为脉冲差值
                   
     prepulse=pulse;            //PULSE为光电编码器测出的电机转速(脉冲个数),
   
   temp1=6*sin(temp);        // 模拟正弦函数曲线
   temp=temp+0.1;                  
   
   errspeed=((int)temp1-pulse_error;  // 期望值与当前值的差值, 用来作PID计算
           
      PID();      
}

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003