This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
void pid_reg3_calc(PIDREG3 *v)
{
// Compute the error
v->Err = v->Ref - v->Fdb;
// Compute the proportional output
v->Up = v->Kp*v->Err;
// Compute the integral output
v->Ui = v->Ui +v->Ki*v->Up + v->Kc*v->SatErr;
// Compute the derivative output
v->Ud = v->Kd*(v->Up - v->Up1);
// Compute the pre-saturated output
v->OutPreSat = v->Up + v->Ui + v->Ud;
// v->OutPreSat =(v->OutPreSat>>24);
// Saturate the output
if (v->OutPreSat > v->OutMax)
v->Out = v->OutMax;
else if (v->OutPreSat < v->OutMin)
v->Out = v->OutMin;
else
v->Out = v->OutPreSat;
// Compute the saturate difference
v->SatErr = v->Out - v->OutPreSat;
// Update the previous proportional output
v->Up1 = v->Up;
}
上面的大部分的问题都解决了!
就这一句比较费解了:v->Ui = v->Ui +v->Ki*v->Up + v->Kc*v->SatErr; 这一句是用来求积分环节的,但是加粗部分很费解
v->Ui = v->Ui +v->Ki*v->Up + v->Kc*v->SatErr等价于
temp= v->Ui +v->Ki*v->Up + v->Kc*v->SatErr;
v->Ui=temp;
你是指“ti\controlSUITE\libs\app_libs\motor_control\math_blocks”这个位置吗?但是我找到的PI全是IQ类型的,跟他给的代码不一样。
TI的PID控制器版本很多
我之前也有很多疑问
发了上面的这个帖子
TI的员工帮忙翻译成英文发到英文网站了
国外的技术人员给了相关答复
建议您看看国外英文答复
有些版本比较老的PID控制器不建议使用
同时 也建议您看下InstaSPIN User Guide的第11章
理解一些串行PI控制器及其参数设计方面的知识