【英飞凌XENSIV™ PAS CO2 5V Sensor2Go套件】连接单片机

360影视 2024-12-26 16:55 2

摘要:void IIC0_Init(void){struct bflb_device_s* GPIO;gpio = bflb_device_get_by_name("gpio");/* I2C0_SCL */bflb_gpio_init(gpio, GPIO_PIN

前面是使用的PAS CO2 5V Sensor2Go套件进行测试的,这次准备使用其它单片机直接对传感器进行测量。

根据文档中的要求将单片机和传感器的6个引脚按下图连接:

实物接好线后如下:

主要程序如下。

IIC地址定义:

#define CO2_READ_Addr 0X28
#define CO2_WRITE_Addr 0X29

IIC初始化:

void IIC0_Init(void)
{
struct bflb_device_s* GPIO;

gpio = bflb_device_get_by_name("gpio");
/* I2C0_SCL */
bflb_gpio_init(gpio, GPIO_PIN_0, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
/* I2C0_SDA */
bflb_gpio_init(gpio, GPIO_PIN_1, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);

/* 通信速率400K */
i2c = bflb_device_get_by_name("i2c0");
bflb_i2c_init(i2c, 400000);
}
读取主要几个寄存器值:

while (1)
{
IIC_ReadReg(CO2_READ_Addr, 0x01, Buff, 1);
printf("PASCO2 Reg 01: %d\r\n\r\n",Buff[0]);
bflb_mtimer_delay_ms(50);
IIC_ReadReg(CO2_READ_Addr, 0x02, Buff, 1);
printf("PASCO2 Reg 02: %d\r\n\r\n",Buff[0]);

IIC_ReadReg(CO2_READ_Addr, 0x03, Buff, 1);
printf("PASCO2 Reg 03: %d\r\n\r\n",Buff[0]);

IIC_ReadReg(CO2_READ_Addr, 0x04, Buff, 1);
printf("PASCO2 Reg 04: %d\r\n\r\n",Buff[0]);

IIC_ReadReg(CO2_READ_Addr, 0x05, Buff, 1);
printf("PASCO2 Reg 05: %d\r\n\r\n",Buff[0]);

IIC_ReadReg(CO2_READ_Addr, 0x06, Buff, 1);
printf("PASCO2 Reg 06: %d\r\n\r\n",Buff[0]);

bflb_mtimer_delay_ms(30000);

}

程序运行后,连续测量值如下:


具体分析下01-06寄存器值:

寄存器01:144,16进制:0x90.

根据文档描述:

按照上面的接线方式,ORVS位为何会报错?

寄存器02、03:60

这是缺省值,表示采集周期为60秒,也即一分钟采集一次。

寄存器04:38,16进制:0x26

根据文档描述:

04寄存器中缺省采集模式为空闲模式,之所以现在是连续采集模式,是因为PWM_DIS引脚接地了。

寄存器05、06:CO2浓度值。

根据文档描述:

浓度值为2个有符号补码短整型,从实际测量值来看,高字节为负数,和采用套件及配套软件测量值900ppm左右无法对应,后边将抽时间再继续研究下。原文链接:https://bbs.eeworld.com.cn/thread-1302823-1-1.html

来源:肖宇科技天地

相关推荐