【英飞凌XENSIV™ PAS CO2传感器(5V版)】3、驱动设计
[复制链接]
本章节主要介绍一下重要的寄存器数据和工作流程,不管通过什么方式进行串行通信,实际上都是对寄存器的读写,必须对寄存器有全面的了解和认识,由于传感器存在多种工作模式和状态,我们也需要掌握一种正确测量的方式和例程。实际上和12V版本的寄存器是通用的,我们这里只是重新温故一下。
一、寄存器
一共有如下若干寄存器内容:
可以看到寄存器都存在一些初始值,有的寄存器可能是只读的,接下来我们就详细介绍一下它们。
1、PROD_ID
地址:0x00
默认值:0x4F/0x60
该寄存器显示设备的产品和版本ID,对该寄存器的写访问被忽略,由于修订版本的不同,该数据有可能不同,明确的信息就是产品信息。
2、SENS_STS
地址:0x01
默认值:0xC0
注释:这个寄存器显示和控制传感器的状态,对该寄存器只读,位的写访问被忽略。
Field |
Bits |
Description |
SEN_RDY |
7 |
Sensor ready bit
该位表示上电复位后传感器的初始化是否已正确执行。
0:传感器未正确初始化。
1:传感器已正确初始化。 |
PWM_DIS_ST |
6 |
PWM_DIS pin status
该位表示在引脚PWM_DIS上读取的级别。
0:在引脚PWM_DIS读取低电平。
1:在引脚PWM_DIS读取高电平。
注意:这个位在引脚PWM_DIS的每次转换时都会更新。 |
ORTMP |
5 |
Out-of-range temperature error bit (sticky bit)
该位表示是否检测到温度超出指定有效范围的情况。
0:没有发生错误。
1:出现错误。
通过设置SENS_STS.ORTMP_CLR清除此位。 |
ORVS |
4 |
Out-of-range VDD12V error bit (sticky bit)
该位表示是否检测到VDD12V超出指定有效范围的条件。
0:没有发生错误。
1:出现错误。
通过设置位SENS_STS.ORVS_CLR清除此位。 |
ICCER |
3 |
Communication error notification bit (sticky bit)
该位表示串行通信接口是否收到了无效的命令。
0:没有收到无效的命令。
1:收到无效的命令。
通过设置SENS_STS.ICCER_CLR清除此位。 |
ORTMP_CLR |
2 |
Out-of-range temperature error clear bit
写入1清除SENS_STS.ORTMP。
这个位被读回为0 |
ORVS_CLR |
1 |
Out-of-range VDD12V error clear bit
写入1清除SENS_STS.ORVS。
这个位被读回为0 |
ICCER_CLR |
0 |
Communication error clear bit
写入1清除SENS_STS.ICCER。
这个位被读回为0 |
可以说这个状态寄存器是最重要的,在开机时以及每次测量前就需要进行读取和判断。
3、MEAS_RATE_H与MEAS_RATE_L
寄存器MEAS_RATE_H和MEAS_RATE_L定义连续模式中使用的测量周期(1位= 1 s)。
例如:0FFFH以上的值被视为等于FFFH (4095 s), 0005H以下的值被视为等于0005 h (5 s)。
将一个无效的值写入此字段将产生一个通信错误(SENS_STS.ICCER)。
注意:当写入到MEAS_RATE_H和MEAS_RATE_L时,设备不会立即考虑新值。它在下一次从空闲模式到连续模式的转换时被内部锁存。
寄存器名称 |
MEAS_RATE_H |
MEAS_RATE_L |
地址 |
0x02 |
0x03 |
默认值 |
0x00 |
0x3C |
注释 |
连续模式下测量周期的MSB |
连续模式下测量周期的LSB |
注意:这个寄存器显示和控制传感器的状态,对该寄存器只读位的写访问被忽略;MEAS_RATE_H中0x0f以上的值保留,将一个无效的值写入此字段将产生一个通信错误(SENS_STS.ICCER),并将位域设置为0x0f;MEAS_RATE_L中0x00 ~ 0x04为保留值,将一个无效的值写入此字段将产生一个通信错误(SENS_STS.ICCER),并将位域设置为0x05。
4、MEAS_CFG
地址:0x04
默认值:0x24
注释:测量模式配置寄存器,定义了设备的操作设置。
Field |
Bits |
Description |
Res |
7:6 |
这个位域应该写入00b。 |
PWM_OUTEN |
5 |
PWM output software enable bit
0:软件关闭PWM输出。
1:软件开启PWM输出。
注1:引脚PWM的实际状态取决于两者
MEAS_CFG.PWM_OUTEN和引脚PWM_DIS。
注2:该位自动设置在PWM_DIS引脚的高到低。 |
PWM_MODE |
4 |
PWM mode configuration
0: PWM单脉冲模式。
1: PWM连续脉冲模式。 |
BOC_CFG |
3:2 |
Baseline offset compensation configuration
00b:禁用自动基线偏移补偿(ABOC)。没有抵消补偿发生。
01b: ABOC启用。偏移量在每次BOC计算时定期更新。
注意:在单发模式下,ABOC校正因子被应用,但ABOC方案未激活且未更新。
10b:强制补偿。
注意:强制补偿完成后,设备自动将自身重新配置为ABOC (MEAS_CFG.BOC_CFG = 01b)。
11b:保留。 |
OP_MODE |
1:0 |
传感器操作模式
00b:空闲模式。
01b:启用单发模式。将01b写入此字段会触发单个测量序列。该字段由固件自动重置。
10b:开启连续模式。
11b:保留(作为00b)。 |
这里需要注意,模式的控制在这里,我们要进行一些配置的修改的时候需要先调整到空闲模式,然后配置。
5、CO2PPM_H与CO2PPM_L
寄存器CO2PPM_H和CO2PPM_L用于显示最后一次CO2浓度测量的结果(1 bit = 1 ppm)。
读取寄存器CO2PPM_L清除位MEAS_STS.DRDY。
在读取CO2浓度值时,用户应先读取CO2PPM_H寄存器,然后读取CO2PPM_L寄存器。
寄存器名称 |
CO2PPM_H |
CO2PPM_L |
地址 |
0x05 |
0x06 |
默认值 |
0x00 |
0x00 |
注释 |
CO2浓度值的MSB |
CO2浓度值的LSB |
6、MEAS_STS
地址:0x07
默认值:0x00
注释:这个寄存器显示传感器的状态信息。对该寄存器只读位的写访问被忽略。
Field |
Bits |
Description |
0 |
7:6 |
这个位域被读取为00b。 |
Res |
5 |
保留 |
DRDY |
4 |
Data ready bit (sticky bit)
该位表示寄存器中是否有新数据可用(CO2PPM_H和CO2PPM_L)
0:没有新的数据。
1:表示存在未读数据。这个位设置在每个测量序列的末尾。
通过读取CO2PPM_L清除该位。 |
INT_STS |
3 |
INT pin status bit
这个位指示引脚INT是否已锁存到活动状态(在报警或数据准备好的情况下)。
0:引脚INT没有锁存到活动状态。
1:引脚INT已锁存到活动状态。该位设置在每个测量序列的末尾,以防出现锁存条件。
通过设置位MEAS_STS.INT_STS_CLR清除此位。 |
ALARM |
2 |
Alarm notification (sticky bit)
这个位表示是否发生了阈值违反。
0:没有违规发生。
1:违反发生。该位设置在每个测量序列的末尾,以防违反。
通过设置位MEAS_STS.ALARM_CLR清除该位。 |
INT_STS_CLR |
1 |
INT pin status clear bit
用1写入这个位可以清除位MEAS_STS.INT_STS和强制引脚INT到非活动级别。
这个位被读回为0b。 |
ALARM_CLR |
0 |
Alarm notification clear bit
用1写入这个位可以清除位MEAS_STS.ALARM。
这个位被读回为0b。 |
这是每次读取或者测量中重要的状态指示寄存器,我们在实际测量过程中对其实际的使用非常重要。
7、INT_CFG
地址:0x08
默认值:0x11
注释:这个寄存器定义了引脚INT的配置。
Field |
Bits |
Description |
0 |
7:5 |
这个位域应该用00b写。 |
INT_TYP |
4 |
Pin INT electrical configuration
0b:引脚INT配置为推挽和非活动状态。
1b:引脚INT配置为推挽和活动状态。
注意:
写入此位域将使引脚INT处于非活动状态。 |
INT_FUNC |
3:1 |
Pin INT function configuration
000b:引脚INT未激活。
001b:配置引脚INT为告警阈值违规通知引脚。
010b:引脚INT配置为数据就绪通知引脚。
011b:引脚INT配置为传感器繁忙通知引脚。
100b:引脚INT配置为早期测量开始通知引脚(此功能仅在连续模式下可用
MEAS_CFG.OP_MODE = 10b,否则引脚不活动)。
101 b:保留
...
111 b:保留 |
ALARM_TYP |
0 |
Alarm type configuration bit
该位域定义在违反较低或较高阈值的情况下是否发出警报。
0b:向下交叉——将寄存器ALARM_TH_H和ALARM_TH_L的连接值定义为低阈值寄存器。
1b:向上交叉——将寄存器ALARM_TH_H和ALARM_TH_L的连接值定义为较高阈值寄存器。 |
在实际使用过程中个人比较喜欢将中断引脚配置为数据就绪通知引脚。
8、ALARM_TH_H与ALARM_TH_L
地址:0x09~0x0A
默认值:0x00
注释:寄存器ALARM_TH_H和ALARM_TH_L定义用于告警违规阈值的值(1位= 1 ppm)。
9、PRES_REF_H与PRES_REF_L
地址:0x0B/0x0C
默认值:0x03/0xF7
注释:寄存器PRES_REF_L和PRES_REF_H用于捕获要补偿的大气压力(1位= 1 hPa),用户必须先写入PRES_REF_H,然后写入PRES_REF_L,如果不更新默认值,压力补偿实际上是无效的,为了正确操作,用户应确保所编程的压力值在设备规定的压力工作范围内,有效的工作范围是750 hPa到1150 hPa。低于750 hPa的值将被视为750 hPa,1150 hPa以上的值将被处理为1150 hPa,如果写入此范围以外的值,则位SENS_STS.ICCER被置位。
10、CALIB_REF_H与CALIB_REF_L
地址:0x0D/0x0E
默认值:0x01/0x90
注释:自动基线偏移补偿参考,寄存器CALIB_REF_H和CALIB_REF_L定义了用于ABOC和力校准的参考值(1bit = 1 ppm),数值必须包含在350ppm和1500ppm之间。低于350 ppm的数值将被视为350 ppm,1500ppm以上的值将被处理为1500ppm。如果写入超出此范围的值,则位SENS_STS.ICCER被置位。
11、SCRATCH_PAD
地址:0x0F
默认值:0x00
注释:该寄存器为运行时的数据完整性测试提供了可读可写的地址空间。该寄存器与特定的硬件功能无关,主要用于通信接口的验证。
12、SENS_RST
地址:0x10
默认值:0x00
注释:该寄存器用于触发软复位。如果接收到无效的命令,位SENS_STS.ICCER被置位。
Field |
Bits |
Description |
SRTRG |
7:0 |
Soft reset trigger
向该字段写入A3H会触发软复位事件。
将BCH写入此字段将重置ABOC上下文。
将CFH写入此字段将立即将压力校准偏移量保存在内部非易失性存储器中。
将DFH写入此字段禁用IIR滤波器。
将FCH写入此字段将重置强制校准校正因子。
将FEH写入此字段启用IIR滤波器(默认启用)。
此位被读取为00H。 |
二、一般工作流程
我们需要检查一下内容:
1、首先检查供电情况;
2、开始测量前的初始化并通过状态寄存器检查;
3、检查并设置压力补偿,建议初始设置为1015,这个需要根据实际情况确定,我们这边是海边,使用这个参数是没问题的;
4、配置终端引脚模式,个人喜欢配置为数据就绪引脚模式,在实际的测试过程中,有时候会读取结果为0xffff的情况,哪怕检测周期比较长,读取到的MEAS_STS寄存器的Data ready bit也是正确的,通过中断方式读取就不会有问题,产生中断后读取都是有效值。
5、配置测量模式,如果配置为连续模式需要提前设置测量周期,个人喜欢配置为连续测量,要不就得每次测量倒要检查一下,而且传感器还有一个稳定周期的问题,配置完模式后也就是传感器处于激活状态(非空闲)会直接触发一次测量序列
6、定期或通过中断通知读取一次新的数值,最小的检测周期是5s。
|