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

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

[复制链接]
jundao721 发布时间:2021-6-15 18:08
18B20温度传感器用的比较多,最近公司搬迁,其他的传感器都还在包装里。本来想用F030nucleo板,忙糊涂了,SWD引脚接错了,不能下载程序,然后找到很久之前买的红牛板,接18B20传感器。图1所示:
2 u2 ]" c' E1 W) s7 X
18B20的引脚定义如图2所示:
) \$ G1 f+ U- ?, K" M1 c' o
直接进入正题,这款温度传感器是一根总线的连接方式,所以使用起来也比较方便。数据引脚需要一个上拉电阻4.7K。手头暂时都是贴片电阻,直插的只有2K的功率电阻,临时使用一下。
工作流程是:初始化,ROM操作指令,存储器操作指令,数据传输。其时序如图3,图4所示:

  X$ W# j$ Q6 w9 r9 g+ M9 B
数据转换及读取主程序如下所示:
  1. u8 DS18b20_read_byte(void) //读字节
    0 z2 i8 \, F7 |6 k
  2. {$ r3 j/ b8 @! W3 Y5 f) _
  3.          u8 i;
    % R: C' F1 T2 h7 |- Q, R. |! L2 X
  4.          u8 data=0;
    $ S7 h8 w3 z- _! K7 ~  Q  M6 |+ R% `4 ^
  5.          for(i=0;i<8;i++)
    0 S4 V4 E% U/ l% P+ P+ p7 }! n( K$ B
  6.          {) C4 u8 m  l! o; B  f
  7.                  data >>=1;# m. c" W* P- N/ J
  8.                  GPIO_ConfigurationOUT();
    : L5 p2 o" H; W& s9 B) @4 H
  9.                  GPIO_ResetBits(GPIOB,GPIO_Pin_14);7 D" \. L3 \9 Q0 E! j5 Q* ?
  10.                  Delay_nms(15);
    9 p, e; h7 Q6 V
  11.                  GPIO_ConfigurationIN();
    $ `6 p9 N! N" |$ k5 h7 p* X3 S+ p% @
  12.                  Delay_nms(50);
    2 g7 e  z( D( H) ], I
  13.                  if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)), M1 \! @  t: o. s! k% |
  14.                          data=data|0x80;
    * e9 L0 O' V/ X; K6 v
  15.                  else
      {! x) m( r+ f  ]( t0 Y4 w
  16.                          data&=0x7f;8 D7 c% k2 I3 Y. j2 @
  17.                  Delay_nms(600);2 j! Z" r* F' A5 U, r* x# p
  18.                  % e4 {( {  L; ?0 U
  19.          }# Z2 c6 q( U( G3 k% G& b! b  k
  20.          return data;! a- Q3 u7 L; E; _
  21.          ; I$ {  L2 I5 @2 E4 m
  22. }* k# q. H2 Y0 i2 x6 d7 }
  23. 2 ~- s2 R5 d4 j. r* w+ X# @$ l, @
  24. void DS18b20_write_byte(u8 dat) //写字节" \9 f! a& S" r4 ?5 A9 R! }7 _
  25. {
    ! }0 ]/ w- t* R" }6 ^. D' g
  26.          u8 i;
    3 F/ K* e3 v4 t/ v+ K
  27.          u8 one_bit;3 o5 b; T& k# ^! v+ ?1 f7 E/ ~7 Y( q  i
  28.          for(i=0;i<8;i++)8 y; m% U6 r$ u
  29.          {
    6 K* U2 P0 \3 L  n+ E
  30.                  one_bit = dat&0x01;# [) _& x# _5 S5 E# r" t
  31.                  dat = dat>>1;5 ~2 S& l. M# w! N) Y5 a: m
  32.                  GPIO_ConfigurationOUT();1 l$ }3 ^0 D: j6 J
  33.                  GPIO_ResetBits(GPIOB,GPIO_Pin_14);
    * Y2 J5 e. C) T7 P+ o$ n0 p8 O8 R: f
  34.                  Delay_nms(125);( b) o0 \2 U3 Q1 Q. z+ z
  35.                  if(one_bit)( i0 V, v5 Q( n6 V3 V- K4 T
  36.                  {) M, {0 {2 N/ M9 c+ S& r0 {' Y8 ]
  37.                          GPIO_SetBits(GPIOB,GPIO_Pin_14);# Y$ e0 y* ]! \+ r
  38.                          Delay_nms(300);
    ) V  l" v6 Q8 r; v, C: T2 Z
  39.                  }
      r+ F7 i- @. @6 A# j
  40.                  else6 Z/ T0 C  |. \& J
  41.                  {) }3 Z! N1 w2 `; s
  42.                          Delay_nms(300);! F5 X1 e3 r8 C& @) @$ K' e# [
  43.                          GPIO_SetBits(GPIOB,GPIO_Pin_14);
    4 p5 T5 I! \- }
  44. //                          GPIO_ResetBits(GPIOC,GPIO_Pin_13);
    2 I% T/ {3 ]2 {
  45.                  }% R6 R7 u3 s# ^. ~7 v" \
  46.                  Delay_nms(80);( D. I7 N6 T" a1 l: Y" y0 b+ a9 k/ Z
  47.          }
    # \4 p6 r9 y* H% f6 I1 r8 `
  48. }
    * ~% e1 c' A- P5 D

  49. % l+ u  H. d+ {
  50. u16 get_temperature(void) //得到温度数据
    / D# ]1 O- o6 `6 k3 T6 z% ^5 A1 p  }2 k
  51. {
    4 F: [7 o! H; c+ J! @+ i: O
  52.          u8 a,b;
    # S7 h: `+ b. F) s1 M$ y  H
  53.          u16 temp;
    + k7 o- M& @& s! Z5 U

  54. ( o# r, a( Y9 S7 L' {/ a- _1 [
  55.    DS18b20_reset();
    5 N$ s0 T  ]/ C0 [" }. }/ o
  56.          DS18b20_write_byte(0xCC);
    ; E6 z6 \' [: d9 B3 Q
  57.          DS18b20_write_byte(0xBE);
    $ p4 y% m4 a; |' P, Y
  58.          ) q! v! a- y6 w8 s
  59.          a = DS18b20_read_byte();
    4 [; L+ _  Q2 ^+ O# t
  60.          b = DS18b20_read_byte();
    6 |+ a% M3 x  H4 z
  61.          temp = (u16)b<<8 |a;
    3 k) K& ^6 e; e  I1 v/ E& z; b
  62.          return temp;, `1 B! \  u3 T& E' i  ~
  63.          
    % U6 p9 ~8 g1 o* l/ q% ~" e
  64. }. H/ Z+ D# b4 A
  65. void temperature_convert(void)
    : _% E6 Z1 H9 u
  66. {6 X! e. D# k. Y  o5 X
  67.          DS18b20_reset();
    # O: ^/ l  Y; h( g3 _" ]  S! X
  68.          DS18b20_write_byte(0xCC);- y" q5 K8 U) z, W, b" p) q, e
  69.          DS18b20_write_byte(0x44);6 D- P) W* V9 _% a" _" r
  70. }
    ' v8 a1 Z+ ~+ S2 W- o) i
  71. void init_18b20(void) //初始化
    % o' f' s' ?! d
  72. {
    % w- {  L! Q2 `! L9 n8 {( G
  73.         u16 temp;
    ' Q% Y# Q9 w7 x% D8 m# I
  74. do
    5 F% g6 u* Q  j- c: Q
  75. {
    ; n3 f. L4 G+ {. _
  76.         temperature_convert();6 l6 P3 [4 U  l5 b6 b/ I  B$ S
  77.         Delay_ms(20000);0 t" G2 f/ c9 J& G. Z
  78.         temp = get_temperature();
    " N9 l* e% s/ N; g0 Y3 i
  79. }          while(temp==85); ' E5 G9 S4 y7 q
  80. temperature_convert();
    6 \0 `( @8 U6 w8 ?
  81. }# u2 c0 `8 E4 ]4 r' n' x

  82. . e2 u5 B1 s( D; b+ H# K. s
  83. //u16 showdataT;
    - M- n/ y& |/ o% Y# }# T
  84. void tem_process(void) //计算温度
    , W/ }. [- r; Q: v6 F6 k$ ~
  85. {# M) t: n& A0 p* Y! E# I
  86.          u16 showdata;
    ; P  d0 N" e% c5 w9 N$ P
  87. //   u8 Tbuf[2];7 G+ {) {; {6 Z! t/ n3 _: r
  88.         temperature_convert();
    ( g5 X+ G9 h7 M1 T& B3 F
  89.    Delay_nnms(0xAFFFF);3 w! K6 e( M  h( N
  90.          Delay_nnms(0xAFFFF);
    $ D; n( f8 {$ Q% u8 k2 J
  91.   showdata = get_temperature();' Y6 m# N, H. T  g
  92.         showdataT = showdata*0.0625*10+0.5-10; //计算温度
    8 T# G: m- v- b* ]
  93. }
复制代码

( A4 N( @, `9 j7 x# }+ w; u) j
本程序通过定时器定时200mS读一次温度,数据显示如图5所示:

2 V) H! B) l, ]$ a- E2 E5 _6 v3 A! G
27.1度符合室内温度,是用手按住,温度会上升,符合预期。
主程序部分根据芯片定义好要使用的引脚,main函数按照传统定义即可。
' i: l# N! Z& l7 ~; Y

图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 手机版