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

【年中粉丝节】+18B20温度传感器

[复制链接]
jundao721 发布时间:2021-6-15 18:08
18B20温度传感器用的比较多,最近公司搬迁,其他的传感器都还在包装里。本来想用F030nucleo板,忙糊涂了,SWD引脚接错了,不能下载程序,然后找到很久之前买的红牛板,接18B20传感器。图1所示:
- k- Z" w  A/ T, c8 u* h
18B20的引脚定义如图2所示:

8 V' w" C8 N% I) ~& a, ]9 ]; z  m' M- b/ q
直接进入正题,这款温度传感器是一根总线的连接方式,所以使用起来也比较方便。数据引脚需要一个上拉电阻4.7K。手头暂时都是贴片电阻,直插的只有2K的功率电阻,临时使用一下。
工作流程是:初始化,ROM操作指令,存储器操作指令,数据传输。其时序如图3,图4所示:
: d( r$ W0 f: ?3 W0 K5 P& R
数据转换及读取主程序如下所示:
  1. u8 DS18b20_read_byte(void) //读字节
    * u+ @9 z6 @; B, l+ U, W6 K  V
  2. {; s% J. H/ G4 }1 s& {1 B
  3.          u8 i;9 r/ C1 O  ]4 ?, {
  4.          u8 data=0;
    " c! G6 _; B8 l; G
  5.          for(i=0;i<8;i++)" T$ K; p1 G1 b, h
  6.          {, A4 b% `$ d8 ?  `/ n
  7.                  data >>=1;" }, D6 v9 y# i
  8.                  GPIO_ConfigurationOUT();, u( O% @% _  x: v& B4 ~
  9.                  GPIO_ResetBits(GPIOB,GPIO_Pin_14);
    2 L9 }0 ^$ p7 D! c# F# }2 v
  10.                  Delay_nms(15);
    4 U" \& [9 Z1 l/ T# y9 m
  11.                  GPIO_ConfigurationIN();
    - t# C2 H; `0 P: I( a+ h
  12.                  Delay_nms(50);
    ! @  @5 W1 l8 p2 K  B2 O# d% Y
  13.                  if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14))
    2 J# O8 Q" g1 U4 p# @
  14.                          data=data|0x80;) A  @, W$ u9 V* q  Z- j
  15.                  else% j8 |/ ~' b: D( f
  16.                          data&=0x7f;/ W9 I* W3 c6 u& G0 B( f- y. u
  17.                  Delay_nms(600);, n0 }! O2 X% o$ S8 r" W
  18.                  # ?& K  L0 J8 v" j3 `$ g
  19.          }
    ) U2 N2 o2 T0 [5 Y+ e
  20.          return data;8 a2 J8 _" _$ X5 L
  21.          + J4 ?+ z7 i6 b, A+ Y
  22. }# \- y4 c- J( k* B

  23. 2 p" X$ @5 {0 m; C; `7 F# t
  24. void DS18b20_write_byte(u8 dat) //写字节- h7 M. [' j" k" ~
  25. {# i( e3 \$ C& b  h$ |3 F9 e
  26.          u8 i;  i- U8 {; {) Y) \+ @
  27.          u8 one_bit;
    0 U# U. B) p7 `; j5 I- B8 k
  28.          for(i=0;i<8;i++): n6 d) L- r9 w0 T0 G
  29.          {
    $ x1 E( d# b8 q/ T
  30.                  one_bit = dat&0x01;
    9 @6 M$ A6 ?1 v7 J9 G
  31.                  dat = dat>>1;
    ' ?& i; w: U7 @: k5 N3 N! o
  32.                  GPIO_ConfigurationOUT();1 w/ u- y- C  g% q6 [
  33.                  GPIO_ResetBits(GPIOB,GPIO_Pin_14);
    / \, M# M, d* O1 Y+ d
  34.                  Delay_nms(125);
    ) Y- O( @  N: p1 u" n
  35.                  if(one_bit)
    2 Y3 {9 `  e5 ~6 }+ e4 |4 x
  36.                  {/ v5 V6 X9 g$ i# g$ H- b+ }+ J
  37.                          GPIO_SetBits(GPIOB,GPIO_Pin_14);
    8 w9 v; Z# o3 H# h6 n" C
  38.                          Delay_nms(300);
    : r( D- }% o' b5 g/ K' E
  39.                  }9 H" U' I- ]4 E+ i' U& j; v6 [3 f
  40.                  else! l6 T6 i+ b5 o" T9 K  d
  41.                  {, o2 w# k! L/ v+ O8 d2 j3 g
  42.                          Delay_nms(300);2 J& t0 \3 {  @) l) n  m
  43.                          GPIO_SetBits(GPIOB,GPIO_Pin_14);8 w  r1 l  v- \8 O$ i! R6 X
  44. //                          GPIO_ResetBits(GPIOC,GPIO_Pin_13);
    9 |3 B1 b2 I9 B0 W3 d4 }
  45.                  }3 ]( y1 [+ x2 U* c4 D" N
  46.                  Delay_nms(80);# j* ~8 K, `0 F
  47.          }: o9 @5 u$ x* D. q2 ]* o
  48. }
    2 N- \$ ]' e& O) V' y* [# X* r

  49. * H9 L3 N3 ?% m, ]3 T0 M+ O2 B0 k
  50. u16 get_temperature(void) //得到温度数据
    0 G; Q3 F$ m, {& O) Z
  51. {
    & k5 j* o. ?7 ]2 R  Z1 ~
  52.          u8 a,b;4 e+ u/ [7 s, W: `
  53.          u16 temp;7 m& N1 e( E4 x$ v/ J( ^+ U

  54. " _; [; E* v% C( c- [. G( W
  55.    DS18b20_reset();
    ! V. v  k) X7 q6 o% |
  56.          DS18b20_write_byte(0xCC);
    5 h7 `, L5 g2 x+ G( f, ^
  57.          DS18b20_write_byte(0xBE);
      h4 a' [. h; h
  58.          ; q, z: O% @' r
  59.          a = DS18b20_read_byte();( ]& \: m" [9 a1 A) l: |
  60.          b = DS18b20_read_byte();
    * G* \$ |# B4 m/ \( r% t
  61.          temp = (u16)b<<8 |a;
    8 t1 ~2 x1 v6 ]4 ]
  62.          return temp;
    - x0 G' K% D- Y& P8 t
  63.          ' r+ b+ [0 [# E. @1 T8 b2 Z
  64. }
    * m3 c7 R: E4 G0 N2 z2 e
  65. void temperature_convert(void) $ h( j$ h- q1 H' w- i( K( W
  66. {0 U& ]6 Q% F# e9 q8 V+ Q
  67.          DS18b20_reset();& J( |3 C) q' f4 t4 e& B
  68.          DS18b20_write_byte(0xCC);( W* Z% Z8 e4 j+ g0 F- j
  69.          DS18b20_write_byte(0x44);3 L. b  ]( h) D$ w
  70. }
      F6 Z. I: X7 N6 A8 \, t! s3 E
  71. void init_18b20(void) //初始化
    1 ^4 ?# ~( t7 n' ^. s" X  W
  72. {
    * m, b+ U) |" t! t$ q, L) M
  73.         u16 temp;: Z4 m* c3 U) m, T. k2 f: ~
  74. do
    : }+ i/ C# ^3 s2 F4 }
  75. {+ i% J6 F6 b" Q* r$ x- {0 k, Y
  76.         temperature_convert();
    1 l6 U: h0 z/ M# a- u+ `4 b: I$ ~+ ]
  77.         Delay_ms(20000);2 w7 t, u; E( k4 W6 g' l8 j) e- h
  78.         temp = get_temperature();: N0 ]' p: i+ z5 G$ ~8 v
  79. }          while(temp==85);
    5 P( v7 b% U8 h8 b* [- |
  80. temperature_convert();2 n1 L& I4 K9 ]2 c6 A$ _
  81. }* a; N' J: j( y' X3 \' m! t

  82. ) D+ x  a$ J0 \- ~9 S' ]# i: o3 ~
  83. //u16 showdataT;
    - @) B8 C8 Z1 Z
  84. void tem_process(void) //计算温度
    # D6 \; ~. s( t  _/ _
  85. {" W7 s/ M, x) j% J( B7 V
  86.          u16 showdata;; H- N! s4 ?9 a' h" ?$ U
  87. //   u8 Tbuf[2];2 \! v$ q3 t! c/ O
  88.         temperature_convert();" r  R% Z" d) ?4 t( z9 M5 e
  89.    Delay_nnms(0xAFFFF);
    ; k" g. P0 x2 {: T- q( j+ F9 X7 b
  90.          Delay_nnms(0xAFFFF);0 ^0 f5 u; U5 T9 V& Z
  91.   showdata = get_temperature();
    7 \9 X8 b/ _2 v4 g" w" L: z) o6 T4 ?# s
  92.         showdataT = showdata*0.0625*10+0.5-10; //计算温度
    ! x0 [8 @0 E9 f. t
  93. }
复制代码

* p9 U  @7 p, X0 p
本程序通过定时器定时200mS读一次温度,数据显示如图5所示:

2 B: K" p, \* Y; q( w7 u
27.1度符合室内温度,是用手按住,温度会上升,符合预期。
主程序部分根据芯片定义好要使用的引脚,main函数按照传统定义即可。
- N% c7 \. s0 j) X8 J0 C& a5 V+ \

图1

图1

图2

图2

图3

图3
读写时序.JPG
显示.JPG
收藏 评论0 发布时间:2021-6-15 18:08

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版