建材秒知道
登录
建材号 > 设计 > 正文

家用地暖系统温控器如何设计安装

羞涩的板栗
务实的小馒头
2023-01-25 03:21:35

家用地暖系统温控器如何设计安装?

最佳答案
友好的白羊
迅速的花生
2026-05-13 22:15:56

地暖温控器具备一周编程功能,新产品第一使用时,如果需要采用一周编程控制,那就得设定各个时段的时间参数及温度值,一般一周编程共分为二个周期,分别为“12345”、“67”5+2的编程工作模式,每天分为6个时段,设定好一周编程参数后,温控器便根据你所设定的参数来进行控制,如果你不需要采用编程模式控制,那只需要把温控器编程工作模式设置为手动模式就可以了(操作方法:按模式键来更换工作模式)。

设定好温度后,温控器便根据设定温度来进行控制采暖设备工作,面板上显示了那个加热状态图标时,说明此时传感器测量的温度还没达到设定温度,同时也说明采暖设备已经处于加热状态下,如果没有显示此图标那说明此时传感器测量温度已经达到设定温度,同时也说明采暖设备已经停止加热。

机械式地暖温控器使用方法分析机械式温控器相对于液晶温控器来讲,要简单的多,首先根据说明书接线要求正确接线,先给温控器接上电源,再接上负载设备(电热膜,电缆),由于机械式温控器采用的测温装置是双金属磨合片测温,所以不能接外置传感器。

接好线之后,把温控器安装于墙面上的86盒上,安装完毕后,便可开机通电进行测试使用了,把温控器右侧的开关拨到开启位置,再设置好设定温度(旋钮温控器上面的设温旋钮,把你要设定的温度刻度对准与温控器中间的那个点,这样温控器设定就完成了),温控器也开始根据你所设定的温度进行控制(当温控器上面的指示灯亮时,说明此时采暖设置已经处于工作状态,当指示灯熄灭时,说明此时温控器处于停止工作状态)。

最新回答
雪白的凉面
懵懂的果汁
2026-05-13 22:15:56

基于51单片机的温度测量系统

摘 要: 单片机在检测和控制系统中得到广泛的应用, 温度则是系统常需要测量、控制和保持的一个量。 本文从硬件和软件两方面介绍了AT89C2051单片机温度控制系统的设计,对硬件原理图和程序框图作了简洁的描述。

关键词: 单片机AT89C2051温度传感器DS18B20温度测量

引言

单片机在电子产品中的应用已经越来越广泛,并且在很多电子产品中也将其用到温度检测和温度控制。为此在本文中作者设计了基于atmel公司的AT89C2051的温度测量系统。这是一种低成本的利用单片机多余I/O口实现的温度检测电路, 该电路非常简单, 易于实现, 并且适用于几乎所有类型的单片机。

一.系统硬件设计

系统的硬件结构如图1所示。

1.1数据采集

数据采集电路如图2所示, 由温度传感器DS18B20采集被控对象的实时温度, 提供给AT89C2051的P3.2口作为数据输入。在本次设计中我们所控的对象为所处室温。当然作为改进我们可以把传感器与电路板分离,由数据线相连进行通讯,便于测量多种对象。

DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,支持3V~5.5V的电压范围,使系统设计更灵活、方便;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20使电压、特性有更多的选择,让我们可以构建适合自己的经济的测温系统。如图2所示DS18B20的2脚DQ为数字信号输入/输出端;1脚GND为电源地;3脚VDD为外接供电电源输入端。

AT89C2051(以下简称2051)是一枚8051兼容的单片机微控器,与Intel的MCS-51完全兼容,内藏2K的可程序化Flash存储体,内部有128B字节的数据存储器空间,可直接推动LED,与8051完全相同,有15个可程序化的I/O点,分别是P1端口与P3端口(少了P3.6)。

1.2接口电路

图2 单片机2051与温度传感器DS18B20的连接图

接口电路由ATMEL公司的2051单片机、ULN2003达林顿芯片、4511BCD译码器、串行EEPROM24C16(保存系统参数)、MAX232、数码管及外围电路构成, 单片机以并行通信方式从P1.0~P1.7口输出控制信号,通过4511BCD译码器译码,用2个共阴极LED静态显示温度的十位、个位。

串行EEPROM24C16是标准I2C规格且只要两根引脚就能读写。由于单片机2051的P1是一个双向的I/O端口,所以在我们在设计中将P1端口当成输出端口用。由图2可知,P1.7作为串性的时钟输出信号与24C16的第6脚相接,P1.6则作为串行数据输出接到24C16的第5脚。P1. 4和P1.5则作为两个数码管的位选信号控制,在P1.4=1时,选中第一个数码管(个位);P1.5=1时,选中第二个数码管(十位)。P1.0~P1.3的输出信号接到译码器4511上作为数码管的显示。此外,由于单片机2051的P3端口有特殊的功能,P3.0(RXD)串行输入端口,P3.1(TXD)串行输出端口,P3.2(INTO)外部中断0,P3.3(INT1)外部中断1P3.4,(T0) 外部定时/计数输入点,P3.5(T1)外部定时/计数输入点。由图2可知,P3.0和P3.1作为与MAX232串行通信的接口;P3.2和P3.3作为中断信号接口;P3.4和P3.5作为外部定时/记数输入点。P3.7作为一个脉冲输出,控制发光二极管的亮灭。

由于在电路中采用的共阴极的LED数码管,所以在设计电路时加了一个达林顿电路ULN2003对信号进行放大,产生足够大的电流驱动数码管显示。由于4511只能进行BCD十进制译码,只能译到0至9,所以在这里我们利用4511译码输出我们所需要的温度。

1.3报警电路简介

图3 温度在七段数码管上显示连接图

本文中所设计的报警电路较为简单,由一个自我震荡型的蜂鸣器(只要在蜂鸣器两端加上超过3V的电压,蜂鸣器就会叫个不停)和一个发光二极管组成(如图3所示)。在这次设计中蜂鸣器是通过ULN2003电流放大IC来控制。在我们所要求的温度达到一定的上界或者下界时(在文中我们设置的上界温度是45℃,下界温度是5℃),报警电路开始工作,主要程序设计如下:

main()//主函数

{unsigned char i=0<br/>unsigned int m,n<br/>while(1) <br/>{i=ReadTemperature()//读温度}

if(i>0 &&i<=10) //如果温度在0到10度之间直接给七段数码管赋值

{P1=designP1[i]}

else//如果温度大于10度

{m=i%10//先给第一个七段数码管赋值 <br/>D1=1<br/>D2=0<br/>P1=designP1[m]<br/>n=i/10//再给第二个七段数码管赋值 <br/>D1=0<br/>D2=1<br/>P1=designP1[n]<br/>if(n>=4&&m>=5)%%(m<=5)//判断温度的取值范围,如果大于45或小于5度,则蜂鸣器叫,发光二极管闪烁 <br/>{ int a,b<br/>Q1=1//蜂鸣器叫 <br/>for(a=0a<1000a++)//发光二极管闪烁 <br/>for(b=0b<1000b++) <br/>Q2=1<br/>for(a=0a<1000a++) <br/>for(b=0b<1000b++) <br/>Q2=0}}}

搞怪的铃铛
凶狠的大叔
2026-05-13 22:15:56
这个程序你可以用来试试。我以前做的。

//温控系统控制程序

//温度传感器:DS18B20

//显示方式:LED

#include <reg51.h>

#define uchar unsigned char

sbit keyup=P1^0

sbit keydn=P1^1

sbit keymd=P1^2

sbit out=P3^7 //接控制继电器

sbit DQ = P3^4 //接温度传感器18B20

uchar t[2],number=0,*pt //温度值

uchar  TempBuffer1[4]={0,0,0,0}

uchar Tmax=18,Tmin=8

uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xfe,0xf7}

uchar dismod=0,xiaodou1=0,xiaodou2=0,currtemp

bit flag

void t0isr() interrupt 1

{

TH0=(65536-5000)/256

TL0=(65536-5000)%256

switch(number)

{

case 0:

    P2=0x08

      P0=distab[TempBuffer1[0]]

      break

case 1:

    P2=0x04

      P0=distab[TempBuffer1[1]]

      break

case 2:

    P2=0x02

      P0=distab[TempBuffer1[2]]&0x7f

      break

case 3:

    P2=0x01

      P0=distab[TempBuffer1[3]]

      break

default:

    break

}

number++

if(number>3)number=0

}

void delay_18B20(unsigned int i)

{

while(i--)

}

void Init_DS18B20(void) 

{

 bit x=0

do{

 DQ=1

 delay_18B20(8)

 DQ = 0          //单片机将DQ拉低

 delay_18B20(90) //精确延时 大于 480us

 DQ = 1          //拉高总线

 delay_18B20(14)

 x=DQ            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败,继续初始化

}while(x)

 delay_18B20(20)

}

  

unsigned char ReadOneChar(void)

{

unsigned char i=0

unsigned char dat = 0

for (i=8i>0i--)

 {

  DQ = 0 // 给脉冲信号

  dat>>=1

  DQ = 1 // 给脉冲信号

  if(DQ)

  dat|=0x80

  delay_18B20(4)

 }

  return(dat)

}

  

void WriteOneChar(unsigned char dat)

{

  unsigned char i=0

  for (i=8 i>0 i--)

  {

   DQ = 0

  DQ = dat&0x01

    delay_18B20(5)

  DQ = 1

    dat>>=1

}

}

unsigned char *ReadTemperature(unsigned char rs)

{

unsigned char tt[2]

  delay_18B20(80)  

Init_DS18B20()

WriteOneChar(0xCC)   //跳过读序号列号的操作

WriteOneChar(0x44)  //启动温度转换

  delay_18B20(80)  

Init_DS18B20()

WriteOneChar(0xCC)  //跳过读序号列号的操作

WriteOneChar(0xBE)  //读取温度寄存器等(共可读9个寄存器)前两个就是温度

tt[0]=ReadOneChar()  //读取温度值低位

tt[1]=ReadOneChar()  //读取温度值高位

return(tt)

}

void covert1(void) //将温度转换为LED显示的数据

{

   uchar x=0x00,y=0x00

   t[0]=*pt

   pt++

   t[1]=*pt

   if(t[1]&0x080)      //判断正负温度

   {

    TempBuffer1[0]=0x0c      //c代表负

t[1]=~t[1]  

t[0]=~t[0]   

x=t[0]+1

t[0]=x

if(x==0x00)t[1]++

   }

  else TempBuffer1[0]=0x0a //A代表正

  t[1]<<=4 //将高字节左移4位

  t[1]=t[1]&0xf0

  x=t[0] //将t[0]暂存到X,因为取小数部分还要用到它

  x>>=4 //右移4位

  x=x&0x0f //和前面两句就是取出t[0]的高四位

  y=t[1]|x //将高低字节的有效值的整数部分拼成一个字节

  TempBuffer1[1]=(y%100)/10

  TempBuffer1[2]=(y%100)%10

  t[0]=t[0]&0x0f //小数部分

  TempBuffer1[3]=t[0]*10/16

 //以下程序段消去随机误检查造成的误判,只有连续12次检测到温度超出限制才切换加热装置

if(currtemp>Tmin)xiaodou1=0

if(y<Tmin)

{

xiaodou1++

currtemp=y

xiaodou2=0

}

if(xiaodou1>12)

{

out=0

flag=1

xiaodou1=0

}

if(currtemp<Tmax)xiaodou2=0

if(y>Tmax)

{

xiaodou2++

currtemp=y

xiaodou1=0

}

if(xiaodou2>12)

{

out=1

flag=0

xiaodou2=0

}

out=flag

}

void convert(char tmp)

{

uchar a

if(tmp<0)

{

TempBuffer1[0]=0x0c

a=~tmp+1

}

else 

{

TempBuffer1[0]=0x0a

a=tmp

}

TempBuffer1[1]=(a%100)/10

TempBuffer1[2]=(a%100)%10

}

void keyscan( )

{

uchar keyin

keyin=P1&0x07

if(keyin==0x07)return

else if(keymd==0)

{

dismod++

dismod%=3

while(keymd==0)

switch(dismod)

{

case 1:

    convert(Tmax)

      TempBuffer1[3]=0x11

      break

case 2:

    convert(Tmin)

      TempBuffer1[3]=0x12

      break

default:

    break

}

}

else if((keyup==0)&&(dismod==1))

{

Tmax++

convert(Tmax)

while(keyup==0)

}

else if((keydn==0)&&(dismod==1))

{

Tmax--

convert(Tmax)

while(keydn==0)

}

else if((keyup==0)&&(dismod==2))

{

Tmin++

convert(Tmin)

while(keyup==0)

}

else if((keydn==0)&&(dismod==2))

{

Tmin--

convert(Tmin)

while(keydn==0)

}

xiaodou1=0

xiaodou2=0

}

main()

{

TMOD=0x01

TH0=(65536-5000)/256

TL0=(65536-5000)%256

TR0=1

ET0=1

EA=1

out=1

flag=0

ReadTemperature(0x3f)

  delay_18B20(50000) //延时等待18B20数据稳定  

 while(1)

{

pt=ReadTemperature(0x7f) //读取温度,温度值存放在一个两个字节的数组中

if(dismod==0)covert1()

keyscan()

delay_18B20(30000)

}

}

懦弱的往事
激情的钢笔
2026-05-13 22:15:56
第一章 前言

第二章 方案论证

2.1 方案选择

2.1.1设计要求

2.1.2 方案论证

2.2系统的组成

2.3系统的主要功能

第三章 控制系统硬件设计

3.1单片机部分

3.1.1热电偶简介

3.1.2晶振电路

3.1.3复位电路

3.2数据采集和转换电路

3.2.1 传感器的选择

3.2.2 信号放大电路

3.3报警电路

3.4液晶显示电路

3.5控制部分

3.6键盘部分

第四章 控制算法设计

4.1 PID控制简介

4.2 PID控制规律的离散化

4.3 按二阶工程法设计数字控制器

第五章 系统软件设计

5.1主程序流程图

5.2PID子程序流程图

第六章 总结

参考文献