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

【年中粉丝节】+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)
      x6 Y+ V+ I# C6 |! n5 P
  2. % F) n! T- h3 O: y# m" x
  3. {% |0 D6 {; Q- L0 V: o& t" q: I4 O8 f3 t
  4. * `* @; U: o* r
  5.       2 O7 }- N% N2 s0 O4 f

  6. + ^* G; d) ~) j  N& T
  7.     char  checksum = 0;  //checksum
    , i" G5 v" ~: T8 s. j* Q- r8 K
  8. ' s$ k! j4 ?: |# e
  9.     char  data[2];    //data array for checksum verification9 {2 i0 I/ C# }0 X0 ~3 P2 O

  10. $ q0 ~  R8 @2 ^5 ~/ {9 ^
  11.        unsigned char addr = 0;  {. _  U1 P7 [% q* J

  12. 8 a* i6 Q6 R* r+ _- t
  13.     unsigned short tmp = 0;5 E7 g$ G; `: O2 l: v5 j' k, |

  14. 7 f" a- X; }  h: u% Z% B
  15.     float t = 0;
    8 u$ T; D' q9 q9 d! Q9 R, ]: t
  16. 9 m. t* |7 F9 [& u, c3 J% S
  17.       
    , }* h/ I. z  N$ ~7 W9 L3 a

  18. 7 ^. F5 ]# L# ]! f& r/ ~
  19.     addr = SHT20_ADDRESS << 1;" a$ T2 h( C: y* ^5 ?

  20. : r3 n& o$ D. j2 H
  21.       6 F$ g4 T- k1 m2 S" b4 b
  22. & Q  C9 x* p. I/ }4 }# d3 _
  23.        IIC_Start();
    . V4 b+ I% l9 \/ {# n2 e4 P
  24. ( o. w# K! D# `- x
  25.       
    " K0 ~+ s- P  a/ d
  26. # E) Q  J8 b9 D) E5 m
  27.        IIC_SendByte(addr);. T0 X; C+ f% T$ X1 \# C9 W5 M

  28.   c' Q- M! v; z
  29.        if(IIC_WaitAck(50000)) //等待应答$ x/ R! Q6 ]0 |8 x
  30. 0 d4 H* t5 ?. A2 C! C( Q, z
  31.               return 0.0;
    + @; |! _& ]! f8 s$ R, K4 K0 Q
  32. ( G2 n4 ]# p$ H5 m0 ^6 `) h$ x
  33.       
    ( J3 T; |! m3 v0 v) V' L

  34. 1 L; v" t& ~6 |& e
  35.        IIC_SendByte(cmd);
    . z, H2 D  j& Q: q

  36. ) q9 u0 _% R7 r
  37.        if(IIC_WaitAck(50000)) //等待应答
    1 N+ c" P/ N# P) {$ j7 t( [
  38. - j7 ]* |- m+ c$ b
  39.               return 0.0;
    , D9 l' u0 v: I) K6 t$ V2 b
  40. % F4 h9 A4 y* D/ r9 h
  41.       3 W  Y0 B# m" v4 ~* r

  42. 0 O5 S3 N. u* z
  43.        IIC_Start();8 f7 c+ v; m" }4 a9 _) k! }4 ^3 X& e

  44. $ b8 @8 P5 T- X$ O% O7 v  @# O3 t
  45.       
    ( ^6 c  ~0 u! @4 c% y" P4 \

  46. " t3 ?0 }# k+ }4 H; W
  47.        IIC_SendByte(addr + 1);
    . a* L/ y4 [+ r! ~! u& Y7 {) H

  48. ) a; ?; N' G  K
  49.        while(IIC_WaitAck(50000)) //等待应答
    ; g& N9 c+ e+ f, R" M
  50. " b4 _4 d" i& j" A
  51.        {6 }8 }  x6 Y2 }& U( o
  52. # j& t1 j& \  E* D
  53.               IIC_Start();9 B$ V, O2 n% t8 s3 r& w

  54. ; S; z( X. E; j) _: j8 N. g
  55.               IIC_SendByte(addr + 1);
    ! w/ Z9 T% J! M, `

  56. ' h8 |+ k- @. N0 x. N" W( d
  57.        }- x1 i4 V; W" x5 W+ f& ]+ E: P

  58. % f/ q# z  Q( r$ X& {
  59.       
    5 ~. v4 b0 [7 Q) J  L
  60. : N* k! d1 s7 \" ^2 s, |! q- ]# h- G9 C
  61.        DelayXms(70);
    9 p2 Z0 v1 N& d) }9 A0 C

  62. , S& u+ R- l2 X/ z+ W( b6 F
  63.       6 a$ P4 M5 l: |0 G8 W8 l
  64. 2 ?& b! ]% O& O6 s: }
  65.        data[0] = IIC_RecvByte();
    # i- g: {+ D& C* _6 h3 M3 ]2 ~" J

  66. ( F4 d" {. Q, @# H: K8 \
  67.        IIC_Ack();0 Y' w& }% y8 J, q

  68. 0 i) v* B7 A/ W
  69.        data[1] = IIC_RecvByte();- O" T& b* o8 x# h! b

  70. 3 ]2 ~- h7 @4 C- \8 _) y  ^1 p
  71.        IIC_Ack();/ u5 U/ p% D: \- U5 V- R

  72. % ^) |- V. t! Z" @2 c
  73.       " J8 y$ ?1 W6 C( A0 y5 ^5 ^! M* i
  74. # `/ x4 G! E0 b( V5 `2 Z
  75.        checksum = IIC_RecvByte();
    % {6 C1 }8 m, I; h9 b! Z

  76. $ Z. t) B  H: X' q5 h9 w; S5 L
  77.        IIC_NAck();$ |, f+ b* ?7 {* V. v& k

  78. ' ~. J* I) K0 I( r% e
  79.       1 \$ m$ o( |2 u$ J, P
  80. / m8 S/ L1 V5 C! ]& u
  81.        IIC_Stop();- X! D: ~0 w; i$ ~; S7 K1 ]
  82. / {/ p* m1 M1 H7 R3 ?
  83.       ; Q# ]$ t! T7 W6 e6 {
  84. 6 V$ c: I" Q- o8 E* r, R8 u
  85.        SHT2x_CheckCrc(data, 2, checksum);
    * N% q1 S9 W$ k) z  @6 F* M
  86. ( y5 {+ s. s5 R& Y- t6 E/ [
  87.     tmp = (data[0] << 8) + data[1];. Z7 u. C) n  }' l6 Y- i# F$ c; l

  88. 7 p9 M/ ^7 l& J9 c1 B
  89.     if(cmd == SHT20_Measurement_T_HM)
    & R4 p" U$ s- k* z
  90. / }0 L1 V* Y! a' m- |
  91.     {
      F# a) p* y  ^0 _* K

  92. 0 v/ x8 ~/ C( F$ K! f  Y
  93.         t = SHT2x_CalcTemperatureC(tmp);
    & h7 [2 ^* s0 v! {, D" O

  94. : X7 i8 B5 k% }
  95.     }5 k' Z  s/ h2 I9 P/ I

  96. 6 U9 V5 H* h; ^' ?- Q* r
  97.     else7 Q! ?  X4 H$ V4 q+ P$ o
  98. 1 Z! [8 `; R4 P1 ^3 ^2 V% R
  99.     {
    1 I& C6 |8 p3 Q9 h  i
  100. 8 ~2 U5 {( X( B  }7 Z
  101.         t = SHT2x_CalcRH(tmp);
    ' u" N, e5 @' N; D9 k
  102. ; v- {4 v# n/ {
  103.     }
    # c, q3 h7 R* h7 G" U. V

  104. . Q, }% v- }6 K0 f
  105.       ' _* ~' g2 l1 `/ m" ^6 p: I

  106. . v& p" m( L  w* [, M
  107.     if(pMeasurand), d# X2 w/ x/ Y& A

  108. ) H) q+ h; R4 g* V
  109.     {
    # O1 k0 P+ P) \# v

  110. % f0 |" k+ Q# V+ K8 s7 d
  111.         *pMeasurand = (unsigned short)t;0 M' s8 K  R6 a( t# \
  112. 1 W5 i0 @, o3 }  h- [' L0 K
  113.     }
    ; j/ m% |# i  |
  114. 2 ?0 G& W" l9 w9 f$ C
  115.       + p0 `5 t+ f5 x& H

  116. 3 |  ^5 q* L) q! V" t
  117.     return t;6 ]2 x$ n7 x8 y! Q

  118. 9 B/ g- x; l8 |3 K. H
  119.       4 J% T. M2 ?& B% w( W4 w/ L& o8 s* @
  120. / Q% W6 u  `" F2 G1 A) R. W
  121. }
复制代码
, o; _4 l* v6 C9 l) \2 K
上面就是对应的读取温湿度寄存器里面的值。
5.png
最后读取出来的需要进行转换。
6.png
7.png
如上图。
8.png
最终串口输出数据。
9.png
单片机使用的是STM32F103VET6。板子上还有其他传感器明天接着水。
* g) r3 z& ]9 Y1 c
收藏 评论2 发布时间:2021-6-7 23:09

举报

2个回答
STMCU-管管 回答时间:2021-6-8 09:28:26
响应快啊,给力
* [4 u6 G6 {1 E1 l) H2 b' t
liuxingkeji 回答时间:2021-6-8 09:51:43
STMCU-管管 发表于 2021-6-8 09:28
, y2 A% J; a$ V+ r响应快啊,给力

: x; U9 D" b; p$ _7 a: X; J* u一晚给你水一篇3 E: V& A/ K  A# }7 ~, v, r5 e

所属标签

相似技术帖

官网相关资源

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