PID算法C语言编程

上传人:飞****9 文档编号:143886986 上传时间:2020-09-02 格式:PDF 页数:5 大小:308KB
返回 下载 相关 举报
PID算法C语言编程_第1页
第1页 / 共5页
PID算法C语言编程_第2页
第2页 / 共5页
PID算法C语言编程_第3页
第3页 / 共5页
PID算法C语言编程_第4页
第4页 / 共5页
PID算法C语言编程_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《PID算法C语言编程》由会员分享,可在线阅读,更多相关《PID算法C语言编程(5页珍藏版)》请在金锄头文库上搜索。

1、472732787 PID 编程 1 / 5 PID 的 C 语言编程 自从计算机进入控制领域以来,用数字计算机代替模拟计算机调 节器组成计算机控制系统,不仅可以用软件实现 PID 控制算法,而且 可以利用计算机的逻辑功能,使 PID 控制更加灵活。数字 PID 控制在 生产过程中是一种最普遍采用的控制方法,在机电、冶金、机械、化 工等行业中获得了广泛的应用。将偏差的比例P) 、积分(I)和微分(D) 通过线性组合构成控制量,对被控对象进行控制,故称 PID 控制器。 PID 控制分为模拟控制分为模拟 PID 控制器和数字控制器和数字 PID 控制器控制器 模拟模拟 PID 控制控制: 模拟模

2、拟 PID 控制系统框图控制系统框图 模拟模拟 PID 控制控制的微分方程的微分方程 472732787 PID 编程 2 / 5 因为微机只能处理数字信号不能处理模拟信号,所以要把模拟 PID 控制转换成数字 PID,这就需要把模拟 PID 的参数离散化 模拟模拟 PID 控制规律的离散化控制规律的离散化 数字数字 PID 控制控制: 数字 PID 算法有两种常用的基本类型:位置型、增量型。 增量型增量型 PID 控制控制 增量式增量式 PID 控制原理控制原理 简化后的简化后的增量式增量式 PID 控制原理控制原理 472732787 PID 编程 3 / 5 472732787 PID

3、编程 4 / 5 PID 程序程序清单清单 /定义定义 PID 参数参数 #define VV_KPVALUE 3 /比例比例 #define VV_KIVALUE 40 /积分积分 #define VV_KDVALUE 3 /微分微分 #define VV_MAX 10000 /返回的最大值返回的最大值,是是 pwm 的周期值的周期值 #define VV_MIN 0 /#define VV_DEADLINE 0X08 /速度速度 PID,设置死区范围,设置死区范围 /* * /PID 算法算法 /* * typedef struct PID /定义数法核心数据定义数法核心数据 signed

4、 int vi_Ref; /速度速度 PID,速度设定值,速度设定值 Velocity signed int vi_FeedBack; /速度速度 PID,速度反馈值,速度反馈值 m*50 signed long vi_PreError; /速度速度 PID,前一次,速度误差,前一次,速度误差,vi_Ref - vi_FeedBack signed long vi_PreDerror; /速度速度 PID,前一次,速度误差之差,前一次,速度误差之差,d_error-PreDerror; unsigned int v_Kp; /速度速度 PID,Ka = Kp unsigned int v_Ki

5、; /速度速度 PID,Kb = Kp * ( T / Ti ) unsigned int v_Kd; /速度速度 PID, signed long vl_PreU; /电机控制输出值电机控制输出值 PID; static PID sPID; / PID Control Structure static PID*sptr= void PIDInit(void) sptr-vi_Ref =Velocity ; /速度设定值速度设定值 sptr-vi_FeedBack = X ; /速度反馈值速度反馈值 sptr-vi_PreError = 0 ; /前一次,速度误差前一次,速度误差,vi_Ref

6、 - vi_FeedBack sptr-vi_PreDerror = 0 ; /前一次,速度误差之差,前一次,速度误差之差,d_error-PreDerror; 472732787 PID 编程 5 / 5 sptr-v_Kp = VV_KPVALUE; sptr-v_Ki = VV_KIVALUE; sptr-v_Kd = VV_KDVALUE; sptr-vl_PreU = 0 ; /电机控制输出值电机控制输出值 /pid void speed_pid(int v) signed long error,d_error,dd_error; / error = (signed long)(sp

7、tr-vi_Ref - sptr-vi_FeedBack); / 偏差计算偏差计算 d_error = error - sptr-vi_PreError; dd_error = d_error - sptr-vi_PreDerror; sptr-vi_PreError = error; /存储当前偏差存储当前偏差 sptr-vi_PreDerror = d_error; /储存当前误差之差储存当前误差之差 sptr-vl_PreU += (signed long)( sptr - v_Kp * d_error + sptr - v_Ki * error + sptr-v_Kd*dd_error); /速度速度 PID 计算计算 if( sptr-vl_PreU = VV_MAX )/速度速度 PID,防止调节最高溢出,防止调节最高溢出 sptr-vl_PreU = VV_MAX; else if( sptr-vl_PreU vl_PreU = VV_MIN; else return ( sptr-vl_PreU ); / 返回预调节占空比返回预调节占空比

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号