SGP30:基于STM32使用HAL库驱动空气质量传感器(硬件)II2 模拟IIC)
目录
- SGP30:基于STM32使用HAL库驱动空气质量传感器(硬件)II2 模拟IIC)
-
-
- (1)实物传感器
- (2)传感器参数
- (3)传感器接口
- (4)STM32工程配置
- (5)编写代码
-
(1)实物传感器
官方技术手册:https://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/9_Gas_Sensors/Datasheets/Sensirion_Gas_Sensors_Datasheet_SGP30.pdf
实物图: 模块图:
(2)传感器参数
SGP30是一种金属氧化物室内气体传感器,在单个芯片上有多个传感元件,集成了四个气体传感元件,具有完全校准的空气质量输出信号,主要检测空气质量。可输出:
- TVOC(Total Volatile Organic Compounds,总挥发性有机物),量程为0~60000ppb;
- CO2浓度,量程400~60000ppm。
另外注意:
- SGP在初始化阶段,30模块需要一定的时间来初始化和读取CO2浓度为400ppm,TVOC为0ppd且恒定不变。因此上电后一直读直到TVOC不为0并且CO2不为400,SGP30模块刚刚初始化。
- 初始化完成后,数据会波动很大,这是正常现象,一段时间后会逐渐稳定。
- 气体传感器易受环境影响,测量数据波动正常,可添加滤波函数进行滤波。
(3)传感器接口
SGP30传感器使用IIC接口,主要注意IIC最大频率不超过400kHz:
IIC从机地址是0X58.因为地址只用了7bit,最高水平不使用,最低水平是判断是读还是写,0是读,1是写,所以:
- 对于写SGP30时候,地址为(0X58 << 1) = 0XB0
- 对于读SGP30时,地址为(0X58 << 1)) | 0X01 = 0XB1
SGP30命令均为双字节,先发高位,有以下命令: 以初始化SGP30命令(0X2003)为例,IIC发送的数据为:0XB0、0X20、0X03
除上述命令外,还有两个命令,一个是软件复位,另一个是读取串号。
(4)STM32工程配置
我在这里用的是STM32F103RBT6这款单片机主频72M,使用IIC接口2。
(5)编写代码
我在代码中实现了硬件IIC和软件IIC我通过宏定义切换实现了这一切:
移植主要是实现这两者IIC读写函数:
软件复位: 模块初始化: 读取TVOC和CO2:
读取串号:
ends…