⑴ 寻找《基于单片机的恒温水龙头设计》的电路图
主要是解决好DS18B20的使用!
Q:34376050
/****************************************
//DS18B20温度传感器//
//作者:
//日期:
//晶振:12MHZ
****************************************/
/*****************************************************/
//包含头文件
#include<reg51.h>
#include<stdio.h>
/*****************************************************/
typedef unsigned char uint8; //定义八位无符号变量
/*****************************************************/
//定义引脚(根据硬件改变)
sbit KEY1 = P1^0;
sbit KEY2 = P1^1;
sbit KEY3 = P1^2;
sbit BCD4 = P2^7;
sbit BCD3 = P2^6;
sbit BCD2 = P2^5;
sbit BCD1 = P2^4;
sbit DQ = P1^3; //温度传感器数据引脚通信定义
sbit BEEP = P1^4; //蜂鸣器信号引脚
sbit device = P1^5;
/**********************************************************************************************/
const uint8 Code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //定义数字显示数组为常量
//0, 1, 2 3 4 5 6 7 8 9
#define H 0x89 //显示'H',表示最高温度
#define L 0xc7 //显示'L',表示最低温度
#define C 0xc6 //显示'C', 表示温度符号
/************************************************************/
//全局变量
uint8 Htemperature = 0;
uint8 Ltemperature = 0;
uint8 setupflag = 0;
/************************************************************/
//定义ds18b20,数码管延时子函数
void mDelay(uint8 Delay)
{
while(Delay--);
}
//定义按键延时子程序
void Delay(uint8 Delay)
{ uint8 i;
for(;Delay>0;Delay--)
{
for(i=0;i<200;i++);
}
}
/************************************************************/
//温度传感器DS18B20的初始化函数
uint8 Init_DS18B20(void)
{
uint8 errTime;
DQ = 1; //DQ复位信号
DQ = 0; //初始化发送一复位脉冲
mDelay(500); //脉冲时间大于480us
DQ = 1;
mDelay(80);
while(DQ)
{
mDelay(6); //5.15us
errTime++;
if(errTime>20)
return(0x00); //如果等带大于约 5.15us*20就返回0x00,报告复位失败(实际上只要等待15-60us)
}
errTime=0;
while(!(DQ))
{
mDelay(6); //5.15us
errTime++;
if(errTime>50)
return(0x00); //如果等带大于约 5.15us*50就返回0x00,报告复位失败(实际上只要等待60-240us)
}
return(0xff);
}
/************************************************************/
//读一个字节
uint8 ReadOneChar(void)
{
uint8 i = 0;
uint8 dat = 0;
for(i=8;i>0;i--)
{
DQ = 0; //低电平脉冲信号
dat>>=1; //dat右移一位
DQ = 1; //高低平脉冲信号
if(DQ)
{
dat |= 0x80;
}
mDelay(4);//延时
}
return(dat); //返回dat值
}
/************************************************************/
//写一个字节
void WriteOneChar(uint8 dat)
{
uint8 i = 0;
for(i=8;i>0;i--)
{
DQ = 0; //低电平脉冲信号
DQ = dat&0x01;
mDelay(5);//延时
DQ = 1; //高电平脉冲信号
dat >>= 1;//dat右移一位
}
mDelay(4);
}
/************************************************************/
//读取温度
uint8 ReadTemperature(void)
{
uint8 ltemp = 0; //定义温度高八位
uint8 htemp = 0; //定义温度低八位
uint8 temp = 0;
Init_DS18B20(); //温度传感器DS18B20初始化
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
ltemp = ReadOneChar(); //读取温度值低位
htemp = ReadOneChar(); //读取温度值高位
ltemp = ltemp>>4;
temp = htemp<<4;
temp = temp|ltemp;
return(temp);
}
/******************************************************************/
//温度显示函数
void DisplayTemperture(uint8 temp)
{
P0 = Code[temp%10];
BCD2 = 0;
mDelay(100);
BCD2 = 1;
P0=Code[temp/10];
BCD3 = 0;
mDelay(100);
BCD3 = 1;
P0 = C;
BCD1 = 0;
mDelay(100);
BCD1 = 1;
}
/******************************************************************/
//温度设置函数
void SetupTemperature(void)
{
while(1)
{
if(setupflag == 0)
{
if(KEY1 == 0 && Htemperature<99)
{
Delay(400);
if(KEY1 == 0)
{
Htemperature++;
}
}
if(KEY2 == 0 && Htemperature>0)
{
Delay(400);
if(KEY2 == 0)
{
Htemperature--;
}
}
if(KEY3 == 0)
{
Delay(400);
if(KEY3 == 0)
{
setupflag++;
}
}
P0 = H;
BCD4 = 0;
mDelay(100);
BCD4 = 1;
P0=Code[Htemperature/10];
BCD3 = 0;
mDelay(100);
BCD3 = 1;
P0 = Code[Htemperature%10];
BCD2 = 0;
mDelay(100);
BCD2 = 1;
P0 = C;
BCD1 = 0;
mDelay(100);
BCD1 = 1;
}
else if(setupflag == 1)
{
if(KEY1 == 0 && Ltemperature<99)
{
Delay(400);
if(KEY1 == 0)
{
Ltemperature++;
}
}
if(KEY2 == 0 && Ltemperature>0)
{
Delay(400);
if(KEY2 == 0)
{
Ltemperature--;
}
}
if(KEY3 == 0)
{
Delay(400);
if(KEY3 == 0)
{
setupflag++;
}
}
P0 = L;
BCD4 = 0;
mDelay(100);
BCD4 = 1;
P0=Code[Ltemperature/10];
BCD3 = 0;
mDelay(100);
BCD3 = 1;
P0 = Code[Ltemperature%10];
BCD2 = 0;
mDelay(100);
BCD2 = 1;
P0 = C;
BCD1 = 0;
mDelay(100);
BCD1 = 1;
}
else break;
}
}
/*******************************************************************/
//主函数
void main(void)
{
uint8 CurrentTemp;
//BEEP = 1; //关闭蜂鸣器
//主循环
while(1)
{
SetupTemperature(); //设置温度
CurrentTemp = ReadTemperature(); //读取温度
DisplayTemperture(CurrentTemp); //显示温度
if(CurrentTemp > Htemperature) //当温度高于预设最高温度,报警
{
BEEP = 0;
Delay(10);
BEEP = 1;
device = 0; //关闭设备
}
if(CurrentTemp < Ltemperature) //当温度低于预设最低温度,报警
{
BEEP = 0;
Delay(10);
BEEP = 1;
device = 1; //打开设备
}
//重新设定温度范围
if(KEY3 == 0)
{
Delay(400);
if(KEY3 == 0)
{
setupflag = 0; //设置标志位清零
}
}
}
}
⑵ 用接触器,电磁阀继电器仪表,设计一个恒温电路图,50度加热。80度停止加热。 QQ616635029
不能!
⑶ 简单的温度控制电路怎么做
工作原理是通过温度传感器对环境温度自动进行采样、即时监控,当环境温度高于控制设定值时控制电路启动,可以设置控制回差。如温度还在升,当升到设定的超限报警温度点时,启动超限报警功能。
被控制的温度不能得到有效的控制时,为了防止设备的毁坏还可以通过跳闸的功能来停止设备继续运行。主要应用于电力部门使用的各种高低压开关柜、干式变压器、箱式变电站及其他相关的温度使用领域。
控制方法一般分为两种;一种是由被冷却对象的温度变化来进行控制,多采用蒸气压力式温度控制器,另一种由被冷却对象的温差变化来进行控制,多采用电子式温度控制器。
其采用的模糊控制技术如PID控制,P(Proportional)比例+I(Integral)积分+D(Differential)微分控制。
(3)恒温电路设计扩展阅读:
温控器的分类
一、突跳式温控器
1、双金属片突跳式温控器是一种将定温后的双金属片作为热敏感反应组件,产品主件温度升高时所产生的热量传递到双金属圆片上,达到动作温度设定时迅速动作,通过机构作用是触点断开或闭合。
2、当温度下降到复位温度设定时,双金属片迅速回复原状,使触点闭合或断开,达到接通或断开电路的目的,从而控制电路。
二、液涨式温控器
1、被控制对象的温度发生变化时使温控器感温部内的物质(一般是液体)产生相应的热胀冷缩的物理现象(体积变化),与感温部连通一起的膜盒产生膨胀或收缩。以杠杆原理,带动开关通断动作,达到恒温目的。
2、液胀式温控器具有控温准确,稳定可靠,开停温差小,控制温控调节范围大,过载电流大等性能特点。液涨式温控器主要用于家电行业,电热设备,制冷行业等温度控制场合用。
三、压力式温控器
1、通过密闭的内充感温工质的温包和毛细管,把被控温度的变化转变为空间压力或容积的变化,达到温度设定值时,通过弹性元件和快速瞬动机构,自动关闭触头,以达到自动控制温度的目的。
2、由感温部、温度设定主体部、执行开闭的微动开关或自动风门等三部分组成。压力式温控器适用于制冷器具(如电冰箱冰柜等)和制热器等场合。
⑷ 设计恒温箱温度控制系统的要求
为了满足不同温度范围的测试要求,自行设计了恒温箱的控制器。提出一种采用廉价单片机进行温度测量、显示、报警与控制的电路设计方案。采用热敏电阻感知温度变化,由电阻电压的变化反映温度变化,将电压放大后通过AD转换芯片对模拟电压进行采集,并将模拟量转换为数字量;然后将计算得到的温度实时通过数码管进行动态显示。设定温度的上下限值,在温度超出限值时发出相应的报警信号,并控制相关设备将温度设定在限值之内。
⑸ 如何设计一个直流恒温加热器
给你用电压比较器设计一个下面的电路,可以通过调节RP的电阻值来达到你的要求。RT是热敏电阻,正常室温下阻值是100K左右负温度系数的热敏电阻。
⑹ 恒温控制系统设计
您好,看到您的问题将要被新提的问题从问题列表中挤出,问题无人回答过期后会被扣分并且悬赏分也将被没收!所以我给你提几条建议: 一,您可以选择在正确的分类下去提问或者到与您问题相关专业网站论坛里去看看,这样知道你问题答案的人才会多一些,回答的人也会多些。 二,您可以多认识一些知识丰富的网友,和曾经为你解答过问题的网友经常保持联系,遇到问题时可以直接向这些好友询问,他们会更加真诚热心为你寻找答案的。 三,该自己做的事还是必须由自己来做的,有的事还是须由自己的聪明才智来解决的,别人不可能代劳!只有自己做了才是真正属于自己的,别人只能给你提供指导和建议,最终靠自己。 您可以不采纳我的答案,但请你一定采纳我的建议哦! 虽然我的答案很可能不能解决你的问题,但一定可以使你更好地使用问问哦~~~!
⑺ 利用LM339设计一个温度控制系统简单电路
用四比较器的恒温控制器 使用一个负温度系数(NTC)的热敏电阻,用如图1a的电路可以用最少的元件、成本和复杂性将温度控制到1℃或更好的精度。该电路含有保护以防止温度传感器短路或开路,且所有的元器件都是常用件。 该控制器是PWM类型的,但它有指数的传递特性,而不是线性的。这个设计是基于一个LM339(四比较器),并包含了温度补偿。由于比较器的温漂会产生的Vos的变化,并导致了振荡器输出改变。然而,在产生工作周期的比较器上,也发生了同样的变化,两者相抵消从而消除了控制器的温漂。 该控制器的核心是由IC1a、IC1b和相关元件组成的振荡器。振荡器输出的电压峰值和最小电压值是决定控制器精度的主要因素。关于这个振荡器有以下一些公式: PERIOD=[R5×R6/(R5+R6)+R4]×C1×Ln[(Vas-Vmin)/(Vas-Vmax)] seconds DutyCycle=Ln[(Vas-Vtemp)/(Vas-Vmax)] / Ln[(Vas-Vmax)/(Vas-Vmin)] Vmax=Vcc×R3/(R1+R3) Vmin=Vcc×R2×R3/[R2×R3+R1×(R2+R3)] Vas=Vcc×R6/(R5+R6) Vtemp=Vcc×(R7+R8)/(Rtherm+R7+R8) 振荡器的输出直接接到产生工作周期的比较器IC1c的输入端。R8决定温度的设置点。R8到Rtherm的分压为产生工作周期的比较器提供比较电压,比较的输出驱动一个光隔离的双向可控硅驱动器。 图1所示出的元件参数值的温度系列是25~115℃