#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include "All_Init.h"
uint ad_val[num_CGQ][num_CY] = {0}; //AD 转换数据接收变量
float sum[num_CGQ] = {0}; //滤波接收器
typedef struct PID {//结构体
double SetPoint;//设定目标
double Proportion;//比例常数
double Integral;//积分常数
double Derivative;//微分常数
double LastError;//最后误差数
double PrevError;//之前误差数
double SumError;//误差积分
}PID;
/*********************************PID 计算部分*************************/
double PIDCalc( PID *pp, double NextPoint ) {
double dError, //当前微分
Error; //偏差
Error = pp->SetPoint - NextPoint;//偏差=设定目标-输入值
pp->SumError += Error;//积分=积分+偏差
dError = pp->LastError - pp->PrevError;//当前微分=最后误差-之前误差
pp->PrevError = pp->LastError;//更新之前误差
pp->LastError = Error;//更新最后误差
return (pp->Proportion*Error + pp->Integral*pp-> SumError + pp->Derivative*dError
);
}
/***********************初始化 PID 结构?**************************/
void PIDInit (PID *pp ){
memset (pp,0,sizeof(PID));
}
/*******************main program*******************************/
double sensor(void)
{ //输入
return 100.0;
}
uint actuator(double rDelta) { //输出
PWMDTY01= PWMDTY01+rDelta;
return PWMDTY01;
}
void main(void) {
PID sPID; //结构
评论3