AD7124-4 实测热电偶数据读取,电压精度到稳定到±1uV, 电压波动260nV, 温度精度到±0.01℃

CH0 CH1两通连续转换模式,PGA 64: SPS: 8.89 使用快速建立模式, Sinc3 + Sinc1
(偏置与增益寄存器均使用原厂默认参数,这2个寄存器未配置)
CH0(AIN0 AIN1)对应 CONFIG0 CH1(AIN2 AIN3)对应CONFIG1。 两个通道均是双极性配置,AIN0上使能了内部偏置电压。(为了热电偶应用)

当然,要让ADC运行稳定 首先硬件上ADC电路,供电电路要稳定,AD7124-4我是自己针对客户应用的做的隔离模块。AD7124 SPI通讯使用隔离SPI芯片。

ADC的电源 是这样。 ADDC+DCDC隔离模块B0505+LDO最终到3.3V, 还有其它包括不限于 共模滤波 三端滤波器 等等。高精度外部2.5V参考电压源。
ACDC:是从市电转成5V
DCDC隔离模块用的B0505。5V转成隔离5V 专供ADC模块。
LDO:RTQ2520GQW(这个不好买,建议用其它的超低噪声LDO): 隔离后5V再降压成3.3V专供AD7124

///AD7124多通道连续转换模式初始化
///1对1映射
void Ad7124_Multichannel_Continuous_Conversion_Init( void )
{
    ///uint32_t temp_32bit=0;
  
    Ad7124_Sofe_Reset();  ///上电后一定要复位,否则ADC会运行异常。
    
    uint8_t temp[2]={0XFF,0XFF};
    vTaskDelay( 100 );
    Ad7124_Read_Regs( Ad7124Regs[AD7124_ID_REG].addr, temp, Ad7124Regs[AD7124_ID_REG].size );
    temp[0]&=0XF0; ///去掉低4位才是DEVICE_ID 
    
    if( temp[0] == AD7124_DEVICE_ID )
    {
        DBG_PRINTF( "ad7124 read Id ok\r\n" );
    }
    else
    {
        DBG_PRINTF( "ad7124 read Id ERROR\r\n" );
    }
    
    vTaskDelay( 100 );
    Read_Ad7124_State_Reg(); ///上电后要先读取一次状态寄存器 
    vTaskDelay( 100 );
    ///写AD7124 控制寄存器  ///连续转换  AD7124_ADC_CTRL_REG_DATA_STATUS
    Ad7124Regs[AD7124_ADC_CTRL_REG].value=AD7124_ADC_CTRL_REG_DATA_STATUS |AD7124_ADC_CTRL_REG_DOUT_RDY_DEL
                       | AD7124_ADC_CTRL_REG_REF_EN | AD7124_ADC_CTRL_REG_POWER_MODE( CTRL_FULL_POWER )\
                       | AD7124_ADC_CTRL_REG_MODE( CTRL_CONTINUOUS_CONVERSION_MODE ) | AD7124_ADC_CTRL_REG_CLK_SEL( 0 );
     Ad7124_Write_Regs( AD7124_ADC_CTRL_REG, Ad7124Regs[AD7124_ADC_CTRL_REG].value,Ad7124Regs[AD7124_ADC_CTRL_REG].size );
     
    ///写AD7124 通道0寄存器,0号通道开启
    Ad7124_Write_Regs( AD7124_CH0_MAP_REG, AD7124_CH_MAP_REG_CH_ENABLE\
                       | AD7124_CH_MAP_REG_SETUP( CH_SETUP0 ) | AD7124_CH_MAP_REG_AINP( CH_AIN0 ) | AD7124_CH_MAP_REG_AINM( CH_AIN1 ), SIZE_BYTE2 );
    ///写AD7124 通道1寄存器
    Ad7124_Write_Regs( AD7124_CH1_MAP_REG, AD7124_CH_MAP_REG_CH_ENABLE \
                       | AD7124_CH_MAP_REG_SETUP( CH_SETUP1 ) | AD7124_CH_MAP_REG_AINP( CH_AIN2 ) | AD7124_CH_MAP_REG_AINM( CH_AIN3 ), SIZE_BYTE2 );


    ///写AD7124 配置1寄存器   64 ±39.06 mV
    Ad7124_Write_Regs( AD7124_CFG0_REG, AD7124_CFG_REG_BIPOLAR \
                       | AD7124_CFG_REG_AIN_BUFP | AD7124_CFG_REG_AINN_BUFM \
                       | AD7124_CFG_REG_REF_SEL( CFG_REF_REFIN1 ) | AD7124_CFG_REG_PGA( CFG_PGA_64 ), SIZE_BYTE2 );

    ///写AD7124 配置2寄存器  64 ±39.06 mV
    ///双极性 | 打开ADC+缓冲  | 打开ADC-缓冲 | REF_SEL(x) x=2 外部REF1基准 | REG_PGA(AD7124_PGA_64) 6对应增益64(±39.06mV)
    Ad7124_Write_Regs( AD7124_CFG1_REG, AD7124_CFG_REG_BIPOLAR
                      | AD7124_CFG_REG_AIN_BUFP | AD7124_CFG_REG_AINN_BUFM \
                       | AD7124_CFG_REG_REF_SEL( CFG_REF_REFIN1 ) | AD7124_CFG_REG_PGA( CFG_PGA_64 ), SIZE_BYTE2 );


    ///写AD7124 滤波寄存器0  sinc3+SIN1 快速模式  120  8.89Hz 以16为基数计算均值)
    Ad7124_Write_Regs( AD7124_FILT0_REG, AD7124_FILT_REG_FILTER( FILT_FILTER_SINC3_SIN1 )\
                       | AD7124_FILT_REG_REJ60 | AD7124_FILT_REG_POST_FILTER( 0 ) | AD7124_FILT_REG_FS( 120 ), SIZE_BYTE3 );
                       
    ///写AD7124 滤波寄存器1 sinc3+SIN1 快速模式 120  8.89Hz 以16为基数计算均值)
    Ad7124_Write_Regs( AD7124_FILT1_REG, AD7124_FILT_REG_FILTER( FILT_FILTER_SINC3_SIN1 )\
                       | AD7124_FILT_REG_REJ60 | AD7124_FILT_REG_POST_FILTER( 0 ) | AD7124_FILT_REG_FS( 120 ), SIZE_BYTE3 );

    Ad7124_Write_Regs( AD7124_IO_CTRL2_REG, AD7124_IO_CTRL2_REG_GPIO_VBIAS0, Ad7124Regs[AD7124_IO_CTRL2_REG].size ); 
}

因终端客户保密,发不了全部代码头文件及宏定义(这些宏定义就是寄存器配置参数值,请自行参考手册)。AD7124寄存器读写寄存用 STM32硬件SPI读取

实测K热电偶电压读取。 uV小数点后面丢弃。电压稳定在±1uV
AD7124-4 实测热电偶数据读取,电压精度到稳定到±1uV, 电压波动260nV, 温度精度到±0.01℃_第1张图片
转换成K热电偶温度,温度稳定在±0.01℃
AD7124-4 实测热电偶数据读取,电压精度到稳定到±1uV, 电压波动260nV, 温度精度到±0.01℃_第2张图片
实测 uV小数量点后面3位 ,实测数据波动 260nV. 与手册所写Sinc3 + Sinc1滤波器 SPS8.89配置 噪声0.036(RMS)X6.6=0.2376uV 结果比较接近。(当然用ADC自行读取,比不上示波器更精准)
AD7124-4 实测热电偶数据读取,电压精度到稳定到±1uV, 电压波动260nV, 温度精度到±0.01℃_第3张图片
AD7124-4 实测热电偶数据读取,电压精度到稳定到±1uV, 电压波动260nV, 温度精度到±0.01℃_第4张图片

你可能感兴趣的:(单片机,stm32)