电源-闭环控制升级之PID调节(附PID源码)
前言
电源方向资料免费开源到QQ群280730348,欢迎进群交流沟通。博客地址edadong.com,博文同步发布在知乎、bilibili,其中bilibili主要以视频为主。
下面是BUCK电路的PID控制方案和具体电路,更详细的讲解请移步Bilibili:EDAdong。
软件思路
PID其实属于比较常见且通用的闭环调节算法,经典古老但实用。在一般的单环或者双环闭环控制环节,拥有较为不错的效果。本次分享的PID属于增量式PID,大家可以去了解一下增量式PID和位置式PID的区别,一般来说在电源设计里面增量式PID会用的比较多一点。传统PID中,P环是根据当前误差量输出反馈量,I环是根据当前误差和上一次误差之差输出反馈量,D环是根据上次I环误差量和此次I环误差量进行刹车反馈,通过上一次误差量抑制当前误差。P环比较通俗易懂一点,所以传统PID里面P环会用的比较多一点。放在增量式PID中,传统PID的P环其实跟增量式的I环一样,所以这一点有所区分,大家需要注意。我通常是P环和I环一起调,以I环为主导。
本次PID代码在基于BUCK的实战演练项目中修改,直接可用,话不多说直接上代码
在PID.c文件中,可以看到buck_pid的调节函数,第一个参量NOW代表的是你当前采集到的数据(比如在本设计中就是电压所转换成的ADC值,范围0-4096)。第二个参量Target代表你要追踪的目标值(比如在本设计里面把目标电压转换成对应ADC值)。第三个参量SIGNLE_ADD_NUM_LIMIT代表单次增加量,每次PID调节的增量范围,这个值不能太大,否则系统就容易震荡起来。程序中设定的PID周期为1ms,每秒能执行1000次,每次如果拉满的话,那么1s理论上就能调节5000,但我们重装载值也就3600,而且越接近目标值,增量就会越小,所以这个参数你可以根据自己的系统去调节,目前我用的5基本跑单环速度和精度都没问题。第四个参量SUM_OUTPUT_NUM_LIMIT代表输出限制,比如我们重装载值为3600,那么这个值就可以设置成3599,确保占空比不会继续递增。后面的两个参量kp和ki分别代表增量式PID里面的积分调节和比例调节。
pid.c
1 |
|
pid.h
1 |
|
在定时器中断中(20KHz)每进入20次进行一次PID调节,也就是单次调节时间为1ms。
1 | //中断服务函数 |
主函数中只需要定义float kp和float ki两个参量,extern到main.h里面,再在main函数中初始化init_buck_PID();即可
1 |
|
资料放百度网盘链接了:
通过网盘分享的文件:post12资料合集
链接: https://pan.baidu.com/s/1O4975ZoDPHOWwQN88SApsA?pwd=fvay 提取码: fvay
–来自百度网盘超级会员v6的分享