This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ADS131B04-Q1:ADS131M04和 ADS131B04-Q1之间的兼容性

Guru**** 657500 points
Other Parts Discussed in Thread: ADS131M04, ADS131B04-Q1
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/994536/ads131b04-q1-compatibility-between-ads131m04-and-ads131b04-q1

器件型号:ADS131B04-Q1
主题中讨论的其他部件:ADS131M04ADC-energe-metadu度 量 LIB-SW

ADS131M04对与"极小"频率混合的信号进行采样、通过数字滤波器(IIR)进行传递并解调。 这是预期的结果。
如果您将其替换为 ADS131B04-Q1、即使使用了相同的电路和相同的寄存器设置、也会获得不同的结果。
首先、它不会成为正弦波并受到干扰。
然后、几秒钟后、振幅几乎消失了。
全局斩波函数是否不同?
它是否不兼容?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Iwakiri-San、您好!

    感谢您的发帖。

    您能否提供有关输入信号、源、信号链和寄存器设置的更多详细信息?

    寄存器映射非常接近、但我们应该检查所有设置以确保正确。

    此致、

    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Tank You、Ryan-San。

    MCU 是 MSP432P4111。

    源代码基于 ADC-energe-metadio-LIB-SW。

    寄存器设置头文件来自 sbac278.ADS131B04-Q1示例 C 代码。

    无法编译的常量会被注释掉。

    没有其他区别。

    bool adcStartup(void)
    {
    /* (OPTIONAL) Provide additional delay time for power supply settling */
    #ifndef __ICCARM__ // CCS Project
    usleep(DELAY_5US);
    #else // IAR Project
    SysCtlDelay(DELAY_5US);
    #endif
    
    // Configure Inputs
    // Port P2
    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(ADS_DRDY0_PORT, ADS_DRDY0_PIN, GPIO_PRIMARY_MODULE_FUNCTION);
    MAP_GPIO_setAsInputPin(ADS_DRDY0_PORT, ADS_DRDY0_PIN);
    
    // Configure Outputs
    // Port P2
    MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(ADS_RESET_SYNC_PORT, ADS_RESET_SYNC_PIN, GPIO_PRIMARY_MODULE_FUNCTION);
    MAP_GPIO_setDriveStrengthLow(ADS_RESET_SYNC_PORT, ADS_RESET_SYNC_PIN);
    MAP_GPIO_setAsOutputPin(ADS_RESET_SYNC_PORT, ADS_RESET_SYNC_PIN);
    MAP_GPIO_setOutputHighOnPin(ADS_RESET_SYNC_PORT, ADS_RESET_SYNC_PIN);
    #ifdef nCS_PIN_ENABLED
    MAP_GPIO_setDriveStrengthLow(ADS_CS0_PORT, ADS_CS0_PIN);
    MAP_GPIO_setAsOutputPin(ADS_CS0_PORT, ADS_CS0_PIN);
    #ifdef SINGLE_SPI_MULTIPLE_ADC
    MAP_GPIO_setDriveStrengthLow(ADS_CS1_PORT, ADS_CS1_PIN);
    MAP_GPIO_setAsOutputPin(ADS_CS1_PORT, ADS_CS1_PIN);
    MAP_GPIO_setDriveStrengthLow(ADS_CS2_PORT, ADS_CS2_PIN);
    MAP_GPIO_setAsOutputPin(ADS_CS2_PORT, ADS_CS2_PIN);
    #endif
    #endif
    
    // IIRフィルタ初期化
    init_arm_iir();
    memset(&Z, 0, sizeof(Z));
    memset(&F, 0, sizeof(F));
    memset(&H, 0, sizeof(H));
    Freq = 0;
    
    /* (OPTIONAL) Toggle nRESET pin to ensure default register settings. */
    /* NOTE: This also ensures that the device registers are unlocked. */
    toggleRESET();
    
    /* (REQUIRED) Initialize internal 'registerMap' array with device default settings */
    restoreRegisterDefaults();
    
    for (size_t adc_index = 0; adc_index < NUM_ADS131M0X; adc_index++)
    {
    /* (OPTIONAL) Validate first response word when beginning SPI communication: (0xFF20 | CHANCNT) */
    uint16_t response = sendCommand(OPCODE_NULL, adc_index);
    
    /* Disable ADC channels to send short frames for configuring ADC */
    if (!writeSingleRegister(CLOCK_ADDRESS, (CLOCK_DEFAULT & ~(CLOCK_CLK_SEL_MASK | CLOCK_CH3_EN_MASK | CLOCK_CH2_EN_MASK | CLOCK_CH1_EN_MASK | CLOCK_CH0_EN_MASK | CLOCK_OSR_MASK)) | CLOCK_OSR_PWR, true, adc_index)) return false;
    #ifdef CRC_CCITT
    if (!writeSingleRegister(MODE_ADDRESS, MODE_CRC_TYPE_16BIT_CCITT | MODE_WLENGTH_24BIT /*| MODE_DRDY_SEL_MOST_LAGGING*/ | MODE_DRDY_HiZ_LOGIC_HIGH /*| MODE_DRDY_FMT_LOGIC_LOW*/, true, adc_index)) return false;
    #else
    if (!writeSingleRegister(MODE_ADDRESS, MODE_CRC_TYPE_16BIT_ANSI | MODE_WLENGTH_24BIT | MODE_DRDY_SEL_MOST_LAGGING | MODE_DRDY_HiZ_LOGIC_HIGH | MODE_DRDY_FMT_LOGIC_LOW, true, adc_index)) return false;
    #endif
    
    if (!writeSingleRegister(GAIN_ADDRESS, (GAIN_ADC_CHANNEL3) << (ADC_CHANNEL3 << 2) | (GAIN_ADC_CHANNEL2) << (ADC_CHANNEL2 << 2) | (GAIN_ADC_CHANNEL1) << (ADC_CHANNEL1 << 2) | (GAIN_ADC_CHANNEL0) << (ADC_CHANNEL0 << 2), true, adc_index)) return false;
    
    if (!writeSingleRegister(CH0_CFG_ADDRESS + ADC_CHANNEL3 * (CH1_CFG_ADDRESS - CH0_CFG_ADDRESS), CH0_CFG_MUX0_AIN0P_AIN0N /*| SET_PHASE_REGISTER_VALUE(PHASE_ADC_CHANNEL3)*/, true, adc_index)) return false;
    if (!writeSingleRegister(CH0_CFG_ADDRESS + ADC_CHANNEL2 * (CH1_CFG_ADDRESS - CH0_CFG_ADDRESS), CH0_CFG_MUX0_AIN0P_AIN0N /*| SET_PHASE_REGISTER_VALUE(PHASE_ADC_CHANNEL2)*/, true, adc_index)) return false;
    if (!writeSingleRegister(CH0_CFG_ADDRESS + ADC_CHANNEL1 * (CH1_CFG_ADDRESS - CH0_CFG_ADDRESS), CH0_CFG_MUX0_AIN0P_AIN0N /*| SET_PHASE_REGISTER_VALUE(PHASE_ADC_CHANNEL1)*/, true, adc_index)) return false;
    if (!writeSingleRegister(CH0_CFG_ADDRESS + ADC_CHANNEL0 * (CH1_CFG_ADDRESS - CH0_CFG_ADDRESS), CH0_CFG_MUX0_AIN0P_AIN0N /*| SET_PHASE_REGISTER_VALUE(PHASE_ADC_CHANNEL0)*/, true, adc_index)) return false;
    
    #ifdef CURRENT_DETECTION_ENABLED
    if (!writeSingleRegister(CH0_OCAL_MSB_ADDRESS + ADC_CHANNEL0 * (CH1_OCAL_MSB_ADDRESS - CH0_OCAL_MSB_ADDRESS), (20640 & 0xFFFFFF00) >> 8, true, adc_index)) return false;
    if (!writeSingleRegister(CH0_OCAL_LSB_ADDRESS + ADC_CHANNEL0 * (CH1_OCAL_LSB_ADDRESS - CH0_OCAL_LSB_ADDRESS), (20640 & 0x000000FF) << 8, true, adc_index)) return false;
    if (!writeSingleRegister(CH0_OCAL_MSB_ADDRESS + ADC_CHANNEL1 * (CH1_OCAL_MSB_ADDRESS - CH0_OCAL_MSB_ADDRESS), (4109 & 0xFFFFFF00) >> 8, true, adc_index)) return false;
    if (!writeSingleRegister(CH0_OCAL_LSB_ADDRESS + ADC_CHANNEL1 * (CH1_OCAL_LSB_ADDRESS - CH0_OCAL_LSB_ADDRESS), (4109 & 0x000000FF) << 8, true, adc_index)) return false;
    #endif
    
    #if (SAMPLE_RATE == 2000)
    #elif (SAMPLE_RATE == 2930) || (SAMPLE_RATE == 4000) || (SAMPLE_RATE == 3906)
    if (!writeSingleRegister(CLOCK_ADDRESS, CLOCK_CH3_EN_ENABLED | CLOCK_CH2_EN_ENABLED | CLOCK_CH1_EN_ENABLED | CLOCK_CH0_EN_ENABLED | CLOCK_OSR_PWR, true, adc_index)) return false;
    #else // SAMPLE_RATES = 5859, 6000, 6400, 7812 or 8000
    if (!writeSingleRegister(CLOCK_ADDRESS, CLOCK_CLK_SEL_EXTERNAL | CLOCK_CH3_EN_ENABLED | CLOCK_CH2_EN_ENABLED | CLOCK_CH1_EN_ENABLED | CLOCK_CH0_EN_ENABLED | CLOCK_OSR_PWR, true, adc_index)) return false;
    #endif
    
    #ifdef CURRENT_DETECTION_ENABLED
    if (!writeSingleRegister(THRSHLD_MSB_ADDRESS, (CURRENT_DETECTION_THRESHOLD_VALUE & 0x00FFFF00) >> 8, true, adc_index)) return false;
    // Not all devices have DC filter
    if (!writeSingleRegister(THRSHLD_LSB_ADDRESS, (CURRENT_DETECTION_THRESHOLD_VALUE & 0x000000FF) << 8 | DC_BLOCK_COEFFICIENT, true, adc_index)) return false;
    #endif
    
    if (!writeSingleRegister(CFG_ADDRESS, CFG_GC_EN /*| CFG_CD_ALLCH_ANY_CHANNEL | CFG_CD_NUM_1 | CFG_CD_LEN_128 | CFG_CD_EN_DISABLED*/, true, adc_index)) return false;
    }
    
    return true;
    
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Iwakiri-San、您好!

    我知道您从我们的电能计量软件库开始、还导入了我们的 ADS131B04-Q1示例代码头文件。  一些寄存器名称和宏定义可能不同。 请仔细检查寄存器名称、地址和宏定义是否正确匹配。

    此致、

    Ryan