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

【年中粉丝节】+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)0 x, G! J! C. e

  2. $ s8 o, w3 n0 b5 r( |
  3. {
    3 N& J5 R( z3 n! ?

  4. ) o, y) \; r  X- d1 M# L" g: g; t
  5.       9 ~( f1 ~! F8 F
  6. 3 h! g5 t2 ]7 R
  7.     char  checksum = 0;  //checksum
    ! N1 G7 }  p: s! \$ h4 J
  8. ' W. |+ }6 K  M4 a
  9.     char  data[2];    //data array for checksum verification
    3 ~9 V% a# \1 B/ }( O) Y* C
  10. ! B4 d3 ^! D- H) |% Q
  11.        unsigned char addr = 0;
    * V. [( U. k4 @" j$ C* Q  F
  12. & f5 ~# U4 e: b
  13.     unsigned short tmp = 0;& [4 O: K$ `/ X! r( k# v/ w

  14. 7 `) B0 P# U0 ^2 M& w
  15.     float t = 0;
    3 f, j$ b2 O; {0 A
  16. ! L4 T$ v5 |4 D
  17.         M0 x* s. Y/ o! J: L3 R( }
  18. : l& s: B$ c( Q. f
  19.     addr = SHT20_ADDRESS << 1;2 F: R/ I7 \' Y2 V9 j( j/ z, W1 n* n1 S3 ?

  20. % M5 g/ ~9 j) X% p! f+ o4 ~
  21.       ) c3 {8 c+ _3 ~& l% ~5 s4 F2 V% u
  22. % G' Q2 T7 [" w* y, V6 E
  23.        IIC_Start();3 E! W5 |0 f* R0 f- X. c
  24. 4 s) M+ K- Q. A# t3 R7 [8 r
  25.       9 |! \6 ~1 n3 F: [- n' b8 h& d; |& I

  26. 2 M/ y; _- Y( D' W5 Q) n: w/ [
  27.        IIC_SendByte(addr);
    ; q9 z, d* N+ F2 j: b9 b5 e4 q2 v9 U2 K( L
  28. / n" w1 {" T- U8 [1 `! `
  29.        if(IIC_WaitAck(50000)) //等待应答
    5 O) j" N$ m. a. U2 Z! G6 T

  30. " a+ Q4 ]6 B& U. p  J  `
  31.               return 0.0;4 u( ~- D/ R* S; z( O" m
  32. 1 L/ @8 d( Z1 c# z
  33.       7 E! d, v1 _& E6 O4 W
  34. # L5 a) k( m4 n  Z  f7 C4 _
  35.        IIC_SendByte(cmd);
    ) G3 g8 M; k7 ?! J2 ^4 K3 z
  36. + V: [/ U) d: c" u) ?/ J/ B7 K
  37.        if(IIC_WaitAck(50000)) //等待应答
    6 Y# @' v, G" Z3 _  \+ ?* n6 t
  38. 2 o: T0 `7 D4 n9 e1 _
  39.               return 0.0;
    + R) u9 n" v, Y. t8 {" z
  40. 7 Q# d' \/ i+ {5 `. k. A# {! H
  41.       
    & }' {" ]1 A- f. p0 r( I; G
  42. * F+ Y/ R5 {4 l( L
  43.        IIC_Start();
    - p  k+ F! _+ S; F; r* d( k  g

  44. , S4 M# L+ g- D2 P: }2 K
  45.       ) q  T; @, X/ S7 b- g6 ^

  46.   }/ ^7 j0 u' _" ~* x* G/ U9 d8 o( M
  47.        IIC_SendByte(addr + 1);, e+ V" p% D/ C# r( h

  48. ) b& ^  J2 K8 I0 J* x
  49.        while(IIC_WaitAck(50000)) //等待应答# |1 T/ l& e7 R/ a& U; R
  50. ; B) ]+ c" B& k( F% ?
  51.        {
    3 ~" ^/ t) [+ b( @+ t$ @& H
  52. 1 C% q" a4 m/ e. K- G- o: b; x
  53.               IIC_Start();
    7 L; _9 N. O# u
  54. 7 e3 w0 }. J2 d# d( K" @! ]" _; n$ K
  55.               IIC_SendByte(addr + 1);
    & K5 f7 \, T' J* z* F" M

  56. ( Y4 X9 `* k0 Y& f8 n. U
  57.        }0 B3 \8 T1 r4 {+ l
  58. 3 p+ ~$ R0 B- X- Y/ ?. I1 ?& I
  59.       ) l4 K$ @- q8 F9 c$ U+ ^8 X/ V8 z% T3 R
  60. 3 a. ?$ C! Z, K) l' U) J" a
  61.        DelayXms(70);+ X/ D( T2 n! r' U1 c

  62. ! t: l7 d" U3 L9 G8 b
  63.       
    3 x2 t* @" [  g9 _

  64. ) q  m, a0 Z+ T
  65.        data[0] = IIC_RecvByte();
    " r! e. b' O3 K1 k" O2 D* |
  66. & @' K, @8 i8 |% m9 ~, ~) T2 E
  67.        IIC_Ack();# j( l4 k# G4 Q& x3 @6 C7 O* r
  68. ! \" H& f3 N9 [& z
  69.        data[1] = IIC_RecvByte();
    $ u6 I, S2 u. n( _6 A

  70. 1 }8 G' \7 K+ w  ~
  71.        IIC_Ack();, v" c, z- G6 Z9 r
  72. 7 R" X" P* X  S4 {9 N" y
  73.       
    3 L% w8 C; J/ J- ?+ }& H

  74. 2 h, u" }" S9 n  m( e
  75.        checksum = IIC_RecvByte();+ X  F- O! `4 {" }5 }- t0 j

  76. * w8 D# {& ]  ]' M
  77.        IIC_NAck();( z" v: q% T$ i/ I% P. S9 U& f7 H
  78. 8 V3 r" [# {. D$ N9 O* g' |* \
  79.       ' r9 b+ t4 l4 k
  80. ! j/ p0 ~: J+ N1 E: U4 a% h' J
  81.        IIC_Stop();, ]# V  `/ ~7 N3 \$ ]& o* I
  82. 3 e; z$ Y0 W( S: E, ~
  83.       
    & I; e: |$ P+ q- v3 r

  84. 8 S. O4 B% P' u7 j! X4 N
  85.        SHT2x_CheckCrc(data, 2, checksum);
    7 s: N# ~5 X! J" ^

  86. 4 Y' C  W  J, q) {1 R3 z. C
  87.     tmp = (data[0] << 8) + data[1];+ p! m/ K$ [# r8 L" d) U

  88. : l9 U6 X6 _% y' w/ \
  89.     if(cmd == SHT20_Measurement_T_HM)
    + b% ]- U# }3 {) A, d0 Y( c; O
  90.   e0 X, T% x! N" ?6 q9 }  ]
  91.     {
    9 P! }2 e0 k4 ~& z) K* s7 C$ y

  92.   t, M* o+ i5 N' ?5 `5 _' t) j5 E
  93.         t = SHT2x_CalcTemperatureC(tmp);
    . y4 G* q3 y+ O) {% j

  94. ) _' u" m; ]8 `+ V; l. U
  95.     }# y" Y$ q+ _7 ]; i/ L
  96. : N6 Y+ D# p, N, f
  97.     else6 \6 Q  S9 |9 F. R
  98. 7 \4 l9 ?/ W3 g  M+ u' y& S0 H
  99.     {( H( h5 F7 x9 g. Y% Z* |0 Q

  100. ) \! {& a: x6 V4 d$ I: p! d
  101.         t = SHT2x_CalcRH(tmp);7 [8 Y2 M6 S; H8 h

  102. 6 n. z. X2 ], g
  103.     }
    % o) |5 v4 q5 `( m; h, U

  104. ' R  |) I5 _  s1 f/ h1 d- |
  105.       
    ( `6 C4 C+ ~  [" x

  106. + m- Y& X1 N, Z' O
  107.     if(pMeasurand)" l8 q! k: A% o9 }4 q0 l. N
  108. 2 z4 c* k; _1 C' P% \
  109.     {3 E( F( N- ?6 r9 Y' t$ `
  110. ' _6 j+ s0 h6 l% B6 V" S
  111.         *pMeasurand = (unsigned short)t;
    2 M  y6 ^  K% O
  112. # X* @7 w/ p, Y
  113.     }
    ) ]# ?' U- I5 T2 L5 E, n5 V

  114. # @" X; i% R  a* }' V
  115.       / a4 }* g' w9 H4 A0 n6 v1 d

  116. ; [1 x2 U, J) h( S+ X# p; q$ t
  117.     return t;: Z$ G6 V0 Z+ F* Z/ V' n2 j
  118. : p5 l* n8 t4 O, d0 z
  119.       
    6 Y; N  o" B0 d* h1 x

  120. 3 u/ q$ q: W+ p- S8 C
  121. }
复制代码

$ ~  |8 c+ g3 f+ Y  ~
上面就是对应的读取温湿度寄存器里面的值。
5.png
最后读取出来的需要进行转换。
6.png
7.png
如上图。
8.png
最终串口输出数据。
9.png
单片机使用的是STM32F103VET6。板子上还有其他传感器明天接着水。

1 S9 m6 u1 H7 g% Z1 u) J
收藏 评论2 发布时间:2021-6-7 23:09

举报

2个回答
STMCU-管管 回答时间:2021-6-8 09:28:26
响应快啊,给力7 a+ t, q# f5 M) j' g; ^2 O5 i
liuxingkeji 回答时间:2021-6-8 09:51:43
STMCU-管管 发表于 2021-6-8 09:28' d! [+ h# \( E2 w4 k: M" N. E9 {
响应快啊,给力
& ?4 R1 q& m( T6 f9 D4 K
一晚给你水一篇
' t4 s# d( B; b! @$ f  p
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版