‘壹’ 51单片机实现电动机的PID恒速控制。
这是倒立摆系统的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); //微分项
}
/*****************************************************************************/