fp32 PID_calc(pid_type_def *pid, fp32 ref, fp32 set) { if (pid == NULL) { return 0.0f; } pid->error[2] = pid->error[1]; pid->error[1] = pid->error[0]; pid->set = set; pid->fdb = ref; pid->error[0] = set - ref; //最新误差=设定值-反馈数值 if (pid->mode == PID_POSITION) //位置式pid { pid->Pout = pid->Kp * pid->error[0]; //Kp*偏差 pid->Iout += pid->Ki * pid->error[0]; //Ki*偏差和 pid->Dbuf[2] = pid->Dbuf[1]; pid->Dbuf[1] = pid->Dbuf[0]; pid->Dbuf[0] = (pid->error[0] - pid->error[1]); pid->Dout = pid->Kd * pid->Dbuf[0]; //Kd*(偏差-上偏差) LimitMax(pid->Iout, pid->max_iout); pid->out = pid->Pout + pid->Iout + pid->Dout; LimitMax(pid->out, pid->max_out); } else if (pid->mode == PID_DELTA) //增量式pid { pid->Pout = pid->Kp * (pid->error[0] - pid->error[1]); pid->Iout = pid->Ki * pid->error[0]; pid->Dbuf[2] = pid->Dbuf[1]; pid->Dbuf[1] = pid->Dbuf[0]; pid->Dbuf[0] = (pid->error[0] - 2.0f * pid->error[1] + pid->error[2]); pid->Dout = pid->Kd * pid->Dbuf[0]; pid->out += pid->Pout + pid->Iout + pid->Dout; LimitMax(pid->out, pid->max_out); } return 0; }分析以上C语言程序
时间: 2024-01-29 15:04:56 浏览: 80
这段程序实现了一个PID控制器,用于控制一个系统的输出,使其达到所设置的目标值。函数名为PID_calc,接受三个参数:指向PID控制器结构体的指针pid,目标值ref和设置值set。
在函数中,首先判断pid是否为NULL,如果是,则返回0.0f。接下来将当前的误差值存储到pid->error[2]中,上一次的误差值存储到pid->error[1]中,当前误差值计算并存储到pid->error[0]中。根据PID控制器的模式(位置式或增量式),计算P、I、D三个控制量,累加得到输出值pid->out,并对输出值进行限制,最后返回0。
在位置式PID控制器中,P、I、D三个控制量分别表示比例、积分、微分,Pout为比例控制量,Iout为积分控制量,Dout为微分控制量。在增量式PID控制器中,P、I、D三个控制量分别表示比例增量、积分增量、微分增量,Pout为比例增量,Iout为积分增量,Dout为微分增量。
相关问题
fp32 PID_calc(pid_type_def *pid, fp32 ref, fp32 set)分析这句C语言程序
这行代码是一个函数调用语句,可以分为以下几个部分:
1. `fp32`: 表示返回值类型为`fp32`,即单精度浮点数。
2. `PID_calc`: 函数名,表示调用的函数名为`PID_calc`。
3. `(pid_type_def *pid, fp32 ref, fp32 set)`: 函数参数列表,包括三个参数,分别为指向`pid_type_def`类型变量的指针`pid`,参考值`ref`和设定值`set`。其中,`pid_type_def`是一个自定义的结构体类型。
4. `*pid`: 表示对`pid`指针所指向的变量进行解引用操作,即获取`pid`指针所指向的变量值。
5. `pid->Kp`, `pid->Ki`, `pid->Kd`: 表示获取`pid`指针所指向的变量中的`Kp`、`Ki`、`Kd`成员变量的值。
6. `ref`: 表示参考值。
7. `set`: 表示设定值。
综上,该函数的作用是计算PID控制器的输出值,并返回单精度浮点数类型的结果。函数的实现过程中,需要使用到结构体类型`pid_type_def`中的`Kp`、`Ki`、`Kd`成员变量以及参考值`ref`和设定值`set`。
extern fp32 PID_calc(pid_type_def *pid, fp32 ref, fp32 set);分析这句C语言程序
这句C语言程序定义了一个名为`PID_calc`的函数,其返回值类型为`fp32`(即单精度浮点数),函数参数包括一个名为`pid`的指向`pid_type_def`类型的指针,一个名为`ref`的`fp32`类型参考值,以及一个名为`set`的`fp32`类型设定值。该函数的作用是对传入的PID参数进行计算,返回控制量的值。
阅读全文