AD7745/AD7746简介

简介

AD7745/AD7746,24位CDC(Capacitance-to-Digital Converter)转换芯片。AD7745单路,AD7746为双路输入。
测量范围+-4pF,最大偏置电容为17pF。数据更新频率10~90HZ
I2C接口
2.7V~5.25V供电
0.7mA电流消耗
封装:TSSOP-16
除了CDC的转换,芯片还自带片上温度传感器,及电压输入通道。这里我们只简单介绍CDC的一种使用方式,也不探究其内部的具体实现方式。
虽然测量范围+-4pF,可以通扩容的方式增大测量范围
主要用于压力、位置、湿度等的测量
如下是管脚分布图

使用电路


这个是测量的电路图,CIN+与CIN-两个管脚输入,同时配置两个偏置电容形成最基本的测量电路。
激励管脚是不能省略的,必须要使用上。
电容的测量值由下面的公式来得到

同时配置输入管脚与偏置电容,可以将测量的范围移动来达到我们的测量要求。

单管脚输入


有时我们并不需求测量两个电容,可以通过将CAPDIFF设置为0设置为单管脚输入,同时CAPDAC(-)维持默认0即可。
上图将CAPDAC(+)设置为17pF,这样整个测量范围就调整为13~21pF。

扩容电路

+-4pF的测量范围并不能满足很多电容的测量,还可以配置双激励管脚与电阻分压的方式。
将测量范围进行扩容,扩容的同时偏置电容的值也会进行相应的扩容。

扩容比例为

EXCA与EXCB需要在EXCSETUP的寄存器中配置为反向。同时EXC的LEVEL也需要配置为VCC/2

扩容比例理解

原始激励源以VCC/2为基点,振幅为VCC/2
EXCA为VCC,EXCB为0时,激励点电压为 \(\frac{R_2*VCC}{R_1+R_2}\)
EXCA为0,EXCB为VCC时,激励点电压为 \(\frac{R_1*VCC}{R_1+R_2}\)
振幅为\(\frac{R_2*VCC}{R_1+R_2} - \frac{VCC}{2} = \frac{(R_2 - R_1)*VCC}{2(R_1+R_2)}\)
\(K = \frac{VCC}{2} / \frac{(R_2 - R_1)*VCC}{2(R_1+R_2)} = \frac{R_2 + R_1}{R_2 - R_1}\)
这样就可以得出文档中K值的意义了

寄存器设置

I2C设备地址

设备地址为0x48

复位

写入寄存器地址为0xBF时发生复位操作

STATUS


通过判断RDYCAP来确认数据是否准备好了,再读取相当的CAP的测量值

CAPSETUP


CAPEN使能
CADDIFF配置单管脚输入
CAPCHOP配置用加长时间,提高精度

EXCSETUP


配置激励源的两个管脚的极性与幅值

CONFIGURE


配置转换时间与转换模式

CAPDACA


高位设置是否使能
低7位为具体的值,配置偏置电容,最大17pF,按7位成比例放大

CAPDATA

示例代码

rt_uint8_t capSetupCmd = AD7745_CAPSETUP_CAPEN | AD7745_VTSETUP_VTCHOP;
rt_uint8_t excSetupCmd = AD7745_EXCSETUP_NEXCB | AD7745_EXCSETUP_EXCA | AD7745_EXCSETUP_EXCLVL_VDD_DIV_2;
rt_uint8_t configureCmd = AD7745_CONF_V_TF_62MS_1 | AD7745_CONF_C_F_62MS_0 | AD7745_CONF_MODE_CONT_CONV;
rt_uint8_t capDacACmd = 0x5d | AD7745_CAPDAC_DACEN;
/*********************************************************
*********************************************************/
static rt_err_t ad7745_init(rt_device_t dev)
{	
	ad7745_i2c_bus = (struct rt_i2c_bus_device *)rt_device_find(AD7745_I2C_BUS_NAME);
	if(ad7745_i2c_bus == RT_NULL)
		rt_kprintf("can't find %s device!\n", AD7745_I2C_BUS_NAME);

	ad7745_write_reg(AD7745_REG_EXC_SETUP, &excSetupCmd, 1);
	ad7745_write_reg(AD7745_REG_CFG, &configureCmd, 1);
	ad7745_write_reg(AD7745_REG_CAP_SETUP, &capSetupCmd, 1);
	ad7745_write_reg(AD7745_REG_CAPDACA, &capDacACmd, 1);
	return RT_EOK;
}


/*********************************************************
*********************************************************/
static rt_size_t ad7745_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size)
{
	rt_uint8_t status = AD7745_STATUS_RDYCAP;
	ad7745_read_reg(AD7745_REG_STATUS, &status, 1);
	while(status & AD7745_STATUS_RDYCAP)
	{
		ad7745_read_reg(AD7745_REG_STATUS, &status, 1);
		rt_thread_mdelay(20);
	}

	if(size == 3)
		ad7745_read_reg(AD7745_REG_CAP_DATA_HIGH, buffer, size);
	else
		size = 0;
	return size;
}

总结

AD7745/6是一款高精度的电容数字转换芯片,I2C通信方式使用起来也比较方便。

posted @ 2022-12-30 09:00  cau_par  阅读(1887)  评论(0编辑  收藏  举报