找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4488|回复: 4
收起左侧

ds18b20温度控制如何写入上下温值回差?

[复制链接]
ID:208180 发表于 2018-5-17 17:06 | 显示全部楼层 |阅读模式
20黑币
ds18b20的程序写完了之后在实验过程中发现了一个问题:
因为温度在限定值存在一定范围的上下波动(±0.5~0.8度),从而影响到了蜂鸣器的报警。
比如设定上限值在20度,下限值在8度,在温度到达20度的瞬间警报器持续响3秒后,继电器启动制冷,
但在启动制冷的过程,温度会在20度左右波动(如20度--19.8度--20度--20.6度--20度),在这个期间只要触碰到大于20度这个限值,蜂鸣器就会瞎叫,
下限值8度范围也是同样情况。

我试过把蜂鸣器的三秒报警程序删掉,直接写成高于20度报警,低于20度取消报警。
但是继电器从启动制冷开始,到低于20度为止用的时间太长了,这个时间内蜂鸣器一直在叫,很吵。

所以我想写一组上下回差的判断,在0.5~0.8度这个上下回差的温度内,不启动控制,从而防止设备频繁启动。
但不知道应该怎么下手,所以想在这里问问各位,获取一些参考。。

ds18b20读时序,lcd显示这些跟回差判断没什么联系,所以在这里我就先不贴出来了。
以下是判断的程序:

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)                  //当显示的数值不等于85时
                        {
                                if(RunTemp >= 20)        //当温度大于等于20度
                                {
                                        led2 = 0;
                                        led3 =1;
                                        fengming_start();     //蜂鸣器响2-3秒
                                        motor2 = 1;          //继电器闭合
                                }
                                else
                                        led2 = 1;
                                if(RunTemp <= 8)          //当温度小于等于8度
                                {
                                        led3 = 0;
                                        led2 = 1;
                                        fengming_start();   //蜂鸣器响2-3秒
                                        motor2 = 0;          //继电器打开
                                }
                                else
                                        led3 = 1;
                        }
                                                                         
        }  


}

回复

使用道具 举报

ID:158375 发表于 2018-5-18 11:16 | 显示全部楼层
你把上限制温度设定为20度,程序中温度上升到20度时报警并同时加一个报警锁,然后启动制冷,这时温度波动到20度时也不报警,因为锁。
程序中温度下降为19度是解报警锁,其它正常;
我想,这样就可以了吧。
回复

使用道具 举报

ID:330198 发表于 2018-5-18 14:54 | 显示全部楼层
你判断温度的时候顺便加个电机判断,当电机运行的时候温度再高也不报警
回复

使用道具 举报

ID:336165 发表于 2018-5-24 21:58 | 显示全部楼层
一:可以在if。。。>20后面加个delay然后再if这样瞬态波动可以消除,
二:可以设置制冷过程中报警器不叫
三:可以设置两层上下限,隔层中蜂鸣器不叫,但制冷器工作,如果工作过程中制冷器一时半会降不下温,碰到上层上限,再报警
回复

使用道具 举报

ID:7485 发表于 2018-5-25 10:42 | 显示全部楼层
这个不是报警上下限的问题。是你检测时间间隔太短。一般像这样的温控应用,检测间隔应在数秒到1、2分钟。因为温度变化是有惯性的,不可能你一加热立马温度就上来,一制冷马上就下去。

另外,测温探头的放置点也有讲究,不可以放在制热源、制冷源边上,不然其他稍远一些地方的温度还没变化呢......


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表