这是一个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; /*积分作用*/