问题描述
|
我有一个系统,在该系统中,我使用RS232来控制灯,该灯采用以浮点形式表示的代表电压的输入(范围为2.5-7.5)。然后,控件会提供0到6000范围内的输出,这是传感器拾取的亮度。
我想要的是能够平衡系统,以便我可以指定亮度值,并且系统应该在实现此目的的电压值上进行平衡。
是否有一些标准的算法或技术来找到输入电压以获得特定输出的电压?我正在考虑一种算法,该算法迭代地尝试值,并从每次尝试中确定一些新值,为了获得确定的输出值,该值应该更好。 (在我的情况下是3000)。
所需的电压值往往会在不同系统之间以及灯的整个使用寿命内发生变化,因此最好应完全自动进行。
我只是在寻找一种技术或算法的名称,但是伪代码也可以正常工作。 :)
解决方法
尝试在2.5到7.5之间的所有电压(例如,以0.1V为增量,并记录传感器输出。
给定例如3000作为所需的亮度级别,选择电压以提供最接近的亮度,然后根据传感器输出以小增量向上/向下调整,直到获得所需的亮度。有时会重新校准(基于您的校准值变得越来越不准确)。
, 经过更多的维基百科浏览后,我发现了这一点:
控制回路反馈机制:
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),循环可以完美地工作。
, 我完全不涉足物理学,但是如果您可以假设电压和亮度之间的关系有点接近线性,则可以使用标准的二进制搜索。
除此之外,这让我想起了倒立摆,这是使用模糊逻辑的标准示例之一。