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

基于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度一个表格就可以. 分压电阻要选好.( k4 E6 \) C% A0 _+ S: c2 @
用了多少年了. 1度差不多可以吧.
; g% s: v; I( v! N3 f( y0 d4 n. {3 N+ |0 E; T8 ]  R: X# a
  1. #define _GETAD(Rt) ( (uint16)( (Rt *1024UL)/(20000UL + Rt)))
    ( {' r3 c' h* R, \0 I- \+ ]

  2. 2 L& z" j& a9 Y  M
  3. #if NTC_TYPE == NTC_NTSA0103F; h  G% v4 R( y9 b' z+ N8 u$ Z
  4. static uint16 RtADVal[] PROGMEM = ; y( Q; m, F3 t3 L
  5. {
    ; A$ g' ?8 C( M; \! m
  6.         //-40
    ; l# ]3 |5 g) c# n
  7.    _GETAD( 195650),  _GETAD( 148170),  _GETAD( 113340), _GETAD(87560),  _GETAD(68240),
    + h/ B7 K" r# r7 v. E) k5 B
  8.    _GETAD( 53650),   _GETAD( 42510),   _GETAD( 33890),  _GETAD(27220),  _GETAD(22021),! q2 T& O1 B- d8 B$ j6 X
  9.    _GETAD( 17926),   _GETAD( 14674),   _GETAD( 12081),  _GETAD(10000),  _GETAD(8315),
    / G8 U) o" |, h7 b: Q( a1 c6 P% H9 ^  U
  10.    _GETAD( 6948),    _GETAD( 5834),    _GETAD( 4917),   _GETAD(4161),   _GETAD(3535),
    ' E' P% k6 z0 N- t0 Z* X
  11.    _GETAD( 3014),    _GETAD( 2586),    _GETAD( 2228),   _GETAD(1925),   _GETAD(1669),
    ) }( G' Z1 B( r
  12.    _GETAD( 1452),    _GETAD( 1268),    _GETAD( 1110),   _GETAD(974),    _GETAD(858),4 p6 {* u; \$ o( \  P, |% [( [
  13.    _GETAD( 758),     _GETAD( 671),     _GETAD( 596),    _GETAD(531)//125ceilsis7 L7 L, @: [" d7 e; I- P2 x' T
  14. };
    2 c. d! H: }& f, g' @
  15. #elif NTC_TYPE == NTC_MF52; S/ [% s/ Q: t
  16. static uint16 RtADVal[] PROGMEM =
    & N8 V- b% V2 m; u
  17. {
    # V8 f% |) ?" g
  18.         //-40                         //-35                                //-30                        //-25                                  //-20+ ?$ m2 n* p8 O5 u+ S
  19.    _GETAD( 235830),  _GETAD( 173940),  _GETAD( 129916), _GETAD(98180),  _GETAD(75021),4 R- {6 D7 q) h7 w; D
  20.    _GETAD( 57926),   _GETAD( 45168),   _GETAD( 35548),  _GETAD(28223),  _GETAD(22594),//5
    2 o+ N0 J5 N  ~: a8 {& o$ W
  21.    _GETAD( 18231),   _GETAD( 14820),   _GETAD( 12133),  _GETAD(10000),  _GETAD(8294), //30
      y: J* g! Q* j, s9 J8 B: a
  22.    _GETAD( 6921),    _GETAD( 5809),    _GETAD( 4903),   _GETAD(4160),   _GETAD(3547), //55
    1 \+ e* F% R6 q& P! y
  23.    _GETAD( 3039),    _GETAD( 2615),    _GETAD( 2261),   _GETAD(1962),   _GETAD(1710), //80
    . V) I1 s4 l' g- `; J
  24.    _GETAD( 1496),    _GETAD( 1314),    _GETAD( 1158),   _GETAD(1024),    _GETAD(908), //105
    3 U" G" f, Y. w* F
  25.    _GETAD( 808),     _GETAD( 721),     _GETAD( 646),    _GETAD(580)//125ceilsis                  //130
    3 |9 j# O+ q( v
  26. * P, w" _3 |5 ^8 K5 x% t# n
  27. };
    , a9 x9 G1 X/ G: H  j+ s8 c8 s' _
  28. #endif
      |% A# t. {) W2 S6 U( O
  29. % Y) ?1 U  H) `

  30. : M8 r$ }# r% K1 u2 g$ F8 o9 V
  31. #undef         _GETAD
复制代码
! l- q: W) K( l- ]+ r; D: r
3 Z. t  o, A0 m$ t6 e. N* d* _

6 Y8 i; q9 e* c% ?( e+ s. s& N  _) K/ c6 R+ C7 B, J3 }
  1. int16 sample_t(u08  Tchannel )                      //ζȲɼ¯º¯Êý" K5 C3 n5 V, [; U- r
  2. {
    9 [0 M3 C# f" D: e
  3.             uint16  T_AD_Val=0  ;
    , j& t- i; o# L, E! l: L- ?

  4. 9 r; D3 H4 S* l& i
  5.     static  int16   temperature =0;
    / a' K3 x9 M( S" y0 T; ]' @

  6. 6 X6 a( ?; u5 X- l
  7.             uint8   ResValPtr=0;+ p# w9 A1 W2 U( E! v

  8. 1 R* S: ^1 c( h, Y
  9.      T_AD_Val    =  ADC_sample_with_filter(Tchannel); //ADC=1024*R/(R+20K)7 b9 U( L6 _( [( J% b/ b+ T( t

  10. 4 O9 z, r$ E2 v# B3 e% p
  11.      ResValPtr   =  0;9 I* l1 }& |9 ]+ B% E7 G8 N: L" q$ q

  12. % w1 B3 Q1 w3 q8 C* Z7 Z8 C
  13.      if( T_AD_Val>=  929 )                            //ÉÏϱ߽紦Àí
    $ X8 [9 {& j( n
  14.      {
    ) {+ C  K9 P% D6 r
  15.          temperature = (int16)(-400);
    1 F1 H) E) C! a0 x5 Z& Z

  16. * S! a) I1 @9 F" ~6 c; H
  17.          return      temperature    ;% v% S- X% Z4 W

  18. ! a3 C9 m4 E) K3 t# d  W! {
  19.      }  Y# Y& o) P' O7 [+ c# W5 G/ M" ~
  20.                                                    
    2 V1 c) o& k* _
  21.      if(T_AD_Val<= 26  )( x5 c" B5 X7 h8 A! z! l
  22.      {
    , |$ z, t- Q7 r" P
  23.          temperature = (int16) 1250;9 n  o3 \  S/ q5 C/ h( d: g
  24. 1 v% Z- d2 W! v, g" |  y
  25.          return        temperature ;8 F6 N) h0 |/ Y

  26. / c! }( F$ C/ ^  f5 }
  27.      }  * Y) t& J5 H$ m
  28.      , }' e  Y8 D( j) U8 b( A
  29.     uint8 i;' |6 I/ i! _& }' p/ @9 s# z' }
  30.     for( i=0;i<7;i++)                          //²éÕÒÊý¾ÝÔÚ±í¸öµÄÄÄÒ»ÐÐ,¹²ÓÐ7ÐÐ/ q1 A/ L# r9 U
  31.     {7 ^# E, p; V6 b2 y: q; [, p: ?
  32.         if(        T_AD_Val <= pgm_read_word( RtADVal+30-(5*i)) )
    8 }$ l( T9 |) K$ k% ?, Z+ C
  33.         {9 D9 ?, [" C9 H; O1 B! m
  34.                  ResValPtr=30- 5*i;+ y# ~+ D( p4 p
  35.                 
    . ^; ^( U" ^  _4 _
  36.                         break;+ T- x6 I3 W0 l1 L9 Y" Q8 F/ f9 A- i
  37.         }3 b' W% ], Y% Z8 G4 T: |
  38.     }
    6 S! L3 u3 H  p# U/ d
  39. % g. r& m' E( j1 t
  40.     int16 temp1,temp2;                         //¶¨ÒåÁ½¸öÁÙʱ±äÁ¿ÓÃÓÚ¶ÁÈ¡±í¸ñ,·½±ã¼ÆËã/ W$ Q; q( d  e7 N  t
  41.     uint8 j;5 k( B3 B" M6 m
  42.     for( j=0;j<5;j++)                          //²éÕÒÊý¾ÝÔÚ±í¸öµÄÄÄÁÐ,¹²ÓÐ5ÁÐ, ~* S) x% p( k! I) d8 S- o
  43. " Q# b, l* x0 o! c: |
  44.     {* Q* h- l. R! S
  45.         if(T_AD_Val    >= pgm_read_word(RtADVal+ResValPtr+1+j))
    * k$ z2 a) l  @% e
  46.         {' N! x- [% j; l# `' B0 N  ^
  47.             temp1      = pgm_read_word(RtADVal+ResValPtr+j)  ; //temp1>temp2
    9 M; t& T$ k" H! o

  48.   D# X+ f* K: P' ~( p
  49.             temp2      = pgm_read_word(RtADVal+ResValPtr+1+j);3 Q4 v! @, N6 i' N5 Y' B! j

  50.   H: v  V0 [4 `# A9 C
  51.             temperature= (int16)500*(int16)(ResValPtr+j+1) - (int16)500*(T_AD_Val-temp2)/(temp1-temp2)-(int16)4000;
    0 O2 f& T" |( ^$ g8 p. k

  52. " L! I3 F% P2 c9 ~5 X
  53.             temperature= temperature/10 ;
    9 ?7 ~& F4 p& [- ]  L; o
  54. ' ^4 D5 N( [5 k$ B4 x
  55.            break;                   //return  temperature    ;      ´Ë¾äдÔÚ´Ë»á³öÏÖ, _* q3 O: I- s  G
  56.         }                           //control reaches end of non-void functionµÄ¾¯¸æ; q3 H: ^9 C5 h& d
  57.      }: P' K8 h6 t) s/ L: j* @
  58.      return       temperature    ;  //´Ë¾ä·ÅÔÚ´Ë£¬¾¯¸æÏûʧ£¬µ«ÊÇ´úÂëÔö¼Ó14bytes* |5 |4 o( M" o% z$ P7 Q
  59. 7 Z: |5 z; T4 ?% e, |

  60. 1 G. S$ r4 Y8 s0 A
  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 手机版