2011-06-15 83 views
1

我有一個系統,我使用RS232來控制一個採用浮點代表電壓(範圍爲2.5 - 7.5)的輸入的燈。然後控制器給出的輸出範圍爲0到6000,這是傳感器拾取的亮度。用於平衡控制器輸入和輸出的技術

我想要的是能夠平衡系統,以便我可以指定亮度值,並且系統應該在達到此目的的電壓值上取得平衡。

有沒有一些標準的算法或技術來找到電壓輸入應該是爲了得到一個特定的輸出?我正在考慮一種迭代嘗試值的算法,每次嘗試都會確定一些新值,爲了達到確定的輸出值應該更好。 (在我的情況下是3000)。

所需的電壓值在不同的系統之間以及在燈的使用壽命之間會有所不同,所以最好完全自動完成。

我只是在尋找一種技術或算法的名稱,但僞代碼的工作原理也一樣。 :)

+0

你可能會在chiphacker.com有更好的運氣。 – leppie 2011-06-15 06:27:24

回答

1

通過在2.5到7.5之間嘗試所有電壓來校準初始運行的系統。 0.1V增量,並記錄傳感器輸出。

鑑於例如3000作爲所需的亮度水平,選擇提供最接近亮度的電壓,然後根據傳感器輸出以小增量上調/下調,直到達到所需的亮度。不時(根據您的校準值變得不準確)重新校準。

+0

這是我們用來做的方式。我們的問題是,需要花費太多時間來以如此小的增量檢查範圍。我發佈的解決方案將根據與期望亮度值的接近程度來調整電壓增量大小。 – Mozy 2011-06-23 06:33:52

+0

啊 - 沒有想到這個速度很慢,但我猜想在等待燈泡亮度穩定下來的時候會出現'暖身'或'冷靜'的時期,而我認爲這並不會起作用。上面的好解決方案,Mozy - 好ol'維基百科! – 2011-06-24 04:50:16

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),則循環完美地工作。

1

我根本沒有物理學,但是如果你可以假設電壓和亮度之間的關係有點接近線性,那麼你可以使用標準的二分搜索。

除此之外,這讓我想起inverted pendulum,這是使用fuzzy logic的標準示例之一。