位置式PID和增量式PID的C语言实现 P、I、D各个参数的作用

pid控制应该算是非常古老而且应用非常广泛的控制算法了,小到热水壶温度控制,大到控制无人机的飞行姿态和飞行速度等等。在电机控制中,pid算法用得尤为常见。
一、位置式pid
1.计算公式
在电机控制中,我们给电机输出的是一个pwm占空比的数值。
话不多说,直接上位置式pid基本公式:
控制流程图如下:
上图中的目标位置一般我们可以通过按键或者开关等方式编程实现改变目标值,测量位置就是通过 stm32 去采集编码器的数据。
目标位置和测量位置之间作差就是目前系统的偏差。送入 pid 控制器进行计算输出,然后再经过电机驱动的功率放大控制电机的转动去减小偏差, 最终达到目标位置的过程。
2.c语言实现
如何把我们以上的理论分析和控制原理图使用 c 语言写出来呢,这是一个有趣且实用的过程。位置式 pid 具体通过 c 语言实现的代码如下:
int position_pid (int encoder,int target){ static float bias,pwm,integral_bias,last_bias; bias=target- encoder; //计算偏差 integral_bias+=bias; //求出偏差的积分 //pid基本公式 pwm=position_kp*bias+position_ki*integral_bias+position_kd*(bias-last_bias); last_bias=bias; //保存上一次偏差 return pwm; //输出}  
入口参数为编码器的位置测量值和位置控制的目标值,返回值为电机控制pwm(现在再看一下上面的控制框图是不是更加容易明白了)。
第一行是相关内部变量的定义。
第二行是求出位置偏差,由测量值减去目标值。
第三行通过累加求出偏差的积分。
第四行使用位置式 pid 控制器求出电机 pwm。
第五行保存上一次偏差,便于下次调用。
最后一行是返回。
二、增量式pid
1.计算公式
速度闭环控制就是根据单位时间获取的脉冲数(这里使用了 m 法测速)测量电机的速度信息,并与目标值进行比较,得到控制偏差,然后通过对偏差的比例、积分、微分进行控制,使偏差趋向于零的过程。
在我们的速度控制闭环系统里面只使用 pi 控制,因此对 pid 控制器可简化 为以下公式:
控制框图和位置式的一样的。
上图中的目标速度一般我们可以通过按键或者开关等方式编程实现改变目标值,测量速度前面在编码器的章节已经有说到就是通过单片机定时去采集编码器的数据并清零。
目标速度和测量速度之间做差就是目前系统的偏差。送入 pid 控制器进行计算输出,然后再经过电机驱动的功率放大控制电机的转动去减小偏差, 最终达到目标速度的过程。
2.c语言实现
如何把我们以上的理论分析和控制原理图使用 c 语言写出来呢,这是一个有趣且实用的过程。位置式 pid 具体通过 c 语言实现的代码如下:
int incremental_pi (int encoder,int target){ static float bias,pwm,last_bias; bias=encoder-target; //计算偏差 //增量式 pi 控制器 pwm+=velocity_kp*(bias-last_bias)+velocity_ki*bias; last_bias=bias; //保存上一次偏差 return pwm; //增量输出}  
入口参数为编码器的速度测量值和速度控制的目标值,返回值为电机控制 pwm。
第一行是相关内部变量的定义。
第二行是求出速度偏差,由测量值减去目标值。
第三行使用增量 pi 控制器求出电机 pwm。
第四行保存上一次偏差,便于下次调用。
最后一行是返回。
三、p、i、d各个参数的作用
自动控制系统的性能指标主要有三个方面:稳定性、快速性、准确性。
稳定性:系统在受到外作用后,若控制系统使其被控变量随时间的增长而最终与给定期望值一致,则称系统是稳定的,我们一般称为系统收敛。
如果被控量随时间的增长,越来越偏离给定值,则称系统是不稳定的,我们一般称为系统发散。稳定的系统才能完成自动控制的任务,所以,系统稳定是保证控制系统正常工作的必要条件。
一个稳定的控制系统其被控量偏离给定值的初始偏差应随时间的增长逐渐减小并趋于零。
快速性:快速性是指系统的动态过程进行的时间长短。过程时间越短,说明系统快速性越好,过程时间持续越长,说明系统响应迟钝,难以实现快速变化的指令信号。
稳定性和快速性反映了系统在控制过程中的性能。系统在跟踪过程中,被控量偏离给定值越小,偏离的时间越短,说明系统的动态精度偏高。
准确性:是指系统在动态过程结束后,其被控变量(或反馈量)对给定值的偏差而言,这一偏差即为稳态误差,它是衡量系统稳态精度的指标,反映了动态过程后期的性能。
在实践生产工程中,不同的控制系统对控制器效果的要求不一样。比如平衡车、倒立摆对系统的快速性要求很高,响应太慢会导致系统失控。
智能家居里面的门窗自动开合系统,对快速性要求就不高,但是对稳定性和准确性的要求就很高,所以需要严格控制系统的超调量和静差。


三星玄龙骑士电竞显示器G85QB重磅来袭 沉浸式打游戏不再是梦
ADSS光缆老化原因-科兰
为什么会有半导体和导体绝缘体
赛普拉斯PSoC、MCU及蓝牙低功耗解决方案组合日益丰富
英特尔推出全球首个5G自动驾驶平台Intel Go
位置式PID和增量式PID的C语言实现 P、I、D各个参数的作用
单片机芯片生产工艺对单片机芯片良率的影响
受疫情影响 两家锂矿资源巨头一季度业绩大幅下降
VIVOXplay7什么时候上市?VIVOXplay7最新消息:VIVOXplay7告别低价高配骁龙835加持,8CB运存+指纹识别
振动传感器KX-ZD-100简介
TMS320F2812片内Flash在线烧写技术
MD播放器附件
胎压对于电动汽车的续航能力有影响吗
2013年太阳电池板市场薄膜技术
功率半导体在电动汽车充电中的作用
未来发展前景最好的十个行业你知道吗
3期免息、最高立减300!iQOO Z1多重福利开启,5G换机首选
2011年影响3G手机发展四大因素
电机控制算法 电机控制算法有哪些 BLDC电机控制算法很难?
华为云短短几年的发展:厚积薄发