【PID 控制算法实战】C 语言实现:结构体封装、积分限幅与一阶滤波
PID代码解读 (c语言版本)PID的控制流程根据流程一步步描述代码PID代码流程创建变量typedefstruct{floatKp,Ki,Kd;floaterror,last_error;floatintegral,max_intergral;floatoutput,max_output;}PID;初始化PID的各类参数voidPID_Init(PID*pid,floatKp,floatKi,floatKd,floatmax_output,floatmax_intergral){pid-KpKp;pid-KiKi;pid-KdKd;pid-max_outputmax_output;pid-max_intergralmax_intergral;进行PID的简单运算floatPID_Calc(PID*pid,floatsetpoint,floatfeedback){pid-last_errorpid-error;pid-errorsetpoint-feedback;pid-integralpid-error;if(pid-integralpid-max_intergral){pid-integralpid-max_intergral;}elseif(pid-integral-pid-max_intergral){pid-integral-pid-max_intergral;}pid-outputpid-Kp*pid-errorpid-Ki*pid-integralpid-Kd*(pid-error-pid-last_error);if(pid-outputpid-max_output){pid-outputpid-max_output;}elseif(pid-output-pid-max_output){pid-output-pid-max_output;}returnpid-output;}主函数PID my_pid{0};intmain(){PID_Init(my_pid,0.5,0.5,0.5,100,100);while(1){floatsetpointscanf(%f,setpoint);floatfeedbackscanf(%f,feedback);floatoutputPID_Calc(my_pid,setpoint,feedback);printf(%f\n,output);}return0;}滤波算法平滑输出滤波器可以平滑控制信号减少快速变化的控制输入这对于需要平滑运动或减少机械磨损的应用非常重要。减少超调在某些情况下未过滤的输入信号可能会导致PID控制器产生过大的控制动作从而引起系统的超调。滤波器可以通过平滑输入信号来减少这种超调现象。改善稳定性滤波器可以帮助稳定控制系统的动态响应特别是在面对快速变化的输入或外部干扰时。提高响应速度虽然滤波器通常会引入一些延迟但适当设计的滤波器可以确保系统响应既快速又平滑避免因响应过快而导致的振荡。一阶滤波算法//一阶滤波算法floatFilter(floatinput,floatoutput,floatalpha){returnalpha*input(1-alpha)*output;}alpha的大小影响新数据的占比权重通常来说alpha越小新数值占比权重越小数据变化幅度越小数据更加平缓但是灵敏性差。二阶滤波算法等学了再写