用单片机实现的简单测温电路.docx
《用单片机实现的简单测温电路.docx》由会员分享,可在线阅读,更多相关《用单片机实现的简单测温电路.docx(20页珍藏版)》请在冰豆网上搜索。
用单片机实现的简单测温电路
用单片机实现的测温电路设计
利用单片机实现极简单的测温电路单片机在电子产品中的应用已经越来越广泛,在很多的电子产品中也用到了温度检测和温度控制,但那些温度检测与控制电路通常较复杂,成本也高,本文提供了一种低成本的利用单片机多余I/O口实现的温度检测电路,该电路非常简单,且易于实现,并且适用于几乎所有类型的单片机。
其电路如下图所示:
图中:
P1.0、P1.1和P1.2是单片机的3个I/O脚;RK为100k的精密电阻;RT为100K-精度为1%的热敏电阻;R1为
利用单片机实现极简单的测温电路
单片机在电子产品中的应用已经越来越广泛,在很多的电子产品中也用到了温度检测和温度控制,但那些温度检测与控制电路通常较复杂,成本也高,本文提供了一种低成本的利用单片机多余I/O口实现的温度检测电路,该电路非常简单,且易于实现,并且适用于几乎所有类型的单片机。
其电路如下图所示:
图中:
P1.0、P1.1和P1.2是单片机的3个I/O脚;
RK为100k的精密电阻;
RT为100K-精度为1%的热敏电阻;
R1为100Ω的普通电阻;
C1为0.1μ的瓷介电容。
其工作原理为:
1.先将P1.0、P1.1、P1.2都设为低电平输出,使C1放电至放完。
2.将P1.1、P1.2设置为输入状态,P1.0设为高电平输出,通过RK电阻对C1充电,单片机内部计时器清零并开始计时,检测P1.2口状态,当P1.2口检测为高电平时,即C1上的电压达到单片机高电平输入的门嵌电压时,单片机计时器记录下从开始充电到P1.2口转变为高电平的时间T1。
3.将P1.0、P1.1、P1.2都设为低电平输出,使C1放电至放完。
4.再将P1.0、P1.2设置为输入状态,P1.1设为高电平输出,通过RT电阻对C1充电,单片机内部计时器清零并开始计时,检测P1.2口状态,当P1.2口检测为高电平时,单片机计时器记录下从开始充电到P1.2口转变为高电平的时间T2。
5.从电容的电压公式:
可以得到:
T1/RK=T2/RT,即RT=T2×RK/T1
通过单片机计算得到热敏电阻RT的阻值。
并通过查表法可以得到温度值。
从上面所述可以看出,该测温电路的误差来源于这几个方面:
单片机的定时器精度,RK电阻的精度,热敏电阻RT的精度,而与单片机的输出电压值、门嵌电压值、电容精度无关。
因此,适当选取热敏电阻和精密电阻的精度,单片机的工作频率够高,就可以得到较好的测温精度。
当单片机选用4M工作频率,RK、RT均为1%精度的电阻时,温度误差可以做到小于1℃。
如果P1.2具有外部上升沿中断的功能,程序可以更简单,效果更好。
单片机工作的程序流程图如下:
1、型号说
MF
52
103
H
3435
F
A
NTC热敏电阻
环氧系列
电阻值
阻值允差
B值
B值允差
B值类别
10KΩ
±5%
3435K
±1%
B25/50
2、电气性能
序号
项目
符号
测试条件
最小值
正常值
最大值
单位
3-1.
25℃的电阻值
R25
Ta=25±0.05℃
PT≦0.1mw
9.9
10.0
10.1
kΩ
3-2.
50℃的电阻值
R50
Ta=50±0.05℃
PT≦0.1mw
/
4.0650
/
kΩ
3-3.
B值
B25/50
3436
3435
3504
K
3-4.
耗散系数
σ
Ta=25±0.5℃
2.0
/
/
mw/℃
3-5.
时间常数
τ
Ta=25±0.5℃
/
/
15
sec
3-6.
绝缘电阻
/
500VDC
50
/
/
MΩ
3-7.
使用温度范围
/
/
-55
/
+125
℃
3、机械试验
项目
技术要求
测试条件及方法
4-1.可焊性
引出端焊料自由流动和浸润良好,上锡面积95%以上
将引出端沾助焊剂后,浸入温度为230±5℃锡槽中,锡面距NTC本体下端2-2.5mm处,持续2±0.5S
(参照IEC60068-2-20试验Ta/GB2423.28Ta)
4-2.耐焊接热
无可见性损伤
ΔR/R25≤±2%
将引出端浸入温度为260±5℃锡槽中,锡面距NTC本体下端5mm处持续5±1S
(参照IEC60068-2-20试验Tb/GB2423.28Tb)
4-3.引出端强度
无脱落
ΔR/R25≤2%
试验Ua:
拉力5N,持续10S;
(参照IEC60068-2-21/GB2423.29U试验)
4、可靠性试验
序号
项目
技术要求
测试条件及方法
5-1.
高温试验
ΔR/R25≤±2%
125±5℃,通电1000±24h,DC0.2mA
(参照IEC60068-2-2/GB2423.2试验)
5-2.
低温试验
ΔR/R25≤±2%
-55±5℃,通电1000±24h,DC0.2mA
(参照IEC60068-2-1/GB2423.1试验)
5-3.
耐潮湿试验
ΔR/R25≤±2%
40±2℃,90%-95%RH环境下放置100±24h
(参照IEC60068-2-3/GB2423.3试验)
5-4.
温度冷热循环试验
ΔR/R25≤±2%
–55℃×30min→80℃×5min→125℃×30min→80℃×5min,反复5次
(参照IEC60068-2-14/GB2423.22试验)
5、使用注意事项
将产品引线裁剪成所需要的长度,注意最小长度≧5mm。
MF5210K3435温度特性表
R25℃=10K
B(25/50)=3435K
T(℃)
R(KΩ)
T(℃)
R(KΩ)
T(℃)
R(KΩ)
T(℃)
R(KΩ)
-40
190.5562
-27
99.5847
-14
53.1766
-1
29.2750
-39
183.4132
-26
94.6608
-13
50.7456
0
28.0170
-38
175.6740
-25
90.0326
-12
48.4294
1
26.8255
-37
167.6467
-24
85.6778
-11
46.2224
2
25.6972
-36
159.5647
-23
81.5747
-10
44.1201
3
24.6290
-35
151.5975
-22
77.7031
-9
42.1180
4
23.6176
-34
143.8624
-21
74.0442
-8
40.2121
5
22.6597
-33
136.4361
-20
70.5811
-7
38.3988
6
21.7522
-32
129.3641
-19
67.2987
-6
36.6746
7
20.8916
-31
122.6678
-18
64.1834
-5
35.0362
8
20.0749
-30
116.3519
-17
61.2233
-4
33.4802
9
19.2988
-29
110.4098
-16
58.4080
-3
32.0035
10
18.5600
-28
104.8272
-15
55.7284
-2
30.6028
11
18.4818
T(℃)
R(KΩ)
T(℃)
R(KΩ)
T(℃)
R(KΩ)
T(℃)
R(KΩ)
12
18.1489
25
10.0000
38
6.1418
51
3.9271
13
17.6316
26
9.5762
39
5.9343
52
3.7936
14
16.9917
27
9.1835
40
5.7340
53
3.6639
15
16.2797
28
8.8186
41
5.5405
54
3.5377
16
15.5350
29
8.4784
42
5.3534
55
3.4146
17
14.7867
30
8.1600
43
5.1725
56
3.2939
18
14.0551
31
7.8608
44
4.9976
57
3.1752
19
13.3536
32
7.5785
45
4.8286
58
3.0579
20
12.6900
33
7.3109
46
4.6652
59
2.9414
21
12.0684
34
7.0564
47
4.5073
60
2.8250
22
11.4900
35
6.8133
48
4.3548
61
2.7762
23
10.9539
36
6.5806
49
4.2075
62
2.7179
24
10.4582
37
6.3570
50
4.0650
63
2.6523
T(℃)
R(KΩ)
T(℃)
R(KΩ)
T(℃)
R(KΩ)
T(℃)
R(KΩ)
64
2.5817
77
1.7197
90
1.2360
103
0.8346
65
2.5076
78
1.6727
91
1.2037
104
0.8099
66
2.4319
79
1.6282
92
1.1714
105
0.7870
67
2.3557
80
1.5860
93
1.1390
106
0.7665
68
2.2803
81
1.5458
94
1.1067
107
0.7485
69
2.2065
82
1.5075
95
1.0744
108
0.7334
70
2.1350
83
1.4707
96
1.0422
109
0.7214
71
2.0661
84
1.4352
97
1.0104
110
0.7130
72
2.0004
85
1.4006
98
0.9789
73
1.9378
86
1.3669
99
0.9481
74
1.8785
87
1.3337
100
0.9180
75
1.8225
88
1.3009
101
0.8889
76
1.7696
89
1.2684
102
0.8610
6.测温及显示子程序
#include
#defineU8unsignedchar
#defineU16unsignedint
sbitwent=P1^0;
sbitwenc=P1^1;
sbitwenp=P1^2;
sbitclk=P3^0;
sbitsid=P3^1;
/*延时子程序*/
voiddelayms(U16ms)
{
U16i;
for(;ms>0;ms--)
{
for(i=124;i>0;i--);
}
}
unsignedintcewen()
{unsignedlongt0,t1,w;
unsignedintt,r;
TMOD=0x10;
TH1=0;
TL1=0;
went=wenc=wenp=0;//放电
delayms(50);
wenc=1;
went=wenp=0;//
TR1=1;
while(!
wenp);
TR1=0;
t0=TH1*256+TL1;
TH1=0;
TL1=0;
went=wenc=wenp=0;
delayms(50);
went=1;
wenc=wenp=0;
TR1=1;
while(!
wenp);
TR1=0;
t1=TH1*256+TL1;
w=t1*100/t0;
r=w;
if(268elseif(257elseif(246elseif(236elseif(227elseif(218elseif(209elseif(201elseif(193elseif(186elseif(185elseif(181elseif(176elseif(170elseif(163elseif(155elseif(148elseif(140elseif(134elseif(127elseif(121elseif(115elseif(110elseif(105elseif(100elseif(96elseif(92elseif(88elseif(85elseif(81elseif(79elseif(76elseif(73elseif(71elseif(68elseif(66elseif(64elseif(61elseif(59elseif(57elseif(55elseif(r==55)t=41;
elseif(52elseif(50elseif(48elseif(r==48)t=45;
elseif(45elseif(r==45)t=47;
elseif(42elseif(r==42)t=49;
elseif(39elseif(r==39)t=51;
elseif(r==38)t=52;
elseif(35elseif(r==35)t=54;
elseif(r==34)t=55;
elseif(r==33)t=56;
elseif(r==32)t=57;
elseif(29elseif(r==29)t=59;
elset=60;
returnt;
}
/*发送数据子程序*/
voidsend_dat(U8dat)
{
U8i;
for(i=0;i<8;i++)
{
clk=0;
dat<<=1;
sid=CY;
clk=1;
}
}
U8get_byte()/*读取一个字节数据*/
{
U8i,temp1=0,temp2=0;
for(i=0;i<8;i++)
{
temp1=temp1<<1;
clk=0;
clk=1;
clk=0;
if(sid)temp1++;
}
for(i=0;i<8;i++)
{
temp2=temp2<<1;
clk=0;
clk=1;
clk=0;
if(sid)temp2++;
}
return((0xf0&temp1)+(0x0f&temp2));
}
voidcheck_busy()
{
do
{
send_dat(0xfc);
}
while(get_byte()&0x80);
}
voidsend_cmd(U8cmd)//送指令
{
check_busy();
send_dat(0xf8);//
send_dat(cmd&0xf0);//
send_dat((cmd&0x0f)<<4);//取高4位
}
voidwrite_char(U8dat)//写数据
{
check_busy();
send_dat(0xfa);//rw=0;rs=1
send_dat(dat&0xf0);
send_dat((dat&0x0f)<<4);
}
voidlcd_clear()//清除显示
{
send_cmd(0x01);
}
voidlcd_pos(U8y_add,U8x_add)//显示位置
{
switch(y_add)
{
case1:
send_cmd(0X80|x_add);break;
case2:
send_cmd(0X90|x_add);break;
case3:
send_cmd(0X88|x_add);break;
case4:
send_cmd(0X98|x_add);break;
default:
break;
}
}
voidlcd_wstr(U8y_add,U8x_add,U8*str)//在任何位置写字符串
{
U8i;
lcd_pos(y_add,x_add);
for(i=0;str[i]!
='\0';i++)
{
write_char(str[i]);
}
}
voidwrite_figer(U8y_add,U8x_add,U16figer)//在任何位置写数字
{
U8d[5],i,j;
lcd_pos(y_add,x_add);
d[4]=figer%10;
d[3]=figer%100/10;
d[2]=figer%1000/100;
d[1]=figer%10000/1000;
d[0]=figer/10000;
for(i=0;i<5;i++)
{
if(d[i]!
=0)break;///不等于位开始零输出
}
if(5==i)i--;
if(i==4)write_char(0x30);//数据装完,准备发送
for(j=i;j<5;j++)
{
write_char(d[j]|0x30);//取得的数字加上0x30也即得到该数字的ASCII码,再将该数字发送去显示
}
}
voidlcd_init()//
{
delayms
(1);
send_cmd(0x30);//不扩充
send_cmd(0x0C);//0000,1100整体显示,游标off,游标位置off
send_cmd(0x01);//0000,0001清DDRAM
/*send_cmd(0x02);//0000,0010DDRAM地址归位
send_cmd(0x80);//1000,0000设定DDRAM7位地址000,0000到地址计数器A*/
}
main()
{U16i=9000;
U16r;
P0=0xff;
lcd_init();
/*lcd_clear();
lcd_wstr(1,0,"桂林电子科技大学");
lcd_wstr(2,1,"机电工程学院");
lcd_pos(3,0);
write_char('a');
write_char('b');
lcd_pos(3,4);
write_char('c');
write_char('d');
lcd_wstr(4,0,"*****!
!
!
--*****");
delayms(2000);*/
//while(i--)
lcd_clear();
lcd_wstr(1,0,"路程:
");
//write_figer(1,3,r);
lcd_wstr(1,5,"m");
lcd_wstr(2,0,"速度:
");
//write_figer(2,3,r);
lcd_wstr(2,5,"m/s");
lcd_wstr(3,0,"温度:
");
r=cewen();
write_figer(3,3,r);
lcd_wstr(3,5,"℃");
delayms(64660);
}
/*voidmain()
{
unsignedlongi,r,t0;
unsignedintj;
P2=0xff;
for(i=0;i<50000;i++);//延时一会儿
//floatr;
//unsignedcharr;
TH1=50;
TL1=100;
t0=TH1*256+TL1;
r=t0*10/30000;
j=r;
P2=j;
for(i=0;i<50000;i++);//延时一会儿
//P2=(unsignedchar)r;
}*/
充电电路:
RC充放电电路图
RC充放电电路是电阻器应用的基础电路,在电子电路中会经常见到,因此了解RC充放电特性是非常有用的。
RC充放电电路如图1所示。
图申开关S原来停留在B点位置,电容器C上没有电荷,它两真个电压即是零。
当开关接到A点时,电源E通过R向电容器C充电。
在电路接通的瞬间,电容器电压Vc=0,充电电流最大值即是E/R。
随着电容器两极上电荷的积累,Vc逐渐增大,电阻器R上的电压VR=E-Vc,充电电流i=(E-V