陈拓 2021/03/10-2021/03/14
1. 概述
在《FDC系列电容传感器及FDC2214使用要点》
https://zhuanlan.zhihu.com/p/353481800
https://blog.csdn.net/chentuo2000/article/details/114213785
一文中介绍了多通道应用的寄存器初始值计算。
本文单通道0应用时的寄存器初始值的计算。
计算结果的验证见:
《电容传感器FDC2214计算工具FDC_Tools-development5的使用》
2. FDC2214寄存器设置
在我的应用中使用单通道、单端模式,使用外部参考时钟。
2.1 启动模式
接通FDC电源后,它进入休眠模式Sleep Mode并等待配置。一旦器件被配置,就可以通过设置CONFIG寄存器0x1A的SLEEP_MODE_EN位为b0退出休眠模式。
2.2 休眠模式
建议在睡眠模式下配置FDC。如果需要更改FDC的设置,要先设置CONFIG寄存器0x1A的SLEEP_MODE_EN位为b1返回休眠模式,更改相应的寄存器,然后再退出休眠模式。
2.3 原理图
传感器极板连接到通道0的IN0A引脚,IN0B引脚悬空,如图所示。
2.4 传感器工作频率
传感器使用18µH电感器和33pF电容器。另外,引脚、走线和导线电容约为20pF,因此总电容约为53pF。LC震荡频率:
fSENSOR=1/2π√(LC)=1/2π√(18*10-6*53*10-12)=5.15MHz
这表示传感器频率的最大值。当传感器电容增加时,频率会降低。也就是被测量的电容越大,fSENSOR值越小。
2.5 系统时钟
可以从CLKIN引脚输入使用外部系统主时钟,也可以灵活设置内部时钟频率。我们使用40MHz的外部时钟,即fCLK=40MHz。fREFx=fCLK/CHx_FREF_DIVIDER。
2.6 输出数据
由数据手册可知:
即输出数据是传感器频率与参考频率的比值。被测量的电容越大,输出值DATA越小。
3. 寄存器初始值计算
设置测量时间,确定设备的最佳时序设置在很大程度上取决于应用和传感器设计,但一般应考虑以下几点:
- 每个通道应尽可能具有最大参考频率。
- 转换计数需要足够长,但增加任意计数数量不会产生任何价值,只会降低采样率。 参考数据手册以计算最佳转换计数。
- 参考计数对测量精度的影响最大。增加参考计数会使测量结果更准确,但代价是降低采样率。基于参考计数,计算每个通道的有效位数。
3.1 时钟配置
- 确定参考时钟分配器CH0_FREF_DIVIDER的值
在图中,关键时钟是fIN、fREF和fCLK(在图中用粗体显示)。fCLK可以从内部时钟源或外部时钟源(CLKIN)中选择,由寄存器0x1A的REF_CLK_SRC位设置。频率测量基准时钟fREF由fCLK源导出,由寄存器0x14-0x17的CHx_FREF_DIVIDER位对应通道0-通道3设置。精密应用建议使用外部主时钟,以提供应用所需的稳定性和准确性。内部振荡器可用于不需要高精度,要求低成本的应用中。fINx时钟由通道x的传感器频率fSENSORx导出,由寄存器0x14-0x17的CHx_FIN_SEL位对应通道0-通道3设置。fREFx和fINx必须满足表1中列出的要求,这取决于fCLK(主时钟)是内部还是外部时钟外部时钟。
我们的应用选择单通道0,从表中可以看出不论外部还是内部时钟源,都要求fREF0≤35MHz,因此CH0_FREF_DIVIDER设置为b10,即除以2。
fREF0=fCLK/CH0_FREF_DIVIDER=40/2=20MHz
- 确定传感器通道0的分频器CH0_FIN_SEL的值
对于单端传感器配置寄存器0x14的CH0_FIN_SEL域为b10。
- 确定寄存器0x14的值
15:14 b00保留
13:12 对于单端传感器配置,前面计算过传感器频率fSENSOR<5.15 MHz,所以选b10
11:10 b00保留
9:2 CH0_FREF_DIVIDER b00’0000’0010
寄存器0x14的综合值为0x2002(b0010’0000’0000’0010)
- 时钟约束
从table 1可知fINx < fREFx/4
在寄存器0x14中已设置CH0_FIN_SEL为b10,所以
fIN0=fSENSOR0/2=5.15/2=2.58MHz
fREF0/4=20/4=5MHz
满足约束fIN0 < fREF0/4
3.2 传感器驱动电流
CHx_IDRIVE域的编程应确保传感器振幅在1.2Vpk(VSENSORMIN)和1.8Vpk(VSENSORMAX)之间。通过设置通道的电流驱动值来控制电压幅度,测量示波器上的振荡幅度,并调整IDRIVE值以确定最佳设置。在这种情况下,IDRIVE值应设置为15(十进制),相应的振幅为1.68 V(pk)。DRIVE_CURRENT_CH0寄存0x1E的合并值为0x7800(b0111’1000’0000’0000)。
寄存器0x1E的15:11位为b01111时对应的电流IDRIVE0为0.146mA。
可以使用较低的VSENSORMIN振荡幅度,但会导致较低的信噪比。
高于VSENSORMAX的振荡幅度不建议使用,因为这时ESD钳位将转换为LC振荡电路的一部分,导致频移。
3.3 时间序列
在单通道连续采样的情况下,当FDC序列以单通道模式通过通道时,第一次转换之前有一个传感器激活时间sensor activation time,之后次转换时间间隔是由二个部分组成的:
1) 转换时间conversion
2) 振幅校正时间Amplitude Correction
为了降低功耗,我们不需要连续采样,在一次采样之后让器件进入休眠模式Sleep Mode。这样每次转换的时间间隔就由三部分组成:
1) 传感器激活时间sensor activation
2) 转换时间conversion
3) 振幅校正Amplitude Correction
传感器激活时间是传感器振荡所需的稳定时间(tS0),这个时间是可编程的,并且应设置足够长以获得稳定的振荡。
3.4 计算稳定时间(tS0)
- 计算CH0_SETTLECOUNT
约束条件:CH0_SETTLECOUNT > Vpk*fREF0*C*π2/(32*IDRIVE0)
Vpk*fREF0*C*π2/(32*IDRIVE0)=
1.68*20*106*53*10-12 * 3.142/(32*146*10-6)=3.76
四舍五入为4。为了提供冗余以保证系统公差,选择更高的值10。所以,寄存器0x10的CH0_SETTLECOUNT域应至少编程为10(0x0A)。
这也满足Table 1中给出约束:CHx_SETTLECOUNT > 3
- 稳定时间
从Table 5和Table 28的说明可知,通道0的稳定等待时间tS0(settle time)由下式给出:
(tS0)= (CH0_SETTLECOUNTˣ16) ÷ fREF0 =
(10*16)/20,000,000=8µs
注意:图中Address 0x11应为Address 0x10。
3.5 振幅校正时间
手册中未给出振幅校正时间,我们参考多通道应用的通道切换时间,当fREF=20MHz时,信道切换延迟channel switching delay约为2μs,参考数据手册:
3.6 计算转换时间
应用需要100SPS(TSAMPLE=10ms),通道0转换时间为:
(tC0)=(TSAMPLE - settle time - channel switching delay) =
(10,000-8-1) = 9991 = 9.991ms
由Table 20,转换时间(tC0)=(CH0_RCOUNT*16)/fREF0
CH0_RCOUNT=(tC0)*fREF0/16=9.991*10-3*20*106/16=12488(0x30C8)
设置CH0_RCOUNT寄存器(0x08)为0x30C8
有效位数ENOB
必须选择参考计数值以支持所需的有效位数(ENOB)。例如,如果需要13位的ENOB,则最小转换时间为 个时钟周期。8192个时钟周期对应于CHx_ RCOUNT值0x0200。
3.7 设置ERROR_CONFIG寄存器
设置DRDY_2INT=b1,用断言INTB引脚报告数据准备好标志,同时更新STATUS. DRDY寄存器域。
设置ERROR_CONFIG寄存器0x19为0x0001。
3.8 编程MUX_CONFIG寄存器0x1B
- 将AUTOSCAN_EN设置为b0,在由CONFIG.ACTIVE_CHAN寄存器域选定的单通道上的连续转换模式。
- 将RR_SEQUENCE设置为b00以启用通道0上的数据转换
- 将DEGLITCH设置为b101,将输抗尖峰脉冲滤波器带宽设置为10MHz,这是超过振荡腔频率的最低设置。
- MUX_CONFIG寄存器(地址0x1B)的综合值是:
0x020D(b0000’0010’0000’1101)
3.9 对CONFIG寄存器编程
(a) 将ACTIVE_CHAN域设置为b00以选择信道0
(b) 将SLEEP_MODE_EN域设置为b0以启动转换。
(c) 设置SENSOR_ACTIVATE_SEL = b1
低功率活动模式,在传感器运行期间,FDC使用在DRIVE_CURRENT_CHx寄存器(0x1E)中编程的最小功耗。
(d) 将REF_CLK_SRC域设置为b1以使用外部时钟源。
(e) INTB_DIS=0,当状态寄存器更新时断言中断引脚INTB。
(f) HIGH_CURRENT_DRV=b1,用>1.5mA的电流驱动通道0。
CONFIG寄存器(地址0x1A)的组合值为:
使用内部时钟0x1C01(b0001’1100’0000’0001)
使用外部时钟0x1E01(b0001’1110’0000’0001)
4. 寄存器的值和写入顺序
建议采用以下顺序写入寄存器:
寄存器地址 | 寄存器名字 | 值 | 说明 |
0x08 | RCOUNT_CH0 | 0x30C8 | RCOUNT=12488 (9.991ms转换时间) |
0x10 | SETTLECOUNT_CH0 | 0x000A | 传感器最小稳定时间 |
0x14 | CLOCK_DIVIDERS_CH0 | 0x2002 | CH0_FIN_DIVIDER = 2, CH0_FREF_DIVIDER = 2 |
0x19 | ERROR_CONFIG | 0x0001 | 启用中断 |
0x1B | MUX_CONFIG | 0x020D | 启用CH0,将输入抗尖峰脉冲带宽设置为10MHz |
0x1E | DRIVE_CURRENT_CH0 | 0x7800 | 通道0的传感器驱动电流设置为0.146mA |
0x1A | CONFIG | 0x1C01(内部时钟) 0x1E01(外部时钟) | 低功耗活动模式,断言中断引脚,0x1E设置的正常驱动电流 |