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 ADC14多通道仅转换序列中的一个值。

Guru**** 2589275 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/620701/msp432p401r-msp432-adc14-multiple-channel-only-converts-one-value-in-the-sequence

部件号:MSP432P401R

您好,

我遇到了这样一个问题:ADC设置为多序列模式,但只对ADC_MEM0执行读数,而不对其他模式进行更改。 我正在检查问题,方法是将ADC_MEM0,ADC_MEM1和ADC_MEM2设置到相同的模拟输入,以查看是否得到相同的结果。模拟输入连接了3.3V输入,我正在使用ADC的14位转换。 我通过串行将结果发送到终端,我看到以下内容:

ADC_MEM0 = 1.6383万
ADC_MEM1 = 3488
ADC_MEM2 = 5576

但是,它们应该是相同的。 此外,如果我更改电压,ADC_MEM1和ADC_MEM2不会更改各自的值。 我的代码如下。 我使用主循环调用MAP_ADC14_ToggleConversionTrigger函数。 你有什么建议吗?

void init_adc_no_temp (void)
{

/*将参考电压设置为2.5 并启用温度传感器*/

MAP_REF_A_setReferenceVoltage (REF_A_VREF2_5V);
MAP_REF_A_enableReferenceVoltage();

/*在温度传感器已布设的情况下初始化ADC (MCLK/1/1)*/
MAP_ADC14_enableModule();
MAP_ADC14_INITModule (ADC_CLOCKSOURCE_MCLK,ADC_PREDIVIDER_1,ADC_DIVIDER_1,0);

/*将GPIO引脚设置为模拟输入(和参考)*/
MAP_GPIO设置外围模块功能输入引脚(GPIO_PORT_P4,
GPIO _PIN7 | GPIO _PIN5,GPIO _STILEARY_MODULE_FUNCTION);

/*配置ADC内存*/
MAP_ADC14_configureMultiSequenceMode (ADC_MEM0,ADC_MEM2,FALSE);

MAP_ADC14_configureConversionMemory(ADC_MEM0, ADC_VREFPOS_INTBUF_VREFNEG_VSS,,
ADC_INPUT_A6,ADC_NONDIFERENIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM1,ADC_VREFPOS_INTBUF_VREFNEG_VSS,
ADC_INPUT_A6,ADC_NONDIFERENIAL_INPUT);
MAP_ADC14_configureConversionMemory (ADC_MEM2,ADC_VREFPOS_INTBUF_VREFNEG_VSS,
ADC_INPUT_A6,ADC_NONDIFERENIAL_INPUT);

/*配置192的采样/保持时间*/
MAP_ADC14_setSampleHoldTime (ADC_PULSE_WIDES_192,ADC_PULSE_WIDES_192);

MAP_ADC14_enableInterrupt (ADC_INT2);

/*启用中断*/
MAP_Interrupt_enableInterrupt (INT_ADC14);
MAP_Interrupt_enableMaster();

MAP_ADC14_enableSampleTimer(ADC_AUTOMATICAL_ITED);

/*触发样本开始*/
MAP_ADC14_enableConversion();
MAP_ADC14_toggleConversionTrigger();
}

作废ADC14_IRQHandler(void)
{
UINT64_t状态;
char strToSendLocal[200]="";
	uint16_t结果Buffer[3];
状态= MAP_ADC14_getEnabledInterruptStatus();
MAP_ADC14_clearInterruptFlag (状态);

IF (状态和ADC_INT2)
{
MAP_ADC14_getMultiSequenceResult (结果缓冲区);
//MAP_ADC14_getResultArray (ADC_MEM0,ADC_MEM2,resultsBuffer);
Sprintf (strToSendLocal,"所有原始值:%i,%i,%i",结果缓冲区[0],结果缓冲区[1],结果缓冲区[2]);
sendStringToUART_A2(strToSendLocal, sizeof(strToSendLocal));//向UART2发送消息

}
} 

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

    考虑到是周末,我不在办公室对此进行测试,但我相信您的问题在于您为ADC设置GPIO /信道的方式。

    将转换内存全部配置为响应A6通道。 但是,您的A6只能在WFP 4.7 上使用。

    对于WFP 4.5 ,您需要ADC_INPUT_A8;对于WFP 4.6 ,需要ADC_INPUT_A7。

    我只想假设你想衡量一下WFP 4.6 的成绩。 您目前没有初始化它,因此您需要添加GPIO _PIN6,正如我在下面所做的那样,以启用它并使用A7通道。

    MAP_GPIO设置外围模块功能输入引脚(GPIO_PORT_P4,
    GPIO _PIN7 | GPIO _PIN6 | GPIO _PIN5,GPIO _STILEARY_MODULE_FUNCTION);

    有关详细信息,请参阅数据表的表4-1引脚属性。

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

    您好,Evan:  

    感谢您的回复。 您回答正确,我将把同一频道(A6)指向内存0,1,2。 我这样做是为了比较每个内存在多通道读取后接收到的值。 我的问题是内存0正确读取电压,但是MEM1和MEM2不正确。 事实上,MEM1和MEM2不会改变它们的值。 我得到的值 是:

    ADC_MEM0 = 1.6383万  
    ADC_MEM1 = 3488
    ADC_MEM2 = 5576

    我希望每个内存位置上的值都相同,因为它们正在查看相同的模拟针脚,但情况并非如此。 我是否缺少任何设置?

    瓦休

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

    Walo,


    很抱歉,我误解了您原来的问题。 输入的阻抗是多少? 您是从LaunchPad上的VCC还是从其他地方插入?

    如果您的阻抗较高,则需要降低采样速率。 我认为发生的情况是您正在进行采样,但整体阻抗会导致引脚上的有效电压下降。 接下来的两个样本将在电压骤降的中间进行采样。

    降低采样频率会发生什么情况?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    第20.2 .6.3 节“采样时间注意事项”在上面对此主题进行了详细介绍。 请在TRM.www.ti.com/.../litabsmultiplefilelist.tsp中查看此信息
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Walo,

    由于不活动,我认为现在关闭了。 请重新发布以打开此线程以获取与此线程相关的任何信息,否则,对于任何其他问题,请创建新线程。 谢谢!