【问题标题】:Technique for balancing controller input and output平衡控制器输入和输出的技术
【发布时间】:2011-06-15 06:16:59
【问题描述】:

我有一个系统,我使用 RS232 来控制一个灯,该灯接受一个表示电压的浮点输入(在 2.5 - 7.5 范围内)。然后控件会给出 0 到 6000 范围内的输出,这是传感器接收到的亮度。

我想要的是能够平衡系统,以便我可以指定亮度值,并且系统应该平衡实现此目的的电压值。

是否有一些标准算法或技术可以找到电压输入应该是什么以获得特定的输出?我正在考虑一种迭代尝试值的算法,并从每次尝试中确定一些新值,该值应该更好,以实现确定的输出值。 (在我的情况下是 3000)。

所需的电压值在不同系统之间以及在灯的使用寿命期间往往会有所不同,因此最好完全自动完成。

我只是在寻找一种技术或算法的名称,但伪代码也可以。 :)

【问题讨论】:

  • 您在chiphacker.com上的运气可能会更好。

标签: algorithm serial-port feedback-loop


【解决方案1】:

在初始运行时通过尝试 2.5 和 7.5 之间的所有电压来校准系统,例如0.1V增量,记录传感器输出。

给定例如3000 作为所需的亮度级别,选择提供最接近亮度的电压,然后根据传感器输出以小增量向上/向下调整,直到达到所需的亮度。不时(根据您的校准值变得不那么准确)重新校准。

【讨论】:

  • 这是我们过去的做法。我们的问题是,以如此小的增量检查范围需要花费太多时间。我发布的解决方案将根据与所需亮度值的接近程度来调整电压增量大小。
  • 啊 - 没想到这会很慢,但我想在等待灯泡亮度稳定时有一个“预热”或“冷却”期,我没有考虑过会玩职务。上面的解决方案很好,Mozy - 很好的维基百科!
【解决方案2】:

在浏览了更多维基百科后,我发现了这个:

Control loop feedback mechanism:

previous_error = setpoint - actual_position
integral = 0
start:
  error = setpoint - actual_position
  integral = integral + (error*dt)
  derivative = (error - previous_error)/dt
  output = (Kp*error) + (Ki*integral) + (Kd*derivative)
  previous_error = error
  wait(dt)
goto start

[编辑]

通过移除“积分”组件并调整权重(Ki 和 Kd),循环可以完美运行。

【讨论】:

    【解决方案3】:

    我对物理学一窍不通,但如果你可以假设电压和亮度之间的关系有点接近线性,你可以使用标准的二分搜索。

    除此之外,这让我想起了inverted pendulum,这是fuzzy logic使用的标准示例之一。

    【讨论】:

      猜你喜欢
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多