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.

[参考译文] MSP432P401R:msp432 ADC 转换问题

Guru**** 2582405 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/612973/msp432p401r-msp432-adc-conversion-issue

器件型号:MSP432P401R

您好!

我使用的是2.5V 基准电压、分辨率为14位的 msp432内部 ADC。 但当输入电压为1.6V 时、转换后我将获得1.1V 的电压。 存在0.5V 的差值。即使使用 TI 提供的非 RTOS 代码、同一条件下 I get 的值也是1.2V。

请建议如何提高读数的精度? 此外、对于转换结果、我应该考虑多大的容差?

谢谢、

-Suraj

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否共享您的设置代码和代码来计算电压?

    您测量的是直流电压还是交流电压? 您是否使用万用表检查以确保引脚上的电压为1.6V?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ADC14_enableModule(); 
    ADC14_initModule (ADC_CLOCKSOURCE_MCLK、ADC_PREDIVIDER_1、ADC_DIVIDER_1、0);
    
    ADC14_configureSingleSampleMode (ADC_MEM0、TRUE);
    
    /*将 GPIO 引脚设置为模拟输入,包括参考*/
    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P5、
    GPIO_PIN7 | GPIO_PIN6 | GPIO_PIN5 | GPIO_PIN4 | GPIO_PIN3、GPIO_TICE_MODULE_FUNCTION);
    
    
    Int16 ADC_ReadValue (Number 类型通道)
    {
    开关(通道)
    {
    案例 Sensor0:
    ADC14_configureConversionMemory (ADC_MEM0、ADC_VREFPS_EXTPOS_VREFNEG_EXTNEG、ADC_INPUT_A0、false); //启用 Sensor0读取 P5.5
    
    中断;
    
    案例 Sensor1:
    ADC14_configureConversionMemory (ADC_MEM0、ADC_VREFPS_EXTPOS_VREFNEG_EXTNEG、ADC_INPUT_A1、false); //启用 Sensor1读数 P5.4
    
    中断;
    
    外壳电池:
    ADC14_configureConversionMemory (ADC_MEM0、ADC_VREFPS_EXTPOS_VREFNEG_EXTNEG、ADC_INPUT_A2、false); //启用 Vbat 读数 P5.3
    
    中断;
    
    案例卡1:
    
    ADC14_configureConversionMemory (ADC_MEM0、ADC_VREFPS_EXTPOS_VREFNEG_EXTNEG、ADC_INPUT_A22、false); //启用 BLE 读取 P8.3
    
    中断;
    
    案例卡2:
    ADC14_configureConversionMemory (ADC_MEM0、ADC_VREFPS_EXTPOS_VREFNEG_EXTNEG、ADC_INPUT_A19、false); //启用 NBIOT 读数 P8.6
    
    中断;
    
    默认值:
    
    中断;
    }
    
    ADC14_enableSampleTimer (ADC_AUTOMODIFY_DIOTIVation);
    ADC14_enableInterrupt (ADC_INT0);
    
    /*启用中断*/
    INTERRUPT_enableInterrupt (INT_ADC14);
    interrupt_enableMaster();
    
    /*触发样本开始*/
    ADC14_enableConversion();
    ADC14_toggleConversionTrigg();
    
    
    // while (!(ADC14_getInterruptStatus ()& ADC_INT0));
    
    Semaphore_pend (sem、BIOS_wait_forever);
    
    返回 V_normalizedADCRes;
    
    }
    
    //只要转换完成并
    *放入 ADC_MEM0中,就会发生此中断。 */
    void ADC14_IRQHandler (void)
    {
    uint64_t status;
    静态易失性 U32 V_RawData_u32r = 0;
    静态易失性浮点 v_TempData_U32r;
    
    status = ADC14_getEnabableInterruptStatus();
    ADC14_clearInterruptFlag (status);
    /*正在禁用转换*/
    ADC14_disableConversion();
    
    if (status & ADC_INT0) //当 ADC_MEM0位置完成一个转换周期时、ADC_INT0中断将被置位。
    {
    V_RawData_u32r = ADC14_getResult (ADC_MEM0);
    V_TempData_U32r =(V_RawData_u32r * 3.3f)/ 16384;
    
    }
    V_normalizedADCRes =(Int16)((float) v_TempData_U32r * 1000.0);//将 V 转换为 mV
    
    Semaphore_post (sem);
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    以上代码是我使用的代码。 与 ADC_EXTERNAL_ref 的 TI ADC driverlib 示例代码相同

    问题是:
    在传感器0的情况下、ADC 的输入端的直流电压为1.65V 时、读取电压为1.868V。
    2.同一 ADC 和同一程序在输入直流电压为1.76V 时读出1.61V 的卡1。 使用 JTAG 调试器检查 ADC 输出电压、并使用万用表测试电路上的电压。

    下面是用于计算转换后的 ADC 值的程序、它从 TI RTOS 中的任务运行。 为电路提供了3.3v 的外部基准。

    ADC 的初始化正在 MSP_EXP432P401R_initADC ()函数中的 MSP_EXP432P401R.c 文件中完成。

    所有这些都是因为用于 ADC 转换的 TI RTOS API 也返回了错误值。

    我尝试使用 FPU、但问题相同。 我没有得到此错误的原因。 请帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    V_normalizedADCRes;声明为易失性吗?

    没有理由使 ISR 中的变量具有静态易失性。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我错误地将其标记为答案。 是的、V_normalizedADCRes 被声明为易失性。