|
本帖最后由 three 于 2021-5-18 11:22 编辑
: k& ?+ i0 f; I" g" \/ Q, V( C8 c* q) K6 ^0 B( w ?. A
一:硬件设计3 G. M0 M0 i; U- A' o& n0 W: F% V$ R8 q
这里使用的是MF52-103热敏电阻,其中B为3950,它与10K电阻串联,由于热敏电阻随着温度的升高,电阻值降低,所以10K电阻两端的电压将上升。
0 T# Q! \9 [9 J( Q& x
( l+ q# b. l. z" J二:NTC热敏电阻的计算7 P6 b5 e- n) X5 a" ]* {
NTC 热敏电阻温度计算公式:Rt = R EXP(B(1/T1-1/T2))9 ^" M+ y' f& G( G0 k9 j
9 S/ x& {8 Q4 ~' `/ D" X
其中,T1和T2指的是K度,即开尔文温度。2 `& P, [$ R$ r" I0 X
H. F; I# C! ~- Q
Rt 是热敏电阻在T1温度下的阻值。: n4 x5 x% w) t, o9 e4 o) [
7 Y7 |: U0 e# e5 S" T0 }2 a4 T4 n4 s9 {R是热敏电阻在T2常温下的标称阻值。100K的热敏电阻25℃的值为10K(即R=10K)。T2=(273.15+25)
; |9 o- r0 ^& x0 o2 P
! \' b$ h3 {& y l: |9 \7 `EXP是e的n次方
$ X) D2 m8 c' D; F. I( U" t5 J {, V2 C- T; G; s4 p S
B值是热敏电阻的重要参数
# @' J( a7 K V5 }7 Y" i( v7 a# M2 W% s' q# [& b; H W
通过转换可以得到温度T1与电阻Rt的关系T1=1/(ln(Rt/R)/B+1/T2),这里可以将ln换算成log,即T1=1/(log(Rt/R)/B+1/T2)。
& V. Y3 K( X+ m8 E- o- x6 l; o) Q" @, G/ {
对应的摄氏温度t=T1-273.15,同时+0.5的误差矫正。
' c" J% r# B- @' ~& g. @" @0 c三:C程序设计: o1 b5 Q/ w+ p: e( X
首先,我们只需要知道当前温度下热敏电阻的阻值就可以算出温度。
; J/ ^3 I5 U- s9 u该硬件电路是一个简单的串联分压电路,所以通过欧姆定律就可以很容易求得当前温度下的热敏电阻的阻值。$ p H# ]1 I7 |, [+ d$ N
下面是C实现的代码。
. ^$ b) \2 i' B) q/ \: y3 P' l, ?- |
//电压换算成温度
& D0 U, \, g! y2 Hvoid temp_data(void)8 }; m) O3 F/ U: x W
{
7 x; L) N' A8 ?# c- }# e6 E4 B. d float Rt=0;
1 S* Y2 k+ {; ?; D# `2 J& d float Rp=10000;; x# R, g) O9 s/ B5 A; y) I C6 Z
float T2=273.15+25;
/ S4 F: W( _4 X3 ~) @+ T6 @( w6 W float Bx=3950;2 M- Y* E2 N$ @# M! D6 }5 y
float Ka=273.15;. h, A. A* K# G' d, n
float vol=0;
_ ?+ p/ ~6 U! b( R3 [# j vol=(float)((Get_Adc_Average(ADC_Channel_5,10))*(3.3/4096));7 |5 H8 v5 n5 Q" a3 a
Rt=(3.3-vol)*10000/vol;
+ `# |7 h9 ^* `3 @; m6 k& Z# \ temp=1/(1/T2+log(Rt/Rp)/Bx)-Ka+0.5;
# V& L0 P! |& [1 W7 \8 h& Y}* k4 s% C; H1 T9 u- W7 h, w) i) l
8 m. T b/ Y j1 n' p8 V
|
|