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:ADC14库

Guru**** 2587345 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/608295/msp432p401r-adc14-library

器件型号:MSP432P401R

您好!

 我使用了提供的 Project Explorer 示例的混合、以通过命令重复单次转换。

 GPIO 引脚上的输入电压 为~ 1VDC。

 我看到的是、如果我命令每次测量大约测量一秒、 每个测量值 的返回值都会减小。

 如果我在两次测量之间等待几秒钟、我会看到完整的1 VDC。

 测量之间是否需要某种恢复时间?

 我将尝试剪切并粘贴以下感兴趣的代码:

/*

 ************------------------------------------------------------------------------------------------------

 *

int a2d_init (void)

int status =0;

 /*

  *从 TI Resource Explorer 修改的示例、adc14_single_conversion 重复

  *浮点初始化已移至 REU_init ()

  *

  *此例程中的某些内容至关重要、必须在每次测量之前调用

  *

  MAP_REF_A_setReferenceVoltage (REF_A_VREF2_5V);

  map_REF_A_enableReferenceVoltage();

  /*初始化 ADC (MCLK/1/4)*/

  MAP_ADC14_enableModule();

  /* ADC_NOROUTE =映射到外部引脚*/

  MAP_ADC14_initModule (ADC_CLOCKSOURCE_MCLK、ADC_PREDIVIDER_1、ADC_DIVIDER_4、ADC_NOROUTE);

  /*启用中断*/

  MAP_ADC14_enableInterrupt (ADC_INT0);

  MAP_Interrupt_enableInterrupt (INT_ADC14);

  MAP_Interrupt_enableMaster();

  //在此处配置 NOR 触发器。

  退货状态;

}//结束 a2d_init

int a2d_set_get (int 端口、int 引脚、uint16_t * adc_valp)

int status =0;

int ii;

a2d_f = false;  //请参阅 ADC14_IRQHandler ()

a2d_init();

/*配置 GPIO (5.1 A4)*/

MAP_GPIO_setPeripheralModuleFunctionInputPin (端口、引脚、

                       GPIO_TICE_MODULE_FUNCTION);

/*配置 ADC 内存*/

MAP_ADC14_configureSingleSampleMode (ADC_MEM0、TRUE);

MAP_ADC14_configureConversionMemory (ADC_MEM0、ADC_VREFPS_AVCC_VREFNEG_VSS、

                   ADC_INPUT_A0、false);

/*配置采样计时器*/

MAP_ADC14_enableSampleTimer (ADC_MANUAL_DEACation);

/*启用/切换转换*/

MAP_ADC14_enableConversion();

MAP_ADC14_toggleConversionTrigger ();

for (ii = 0;ii < 50;ii +)  //循环等待完成

  {

 if (a2d_f)   //在中断处理程序中设置互斥量

  中断;

 代尔马女士(100);

如果(!a2d_f)

状态=-1;         //从未触发

sprintf (g_info、"A/D 从未触发。\r\n ");

if (g_uartbase!= 0)     //如果通信路径已初始化

 putUsart (g_info);     //输出到已知路径

其他

 putUsartSel (1、0、g_info); //还有谁在听?

 putUsartSel (3、0、g_info);

其他

*ADC_valp = curADCResult; //在中断处理程序中设置的值

退货状态;

}//结束 a2d_set_get

void ADC14_IRQHandler (void)

  uint64_t status = MAP_ADC14_getEnabableInterruptStatus();

  MAP_ADC14_clearInterruptFlag (status);

  IF (ADC_INT0和状态)

  {

    curADCResult = MAP_ADC14_getResult (ADC_MEM0);

    //map_ADC14_toggleConversionTrigger ();   //例如,不需要

    a2d_f = true;

    //map_ADC14_disableConversion(); //需要在否则不产生中断后重新初始化

  }

}/*结束 ADC14_IRQHandler */

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Robert、
    我建议查看相对于1V 信号源阻抗的采样保持时间。

    www.ti.com/.../slau356f.pdf

    有一个 API,ADC14_setSampleHoldTime, dev.ti.com/.../group__adc14__api.html ,它允许您将此时间从默认的4个 ADC 时钟周期增加。

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

    我尝试 将 setSampleHoldTime 设置为 ADC_PULSE_WIDTH _8、_16、_32和_128、但没有任何改进。

    还有其他建议吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Robert、
    感谢您的尝试。 我希望您会发现其中一个采样保持时间足够了。 您能否提供有关您正在测量的输出阻抗的更多说明? 您能否将运算放大器作为简单的电压跟随器来提供更高的驱动强度?

    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉、我直到今天才看到您的回复。 我们(我和硬件工程师)尝试了一些东西、问题已经发生了变化。

    是的、有一个电压跟随器经过调节、通过电阻器和电容器将其保持在1/2以下。
    我们只是尝试读取直流电压。

    到目前为止、我们学到了以下内容:
    使用内部1/2 VCC 测量、返回的电压正确/符合预期。
    2、改变外部电容、现在读取的外部电压不会在重复读取时下降。
    3、ADC 读取的电压为1.3V、电压表读取的电压为1.6V。

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

    更多信息。

    将示波器连接到 ADC 输入端的直流、直流顶部有纹波。

    定制电路板存在接地问题、必须先解决。