PID参数整定——Z-N方法

一、PID参数的控制效果


PID控制器是一种线性控制器,它根据输入值Rin(t)和输出值Yout(t)构成的偏差e(t)作为控制器的输入,其中

                          (1)

PID的控制策略如下

                   (2)

将式(2)写成传递函数的形式

           (3)

其中,Kp为比例系数,Ti为积分时间常数,Td为微分时间常数。

PID控制器各个矫正环节的作用如下:

(1)比例环节:成比例的反映控制系统的偏差e(t),偏差一旦产生,控制器立即产生作用,以减少偏差。

(2)积分环节:主要用于消除静差,提高系统的误差度,积分作用的强度取决于积分时间常数Ti,Ti越大,积分作用就越弱,反之则强。

(3)微分环节:反映偏差信号的变化趋势,并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,较小调节时间。

二、传统PID经验整定步骤

(1)关闭积分控制器I和微分控制器D的作用,单独使用比例控制器P,加大P的值,使系统出现震荡;

(2)较小P,使系统出现临界震荡,找到临界震荡点;

(3)加大I的作用,使系统达到设定值(积分控制器的作用就是消除稳态误差);

(4)重新上电,观察超调、震荡和稳定时间是否符合系统要求;

(5)针对超调和震荡的情况适当增加微分项(微分的作用是在系统有变坏的趋势之前予以矫正,对超调和震荡有很好地修正效果)。

以上(5)个步骤是PID调节过程中常用的经验法,但在寻找合适的I和D参数时,并非易事。常用的方法有Z-N法公式来确定I和D的参数。


三、基于Z-N法的PID参数整定

John Ziegler和Nathaniel Nichols发明了著名的回路整定技术使得PID算法在所有应用在工业领域内的反馈控制策略中是最常用的。Ziegler-Nichols整定技术是1942年第一次发表出来,直到现在还被广泛地应用着。

Ziegler-Nichols方法分为两步: 
1.  构建闭环控制回路,确定稳定极限。 

2.  根据公式计算控制器参数。 
稳定极限是由P元件决定的。当出现稳态振荡时就达到了这个极限。产生了临界系数Kpcrit和临界振荡周期Tcrit。



确定临界系数Kpcrit和临界振荡周期Tcrit后,根据下表的公式,计算其他参数:



基于z-n阶跃响应PID参数整定可以通过C语言来实现。下面是一个常见的实现方法: 首先,定义一些变量,包括Kp、Ki、Kd(PID控制器的比例、积分和微分系数)、desired(期望值)、feedback(反馈值)、error(误差值)、prev_error(上一个周期的误差值)和integral(积分项)。 接下来,进入主循环,在每个周期内进行参数整定。 1. 计算误差值:error = desired - feedback。 2. 计算积分项:integral += error * dt,其中dt为周期的时间。 3. 计算微分项:derivative = (error - prev_error) / dt。 4. 计算PID输出:output = Kp * error + Ki * integral + Kd * derivative。 5. 更新上一个周期的误差值:prev_error = error。 6. 应用PID输出到控制系统。 通过实验或经验,可以逐步调整Kp、Ki和Kd的值,直至达到期望的控制效果。可以利用试探、二分或其他调整方法,不断迭代进行参数的优化。 下面是一个简单的C语言示例代码: ```c #include <stdio.h> float Kp = 1.0; // PID比例系数 float Ki = 0.1; // PID积分系数 float Kd = 0.01; // PID微分系数 float desired = 100.0; // 期望值 float feedback = 0.0; // 反馈值 float error = 0.0; // 误差值 float prev_error = 0.0; // 上一个周期的误差值 float integral = 0.0; // 积分项 float dt = 0.01; // 周期时间 float output = 0.0; // PID输出 int main() { while (1) { // 进入主循环 // 计算误差值 error = desired - feedback; // 计算积分项 integral += error * dt; // 计算微分项 float derivative = (error - prev_error) / dt; // 计算PID输出 output = Kp * error + Ki * integral + Kd * derivative; // 更新上一个周期的误差值 prev_error = error; // 应用PID输出到控制系统 // ... printf("PID Output: %.2f\n", output); // 延时一段时间,模拟周期 // ... } return 0; } ``` 以上是一个简单的基于z-n阶跃响应PID参数整定的C语言示例,可以根据需要进行调整和扩展。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路漫求索_CUMT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值