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

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

[复制链接]
STMCU小助手 发布时间:2022-4-9 22:28
(1)传感器实物; K7 W/ E, s$ \1 q- a2 s+ Q6 [
% S& f) u8 p! I& d" h: K0 V5 ]
实物图:; _0 A% q) [4 N4 b/ s- U' f3 V' m4 D
%`ME)K9TV{J2HNR27@(0(.png 8 T! t: v, c2 e  H# a" E, t, u

/ v9 ?$ ?5 f1 |* G! e9 \, Z8 K. ^. I模块图:
; n+ ?! s& B, s9 v* `' _5 m/ K2 w; F: Q3 e7 V' O5 n9 Y* _
SQNK_O`2L26VSIRYY~@}CV4.png , r1 t7 K+ {$ j* I
1 l6 J! K6 ^& O
(2)传感器参数
& p) O5 V8 W7 \* q8 c7 q/ k4 xSGP30是一款单一芯片上具有多个传感元件的金属氧化物室内气体传感器,内集成4个气体传感元件,具有完全校准的空气质量输出信号,主要是对空气质量进行检测。可以输出:
3 t6 k3 h$ R6 L5 s+ X. }
5 q! W2 N* Q  VTVOC(Total Volatile Organic Compounds,总挥发性有机物),量程为0~60000ppb;
6 h3 W+ e3 L. I2 [) @3 q, p3 B6 gCO2浓度,量程400~60000ppm。
0 w( X3 u  f& U
1 }. n  w- j0 j) f. M5 A 6Z~LD`DD[N9I]{@4BX{2_QD.png
6 C# r3 y8 S% U* h% |2 l
/ F: ~$ E# ^3 t; x0 Z6 K+ Y. f0 n/ P. y4 i
另外注意:4 n( H( x* ?: |) P- ^

/ ^0 Z3 e) X" c- K3 W1 u- b5 NSGP30模块上电需要一定时间初始化,在初始化阶段读取的CO2浓度为400ppm,TVOC为0ppd且恒定不变。因此上电后一直读直到TVOC不为0并且CO2不为400,SGP30模块才初始化完成。7 a2 T9 T6 \# A8 G) g) E
初始化完成后刚开始读出数据会波动比较大,属于正常现象,一段时间后会逐渐趋于稳定。
$ a# }  g& V6 G* {) r; |; X气体类传感器比较容易受环境影响,测量数据出现波动是正常的,可以添加滤波函数进行滤波。
' S, R  b: Y! U
6 ^5 v; p1 z# F# r- V' d+ B(3)传感器接口
8 g# @7 M- Q+ J4 dSGP30传感器使用的是IIC接口,主要注意的是IIC的频率是最大不超过400kHz:
" R  U3 n3 c3 f/ R9 S, b; I
+ w$ v' }: h8 g; B+ ^/ Y PJM%)8[W[CWEP]{Y@DNB)ZK.png
; m" h& N$ H, Z, R0 S* t3 G
! H  l4 P/ V2 V0 o5 i DFU0JV9U1HM[%E%0JC0D303.png 8 X( {: X" j" `/ X6 L+ c0 w
0 P4 e9 r7 e1 d( K
IIC从机地址是0X58,由于地址只用到了7bit,最高位未使用,最低位为判断是读还是写,为0是读,为1是写,所以:" H" J! D6 ?& i+ D

* v. h* F" d! R- C2 n对于写SGP30时候,地址为(0X58 << 1) = 0XB0: _, ^0 _% ?, k" u* N
对于读SGP30时候,地址为((0X58 << 1)) | 0X01 = 0XB16 T0 |- g  o% m8 C3 i0 @0 y
7 n! n6 J  y3 Q6 p" G
SGP30的命令都是双字节的,先发高位,有如下命令:! i' _; ?5 f* m7 u
: y- N! G/ u( e3 A5 i
NW(6}$]CCOM$VJETE`__}N6.png # p9 B# q& u$ {0 _* U: E

" @1 K- ~" d5 v4 g% {以初始化SGP30命令(0X2003)为例,IIC发送的数据为:0XB0、0X20、0X03
' R: [! e5 |6 G- A
8 a  f% R1 B/ ?, Y' L7 ]除去以上命令外,还有两个命令,一个是软件复位、另一个是读取串号。
+ B3 `. n3 _2 d6 A
3 g: [0 N2 R9 D Z7{60(3`ADUET}5_XW15N_B.png + u. l1 h) y# G, \9 a
+ N; g0 N) j4 Y
@W)JMIQUHJJOQM[83K@9${W.png
; d* k6 f- [, b. K4 k8 o, r% @! Q( l' y
(4)STM32工程配置
8 S3 [8 b4 G8 v7 k这里我使用的是STM32F103RBT6这款单片机,主频72M,使用IIC接口2。9 }9 q, O2 T: {+ Y3 M, D

/ T! ~: b) h' D) Y0 N. m# @ PFN(3OOECQ2Z9FO7~U5HQ{E.png
0 }5 T, ]9 `- @8 @+ }: Z, h; \' m
2W7{VYQFZBJ52Y_KETVFXEH.png " k# g2 t( c/ S4 y: j
* j2 g. O8 C& y$ U# E& ]
! O5 P: ]3 j* t; Y9 F7 d1 b* R
(5)代码编写
6 r7 a' f* J# Y1 ]代码中我实现了硬件IIC和软件IIC我都实现了,通过宏定义切换:
3 t2 e" w6 y$ B# y0 C8 @! C5 ]' t1 i

9 {& @6 s$ P. s1 e, }6 |: l2 I' x/ n( ?# v( _# R6 z, X+ p6 G  `4 K
移植时候主要是实现这两个IIC的读写函数:7 A( \" t; h. h3 N# z
8 V8 B' B0 j5 t6 T0 w+ y
2@N}[~QI6G[A88BG8RZ[379.png $ q  ^" C, U' d4 u0 d
  Y! A1 p( L2 g- d. @
软件复位:" g. b( i6 t; \) v

3 S( u$ X# F* o4 r+ q 33de3c2fbb5f4478921eb1e0f78781de.png ; e9 i7 M5 Z) H$ {: w( d/ V! c9 r

' a# b2 A! W5 |4 w1 E1 L模块初始化:0 B6 g( F& y2 t1 v5 i& b" X

& y- ?2 c# s6 E/ s 0B@`A9JI~ZK}_Z]Q7QJ[72X.png / t+ z$ i/ U+ I) S- Q% p
  U5 }+ Q- P) K$ k3 }
读取TVOC和CO2:
& V5 j% Q1 P. |6 c) A# g- o4 h* f# C. q3 w$ g; g: }) ^, s! h" ^
YU~HF~0O0ZSVPE[NU]BXT.png . A/ ^4 F2 E/ }+ K
: ]  o( t1 d) c, y6 n, {- {# {- z
读取串号:
' u' ~/ Z1 i+ u# R8 a1 K" U. D3 U, l8 ~$ b7 `4 h# A
Y`$B7C1_O$]4APQ6MM1})EG.png ) W) W6 k: q) k

+ I5 z8 b: t; X2 p4 c CIQE22Q1XE]}{9OL$MRIJ5M.png
9 f8 m- X6 F3 w7 t5 t7 E- B' S4 Y7 f4 S% n# h  J
ends…
, I# P( \) M. P! v; m' X& _" O  B" ?# a  c) p* E8 `9 w1 A
/ u* C; t& \2 c* p3 w/ p) O' f

" o! S, z1 a% M; {6 E/ H6 i- }
收藏 评论0 发布时间:2022-4-9 22:28

举报

0个回答

所属标签

相似分享

官网相关资源

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