PID算法控制电机转速仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- //=== C文件 ==========
- /*
- * PID管理程序,PID manager
- */
- #include "PID_Mgr.h"
- /*-----------------------------------------
- * 位置式PID
- ------------------------------------------*/
- float PID_Deal(PID_STR *pid)
- {
- float re_val;
- pid->offset_sum += (pid->set - pid->now); //更新“累计偏差”(在原来的基础上加“当前偏差”)
- //位置式PID公式
- re_val = pid->kp*(pid->set - pid->now) + /* 比例系数*当前偏差 */ \
- pid->ki*(pid->offset_sum) + /* 积分系数*累计偏差 */ \
- pid->kd*((pid->set - pid->now) - pid->offset_b); /* 微分系数*偏差变化率 */
- pid->offset_b = pid->set - pid->now;
- return re_val;
- }
- //=== H文件 ======
- #ifndef _PID_MGR_H_
- #define _PID_MGR_H_
- #include "system.h"
- //=== 位置式PID结构体 =============
- typedef struct
- {
- float kp;
- float ki;
- float kd;
- float set; //设定值
- float now; //当前值 (注:设定值-当前值 = 当前偏差)
- float offset_b; //上次偏差
- float offset_sum; //累计偏差
- }
- PID_STR;
- /*---------------------------------
- * 函数声明
- ---------------------------------*/
- float PID_Deal(PID_STR *pid);
- #endif
复制代码
所有资料51hei提供下载:
PID算法控制电机转速 proteus仿真 v2.0.rar
(95.59 KB, 下载次数: 227)
|