Questions tagged «pid-controller»

PID控制器是一种(闭环)控制回路反馈机制。在工业控制中用于比例,积分和微分反馈。

7
Z转换派生的PID实现的优点是什么?
我已经看过许多PID文章,例如this,它们使用通用PID方程的Z变换来导出一些疯狂的差分方程,然后可以在软件(或本例中为FPGA)中实现该方程。我的问题是,与没有博士学位的传统且直观得多的PID相比,这种实现有什么优势?类型实现?第二个似乎更易于理解和实施。P项是直接乘法,积分使用运行总和,并且通过从当前样本中减去前一个样本来估计导数。如果您需要添加诸如积分饱和保护之类的功能,那么它就是直接代数。尝试将Integral Windup保护或其他功能添加到差异类型算法中,例如上面的链接,似乎要复杂得多。除了“我是一个喜欢做有趣的Z变换的坏家伙”类型的吹牛权利外,是否有其他理由使用这种实现? 编辑:没有链接我的PHD文章的PID是更简单实现的一个示例,该实现使用整数总和的连续求和和连续项之间的差作为导数。它可以确定性地通过定点数学实现,并且可以根据需要在计算中包括实时常数信息。我基本上是在寻找Z变换方法的实际优势。我看不出它怎么可能更快,或者使用更少的资源。Z方法似乎不使用积分的总和,而是使用先前的输出并减去先前的P和D分量(通过计算得出积分和)。因此,除非有人可以指出我所缺少的内容,否则我将接受AngryEE的评论,即它们本质上是相同的。 最终编辑:感谢您的答复。我认为我对每个方面都学到了一些知识,但是最后,认为《愤怒》是正确的,因为这只是个人喜好。两种形式: ë(ķ-2)=È(u (k )= u (k − 1 )+ Kp(e (k )− e (k − 1 )+ K一世Ť一世e (k )+KdŤ一世(È (ķ )- 2 ë (ķ - 1 )+ È (ķ - 2 ))u(k)=ü(ķ-1个)+ķp(Ë(ķ)-Ë(ķ-1个)+ķ一世Ť一世Ë(ķ)+ķdŤ一世(Ë(ķ)-2Ë(ķ-1个)+Ë(ķ-2)) u(k) = u(k-1) + K_p(e(k) - e(k-1) + K_i T_i e(k) + \frac{K_d}{T_i}(e(k)-2e(k-1)+e(k-2)) u …


4
PID控制器上的酸奶
如何更改PID控制器的调节以应对不断变化的热特性? 项目:我在做酸奶。它在110华氏度下培养大约半天。您放入牛奶和一点发酵剂,然后喝酸奶。为下一批初学者节省一些钱,其余的就吃掉。简单又美味。 设置:我要拿一个食品安全的容器(带盖的锅)放在加热器上,添加一个k型热电偶,SSR和PID控制器,对于您要命名的任何PID控制器的参考实现,它们的连线都差不多。如果我将锅子(225W,约3/4加仑)用作锅和加热元件,则此方法效果很好,但我想做大批量(1加仑)。 问题:加热器与热质量比更大(1000W热板和不锈钢锅,而不是陶瓷锅)。在周期的后期,不稳定增加。PID控制器用水调节(牛奶要贵一些),并在最初的几个小时内将温度保持在2华氏度以内,但是随着酸奶的培养,我注意到明显的温度波动,并且与使用锅具不同,我看到了乳清分离(大概是由于温度过高造成的,或由于盖子上的凝结而增加的)。我可以肯定的是,更大的热量会抑制培养过程中热导率变化的噪音,但是我不确定如何在以后的阶段中更精确地控制温度,而又不会在开始时过度地破坏温度调节。

4
如何使用测得的阶跃响应来调整控制系统
如何使用测得的阶跃响应来调节PID或卷积控制方案? 受此答案*的启发,我对如何基于测得的阶跃响应实现控制系统的更详细的解释感兴趣。 我不会尝试猜测所有的影响。可能发生了一些非显而易见的事情,并且您不知道所有参数。 我会测量阶跃响应。找到两个泵设置,这两个设置都会导致球在管内的可测量范围内。然后让控制器突然从一种设置切换到另一种开环。同时测量球随着时间的推移会做什么。那是阶跃响应。您可以将其导数并得到冲激响应。假设这是线性系统,从脉冲响应中可以预测任何泵设置历史的球的运动。在较小的设置范围内,它可能足够线性,可以将球保持在其正常范围内。 您可以将其用作仿真基础,以查找老式PID控制的参数。或者,您可以直接使用脉冲响应来进行卷积控制。您必须对控制输入进行低通滤波,以使卷积核不会变为负值,除非您的泵实际上是可逆的并且可以将球吸回去。 这是如何工作的?PID调节困难 ; 我假设“卷积控制”是零极点或传递函数的使用,但没有确切知道如何获取参数。 相关文章:控制系统的系统建模 *对作为阻尼器的管道中的乒乓球悬浮运动传递函数进行建模

4
电机推子PID控制
我正在尝试使用Arduino控制电动推子(线性滑动电位器)。 PID控制为“跳到”特定的目标位置提供了良好的结果,但是跟踪斜坡是一个问题,它一点也不平滑。不管我尝试什么,运动都非常生涩。 这是跟踪斜坡时参考位置,测量位置和电机输出的曲线图: 这是相同测试的视频。 在商业系统上,看起来更平滑,请参阅此。 详细信息: 电机推子是Alps RSA0N11M9A0K。为了驱动它,我使用的是ST L293D H桥,由稳定的10 V DC电源(XL6009)供电。 在Arduino UNO(ATmega328P)上,我使用的是引脚9和10,其PWM频率为31.372 kHz,无法听到(Timer1的预分频比为1 TCCR1B = (TCCR1B & 0b11111000) | 0b001)。 电位计连接在地和5V之间,抽头与往常一样进入ADC0。 控制器: 我使用的是具有防饱和功能的简单PID控制器,其更新速率为1 kHz(Ts = 1e-3 s): float update(int16_t input) { int16_t error = setpoint - input; int16_t newIntegral = integral + error; float output = k_p * …

6
PID算法:长时间延迟后如何考虑快速的输入值变化
我正在尝试在Arduino Leonardo上实现基本的PID算法,以使用伺服控制阀将冷热水混合。目的是使温度尽可能接近设定值。尤其重要的是防止输出温度超过设定值,以保护用户免遭灼伤。其次重要的是尽快使温度接近设定点。 对于较小的温度变化,PID算法的标准实现似乎可以正常工作。但是我不知道如何解决在等待热水到达阀门时可能出现的长时间延迟,因为这些延迟比更改阀门位置后的标准延迟长得多。 显然,取决于热水管线的长度和自上次使用热水以来的时间,热水到达阀门需要花费数十秒的时间,因此在此期间,水温在低温下保持相当恒定热水阀很快就会打开100%。积分分量开始累积较大的误差值。 当热水最终到达阀门时,检测到的温度会迅速上升到最高热水温度。由于较大的积分误差,温度超过设定值后,由于等待积分值降低到正常水平,热水阀长时间保持在100%。因此,结果是几秒钟(数十秒)的最高温度水。 我不确定如何解决这种可能的长时间延迟。在这种情况下,为了限制最大响应时间,在积分误差值上设置一个上限(和下限)是否明智?这似乎无法达到积分部分的目的,并且在达到设定值后仍会出现一定的滞后。 还是有更好的方法来处理长时间的延迟后快速的输入变化? 感谢您的任何建议!

5
如何实现自调节类PID控制器
我正在尝试编写一个用于控制具有以下特征的系统中的温度的微控制器程序: 输出只能是开或关,具有固定的循环频率(每小时约2-10) 工厂的响应速度很慢(可测量的温度变化需要10分钟以上的长时间)。 该工厂会根据环境条件降低温度。 设定点可以根据用户需求大步变化。 我正在编写一个控制器,旨在最大程度地减少错误,并坚持提供作为输入的循环速率。 使用PI控制器可以轻松完成此操作,并将其输出转换为占空比。问题在于程序需要自动调整并选择正确的Kp,Ki常数,并适应变化的环境条件和加热能力的变化。因此,预先调整PI控制器不是很有用。 不需要使用实际的PI或PID。如果有帮助,我愿意使用Fuzzy-Logic,也可以在芯片上使用机器学习算法来对系统响应和热损耗(线性近似)建模,该算法可提供有关所测阶跃响应的信息。只是不知道该怎么办。 有几篇文章建议我可以使用建模数据来在线调整PI,还可以通过实验室查看手册来建议我可以使用Fuzzy-Logic来调整PI。 我的问题是,对于这种情况(例如PID,模糊PID,卷积等),最好的方法是什么?我将如何在软件/实践中实际实现它? 我不是EE,因此不胜感激。

3
控制理论如何应用于我的实际处理器控制的升压转换器?
我对控制理论的了解有限。我在学校处理零极点和转移函数。我已经为DC / DC转换器实现了几种基于微处理器的控制方案。这两件事如何相互关联,我还想弄清楚,我很想知道。以反复试验为基础的设计是可行的,但我更希望对自己在做什么以及后果有更深入的了解。 答案应该集中在如何分析系统上,而不是在如何改进它上。就是说,如果您有改进系统的建议,并希望给出分析原因,那就太好了!只要改进是分析的第二要务。 对于这个问题,我的示例系统是: C1:1000uF C2:500uF L1:500 uH 开关频率:4 kHz R1:可变 输入电压:400伏 输出电压目标:500伏 输出电流限制:20安培 我正在尝试调节输出电压,而不超过输出电流限制。我具有电压和电流检测功能,这些电压和电流检测功能经过各个放大阶段,目前还没有进行分析,但确实包含一些滤波功能。随后是直接在A / D转换器上的100欧姆和1000 pF的RC低通滤波器。A / D采样率为12 kHz。该值通过最后64个采样的单极IIR移动平均滤波器。 之后,我有两个PI循环。首先,电压环路。以下是伪代码,其值缩放为伏特,毫安和纳秒。假设边界检查在其他地方正确实现。如果没有积分项,这些循环的结构将根据最大允许下垂定义P,然后定义积分项,以使最大积分器可以准确补偿该下垂。INTEGRAL_SPEED常数确定积分器加速的速度。(在我看来,这是确保P和我的收益始终保持适当平衡的一种合理方法,而不管我如何设置常数,但我愿意接受其他建议。) #DEFINE VOLTAGE_DROOP 25 #DEFINE VOLTAGE_SETPOINT 500 #DEFINE MAX_CURRENT_SETPOINT 20000 voltage_error = VOLTAGE_SETPOINT - VOLTAGE_FEEDBACK current_setpoint = MAX_CURRENT_SETPOINT * voltage_error/VOLTAGE_DROOP #define VOLTAGE_INTEGRAL_SPEED 4 voltage_integral += voltage_error/VOLTAGE_INTEGRAL_SPEED //insert bounds …

3
PID控制回路具有较大且不可预测的异常
简短的问题 是否存在一种通用方法来处理否则为均匀控制区域内的非常大的异常(数量级)? 背景信息 我正在研究一种控制算法,该算法可在通常均匀的控制区域上驱动电动机。在无负载/无负载的情况下,PID控制效果很好(响应速度快,几乎没有过冲)。我遇到的问题通常是至少有一个高负载位置。该位置由用户在安装过程中确定,因此没有合理的方法让我知道何时/何地可以使用它。 当我调整PID以处理高负载位置时,它会在无负载区域上引起大的过度拍摄(这是我完全预期的)。虽然OK旅行过冲中旬,有在外壳没有机械硬盘停止。缺少硬停止装置意味着任何明显的超调都会/确实会导致控制臂与电动机断开连接(产生死机)。 我正在制作原型的东西 嵌套的PID(在远离目标时非常激进,在靠近目标时很保守) 固定增益,远处为PID,关闭时为PID 保守的PID(无负载工作)+外部控制,寻找PID停止运行并施加额外的能量,直到达到目标或检测到快速变化率(即离开高负载区域)为止 局限性 全程旅行 不能添加硬停止(此时) 错误可能永远不会归零 可以通过小于10%的行程获得高负载(这意味着没有“运行开始”)

2
使用计算机视觉实现PID算法
我正在构建一个自动迷宫迷宫求解器,并使用网络摄像头来控制迷宫。 根据其他论坛的建议,我现在试图至少在一个方向上控制迷宫的球运动。因此,我试图控制球在两个坐标466,288和466,152之间的运动。步进电机控制板的输入是时间,每个轴(x和y)的旋转步数没有。 我使用的步进电机控制板是Egg bot步进电机控制板:http : //www.sparkfun.com/products/10025 因此,为了在两个点之间移动,我是否应该在两个点之间创建多个航路点,即288和152(例如260 240 230 ... 150)并纠正我的球的运动? 我的图像处理算法跟踪球的速度不够快,以至于球只会旋转并掉入一个洞中。 一些人建议我使用以下视频中所示的标准模板,并更正我的球的运动以解决路径偏差: http://www.youtube.com/watch?v=Prq78ctJ2Rk&feature=player_embedded 我还遇到了一种图像处理工具,他们使用球的运动点解决了相同的问题。看到太多解决同一问题的方法,我完全困惑于解决问题。我知道我应该实现PID控制器。但是我应该如何逐步解决问题呢?我被困在寻找解决该问题的先机而感到沮丧。 我的设置如下所示: ...这是我的软件的屏幕截图: 修订2:我现在还面临一个新问题:早些时候,我通过Arduino串行端口Java小程序控制步进电机。我可以使用小程序来驱动步进器。 每次尝试通过串行端口通信时,都必须重置板。同样,当没有命令发送给步进电机时,步进电机会以较小的间隔通电。当步进电机进入此模式时,如果不重置电路板,将无法控制我的电路板。任何援助将不胜感激。 修订版3: 在实施PID算法方面取得了一些进展。请在下面找到视频:http : //www.youtube.com/watch?v=MEfp7RqPmqY 现在,我对PID算法的执行速度有疑问。实际上,我的图像处理在200毫秒内完成一个周期,识别出一个球并将命令发送到步进电机控制器板上。即使向我的串行端口发送了切换方向的命令,我的步进器仍沿相同方向旋转。您可以在上面的视频中找到奇怪的行为。 我的想法是,我应该将PID值限制为一个上限,如果计算出的PID值大于100,我应该只发送100。我很希望听到您对此的看法。 我实现PID控制器的方式是,我使用模板匹配算法确定了模板的起点,并使用了另一个模板匹配算法确定了球。现在,我使球移至起点模板的质心。如何使用PID算法使其遵循直线? 修订4: 我已经隔离了轨迹,但是无法找到正确的功能来从起点打印正确的像素坐标。有什么想法吗?

1
将具有状态反馈的PID控制器组件转换为单传递函数和离散状态空间形式
作为一个为期一年的项目的一部分,我已经为这个问题努力了大约一个星期。我们正在基于模型设计用于特定反应堆的控制器。在看了一段时间之后,我仍然无法使它正常工作-因此,如果能得到一些帮助,我将不胜感激。 我们大量依据的一篇已发表的文献评论将PID控制器列出到每个单独的组件中,而不是一个组合方程式,如下所示: ⎧⎩⎨⎪⎪⎪⎪P(n )= Kp[ G (n )− t a r gÈ 吨]一世(n )= 我(n − 1 )+ KpŤ一世[ G (n )− t a r gÈ 吨]D (n )= KpŤddGdŤ(n ){P(n)=Kp[G(n)−target]I(n)=I(n−1)+KpTI[G(n)−target]D(n)=KpTDdGdt(n) \begin{cases} P(n)=K_p[G(n)-target] \\I(n)=I(n-1)+\frac{K_p}{T_I}[G(n)-target]\\D(n)=K_pT_D\frac{dG}{dt}(n)\end{cases} 只需将三个组件组合到PID控制器输出中即可: P一世D (n )= P(n )+ 我(n )+ D (n )PID(n)=P(n)+I(n)+D(n) PID(n)=P(n)+I(n)+D(n) 然后,作者在PID信号之上添加了一层状态反馈,以获取最终的控制器输出应用于系统。 { Q (n …

3
请用外行的术语解释PID如何解决温度控制中的惯性
我正在构建自己的业余爱好者微处理器控制的回流焊炉。我正在使用(机械)继电器打开或关闭加热器(即石英管)。我注意到温度开始上升之前,加热滞后了几秒钟。 现在,我在Arduino的帮助下手动管理温度曲线,当达到设定温度时,它会关闭加热器。例如,当我将温度设置为120摄氏度,并且加热器停止运转时,温度仍然会攀升10-20度,因此会有相当大的超调,然后会有一些振铃,然后缓慢降低。 我已经阅读并观看了许多示例,这些示例利用PID来实现更好的温度控制。否则,我只会停止加热器,例如在设定值以下10-20度,然后在短时间内打开/关闭加热器,直到温度稳定在设定值附近。我只知道增量随温度变化而变化,所以它可能不那么简单-我知道固定设置值下温度上升的指数性质。 因此,任何人都可以用通俗易懂的方式解释PID是如何计算惯性的,例如,积分部分起什么作用,微分部分起什么作用,以及如何/是否可以直观地算出对微分和积分的估计。数量而无需进行复杂的计算。


1
PID(微分)的实现
我正在实现PID控制器以进行电动机速度控制。我已经实现了PI控件,并且对我来说效果很好。在规范中,我被告知要通过对D部分使用以下公式来实现过滤技术: 现在,到目前为止,我所理解的是通常s代表"dx/dt"与误差变化率相对应的代表,但是在这里,我可以将其与反馈变化率联系起来。Td/N用于限制整体增益输出(希望我做对了)。现在用C代码来表示,我尝试了以下方法: s = (CurrentFeedback()-Old_Feedback)*100/(MaxFeedback()); //to calculate the % change in feedback s = s*1000/sampleTime; //1000 is multiplied because sampleTime is in milliseconds D = (Td*s)/(1+(s*Td/N)); D = D*KP; //Kp is multiplied as per the standard pid equation. Old_Feedback = CurrentFeedback(); PID = P+I-D; 好吧,加上D的结果不是我所预期的。我只想知道我是否正确实现了D部分方程式?在我对微分的基本数学的理解上是否犯了任何错误? 注意:我不能随意更改重新计算kp,ti,td,因为它直接来自VFD。

5
Arduino sov-vide项目的温度传感器
我正在为此类视频创建PID控制器,并试图确定要获取哪个温度传感器。 优先事项: 成本:<25英镑(在英国交付) 精度:+/- 0.5C 范围:0-100C 输出:可由Arduino用最少的附加电路读取的东西(例如0-5VDC,易于测量的电阻或数字输出,例如OneWire等) 物理:防水,食品安全(理想情况下),并且引线至少一米长-理想情况下,无需太多工作来创建此外形尺寸(我没有工作室) 故障模式:如果故障导致温度读数过高而不是温度过低,将是理想的选择 如果需要,很乐意在上述任何一项上做出折衷,但这是我的理想。也可以就其他我应该折衷的建议提出建议。我对与传感器有关的想法特别感兴趣,例如k型,pt100,TMP36芯片和“标准” 10K热敏电阻(尽管这些名称不够具体,请让我知道我该怎么做)。寻找代替)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.