问题标签 [pid-controller]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
controller - 我不明白 PID 控制器的积分部分
我不了解 PID 控制器的组成部分。让我们假设这个来自维基百科的伪代码:
积分在开始时设置为零。然后在循环中,它会随着时间的推移整合错误。当我对测量值或设定点进行(正)更改时,误差将变为正,并且积分将随着时间的推移(从一开始)“吃掉”这些值。但是我不明白的是,当误差稳定回零时,积分部分仍然会有一些值(随着时间的推移积分误差)并且仍然会有助于控制器的输出值,但它不应该。
有人可以解释一下吗?
c - 如何使用 PID 控制器?
我目前正在研究温度控制器。
我有一个 Temperature_PID() 函数,它返回操纵变量(这是 P、I 和 D 项的总和),但我该如何处理这个输出?
温度由 PWM 控制,因此 0% 占空比 = 加热器关闭,100% 占空比 = 加热器开启。
到目前为止我试过
这对我不起作用,因为 I 术语基本上使这个系统非常不稳定。想象一下整合一个区域,添加另一个小数据点,然后再次整合该区域,然后将它们相加。一遍又一遍。这意味着每个数据点都会使这种控制方案成倍恶化。
我想尝试的另一件事是
其中 Expected_Duty_Cycle 是控制器达到稳定点且 Temperature_PID() 为 0 时应设置的温度。但是,这也不起作用,因为 Expected_Duty_Cycle 将始终根据加热器的条件而变化,例如不同的天气.
所以我的问题是我到底该怎么处理 PID 的输出?我不明白如何根据 PID 输出分配占空比。理想情况下,这将保持 100% 的占空比,直到温度几乎达到设定点并开始下降到较低的占空比。但是使用我的第一种方法(我的增益设置为零)它只是在它已经过冲后才开始降低占空比。
这是我的第一篇文章。希望我能找到我的答案。谢谢你的堆栈溢出。
编辑:这是我的 PID 函数。
编辑 2:以前从未使用过,所以如果链接损坏,请告诉我。 https://picasaweb.google.com/113881440334423462633/January302013
抱歉,当我尝试重命名轴或标题时,Excel 崩溃了。注意:系统中还没有风扇,所以我不能尽可能快地冷却加热器,所以与上面相比,它在设定点以下花费的时间很少。第一张图是一个简单的开关控制器。第二张图是我的 PD 控制器。正如您所看到的,温度降低需要更长的时间,因为它不会在温度过冲之前减去,它会等到温度过冲后再从占空比中减去,而且这样做太慢了。我究竟如何告诉我的控制器在达到最高温度之前降低占空比?
algorithm - PID控制器适用于百分比而不是绝对单位?
我正在开发一个PID
控制软件模拟器,用于PID
交互式地教授控制概念。
我正在研究Velocity
控制器的示例。我有这个例子工作,但我真的希望我的流程的输入是百分比而不是我得到的输出,这是流程应该增加的固定值。
现在,我必须通过采样步骤的最大加速度对输出增加进行插值,然后将输出缩放到一个百分比。问题是加速度是非线性的,取决于传动系统的速度和当前传动装置。
这可行,但不是很灵活或适应性不强,例如,它使一切都以最大速度加速,直到接近setpoint
速度,然后过冲和振荡几个周期,或者需要同样长的时间才能在不过度射击的情况下获得最后一点.
有时您会想要这种最大的加速行为,有时您会想要管理电池/燃料源并以最大效率加速;有时你想要两者兼而有之。
像我现在这样缩放输出是蛮力的,不是很微妙。我宁愿通过动态调整P
,I
和D
增益将输出修饰符注入到输出的计算中,但我不确定要关注哪些以及以什么顺序?
当我一次手动调整它们时,我可以获得非常好的结果,但是当我尝试开始自动调整它们时,一切都变得疯狂。
上周我一直在阅读有关控制理论和自动调整的内容,而数学符号对我来说变得很神秘,如果我能在代码中找到一些实现,我就会理解数学;不管语言。
我尝试过应用 ZN 启发式算法,但仍然会出现剧烈波动,而且很难补偿过冲;当您只能以您可以加速的速度的一小部分减速时,很难容忍过多的超调。想象一个没有主动制动且仅依靠被动阻力减速的系统
为速度控制注入动态增益调整的好方法是什么?
controls - 墙跟随机器人的PID调节
我目前正在为我的本科项目设计一个机器人。这个机器人的任务之一是跟随墙壁。为此,我使用 PID 控制系统,其中参考来自超声波传感器。所以我的问题是我很难调整 PID。我知道通过绘制所需的设定点范围与所需的电机输出速度,我可以很容易地找到 P 系数。即使这样,机器人也不是那么稳定,所以我想添加 PID 的 DI 部分。但是如何在不尝试随机值(手动调整)的情况下粗略地找出这些系数的值?太感谢了。非常感激。抱歉,在 stackExchange 上发布了不相关的帖子。我相信程序员比工程师有深刻的洞察力;)祝你有美好的一天
delay - 在有延迟的系统中调整 pid
我需要在延迟很大的系统中调整 PI(D) 增益。它是一种普通的温度控制器,但温度探头离加热器较远。一些进一步的信息:
探头的响应在加热器发生任何变化后延迟约 10 秒
温度以 1 Hz 采样,分辨率为 0.01 °C
加热器是 PWM 控制器,周期为 1 Hz,具有 10 位 PWM
目标是将振荡保持在 ±0.05 °C 以下
目前我正在使用控制器作为 PI。我无法避免振荡。增益越高,振荡越小越快。仍然太高(约 ±0.15 °C)。降低 P 和 I 增益会导致非常长且深度的振荡。
我认为这是由于延迟。稳定时间不是问题,它可能需要它需要的所有时间。
我对如何让系统工作感到困惑。假设只使用 I。当探头达到目标值并且 I 输出开始下降时,温度会再升高一段时间。我不能使用导数项,因为变化太慢并且 dError 非常接近于零(如果我将 dGain 设置为一个很大的值,则会有太多的噪音)。
任何的想法?
java - 树莓派四轴飞行器高速颠簸
我正在尝试构建一个基于树莓派的四轴飞行器。到目前为止,我已经成功地连接了所有硬件,并且我编写了一个在低油门时相当稳定的 PID 控制器。问题是在更高的油门下,四轴飞行器开始颠簸和抽搐。我什至还没能把它弄好,我所有的测试都是在测试台上完成的。这是我的代码有问题,还是电机坏了?非常感谢任何建议。
到目前为止,这是我的代码:
QuadServer.java:
传感器.java:
android - 用 C++ 实现的控制理论
我正在 Windows 8.1 上使用 Java-Eclipse Luna 进行 Android 编程,此外,我正在使用本机环境 (C++)。作为我项目的下一步,我必须通过在 Android 中构建应用程序来控制移动机器人。
我的问题是,是否有任何已经在 C++ 中实现的控制理论库,我只是在我的 C++ 代码中导入和使用?我需要PID,LQR,LQG ...等。
java - 我的 Java PID 控制器运行不正常
我正在寻找一个用 Java 实现的 PID 控制器,我发现了这个:
因此,据我所知,我以这种方式使用它:
但他从来没有稳定过。他的行为根本不像 PID……这是我得到的输出:
有人可以帮我告诉我我错过了什么吗?
谢谢!
simulink - PID 使用正弦波作为 simulink 中的参考
我已经看到了使用 PID 控制器控制直流到直流降压转换器的输出直流电压的示例。
我想实现直流到交流转换器。
我尝试使用 PID 控制器。
由于我将输出交流信号(连续变化)与参考正弦信号进行比较,因此 PID 控制器没有提供预期的输出。
在 DC 到 DC 的情况下,两个参考信号都是恒定的。
就我而言,它是不断变化的正弦波。
谁能建议任何方法来获得准确的直流到交流转换?
PS PID 控制器可以在高频(100Hz)连续变化的参考信号下工作吗?