陈拓 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位为b退出休眠模式。
2.2 休眠模式
建议在睡眠模式下配置FDC。若需变更FDC设置,先设置CONFIG寄存器0x1A的SLEEP_MODE_EN位为b返回休眠模式,更改相应的寄存器,然后退出休眠模式。
2.3 原理图
传感器极板连接到通道0IN0A引脚,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)由寄存器0选择x1A的REF_CLK_SRC位设置。频率测量基准时钟fREF由fCLK寄存器0导出源x14-0x17的CHx_FREF_DIVIDER位对应通道0-通道3设置。建议使用外部主时钟来提供应用所需的稳定性和准确性。内部振荡器可用于低成本应用,无需高精度。fINx通道x的传感器频率时钟fSENSORx寄存器0导出x14-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的值
单端传感器配置寄存器x14的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设置的正常驱动电流 |