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

【年中粉丝节】+SHT20传感器

[复制链接]
liuxingkeji 发布时间:2021-6-7 23:09
【年中粉丝节】+SHT20传感器
今天收到年中粉丝节的活动,看了看,对不起了日天兄,我得水个好几篇文章了。既然是分享ST开发板与传感器的文章。今天先来个SHT20温湿度传感器。
先贴下参数图。
1.png
首先通信接口是IIC总线方式。
2.png
这张是性能参数。可以两个湿度传感器精度可以达到12bit分辨率,温度是14bit分辨率。
3.png
到这里我们需要看到其发送数据的时序,逻辑,同时知道需要知道寄存器的地址。
4.png
在程序中对应。虽然地址配置的是0x40,其实是在发数据的适合地址进行了左移一位的操作。
  1. float SHT2x_MeasureHM(unsigned char cmd, unsigned short *pMeasurand)! Y- r7 T; j5 p; x
  2. 3 ^# [: p! A$ y! X: D
  3. {6 V6 ~6 i5 C  F7 U6 J

  4. 2 L/ H# R9 {9 B3 W: w
  5.       
    * H5 N% _. J4 C" b

  6. 6 O- Q3 Z8 c* m: Z2 w" z. t
  7.     char  checksum = 0;  //checksum
    6 E) |, a& T: X( r3 m. |( s

  8. 6 e, M2 R7 i, w; \4 h1 N0 C  T* f
  9.     char  data[2];    //data array for checksum verification
    4 l) m. D& h3 Q8 v2 F/ O% k7 H
  10. 6 L+ {& u! {' }) z/ s
  11.        unsigned char addr = 0;5 U3 F0 r3 [  _+ u

  12. 6 T# r, k# D/ ~7 ]
  13.     unsigned short tmp = 0;
    7 c3 C! \* M' p

  14. " L% H& c1 C" u7 Z: R- M
  15.     float t = 0;6 o4 E( \. s- z9 {% O

  16. # p9 p; f9 W+ w6 |! q8 q! d
  17.       # t  E8 ~6 k6 r) G
  18. : Z. l4 i; T# u; H
  19.     addr = SHT20_ADDRESS << 1;
    . u3 c& H+ m1 q6 _' D! L
  20. % p. c$ F  @* [) W
  21.       2 @- S8 _3 {9 i' F7 e* S

  22. ; q+ ]% {7 v- w# H; f. o
  23.        IIC_Start();$ |: J- f4 e# N& e' l9 _" ]- Z& X0 V  x# Z
  24. 2 |5 W- L: m" Z6 |+ z
  25.       3 r( d% c9 B8 H9 h+ ^
  26. ; l! `8 h" ?, n) B
  27.        IIC_SendByte(addr);/ z1 l5 u$ Y+ z5 K: H% u9 M
  28. + [! ?( ~4 L5 [2 K& @; c
  29.        if(IIC_WaitAck(50000)) //等待应答* H& i4 r' x9 B6 N

  30. ! r+ W7 e; J! a: e
  31.               return 0.0;4 S, B. \" `" ?3 |% ^! Y- A7 e1 J
  32. ) Q& G  q' f8 Q) k
  33.       ( _. R. t# U; Q" d
  34. ; N( P* I! Q' G6 H
  35.        IIC_SendByte(cmd);
    ) b- A% N, S/ c( U+ g
  36. 2 v" D4 D9 N! u( H5 j. z7 v  B
  37.        if(IIC_WaitAck(50000)) //等待应答
    % r8 o! R: o* O3 v

  38. & \% H3 m& P5 U8 S' U
  39.               return 0.0;& J; c; U2 ^  k- ?" I+ @% y# y
  40. + T$ _2 e' o$ E4 r/ y: c' Q: ~  N) ]
  41.       7 F2 X# R) d( e" j' b

  42. - j- P+ \: \7 H' T
  43.        IIC_Start();# B# `" V6 L  }" y' u, o7 T8 E
  44. 6 Z* a. p/ r; O* u
  45.       4 s0 ]1 Q7 K/ o( t) }: R: h  e$ r
  46. % M& k" l, R; j6 {4 M
  47.        IIC_SendByte(addr + 1);
    # R- z9 }, Z* l6 J5 i  S* ?4 [* z
  48. 5 d+ t" }. F& g% C& P' z2 O
  49.        while(IIC_WaitAck(50000)) //等待应答
    & Q# X: z' e' U
  50. , X. q8 m# D; Z% t
  51.        {0 c( k, L5 Q/ L; u0 w( G+ N! u/ F  P
  52. ) o( J9 ]9 T2 K1 c0 X. ^; e4 i
  53.               IIC_Start();$ U: B+ I$ C  R

  54. 6 w/ ~6 _1 Y6 P5 A
  55.               IIC_SendByte(addr + 1);3 c+ a4 E2 h- U& n

  56. 5 h6 p* N7 C/ O- a: f
  57.        }9 x2 A) e3 J. H- K) p+ i) C

  58. ) _7 X! @: S: W  @. [
  59.       
    ' T; ?/ j# \, b1 p9 x
  60. & {+ ]; {8 k8 T/ `' W' x
  61.        DelayXms(70);
    / B1 R/ A) o; b% }

  62. 8 h7 G( v7 X% L& K7 E8 |
  63.       ) y/ Q: H5 b0 _" {  G8 o! p

  64.   k# I% R7 C. w1 m1 s
  65.        data[0] = IIC_RecvByte();
    + u$ ^2 ~3 T8 C3 I% J

  66. ( T3 N* i5 _* q  \0 ~1 Y
  67.        IIC_Ack();( {% D/ I, i4 Y1 g) V

  68. ' o; _! e5 M# j5 R9 Y& X5 Z( e
  69.        data[1] = IIC_RecvByte();/ V, _" j/ J6 M. I2 W
  70. 8 N7 J* A9 J% ]1 @) Q8 Y. Y( k. G
  71.        IIC_Ack();( p, \2 B3 Y* m+ b  Y, y

  72. ( p1 ]9 p: J# b: _9 _9 H
  73.       
    7 m* j' E6 \  r- {5 ~, B" i% g5 W

  74. # B& H; X: W: E: Y8 Z
  75.        checksum = IIC_RecvByte();8 [7 i8 ]2 R, V/ r# E+ V
  76. ; I2 ^4 T+ p2 }# o7 {, d0 E2 L4 _& K
  77.        IIC_NAck();  s' a1 s/ U. X; w

  78. & d9 K8 Z. H) P9 y( n
  79.       
    / u, |0 B$ r' W: u6 A$ Y% a7 {. b
  80. ( X$ z. h0 X7 w/ w2 p  W4 c) ]
  81.        IIC_Stop();9 P! V' T" @9 V4 ?8 y$ i) Z! g
  82. 9 l# H0 X# G( ^; E% d# X
  83.       
    1 r7 V6 S0 i; ~4 V8 D. O* z
  84. ! U/ u& ?* q5 p' e9 L0 u) D2 l7 _
  85.        SHT2x_CheckCrc(data, 2, checksum);
    % H( D: Y: C5 X# i4 H/ Z0 K" u

  86. ; E. ?2 h9 u- h# Q7 Q
  87.     tmp = (data[0] << 8) + data[1];
    2 f( ^1 T* h8 J. q* t5 a

  88. , C+ Z8 Y% I$ ^. F# @
  89.     if(cmd == SHT20_Measurement_T_HM)/ R+ e2 L' e/ j3 ^
  90. " G$ V, s( C+ `: g' ]
  91.     {& |0 K0 t1 P# C8 q9 |
  92. & R# f1 G  }$ a% I  ]' d
  93.         t = SHT2x_CalcTemperatureC(tmp);( ^; h2 m/ l1 X; S" k& p+ M
  94. 4 X$ E+ Y: ]. w+ o9 {
  95.     }9 `' U9 @* _' c# L6 }5 Q
  96. 2 x9 G: D/ t/ [6 e, ?
  97.     else" j0 o& M+ `! r4 [' r5 ^

  98. & ]2 w% U  [! L
  99.     {
    7 l/ P1 `* w0 R
  100. 1 k9 r+ [. n4 q# }
  101.         t = SHT2x_CalcRH(tmp);) g- G. T6 ?. C4 C* f! {+ r6 [

  102. . x, M3 m& C. C& X
  103.     }+ Y/ V, E5 s  d8 L. s

  104. ) g  k8 d" z4 v$ K* V" D
  105.       
    ; Z4 c4 k4 k; t" q
  106. # Z, ~/ g0 N. o5 T! j9 H
  107.     if(pMeasurand)
    5 X# {; @5 k$ H

  108. - e' \) k" P; I
  109.     {
    4 X2 K: |% v# ~) Y$ h: w8 G

  110. * l% z8 O* H/ F* z, v" Y6 x$ j% j/ |
  111.         *pMeasurand = (unsigned short)t;
    5 W1 X! p- o# |, U

  112. - B2 ?, o7 y% R! x3 V& B8 _/ m
  113.     }
    * i. Z/ e% [7 c1 d2 [. J! l

  114. # ]! L+ [# N; i  q9 d
  115.       
    4 K  _% `: Q6 t) G6 o- X
  116. 0 c6 ]8 Q: X5 ]
  117.     return t;
    + v  U, U/ |% @+ h
  118. ( L: r. R/ j( Q& b
  119.       6 t" F+ t1 P; E9 F0 F! j

  120. : e' U. V# v* m6 `/ ^8 H
  121. }
复制代码
+ N" D' S; x. C3 T) ^
上面就是对应的读取温湿度寄存器里面的值。
5.png
最后读取出来的需要进行转换。
6.png
7.png
如上图。
8.png
最终串口输出数据。
9.png
单片机使用的是STM32F103VET6。板子上还有其他传感器明天接着水。

, ^, r1 {$ E) I1 X# r1 F  E, ?- {
收藏 评论2 发布时间:2021-6-7 23:09

举报

2个回答
STMCU-管管 回答时间:2021-6-8 09:28:26
响应快啊,给力  c, b* W2 I% m5 T& A9 L1 a
liuxingkeji 回答时间:2021-6-8 09:51:43
STMCU-管管 发表于 2021-6-8 09:28
! E- d  |9 I0 e响应快啊,给力
2 F& D& B( r) v
一晚给你水一篇7 j3 B! E% y/ L+ \3 P" ?
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版