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.

msp430 i2041 sd24采样精度不够?

Other Parts Discussed in Thread: MSP430I2041

param.oversampleRatio = SD24_OVERSAMPLE_256;   //过采样 32 64 128 256

Ch0results = (int32_t)SD24_getHighWordResults(SD24_BASE, SD24_CONVERTER_0);

给个恒定电压,采样出来的精度在10毫伏左右,请教下,如何完善精度问题

  • 您是否是采用TI例程进行测试的?您的参考电压是什么?

    note: 您需要确保切换SD24LSBACC位以捕获所有24位


    另外需要注意的是当您超过特定GAIN的建议差分输入电压VID时,ADC可能没有指定的性能。例如,对于GAIN = 1,MSP430i2041的建议最大VID为+/- 928mV。您可以在数据表(www.ti.com/.../msp430i2041.pdf)的第24页上找到Table 5-21. SD24 Input Range。
  • 这是我的sd24的初始化。

    这是我的sd24初始化。
    void impr_SD24_init(void)
    {
    SD24_init(SD24_BASE, SD24_REF_INTERNAL); //内部参考电平

    //Group with Channel 0
    SD24_initConverterAdvancedParam param = { 0 };
    // Enable interrupt
    param.converter = SD24_CONVERTER_2; //通道
    //param.conversionMode = SD24_CONTINUOUS_MODE; //采样模式 连续 SD24_SINGLE_MODE
    param.conversionMode = SD24_SINGLE_MODE;
    /*
    #define SD24_DATA_FORMAT_BINARY (0x00)
    #define SD24_DATA_FORMAT_2COMPLEMENT (SD24DF)
    */
    param.groupEnable = SD24_NOT_GROUPED;
    /*
    #define SD24_NOT_GROUPED (0x00)
    #define SD24_GROUPED (SD24GRP) //分组
    */
    param.inputChannel = SD24_INPUT_CH_TEMPERATURE;
    //param.inputChannel = SD24_INPUT_CH_ANALOG; // 输入类型 模拟量
    /*
    #define SD24_INPUT_CH_ANALOG (SD24INCH_0)
    #define SD24_INPUT_CH_TEMPERATURE (SD24INCH_6) //温度
    */
    param.dataFormat = SD24_DATA_FORMAT_2COMPLEMENT;
    /*
    #define SD24_DATA_FORMAT_BINARY (0x00)
    #define SD24_DATA_FORMAT_2COMPLEMENT (SD24DF) //数据显示
    */
    param.interruptDelay = SD24_FOURTH_SAMPLE_INTERRUPT; //第三通道中断
    param.oversampleRatio = SD24_OVERSAMPLE_256; //过采样 32 64 128 256
    param.gain = SD24_GAIN_1; //PGA增益
    SD24_initConverterAdvanced(SD24_BASE, &param);

    param.converter = SD24_CONVERTER_0;
    param.conversionMode = SD24_SINGLE_MODE;
    param.groupEnable = SD24_NOT_GROUPED;
    param.inputChannel = SD24_INPUT_CH_ANALOG;
    param.dataFormat = SD24_DATA_FORMAT_2COMPLEMENT;
    param.interruptDelay = SD24_FOURTH_SAMPLE_INTERRUPT;
    param.oversampleRatio = SD24_OVERSAMPLE_256;
    param.gain = SD24_GAIN_1;
    SD24_initConverterAdvanced(SD24_BASE, &param);

    param.converter = SD24_CONVERTER_1;
    param.conversionMode = SD24_SINGLE_MODE;
    param.groupEnable = SD24_NOT_GROUPED;
    param.inputChannel = SD24_INPUT_CH_ANALOG;

    param.dataFormat = SD24_DATA_FORMAT_2COMPLEMENT;
    param.interruptDelay = SD24_FOURTH_SAMPLE_INTERRUPT;
    param.oversampleRatio = SD24_OVERSAMPLE_256;
    param.gain = SD24_GAIN_1;
    SD24_initConverterAdvanced(SD24_BASE, &param);


    SD24_enableInterrupt(SD24_BASE, SD24_CONVERTER_2, SD24_CONVERTER_INTERRUPT);
    ///__delay_cycles(10);
    }

    你上述所说的有点不明白,应该如何调整呀?
  • 你指的捕获是接收采样的值,需要用32位接收吗?这里的int是16位的,我给的恒定电压很小啊,16位的可以装下。但是精度不够
  • 精度的问题,除了可能是寄存器配置问题,也有可能是硬件问题的。
    建议同时提供下电路图。
x 出现错误。请重试或与管理员联系。