AD7768-1 模块介绍

AD7768-1 是一款低功耗、高性能的 Σ-Δ 模拟数字转换器(ADC),配备 Σ-Δ 调制器和数字滤波器,用于精确转换交流和直流信号。AD7768-1 是 AD7768 的单通道版本,AD7768 是一款 8 通道、同时采样的 Σ-Δ ADC。AD7768-1 提供了一个可配置和可重复使用的数据采集(DAQ)脚本,建立了新的行业标准,结合了交流和直流性能,并使仪器仪表和工业系统设计人员能够为隔离和非隔离应用设计多种测量变体。

AD7768-1 支持三种在线滤波: sinc5、 sinc3、 FIR

AD7768-1 支持三种工作模式允许用户在输入带宽与电源预算之间进行权衡:

  1. --  快速模式提供 sinc 滤波器,最高可达 256 kSPS和52.2 kHz 的带宽和 26.4 mW 的功耗,或 FIR 滤波器,最高可达 256 kSPS、110.8 kHz 的带宽和 36.8 mW 的功耗
  2. -- 中值模式提供高达128 kSPS的FIR滤波器,带宽为 55.4 kHz,功耗为19.7 mW
  3.  -- 低功耗模式提供高达32 kSPS的FIR滤波器,带宽为13.85 kHz,功耗为6.75 mW

支持SPI和PIN模式,SPI可以对AD7768-1的寄存器进行读写。PIN不可以,而且支持的分频和降采样种类很少。所以基本用SPI来操作。

应用说明与注意事项

  1. SPI 读写操作,7768-1 的 SPI SCLK 最短周期是 50nS,即最高时钟为 20MHz,(详见 Datasheet Page51)
  2.  关于数据就绪信号:可从 DRDY 引脚输出,也可以通过配置,使就绪信号与 Dout 合并,以减少引脚连接。(详见 Datasheet Page69) 
  3.  在连续数据转读取状态下,将无法读取寄存器(详见 Datasheet Page54),只能读取24位转换结果,可以通过
  4. START pin 默认禁用,需要使用此引脚时,通过 SYNC_RESET 寄存器开启 START pin 功能
  5. 在更改滤波器或抽取率后,需要提供一个 sync-in 脉冲。(详见 Datasheet Page18)
  6. 上电时,由 PIN/SPI 引脚的状态决定使用 PIN 接口模式或者 SPI 接口模式,PIN/SPI 引脚为低电平时选择 PIN 电平配置模式,高电平时为 SPI 接口模式。SPI 接口模式通过对寄存器的读写配置 AD7768-1,PIN 模式通过外部 IO 电平配置 AD7768-1,PIN 模式下无法读写寄存器。PIN 模式的功能是 SPI 模式的子集。
  7. 在 PIN 控制模式下,MODE0 引脚控制抽取率。只有 ×32 和 ×64 的抽取率可用于 sinc5 和宽带滤波器选项。PIN 模式下的可用滤波器与采样率详见 Datasheet Page46,Table 22. PIN Control Settings for MODEx Pins 。
  8. 在 1Msps 时,AD7768-1 将以 16Bit 输出数据,并且,使用 STM32H723 在 520MHz 主频下,无法实现 1Msps 数据读取,STM32H7 外部中断运行时间约需 480nS。
  9. 对电源的要求,模块典型工作电流<80mA,但要求电源应至少能提供 200mA 以上的峰值电流,电源纹波建议<150mVpp。
  10. 对主控的要求与建议,AD7768-1 模块在 512Ksps 连续采样时,数据量为.5Mbyte/Second,对于 168MHz 主频的 STM32F4xx,在 512Ksps 连续读取时,MCU 负荷接近 100%,因此无法实现 512Ksps 连续采集与数据处理。对于 520MHz 主频的 STM32H7xx,在 512Ksps 连续采样,外部中断方式数据读取时,负荷约 30%。对于连续采集与传输应用,使用 MCU 时,应该使用外部中断方式读取数据。
  11. 关于数据传输,应该根据采样率评估传输数据带宽,选择合适的传输方式,串口是简单易用的通信接口,但通信带宽较低,仅适合在较低采样率下使用。
  12. 与主控制器(MCU/FPGA)使用杜邦线连接时,需将 SCLK、DOUT、DIN、DRDY 分别与 GND 构成双绞线,以改善数字信号稳定性。
  13. 设备上电后,建议使用RESET引脚或通过软件复位来复位设备。
  14. 除0x2C转换结果寄存器是24位外,其他寄存器是8位。数据传输为大端模式(先传高字节,后传低字节)、MSB(先传高位,后传地位),采用SPI的模式3传输
  15. 读写寄存器时,起始位为低电平,第2位是读写位,所以为了防止误操作,空闲状态时要将MOSI引脚拉高
  16. Datasheet中建议SPI的波特率为MCLK的分频数据,但实测其他波特率数据也可以传输
  17. 采样频率在1KSPS以上时,可以使用系统的连续采样,采样频率为1KSPS的2的n次幂。1KSPS以下要用单次采样模式,用sync_in电平变化来触发,但sync_in电平宽度有要求至少1.5倍的晶振脉冲宽度,否则会丢掉采样触发。

几个关键点说明:

1.MCLK分频

AD7768-1模块推荐使用外接16.384MHz有源晶振,通过分频后进行ADC采样。在POWER AND CLOCK CONTROL REGISTER 0x15寄存器进行设置电源模式和MCLK_DIV分频。

 快速模式  推荐2分频 

 中值模式  推荐4、8分频

 低功耗模式  推荐16分频

2.降采样

ADC采样后进行数字滤波和降采样,在DIGITAL FILTER AND DECIMATION CONTROL REGISTER 0x19寄存器中进行设置滤波器的类型和降采样率,

3.电压的计算

差分输入电压的计算公式(详见 Datasheet Page32   VREF=4.096V

(AIN+) – (AIN-) = ((Code – Midscale Code)×2×4.096)/0xFFFFFF

ADC_U32 = (ADC_Data^0x800000)-0x800000;//根据第24位正负号,转化为32位有符号数

Voltage = (ADC_U32*4.096)/0x7fffff;

单端输入电压的计算公式

(AIN+) = ((Code – Midscale Code)×4.096)/0xFFFFFF

ADC_U32 = (ADC_Data^0x800000)-0x800000;//根据第24位正负号,转化为32位有符号数

Voltage = (ADC_U32*4.096)/0xffffff;

在电路设计时,注意芯片对参考电压的稳定性要求较高,可以考虑ADR4540ARZ 芯片。同时,对(AIN+)(AIN-)输入端推荐 链接 AD7768‑1 驱动放大器。

重要的代码片段
//起始引脚电平配置
void ad7768_set_IO_init_HL(void)
{
    AD7768_RESET_H;
    AD7768_SYNC_IN_H;
    AD7768_CS_H;      
    SDI_H;
//    AD7768_START_H;   //对多个AD7768-1级联时使用,作为同步信号
    HAL_Delay(1);
    AD7768_RESET_L;
    HAL_Delay(1);
    AD7768_RESET_H;     //上电后要做一个reset
    HAL_Delay(1);
}

/**
 * @brief       start_config 退出连续读取模式,否则无法配置
 */
void ad7768_start_config(void)
{
    HAL_NVIC_DisableIRQ(AD7768_EXTI_IRQn);
    AD7768_1WriteReg(0x00,0x6c);//退出连续读取模式。
    AD7768_1WriteReg(0x00,0x6c);//退出连续读取模式。
}

/**
 * @brief       exit config
 */
void ad7768_exit_config(void)
{
//    ad7768_start_continuous_read();
    AD7768_SYNC_IN_L;//按照datasheet Page55的要求,连续模式下需要在配置ADC后为SYNC_IN提供一个脉冲
    __NOP();__NOP();__NOP();__NOP();__NOP();
    AD7768_SYNC_IN_H;
    __NOP();__NOP();__NOP();__NOP();__NOP();
    HAL_NVIC_EnableIRQ(AD7768_EXTI_IRQn);
}

一个案例

公司里画了一块关于AD7768-1的板子,测试发现SPI正常,但返回ADC结果都为0;修改采样频率和降采样后,读取设置的值正确,但进过SYSC_IN低脉冲后,再读取采样频率和降采样的值又变成了0,于是进行研究分析:

1.发现单次读取ADC值正确,也就是无法进入连续读模式。所以返回ADC值都是0

2.读取所有错误寄存器(0x2D-0x30)的值, 分别是81 00 00 00.  用正常的评估板子调试发现,评估板子复位后0x2D寄存器的值为81,再次读取为00.而我们的板子一直为81

说明POR的状态被置位,出现复位或电压不足。 查数据手册,发现AVDD1要求还是比较严的。

AVDD2  -----   模拟电源电压,相对于AVSS为2.0 V至5.0 V。
AVDD1  ----模拟电源电压,相对于 AVSS 为 5.0 V ± 10 %。此电源仅在低功耗模式下可运行 3 V。

结论:

复位或电压不足,导致芯片的数据失效,所以无法进入连续读模式,设置的取采样频率和降采样的值也无效。修改电路图,提供稳定的AVDD1

一篇关于AD7768-1产生错误码的博客:

基于AD7768-1的终极功能安全解决方案 - 电子方案资讯_我爱方案网

偏移校正和增益校正

根据文档介绍,获取的转化数据为下面公式中的Data,需要求取Offset和Gain,

先计算目前的斜率,再计算比例系数K,然后得到增益校正系数,然后计算偏移校正系数

可以将AD7768-1的输出VCOM 2.5V和GND 0V作为校准电压,通过控制TMUX614PWR进行四路输入选一路输出,然后通过THS4551IRGTR进行单端信号转差分信号,将差分信号输入AD7768

#offset_value为目前的偏移值
#gain_value为目前的增益值
#avg_record_p为第一个电压时转化的数值,我使用2伏测(即CALIBRATION_HIGH=2.5)
#avg_record_n为第二个电压时转化的数值,我使用-2伏测(即CALIBRATION_LOW=0)

def fun_baseNP(offset_value=0x0, gain_value=0x555365, avg_record_p=6306583, avg_record_n=-6908170, CALIBRATION_HIGH=2.5, CALIBRATION_LOW=0):
	V_REF=4.096
	Kv=3*2097152/V_REF

	G_tmp= (avg_record_p-avg_record_n)/((CALIBRATION_HIGH-CALIBRATION_LOW)*Kv)
	#Offset_tmp=CALIBRATION_LOW*Kv-avg_record_n/G_tmp
	
	k=(0x7FFFFF*(CALIBRATION_HIGH-CALIBRATION_LOW)/V_REF)/(avg_record_p-avg_record_n)
	#Offset_final=(offset_value+Offset_tmp)/k
	G_final=gain_value*k
	Offset_final2=offset_value-4194308*(CALIBRATION_LOW*(0x7FFFFF/V_REF)-k*avg_record_n)/G_final


	print(f"G_tmp:{G_tmp},Offset_tmp:{Offset_tmp},k:{k}")  
	print(f"G_final:{G_final},Offset_final: {Offset_final2}")
	
fun_baseNP()

根据上述改为C语言即可,目前看校验后测试偏差在0.005伏左右

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐