发布网友 发布时间:2022-04-22 12:58
共1个回答
热心网友 时间:2023-10-14 16:49
这是倒立摆系统的PID控制函数的一部分,你看看有没有思路
/****************************************************************/
//定义结构体
/****************************************************************/
struct may_PID{
signed long Proportion;//比例 ;调节系数
signed long Integral;//积分 ;调节系数
signed long Derivative;//微分 ;调节系数
signed long SetPoint; //设定值 ;定值
signed long SumError;//偏差积分
signed long PrevError; //之前偏差值
}PID/*此处可放结构体变量名*/;
struct may_PID *pp; //定义结构体类型指针
//pp=malloc(sizeof(struct may_PID)); //为指针变量分配安全的地址空间;sizeof:其为计算字节长度函数
/*****************************************************************/
/**************************PTD函数**************************************/
signed long PIDCalc(signed long NextPoint/*当前值*/ )
{
signed long dError;
Error = pp->SetPoint - NextPoint;//当前偏差
pp->SumError+=Error; //积分
dError=Error-pp->PrevError;//当前微分=当前偏差-之前偏差
pp->PrevError=Error; //把当前偏差赋予之前偏差变量,使其充当下次取样的之前偏差
return (long)(pp->Proportion *Error //比例项
+pp->Integral*pp->SumError //积分项
+pp->Derivative*dError); //微分项
}
/*****************************************************************************/