
(1)传感器实物" ], V" x; u1 h6 V s) z 实物图: ![]() 3 H/ s9 X4 Q5 `! Q9 | 模块图: ![]() (2)传感器参数 SGP30是一款单一芯片上具有多个传感元件的金属氧化物室内气体传感器,内集成4个气体传感元件,具有完全校准的空气质量输出信号,主要是对空气质量进行检测。可以输出: $ Q* S* B8 j+ O9 H4 M5 s TVOC(Total Volatile Organic Compounds,总挥发性有机物),量程为0~60000ppb; CO2浓度,量程400~60000ppm。 ![]() 9 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模块才初始化完成。 初始化完成后刚开始读出数据会波动比较大,属于正常现象,一段时间后会逐渐趋于稳定。 气体类传感器比较容易受环境影响,测量数据出现波动是正常的,可以添加滤波函数进行滤波。 (3)传感器接口 SGP30传感器使用的是IIC接口,主要注意的是IIC的频率是最大不超过400kHz: ![]() ![]() IIC从机地址是0X58,由于地址只用到了7bit,最高位未使用,最低位为判断是读还是写,为0是读,为1是写,所以: 9 ^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 ~ ![]() 0 c+ n/ q1 }" v; [7 ^ 以初始化SGP30命令(0X2003)为例,IIC发送的数据为:0XB0、0X20、0X03 除去以上命令外,还有两个命令,一个是软件复位、另一个是读取串号。 ( X/ q7 B; ]# v9 P ![]() + _; t; ^% P2 h: h* x) D1 f ![]() , 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 ![]() 1 G( u8 @7 x$ y0 t+ ~9 T ![]() & F# c. v ~+ r1 d " B8 w, Z% a$ i, S (5)代码编写 代码中我实现了硬件IIC和软件IIC我都实现了,通过宏定义切换:' e8 @% }& l7 o- P* f ![]() & r' S7 K, F7 b5 H* z1 [ 移植时候主要是实现这两个IIC的读写函数: ![]() . z9 ?4 \; a% \3 a; S 软件复位:1 U* q; D% @) O- _& e , R5 _& w6 D9 J, L9 `9 D3 y6 d* E ![]() 模块初始化: ![]() 读取TVOC和CO2: ![]() : @3 a$ u6 T/ e- a$ { N) h$ M 读取串号: 8 T C% \. I; _+ X ![]() : Z4 u+ v$ f* k9 Y A ![]() : r0 y$ v4 r9 O& Q5 `3 }& z( H0 k; u: R ends… 8 H1 w b/ H+ ~5 I3 r9 { |
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
【经验分享】基于STM32使用HAL库实现USB组合设备CDC+MSC
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命
从STM32 MPU产品看嵌入式系统中微处理器的新变化
【Hot!】STM32全系列开发板都支持Arduino开发,你知道吗?
【经验分享】STM32 HAL库移植FreeModbus详细步骤