我有一个系统,我使用RS232来控制一个灯,它以浮点表示电压给出一个输入(在2.5 - 7.5范围内)。然后控制器提供0到6000范围内的输出,这是传感器拾取的亮度。
我想要的是能够平衡系统以便我可以指定亮度值,并且系统应该平衡实现此目的的电压值。
是否有一些标准算法或技术可以找到电压输入应该是什么以获得特定输出?我正在考虑一种迭代尝试值的算法,并且从每次尝试中它确定一些新的值,该值应该更好以便实现确定的输出值。 (在我的情况下是3000)。
所需的电压值往往在不同系统之间以及在灯的使用寿命期间变化,因此这应该优选地完全自动完成。
我只是在寻找技术或算法的名称,但伪代码也能正常工作。 :)
答案 0 :(得分:1)
通过尝试2.5到7.5之间的所有电压,在初始运行时校准系统。增量为0.1V,并记录传感器输出。
例如3000作为所需的亮度等级,选择提供最接近亮度的电压,然后根据传感器输出以小增量调节上/下,直到达到所需的亮度。有时(基于校准值变得不准确)重新校准。
答案 1 :(得分:1)
在浏览了一些维基百科后,我发现了这个:
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),循环可以正常工作。
答案 2 :(得分:1)
我根本不是物理学,但是如果你可以假设电压和亮度之间的关系有点接近线性,你可以使用标准的二进制搜索。
除此之外,这让我想起了inverted pendulum,这是使用fuzzy logic的标准示例之一。