找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4324|回復(fù): 4
收起左側(cè)

ds18b20溫度控制如何寫入上下溫值回差?

[復(fù)制鏈接]
ID:208180 發(fā)表于 2018-5-17 17:06 | 顯示全部樓層 |閱讀模式
20黑幣
ds18b20的程序?qū)懲炅酥笤趯嶒炦^程中發(fā)現(xiàn)了一個問題:
因為溫度在限定值存在一定范圍的上下波動(±0.5~0.8度),從而影響到了蜂鳴器的報警。
比如設(shè)定上限值在20度,下限值在8度,在溫度到達(dá)20度的瞬間警報器持續(xù)響3秒后,繼電器啟動制冷,
但在啟動制冷的過程,溫度會在20度左右波動(如20度--19.8度--20度--20.6度--20度),在這個期間只要觸碰到大于20度這個限值,蜂鳴器就會瞎叫,
下限值8度范圍也是同樣情況。

我試過把蜂鳴器的三秒報警程序刪掉,直接寫成高于20度報警,低于20度取消報警。
但是繼電器從啟動制冷開始,到低于20度為止用的時間太長了,這個時間內(nèi)蜂鳴器一直在叫,很吵。

所以我想寫一組上下回差的判斷,在0.5~0.8度這個上下回差的溫度內(nèi),不啟動控制,從而防止設(shè)備頻繁啟動。
但不知道應(yīng)該怎么下手,所以想在這里問問各位,獲取一些參考。。

ds18b20讀時序,lcd顯示這些跟回差判斷沒什么聯(lián)系,所以在這里我就先不貼出來了。
以下是判斷的程序:

void fengming_start()         //        蜂鳴器響2-3秒程序
{
        fengming=0;
        delay(2000);
        fengming=1;
}


void main()
{
        motor2=0;
        fengming=1;
        led1=led2=led3=1;

        while(1)
        {

                        delayMs(1000);
                        display(getTmpValue());
                        sendChangeCmd();
                       
                        led1 = !led1;       //工作指示燈閃爍
                        if(RunTemp != 85)                  //當(dāng)顯示的數(shù)值不等于85時
                        {
                                if(RunTemp >= 20)        //當(dāng)溫度大于等于20度
                                {
                                        led2 = 0;
                                        led3 =1;
                                        fengming_start();     //蜂鳴器響2-3秒
                                        motor2 = 1;          //繼電器閉合
                                }
                                else
                                        led2 = 1;
                                if(RunTemp <= 8)          //當(dāng)溫度小于等于8度
                                {
                                        led3 = 0;
                                        led2 = 1;
                                        fengming_start();   //蜂鳴器響2-3秒
                                        motor2 = 0;          //繼電器打開
                                }
                                else
                                        led3 = 1;
                        }
                                                                         
        }  


}

回復(fù)

使用道具 舉報

ID:158375 發(fā)表于 2018-5-18 11:16 | 顯示全部樓層
你把上限制溫度設(shè)定為20度,程序中溫度上升到20度時報警并同時加一個報警鎖,然后啟動制冷,這時溫度波動到20度時也不報警,因為鎖。
程序中溫度下降為19度是解報警鎖,其它正常;
我想,這樣就可以了吧。
回復(fù)

使用道具 舉報

ID:330198 發(fā)表于 2018-5-18 14:54 | 顯示全部樓層
你判斷溫度的時候順便加個電機判斷,當(dāng)電機運行的時候溫度再高也不報警
回復(fù)

使用道具 舉報

ID:336165 發(fā)表于 2018-5-24 21:58 | 顯示全部樓層
一:可以在if。。。>20后面加個delay然后再if這樣瞬態(tài)波動可以消除,
二:可以設(shè)置制冷過程中報警器不叫
三:可以設(shè)置兩層上下限,隔層中蜂鳴器不叫,但制冷器工作,如果工作過程中制冷器一時半會降不下溫,碰到上層上限,再報警
回復(fù)

使用道具 舉報

ID:7485 發(fā)表于 2018-5-25 10:42 | 顯示全部樓層
這個不是報警上下限的問題。是你檢測時間間隔太短。一般像這樣的溫控應(yīng)用,檢測間隔應(yīng)在數(shù)秒到1、2分鐘。因為溫度變化是有慣性的,不可能你一加熱立馬溫度就上來,一制冷馬上就下去。

另外,測溫探頭的放置點也有講究,不可以放在制熱源、制冷源邊上,不然其他稍遠(yuǎn)一些地方的溫度還沒變化呢......


回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表