你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于NTC温度测量  

[复制链接]
wm20031015 发布时间:2015-2-2 10:13
入手了一个MT7681的板,控制用的是STM32F103RBT6,折腾中,手上没有DS18B20,暂用NTC代替,做NTC的温度表比较麻烦偷个懒,直接使用反自然对数函数计算了,偏差稍大,手上无校准的温度计量设备,凑用着合先。上原理图和源程序,源程序基于正点原子的模板修改来的。 Flayegg.rar (3.76 MB, 下载次数: 3093)
赞 2 收藏 9 评论53 发布时间:2015-2-2 10:13

举报

53个回答
harvardx 回答时间:2016-1-23 00:42:40
查表法可以 5度一个表格就可以. 分压电阻要选好.
" ~3 n$ [$ Y" I4 j9 m用了多少年了. 1度差不多可以吧.& e* Z/ _6 R& U8 Z1 D% q" i
, V4 G3 `( H9 h2 E* u. ~+ \
  1. #define _GETAD(Rt) ( (uint16)( (Rt *1024UL)/(20000UL + Rt)))6 }: f5 h6 x% h, _/ S0 W
  2. % v& [4 S* i: S( C3 O/ C
  3. #if NTC_TYPE == NTC_NTSA0103F4 U5 k1 Y3 \* Q% r
  4. static uint16 RtADVal[] PROGMEM = 8 X, a+ t! }; G3 B5 x
  5. {
    ; K4 d' u/ }+ F% @9 J+ R& X1 x
  6.         //-40* J# S  m2 _/ a
  7.    _GETAD( 195650),  _GETAD( 148170),  _GETAD( 113340), _GETAD(87560),  _GETAD(68240),
    1 r- ]0 o: ~1 j5 u
  8.    _GETAD( 53650),   _GETAD( 42510),   _GETAD( 33890),  _GETAD(27220),  _GETAD(22021),
    + ~, @# ~; e% o5 v4 U' ~
  9.    _GETAD( 17926),   _GETAD( 14674),   _GETAD( 12081),  _GETAD(10000),  _GETAD(8315),
    0 \( D! ~3 V- _1 {% x. K1 T+ U
  10.    _GETAD( 6948),    _GETAD( 5834),    _GETAD( 4917),   _GETAD(4161),   _GETAD(3535),' ?9 _0 Q5 @- C6 P" i
  11.    _GETAD( 3014),    _GETAD( 2586),    _GETAD( 2228),   _GETAD(1925),   _GETAD(1669),1 g5 d% Z2 j- S0 B: F' }: Z
  12.    _GETAD( 1452),    _GETAD( 1268),    _GETAD( 1110),   _GETAD(974),    _GETAD(858),
    ! {1 K) I, O7 B: [& |. h! I) w
  13.    _GETAD( 758),     _GETAD( 671),     _GETAD( 596),    _GETAD(531)//125ceilsis& p# n3 o; e7 R+ a) P& t, M
  14. };$ L9 \! c. y3 |4 t' I
  15. #elif NTC_TYPE == NTC_MF52
    3 s- _( w9 m3 u; _% N
  16. static uint16 RtADVal[] PROGMEM = 3 k1 `: ~0 \0 I/ N
  17. {, R: M# Z3 X% m
  18.         //-40                         //-35                                //-30                        //-25                                  //-20( L/ P5 f3 p" C0 v. X! L
  19.    _GETAD( 235830),  _GETAD( 173940),  _GETAD( 129916), _GETAD(98180),  _GETAD(75021),
    , L- T" b: n; @+ O; M' W
  20.    _GETAD( 57926),   _GETAD( 45168),   _GETAD( 35548),  _GETAD(28223),  _GETAD(22594),//5
    ) z' Q3 G5 D; c- @! d2 S6 t
  21.    _GETAD( 18231),   _GETAD( 14820),   _GETAD( 12133),  _GETAD(10000),  _GETAD(8294), //30
    4 s# X6 j3 \8 s) q
  22.    _GETAD( 6921),    _GETAD( 5809),    _GETAD( 4903),   _GETAD(4160),   _GETAD(3547), //55. ], s# ]4 b& P" h* J
  23.    _GETAD( 3039),    _GETAD( 2615),    _GETAD( 2261),   _GETAD(1962),   _GETAD(1710), //80
    2 b8 v/ Y4 e- h9 N
  24.    _GETAD( 1496),    _GETAD( 1314),    _GETAD( 1158),   _GETAD(1024),    _GETAD(908), //105
    * f9 T- o2 |& A) e. @
  25.    _GETAD( 808),     _GETAD( 721),     _GETAD( 646),    _GETAD(580)//125ceilsis                  //130; h/ C! K3 \* ~0 V5 }* ^$ [
  26. " T* X& N$ o6 Q4 m# R
  27. };. w4 m0 G7 }+ ^9 N
  28. #endif
    8 I# ]- F! ~! E6 V2 Q: n
  29. 0 }$ Q0 k0 `  ^8 Z& W

  30.   s1 ]" n. F! ?7 Y& U3 {4 \+ I& `
  31. #undef         _GETAD
复制代码

# x0 z2 X, L' d9 S* _$ v' A9 q# F8 g6 z7 n6 C1 c4 B+ Q6 ?$ o' D

" C9 |: t. b, U% D3 z7 V4 e3 m: O/ X; `8 W& E3 m
  1. int16 sample_t(u08  Tchannel )                      //ζȲɼ¯º¯Êý. P# N9 H$ G0 t' b. h, C6 T2 x
  2. {
    ' u' K0 Z6 n& Q! H
  3.             uint16  T_AD_Val=0  ;: h) ?$ p9 U& F

  4. 0 q2 l( m: ?! Q. W0 f
  5.     static  int16   temperature =0;9 q9 S3 _& l1 u

  6. ; h! F) {0 c3 N$ G" ^0 r- E, w
  7.             uint8   ResValPtr=0;
    6 T1 g9 n' q( P' ?
  8. , f+ W" g) ^& V
  9.      T_AD_Val    =  ADC_sample_with_filter(Tchannel); //ADC=1024*R/(R+20K)4 ]% x7 f7 s. X
  10. & j2 g5 Q5 R! o6 A/ }  t( D9 n
  11.      ResValPtr   =  0;3 u9 t$ P/ Q4 Z% F% Z3 s% ]3 \% E
  12. 7 g- Y$ a7 f  q
  13.      if( T_AD_Val>=  929 )                            //ÉÏϱ߽紦Àí( m# \' h1 c4 x
  14.      {
    8 g! p7 Z4 o- L# \1 L+ U
  15.          temperature = (int16)(-400);; b& j& q/ j' O  N" s
  16. . U4 h$ X( z; l& w* B: V
  17.          return      temperature    ;
    + U8 a+ `, Q+ h
  18. 6 V; `( m$ w. O7 y- \( T; Z
  19.      }7 b, p( Y5 D1 C/ P5 O8 z7 K
  20.                                                       `- D' y/ D/ }# z& n$ F# J
  21.      if(T_AD_Val<= 26  )
    3 J0 t9 x" R) _$ v) w2 m; d; T& w
  22.      {5 L8 S: N* M" _$ o' D2 O: C! \* B
  23.          temperature = (int16) 1250;6 j: v& s. L: _  o3 i# X2 }
  24. + ]" m( Y: e6 _
  25.          return        temperature ;
    6 P4 d$ w8 ]  N
  26. 0 T) O7 Q( U* v: e% }8 F' a
  27.      }  
    & G" h/ S! t& o; }: E1 y
  28.      
    ( J4 I  R$ X" D- r3 M+ Y
  29.     uint8 i;3 M+ D- ]& v# d6 @- f% }6 s! o
  30.     for( i=0;i<7;i++)                          //²éÕÒÊý¾ÝÔÚ±í¸öµÄÄÄÒ»ÐÐ,¹²ÓÐ7ÐÐ) G2 m/ {) Q: m6 ^
  31.     {1 Z8 v% K; d8 g% _( G3 S5 Q
  32.         if(        T_AD_Val <= pgm_read_word( RtADVal+30-(5*i)) )
    0 q$ J; c+ a; [$ h
  33.         {
    . o, A8 j6 ?/ b9 Q' b$ |4 e2 o
  34.                  ResValPtr=30- 5*i;
    2 _/ L  Z# p' z/ I/ W: W
  35.                 
    ' g! o  i9 h0 `" y
  36.                         break;% c0 ]9 k# F6 x! s
  37.         }: ~: l+ l0 P6 C4 g8 w4 X
  38.     }
    5 x( f$ u. W/ Y* t/ {& |1 G& a
  39. 7 b* l" \6 K) K, S' y
  40.     int16 temp1,temp2;                         //¶¨ÒåÁ½¸öÁÙʱ±äÁ¿ÓÃÓÚ¶ÁÈ¡±í¸ñ,·½±ã¼ÆËã
    ! a! P8 h+ d/ r0 ~# |) a: x$ q
  41.     uint8 j;
    ) _7 a$ B, U0 W! k) O6 a
  42.     for( j=0;j<5;j++)                          //²éÕÒÊý¾ÝÔÚ±í¸öµÄÄÄÁÐ,¹²ÓÐ5ÁÐ5 G( L0 d9 P" I
  43. ! [+ E2 c# H8 q# G
  44.     {
    , K- h8 j) ]& h/ e9 N8 q. M/ n
  45.         if(T_AD_Val    >= pgm_read_word(RtADVal+ResValPtr+1+j)). H2 X; Z0 A  @7 B4 n" {
  46.         {
    8 a1 a: Z  h) h5 U# M: q
  47.             temp1      = pgm_read_word(RtADVal+ResValPtr+j)  ; //temp1>temp2
    # x9 w7 r; A# M/ ]5 T6 \0 `
  48. . R: H2 u: U( ]. H1 }& s  M
  49.             temp2      = pgm_read_word(RtADVal+ResValPtr+1+j);& Q3 r+ m+ H9 w: |
  50. ( }+ h) H6 Q, w  G0 Y7 ^+ o( P
  51.             temperature= (int16)500*(int16)(ResValPtr+j+1) - (int16)500*(T_AD_Val-temp2)/(temp1-temp2)-(int16)4000;
    1 T* Y' k  r% O
  52. . z0 d: d& T, m, h/ \' l3 ~
  53.             temperature= temperature/10 ;# N6 ^: n; \! ?0 F

  54. 5 g$ _+ i  z8 l" O# E
  55.            break;                   //return  temperature    ;      ´Ë¾äдÔÚ´Ë»á³öÏÖ, P4 m% ~2 b. F
  56.         }                           //control reaches end of non-void functionµÄ¾¯¸æ
    " o; L/ k: G% {' x; d
  57.      }
    ; j! y4 k2 H  I2 P
  58.      return       temperature    ;  //´Ë¾ä·ÅÔÚ´Ë£¬¾¯¸æÏûʧ£¬µ«ÊÇ´úÂëÔö¼Ó14bytes
    5 D8 V+ @5 e, V* M

  59. 9 n# ~3 E3 Q7 e& c

  60. 9 w' R& V0 E: |4 ^+ E
  61. }
复制代码
失心恋2017 回答时间:2020-1-8 16:50:29
支持支持,我最近正好 在做这个实验,多谢
Bowen1028 回答时间:2018-12-29 15:14:32
感谢分享,正好用上,参考下楼主的资料
stary666 回答时间:2015-2-5 00:12:27
wm20031015 回答时间:2015-2-5 21:40:28
下载的多,回帖的少,这习惯不好
快乐小马达 回答时间:2015-5-31 17:09:19
支持,支持!!
Paderboy 回答时间:2015-5-31 17:51:11
不错,多谢分享
liping 回答时间:2015-6-1 08:16:22
NTC温度系数的测温效果不好呀!
小小超 回答时间:2015-6-1 08:21:06
查表法比较准确。这个线性比较差。
你好我好大家好! 回答时间:2015-6-1 08:47:28
下载学习
快乐小马达 回答时间:2015-12-27 19:24:05
下载来学习学习
orima 回答时间:2015-12-27 19:50:27
谢谢楼主分享,学习了。。。
wofei1314 回答时间:2015-12-27 21:12:27
谢谢分型!
dwwzl 回答时间:2015-12-28 08:52:01
推荐查表法
cqh757128 回答时间:2016-1-22 22:54:00
下载的多,回帖的少,这习惯不好
harvardx 回答时间:2016-1-23 00:43:02
简单的 二分法查找 电阻值
1234下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版