⑴ 尋找《基於單片機的恆溫水龍頭設計》的電路圖
主要是解決好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℃