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

【经验分享】SGP30:基于STM32使用HAL库对空气质量传感器进行驱动(硬件II2+模拟IIC)

[复制链接]
STMCU小助手 发布时间:2022-4-9 22:28
(1)传感器实物1 _$ S) ^* I2 F/ W& p( d
5 W5 N/ V& w! {0 s7 w  \' o9 U
实物图:7 D1 L* A: m  N* t6 p
%`ME)K9TV{J2HNR27@(0(.png + U! h9 d* t  U

/ _6 t3 D, j2 [" i模块图:3 H; v- O/ H1 z; w; j- O
& V. M0 b! S: W6 r& y' i. V
SQNK_O`2L26VSIRYY~@}CV4.png
% ?  D& ?6 S% `9 Y: i4 Z4 n' {3 d4 l. X" G6 l- ~' e8 d3 p
(2)传感器参数
( x- F) j# i- L& U0 lSGP30是一款单一芯片上具有多个传感元件的金属氧化物室内气体传感器,内集成4个气体传感元件,具有完全校准的空气质量输出信号,主要是对空气质量进行检测。可以输出:7 O) ~1 [6 o9 u5 ]; P6 Z

7 L" ~1 d1 X1 _: G% b+ [0 ?9 KTVOC(Total Volatile Organic Compounds,总挥发性有机物),量程为0~60000ppb;
8 E7 c1 K" |4 j% o4 |0 nCO2浓度,量程400~60000ppm。
# S0 o2 W/ @3 J, n/ T4 k, R5 y+ Q# I. x3 U
6Z~LD`DD[N9I]{@4BX{2_QD.png 9 B- i; [9 B5 B0 U

+ o6 K, C' O* w7 w
$ Z7 e- _6 K1 G: d# _) V9 E* y% a+ c; q另外注意:
6 _' w, M' m4 [$ N5 }$ [
6 D+ |6 {7 z# m4 y: q, o5 f' lSGP30模块上电需要一定时间初始化,在初始化阶段读取的CO2浓度为400ppm,TVOC为0ppd且恒定不变。因此上电后一直读直到TVOC不为0并且CO2不为400,SGP30模块才初始化完成。" E2 I3 [9 s6 R
初始化完成后刚开始读出数据会波动比较大,属于正常现象,一段时间后会逐渐趋于稳定。7 b4 Y5 h$ M. n: o
气体类传感器比较容易受环境影响,测量数据出现波动是正常的,可以添加滤波函数进行滤波。
2 C3 G( m3 _, \: e" f
5 c4 x, R  k' o4 R% N' j(3)传感器接口5 y' D- y, E2 [( Y8 G& _% h" o! W
SGP30传感器使用的是IIC接口,主要注意的是IIC的频率是最大不超过400kHz:
6 Z0 c. k$ f1 K% m3 ^7 g" l8 D# I; f2 |
PJM%)8[W[CWEP]{Y@DNB)ZK.png
/ @! D8 Z5 @6 F' B$ {# R* J
! e6 _) H: A. A. h7 s DFU0JV9U1HM[%E%0JC0D303.png
" Q( ?9 i8 }2 _2 ~5 |6 t0 K, \$ _! R" t
IIC从机地址是0X58,由于地址只用到了7bit,最高位未使用,最低位为判断是读还是写,为0是读,为1是写,所以:
* f" w* ?5 v; J+ K
+ o2 G6 Y% k* \- v对于写SGP30时候,地址为(0X58 << 1) = 0XB0
+ L' C. Q6 }* d' M3 M. k对于读SGP30时候,地址为((0X58 << 1)) | 0X01 = 0XB1/ V8 I" \4 R# e
7 U/ ?( W/ _, x" n0 h$ L
SGP30的命令都是双字节的,先发高位,有如下命令:
# H; W1 l/ \- m3 v) J6 z. a% d2 \
) I' S# V- o; [  s. j NW(6}$]CCOM$VJETE`__}N6.png
$ ^; a) m: ^; C3 v% q1 p0 g$ U4 n1 S9 e4 c9 w9 T3 v6 T. o4 `/ }% T
以初始化SGP30命令(0X2003)为例,IIC发送的数据为:0XB0、0X20、0X03& }* f* z0 m4 V0 U: |/ U! N

9 T1 v2 M# w, v  K* F) z! d- S除去以上命令外,还有两个命令,一个是软件复位、另一个是读取串号。
% u5 O. M* V  I5 C$ u+ X
* R$ i1 ], ~' g3 d1 p Z7{60(3`ADUET}5_XW15N_B.png
. `! B9 X9 W6 N, b8 k/ L. o1 s6 Z
( d2 n  q9 L! H6 Q% Y @W)JMIQUHJJOQM[83K@9${W.png
7 K/ u" e: g# I( ]' A4 ~* q2 ]8 D' C8 J0 d' |
(4)STM32工程配置- |! ^: `/ u/ K7 j
这里我使用的是STM32F103RBT6这款单片机,主频72M,使用IIC接口2。
' b: ?5 i4 O# `9 l4 n3 ]0 J7 F* t$ j9 \3 c; [
PFN(3OOECQ2Z9FO7~U5HQ{E.png
& W6 D( d. p. l4 C4 F" R2 e. V# t; }
2W7{VYQFZBJ52Y_KETVFXEH.png
7 i) P) B, J# t  D9 a; \0 m8 }& y/ b% P' N5 ^$ \. v
- q0 H4 v# Z" {; E- i
(5)代码编写- ^, f* J, g) S  S  k. W$ O
代码中我实现了硬件IIC和软件IIC我都实现了,通过宏定义切换:8 \; e4 _' K" C  Q! X: g% t
1 z2 l$ f; N# A/ ?3 h

5 f; O% G# v2 B  N6 t* m
! K" Z1 ~" m" x( `9 p  y2 n移植时候主要是实现这两个IIC的读写函数:4 E0 X' O. G5 ?( @4 I8 J

0 \0 D1 x9 Z$ C3 f5 S 2@N}[~QI6G[A88BG8RZ[379.png
9 W" \: E, U0 I3 F# q" ]4 a# o7 F* t! \. C" ^' ~' g
软件复位:9 D+ ~1 i& J/ W* g% h& b1 w
7 O0 h# ^, I2 j) S5 y) f9 ^
33de3c2fbb5f4478921eb1e0f78781de.png
$ V* B/ [* B1 Z4 z+ |) k0 n$ f4 \, Y+ H/ \* b/ v
模块初始化:/ W. T  X9 x" Z1 I8 v- r
* j2 J* B0 [) N4 Z# E, v
0B@`A9JI~ZK}_Z]Q7QJ[72X.png
; S, B* j4 _' s+ A( K3 {- d' G, O
. q3 [! b& v" ?% K' }: o读取TVOC和CO2:$ S# H8 ]' k( z7 S6 a$ ?

8 F9 t- d1 c  b! d YU~HF~0O0ZSVPE[NU]BXT.png
" ?  i$ d. K/ X+ f; ^+ B( m; R- x
$ s- y* f( ~% M1 H9 m读取串号:# f' K) I3 j. i, b6 H/ c0 Z0 I
4 f! s7 E; f% J/ ?* m
Y`$B7C1_O$]4APQ6MM1})EG.png
" b  s  q  o+ M* M
, [$ n; q( F7 l" v& I" s) O CIQE22Q1XE]}{9OL$MRIJ5M.png + q5 n1 U" e! Y  T; q9 x
/ ~/ E4 ^# i7 g! [( z
ends…
2 ^3 i& M6 x6 F- u" z( N- g' G3 v# e( ~2 ^5 C6 a# _$ T* B6 f
/ T- \, ~/ o, \2 o. l* @
* ]2 u: \7 _* ^# f
赞 收藏 评论0 发布时间:2022-4-9 22:28

举报

0个回答

所属标签

相似技术帖

官网相关资源

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