如题,PID的输出数据如何转换为控制变量。
××××××××××
模型一:加热箱
设定值SV, 检测值PV,PID计算结果MV。 执行结构是加热块。
MV是一个数值,无单位。 执行结构通常是PWM控制的固态继电器。
PWN和MV之间是如何转换的?
×××××××××××
模型二:调速电机(电压调速)
设定值SV(转速),检测值PV(编码器返回的速度),PID计算结果MV,执行结构:可编程
电源
MV是一个数值,无单位。MV和如何和可编程电源的的输出电压建立关系?
×××××××××××××××××
参考资料:
http://www.docin.com/p-220191301.html
float PID_Regulator(float Reference, float PresentFeedback, _pid *PID_Struct)
{
float Error;
float output;
/* 偏差计算 */
Error= (Reference - PresentFeedback);
/* 积分计算 */
if (PID_Struct->Ki == 0)
{
PID_Struct->Integral = 0;
}
else
{
PID_Struct->Integral += PID_Struct->Ki * Error;
if (PID_Struct->Integral > PID_Struct->Upper_Limit_Integral)
{
PID_Struct->Integral = PID_Struct->Upper_Limit_Integral;
}
else if (PID_Struct->Integral < PID_Struct->Lower_Limit_Integral)
{
PID_Struct->Integral = PID_Struct->Lower_Limit_Integral;
}
else
{
}
}
output= (PID_Struct->Kp * Error +
PID_Struct->Integral +
PID_Struct->Kd*(Error - PID_Struct->PreviousError) );
PID_Struct->PreviousError = Error; // store value
if (output >= PID_Struct->Upper_Limit_Output)
{
return(PID_Struct->Upper_Limit_Output);
}
else if (output < PID_Struct->Lower_Limit_Output)
{
return(PID_Struct->Lower_Limit_Output);
}
else
{
return output;
}
}
××××××××××××××××××××××××××××××××××
output= (PID_Struct->Kp * Error +
PID_Struct->Integral +
PID_Struct->Kd*(Error - PID_Struct->PreviousError) );
输出= 误差*比例 +积分+微分(当前误差-上次误差)
××××××××××××××××××××
这个积分项 似乎没有和误差建立计算关系。
一周热门 更多>