柴油发电机驱动算法

时间:2016-08-18 11:59:55

标签: c++ algorithm arduino

我有一台旧的柴油发电机,我在编制州长时遇到了很大问题。 我需要发动机保持在2400-2800 RPM之间

我有强大的RC汽车伺服推动发动机的气杆,伺服在22°(最小)和95°(最大)燃油喷射之间移动

我使用Atmel meg 328微控制器驱动它。 使用Hal效应传感器和飞轮上的单个磁铁测量速度。我测量完全转弯所需的时间,并根据它来计算RPM(这意味着如果引擎更快,代码对它的反应更频繁=>更快的喷射量变化)

首先,我尝试了最简单,最愚蠢的方式。如果RPM大于我的需要,则步进伺服返回=>喷油量较小。如果RPM低于所需的步进伺服前进。 事实证明这是一个非常糟糕的主意,因为引擎有很大的延迟,所以我的RPM在我的Needed RPM周围写了一个完美的正弦图,因为它有很大的惯性。所以当RPM高于上限时,发动机仍在加速。

我还尝试通过将其乘以差值的平方(需要的RPM-当前RPM)来改变调节度的数量 事实证明它是最好的,但它仍在继续。

我希望能够以某种方式预测我的曲线,并根据我未来的曲线改变燃油喷射。 当负载突然增加时,发动机会产生巨大的RPM下降(我从中启动压缩机)

请帮帮我,我不知道。 我会在图表中发送一些图片。

1 个答案:

答案 0 :(得分:7)

正如Avi Ginsburg所说,尝试使用PID控制器:

https://en.wikipedia.org/wiki/PID_controller

基本上它由 P roportional, I 整合和 D erivation元素组成。这总是用作循环电路:

Image from wikipedia

还有一个Arduino库:

http://playground.arduino.cc/Code/PIDLibrary