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