当前位置: 代码迷 >> 单片机 >> PID算法实现(C语言),该如何解决
  详细解决方案

PID算法实现(C语言),该如何解决

热度:107   发布时间:2016-04-28 16:15:59.0
PID算法实现(C语言)
这是一个PID算法的C语言实现程序: "double   sensor   (void),void   actuator(double   rDelta,double   LastrDelta   )各函数的功能及语句的作用,   以及主函数里的变量j和数值a[]的设置的作用,以及for循环语句的作用, "望大家再分享的同时,给份详细注释,在线等待,大家帮助大家,^_^.
#include   <string.h>
#include   <stdio.h>
typedef   struct   PID   {                           /*K1=实际放大倍数,T1=实际积分时间,T2=实际微分时
间,T=采样周期*/

        double     SetPoint;           /*定义PID结构体*/      

        double     K1;
        double     T1;                                
        double     T2;
                double     T;
                double     Err1;               /*前一时刻误差,E(K-1)*/      
}   PID;
double   PIDCalc(   PID   *pp,   double   NextPoint,double   Ud1,double   Ui1)     /*PID计算
*/        
{
      double   Ti,Td,Kp,Ki,Kd,Ud,Up,Ui,Err;                
        Ti   =   pp-> T1   +   pp-> T2;                                                       /*积分时间*/  
        Td   =   (pp-> T1   *   pp-> T2)   /   (pp-> T1   +   pp-> T2);           /*微分时间*/  
        Kp   =   pp-> K1   *   ((pp-> T1   +   pp-> T2)   /   pp-> T1);             /*比例系数*/  
        Ki   =pp-> T   /   Ti   *   Kp;                                                           /*积分系数*/  
        Kd   =   Td   /   pp-> T   *   Kp;                                                         /*微分系数*/      

          Err   =   pp-> SetPoint-NextPoint;                                         /*当前误差*/  
        Ud   =   pp-> T2   /   ((Kd   *   pp-> T)   +   pp-> T2)   *   Ud1+   Kd   *   (pp-> T2   +   pp-> T)   /   (Kd   *  
pp-> T   +   pp-> T2)   *   Err   -   Kd   *   pp-> T2   /   (Kd   *   pp-> T   +   pp-> T2)   *pp-> Err1;       /*微分
作用*/
        Ui   =   Ui1   +   pp-> K1   *   (pp-> T   /   pp-> T1)   *   Ud;                   /*积分作用*/          
  相关解决方案