採用PID控制算法的液晶屏加熱電路、程序

幾年前,我設計了一款帶有LCD顯示屏的產品。

通常LCD 液晶屏的工作溫度,常溫型的為0-50 °C,寬溫型的為-20-70 °C,超寬溫型的為-30-80 °C。

大家知道,俄羅斯和北歐國家一到冬天就被冰雪覆蓋,地凍天寒,即使在白天氣溫也可能低至-50°C。

因此,該款產品的工作溫度要求為-40°C-70°C,即要求液晶屏在-40°C仍然能正常工作。

我們的解決方案是通過NTC檢測溫度,採用PWM驅動功率電阻產生熱量加熱。

所幸產品體積比較小,而且電路板以及液晶屏被密閉在外殼內,所以只需消耗很小的功率就能實現較好加熱效果。

其實在這款產品之前,公司也有類似的由他人設計的產品,當初的方案是根據閾值控制功率電阻的導通或斷開,即:

檢測到溫度低於-15°C時,MCU的IO口輸出高電平讓NMOS導通給功率電阻供電使其發出熱量;

當檢測到溫度高於-5°C時,則輸出低電平讓NMOS斷開使功率電阻停止加熱。

這一簡陋的模糊控制的方法,不但浪費電,而且不能在低溫情況下給電子元器件和液晶屏提供-10°C的恆溫工作環境。

工作環境不好,影響了這些器器件的心情。搞不好它們就要罷工或者提前退休。

作為有幾十年工作經驗的工程師,我深知“細節決定成敗”的真諦,所以對這個加熱的方案做了一些創新:

  1. 電路還是那個電路,器件還是那個器件;


採用PID控制算法的液晶屏加熱電路、程序

溫度檢測以及電阻加熱電路原理圖

溫度檢測比較簡單,+3.3V的基準電壓經過NTC以及R2分壓之後送入單片機的ADC口。

MCU的PWM口通過R4限流,R5的洩流控制NMOS Q1驅動功率電阻10ohm的R3發熱。

  1. 控制NMOS的端口由普通的IO口改到PWM

採用頻率為1KHz,佔空比0%-100%可調的PWM信號驅動NMOS使功率電阻R3產生可調的熱量;

  1. 編寫MCU程序實現增量式PID控制,並根據PID算法計算的數值設定PWM的佔空比

將設定溫度固定為-10°C

從ADC口讀取出當前溫度對應的ADC值

計算設定溫度與當前溫度的差值

從其內部存儲器讀出事先整定好的比例,積分系數,算出控制量。

採用PID控制算法的液晶屏加熱電路、程序

增量式PID控制算法

  1. 對比例係數、積分系數進行整定

PID參數的整定非常考慮能力和經驗,我的經驗是,先整定比例係數,先把控制閉環斷開,測試整個系統中輸入為1個單位時,所控制的輸出能產生多少個單位的變化。選定比例係數,使得1個單個的輸入能使輸出產生0.1左右的單位的變化。

接下選定積分系數,積分系數大概為比例係數的1/20,可採用二分法,根據測試的結果不斷調整。使得控制效果最佳,既不產生振盪,又不致使系統的反應太慢。

增量式PID控制算法如下:

<code>

void

pid_init(void)

{

INT32

m_lCF, m_lCI, m_lCurU;

=

(INT16)pidcon.m_uiSetAD - (INT16)pidcon.m_uiCurAD;

m_lCF

=

(INT32)pidcon.m_uiKP * pidcon.m_iDU;

m_lCI

=

(INT32)pidcon.m_uiKI * pidcon.m_iDU;

m_lCurU

=

m_lCF + m_lCI;

=

m_lCurU;

}

void

pid_cal(void)

{

INT16

m_iDU, m_iDDU;

INT32

m_lCF, m_lCI, m_lCurU;

m_iDU

=

(INT16)pidcon.m_uiSetAD - (INT16)pidcon.m_uiCurAD;

m_iDDU

=

m_iDU - pidcon.m_iDU;

=

m_iDU;

m_lCF

=

(INT32)pidcon.m_uiKP * m_iDDU;

m_lCI

=

(INT32)pidcon.m_uiKI * m_iDU;

m_lCurU

=

m_lCF + m_lCI;

+= m_lCurU;

< HT_AD_CURU_MIN)

{

=

HT_AD_CURU_MIN;

}

> HT_AD_CURU_MAX)

{

=

HT_AD_CURU_MAX;

}

}

void

pid_conduty(void)

{

U32

lduty;

lduty

=

0;

=

0;

> 0)

{

lduty

=

(U32)pidcon.m_ulCurU / 512;

}

>= HT_PWM_PERIOD)

{

=

HT_PWM_PERIOD;

}

else

{

=

(U16)lduty;

}

updateduty(pidcon.m_uiDuty);

}

/<code>

最終效果非常完美

把產品放置到高低溫試驗箱,把溫度設置為-30°C,測得產品外殼內部的溫度曲線如下:


採用PID控制算法的液晶屏加熱電路、程序

溫度變化曲線,實現了完美的跟蹤


分享到:


相關文章: