matlab pid 采样时间,手把手教你看懂并理解Arduino PID控制库——采样时间

本文深入解析Arduino PID控制库中采样时间的概念,解释如何处理非固定周期调用导致的问题。通过`SetTunings`和`SetSampleTime`函数,调整PID控制器的Ki和Kd参数,保持算法的稳定性。文章还探讨了积分项的离散形式,证明即使Ki变化,对PID控制结果的影响也不大。最后强调了系统在时间计数溢出前的维护和保护机制的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引子

在《手把手教你看懂并理解Arduino PID控制库》中已经简单介绍过Brett Beauregard大神所提供的ArduinoPID控制库,此库不仅仅可以在Arduino使用,稍作简单的修改即可移植到别的平台。那么下面针对7个问题的第一个问题进行说明。

问题定义

一般来说,PID控制都是周期性调用(也就是意味着,每次计算的间隔都是固定的常量),但或多或少,由于各种需求会被奇葩的非周期调用。如果非得修改采样时间,对PID控制进行非周期调用,那么这样会导致以下问题:

观察这个“可恶”的方程

71b8172a701b4b683df54d450fedd932.png

如果采样时间变化了,那么对于积分项和微分项(也就是KI和KD对应的项),这两项是和采样时间间隔有关的,那么则需要进行额外的微积分运算(不能再按照原来写好的代码进行运算,必须对时间参数进行调整)。

解决方案

如果算法被固定的周期间隔调用,那么运算将会变得很简单,并且也能够周期性的获取到精确的运算结果。那么朝着这个思路。需要想办法将已经被改变的采样周期让PID控制器认为没有改变,依旧沿用原来的运算过程。

代码

/*working variables*/

unsigned long lastTime;

double Input, Output, Setpoint;

double errSum, lastErr;

double kp, ki, kd;

int SampleTime = 1000; //1 sec

void Compute()

{

unsigned long now = millis();

int

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值