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

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

[复制链接]
STMCU小助手 发布时间:2022-4-9 22:28
(1)传感器实物" ], V" x; u1 h6 V  s) z

1 Y  E' h+ H6 Z* L( t实物图:
1 p( ]9 {, T, Y9 u# N- G5 F7 N, c %`ME)K9TV{J2HNR27@(0(.png
8 T" L8 [% Z% h+ E) [( m3 H/ s9 X4 Q5 `! Q9 |
模块图:
: {4 n- [& c3 x' |, g
! c* A$ @3 r( g2 {4 c& |+ r* c SQNK_O`2L26VSIRYY~@}CV4.png ! ^& N% V- ^- U" M& A( K5 G

& e4 _2 A' K* g' ^! N# m4 M(2)传感器参数
) G8 D1 y# n9 [, c. U0 q- fSGP30是一款单一芯片上具有多个传感元件的金属氧化物室内气体传感器,内集成4个气体传感元件,具有完全校准的空气质量输出信号,主要是对空气质量进行检测。可以输出:
- x. g# M# t- u3 u/ L. V) Y$ Q* S* B8 j+ O9 H4 M5 s
TVOC(Total Volatile Organic Compounds,总挥发性有机物),量程为0~60000ppb;
* r/ @# w8 c" ^5 BCO2浓度,量程400~60000ppm。
5 J- W" S& m- B9 m5 W& o! `6 V
' E% O- r3 x( B; b( b+ R 6Z~LD`DD[N9I]{@4BX{2_QD.png
! J" s1 ~" H' B3 E' F1 B0 @* x
3 ~% u2 Q7 t3 l6 ^3 K% N' Y4 `& z9 o+ H4 ?  v" q& y3 q  K1 k( B
另外注意:( R- [8 j# S% h% M9 d
7 \* o$ A& S+ C' p2 O  c
SGP30模块上电需要一定时间初始化,在初始化阶段读取的CO2浓度为400ppm,TVOC为0ppd且恒定不变。因此上电后一直读直到TVOC不为0并且CO2不为400,SGP30模块才初始化完成。
% G# `6 ^  F0 {. ?8 j; e# W3 C* O1 b初始化完成后刚开始读出数据会波动比较大,属于正常现象,一段时间后会逐渐趋于稳定。
0 W6 F" c. A- U; B4 C$ c7 B% B4 i气体类传感器比较容易受环境影响,测量数据出现波动是正常的,可以添加滤波函数进行滤波。
1 Y; f7 U' N  ?( n/ P# k
* y5 a, ?. b# i8 P. x. D5 G(3)传感器接口
# |6 ^% o8 G. s: y5 bSGP30传感器使用的是IIC接口,主要注意的是IIC的频率是最大不超过400kHz:
1 H0 Q% M1 Z2 |1 _$ Z( H9 ?
1 V* D2 y8 N5 k6 t PJM%)8[W[CWEP]{Y@DNB)ZK.png / |& `6 r5 t" T; |3 _, g

% J8 k/ P$ W$ e DFU0JV9U1HM[%E%0JC0D303.png
3 _* D) F: X* U; U5 x: G+ `: }- B
! z5 S2 W, j7 [) Y9 I$ K) L8 h5 zIIC从机地址是0X58,由于地址只用到了7bit,最高位未使用,最低位为判断是读还是写,为0是读,为1是写,所以:
" d, U% ~. a- F9 ^6 w- C- v  o4 x7 r3 p5 K# f. I0 Z
对于写SGP30时候,地址为(0X58 << 1) = 0XB0/ p% c8 f, u( ~& h/ F4 j( m! q
对于读SGP30时候,地址为((0X58 << 1)) | 0X01 = 0XB1) W# u2 v/ t: H+ S4 _& r
& l/ f1 R; z' {2 T
SGP30的命令都是双字节的,先发高位,有如下命令:6 D; x  S1 W- _+ e6 a0 q
7 ~" c+ I+ M; _: Q  ~
NW(6}$]CCOM$VJETE`__}N6.png - }! X0 y3 q5 \& X
0 c+ n/ q1 }" v; [7 ^
以初始化SGP30命令(0X2003)为例,IIC发送的数据为:0XB0、0X20、0X03
7 R% f& I. H8 V8 x" u6 y4 F
1 G( V* \: T  R+ X  d) v1 ?除去以上命令外,还有两个命令,一个是软件复位、另一个是读取串号。
& R9 F0 T7 @: h+ @3 `+ L( X/ q7 B; ]# v9 P
Z7{60(3`ADUET}5_XW15N_B.png 2 B/ [( g5 A2 J0 P; `$ k) H( R
+ _; t; ^% P2 h: h* x) D1 f
@W)JMIQUHJJOQM[83K@9${W.png 7 Q% @" N1 ~9 D. x) Z! v
, F9 ^, {$ U, b
(4)STM32工程配置! t/ B6 L5 Y% M
这里我使用的是STM32F103RBT6这款单片机,主频72M,使用IIC接口2。7 G* Q2 y3 c4 U
6 k% d" y+ P1 V
PFN(3OOECQ2Z9FO7~U5HQ{E.png ) z* M! o, H- R" A5 T! P/ K0 J
1 G( u8 @7 x$ y0 t+ ~9 T
2W7{VYQFZBJ52Y_KETVFXEH.png ! j. B/ c/ L: V& d% `$ ?, h
& F# c. v  ~+ r1 d
" B8 w, Z% a$ i, S
(5)代码编写
" u; C. {4 ]. k, s代码中我实现了硬件IIC和软件IIC我都实现了,通过宏定义切换:' e8 @% }& l7 o- P* f

/ e- _( U5 S0 a 7 j9 [# ^) `1 V3 [+ c
& r' S7 K, F7 b5 H* z1 [
移植时候主要是实现这两个IIC的读写函数:
( X; [: j1 L. I# t+ c
! K' S0 X& W. s5 E2 H' U4 N 2@N}[~QI6G[A88BG8RZ[379.png
9 f: E$ D( h1 ?: [/ Q) _. z9 ?4 \; a% \3 a; S
软件复位:1 U* q; D% @) O- _& e
, R5 _& w6 D9 J, L9 `9 D3 y6 d* E
33de3c2fbb5f4478921eb1e0f78781de.png
0 X+ _" b6 M/ G
( k; j3 r* J* J- i模块初始化:
! P' C* q6 H& V8 F9 C& F, ~
6 m) d8 A  o8 o 0B@`A9JI~ZK}_Z]Q7QJ[72X.png
/ }. N; `- @3 f% n9 d
( i0 L3 l* Z& r& C" U! b4 V读取TVOC和CO2:
- B3 D* G2 ?) H3 |& a
5 }) D( F1 @- e! q YU~HF~0O0ZSVPE[NU]BXT.png " @2 _/ V) o+ j( h, I
: @3 a$ u6 T/ e- a$ {  N) h$ M
读取串号:
  ^, i; t( G9 C# Q8 T  C% \. I; _+ X
Y`$B7C1_O$]4APQ6MM1})EG.png 2 s# a- D. m- t- C
: Z4 u+ v$ f* k9 Y  A
CIQE22Q1XE]}{9OL$MRIJ5M.png ; v% ~& Y; h' y* U3 d/ |! r' ^
: r0 y$ v4 r9 O& Q5 `3 }& z( H0 k; u: R
ends…
; b& m/ ^7 X& Z8 ?4 U  q  [8 H1 w  b/ H+ ~5 I3 r9 {

( \& j* K9 ?' f( y
% g, q# B  n- s# J
收藏 评论0 发布时间:2022-4-9 22:28

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版