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.

[参考译文] MSP430F5529:如何从 ADC12读取 PWM ADC?

Guru**** 2590990 points
Other Parts Discussed in Thread: MSP430F5529

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1061495/msp430f5529-how-can-read-pwm-adc-from-adc12

主题中讨论的其他器件:MSP430F5529

尊敬的所有人:

我想在 PWM 高三角时刻读取 PWM ADC 值。  

我使用 TA2_2 输出 PWM。 现在、我想在 PWM 高电平触发时读取 ADC 值吗?

如何设置? (以下是我的设置、但不有用)

-- PWM ----

GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN5);

control_pilot_PWM_params.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;
control_pilot_PWM_params.clockSourceDivider = TIMER_A_CLOCKSOURCE_divider;
CONTRAL_PILOG_PWM_params.timerPeriod = PWM_TIMER_PERIOD;
control_pilot_pwm_params.compareRegister = PWM_COMPARE_RESGISTER;
control_pilot_pwm_params.compareOutputMode = TIMER_A_OUTPUTMODE_RESET_SET;
CONTRAL_PILOG_PWM_params.dutyCycle =占空比;

 ADC12 ----

GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P6、GPIO_PIN4);

/*初始化 ADC12_A 模块*/
ADC12_A_init (ADC12_A_base、
ADC12_A_SAMPLEHOLDSOURCE_SC、
ADC12_A_CLOCKSOURCE_ADC12OSC、
ADC12_A_CLOCKDIVIDER_1);

ADC12_A_setupSamplingTimer (ADC12_A_base、
ADC12_A_CYCLEHOLD_96_CYCLES、
ADC12_A_CYCLEHOLD_4_CYCLES、
ADC12_A_MULTIPLESAMPLESDISABLE);

/*配置内存缓冲区*/
ADC12_A_configureMemoryParam CONFIG_param ={0};
CONFIG_param.memoryBufferControlIndex = ADC12_A_MEMORY_0;
config_param.inputSourceSelect = ADC12_A_INPUT_A4;
CONFIG_param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_AVCC;
CONFIG_param.NULVREFVoltageSourceSelect = ADC12_A_VREFNEG_AVSS;
CONFIG_param.endOfSequence = ADC12_A_ENDOSEQUENCE;

ADC12_A_configureMemory (ADC12_A_base、
CONFIG_param);

ADC12_A_setResolution (ADC12_A_base、
ADC12_A_resolution_12位);

ADC12_A_ENABLE (ADC12_A_base);

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

    您好、威海市

    实际上、MSP430F5529可以使用计时器来触发 ADC 采样、您可以使用该寄存器来控制采样源:

    您可以在数据表中找到触发源:

    然后、您可以参考以下示例代码:

    https://dev.ti.com/tirex/explore/node?node=ACnpdkh9h39muQoWLY8rUg__IOGqZri__LATEST

    谢谢!

    此致

    Johnson

    此致

    Johnson

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

     尊敬的 Johnson:

    我的 PWM 输出使用 P2_5/TA2_2 (1kHz 和20%占空比)、并希望在高电平使用时捕获 ADC。

    根据您的信息、我需要将初始 TA0_1设置为1kHz 频率。 对吗?

    然后将 ADC12时钟源设置为 ADC12_A_CLOCKSOURCE_SMCLK、 并将 samplpleHoldSignalSourceSelect 设置为 ADC12_A_SAMPLEHOLDSOURCE_1?

    该设置是否可以达到我的目标?

    我的代码:

    --定时器设置--

    //以 SMCLK 为源的连续模式中的启动定时器

    Timer_A_initContinuousModeParam initContParam ={0};

    initContParam.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;

    initContParam.clockSourceDivider = TIMER_A_CLOCKSOURCE_divider;  

    initContParam.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_DISABLE;

    initContParam.timerClear = timer_a_do _clear;

    initContParam.startTimer = false;

    Timer_A_initContinuousMode (timer_A0_BASE、&initContParam);

    //初始化比较模式

    Timer_A_clearCaptureCompareInterrupt (TIMER_A0_BASE、TIMER_A_CAPTURECOMPARE 寄存器_1);

    Timer_A_initCompareModeParam initCompParam ={0};

    initCompParam.compareRegister = TIMER_A_CAPTURECMPARE 寄存器_1;

    initCompParam.compareInterruptEnable = TIMER_A_CAPTURECMPARE INTERRUPT_ENABLE;

    initCompParam.compareOutputMode = TIMER_A_OUTPUTMODE_SET_RESET;

    initCompParam.compareValue = COMPARE_VALUE;

    Timer_A_initCompareMode (timer_A0_BASE、&initCompParam);

    Timer_A_startCounter (timer_A0_BASE、timer_A_Continuous_mode);

    --- ADC 设置---

    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P6、GPIO_PIN4);

    /*初始化 ADC12_A 模块*/
    ADC12_A_init (ADC12_A_base、
    ADC12_A_SAMPLEHOLDSOURCE_1、
    ADC12_A_CLOCKSOURCE_SMCLK、
    ADC12_A_CLOCKDIVIDER_1);

    ADC12_A_setupSamplingTimer (ADC12_A_base、
    ADC12_A_CYCLEHOLD_96_CYCLES、
    ADC12_A_CYCLEHOLD_4_CYCLES、
    ADC12_A_MULTIPLESAMPLESDISABLE);

    /*配置内存缓冲区*/
    ADC12_A_configureMemoryParam CONFIG_param ={0};
    CONFIG_param.memoryBufferControlIndex = ADC12_A_MEMORY_0;
    config_param.inputSourceSelect = ADC12_A_INPUT_A4;
    CONFIG_param.positiveRefVoltageSourceSelect = ADC12_A_VREFPOS_AVCC;
    CONFIG_param.NULVREFVoltageSourceSelect = ADC12_A_VREFNEG_AVSS;
    CONFIG_param.endOfSequence = ADC12_A_ENDOSEQUENCE;

    ADC12_A_configureMemory (ADC12_A_base、&CONFIG_param);

    ADC12_A_setResolution (ADC12_A_base、ADC12_A_resolution_12位);

    ADC12_A_ENABLE (ADC12_A_base);

    谢谢。

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

    尊敬的 Zhengwei:

    正确答案:

    [引用 userid="259746" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/MSP-low-power-microcontrollers-forum/1061495/msp430f5529-how-Can-read-PWM-ADC-from-ADC12/3927077#SOURCE_ADC12_ADC12_SALDC12_SOURCE_ADC12_ADC12_ADC12_SAC12_SOURCE_ADC12_ADC12_ADC12_ADC12_ADC12_SAC12_SOURCE_ADC12_ADC12_ADC12_ADC12_ADCK_OUTHRESHOLDC12_RESPLECK_    

    也许您可以通过一些断点来调试您的代码。

    另一种方法是启用 TA CC1中断,然后在此中断路由中运行 ADC 采样代码。

    谢谢!

    此致

    Johnson

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

    尊敬的 Johnson:

    我的上述代码未启用 TA CC1中断? 如果没有、应如何启用? 或者无法进入  Continuous_mode?  

    谢谢。

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

    您好、Wei Huang、

    您可以参考以下示例代码来启用 CC1中断:

    https://dev.ti.com/tirex/explore/node?node=AFkOtmwplfDAIL4v7fFedQ__IOGqZri__LATEST

    谢谢!

    最恰当的考虑