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.

[参考译文] PWM MSP432P401R

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/646119/pwm-msp432p401r

主题中讨论的其他部件:MSP432P401R

您好,我尝试理解定时器库中的代码。 我需要设置频率和占空比,但代码中没有解释/注释。有人能告诉我需要在哪里更改数字,以便我可以输入所需的频率和占空比吗? 另外,我需要在哪里将LED引脚设置为我的输出? 例如,我用WFP 1.0 来表示红色LED。 我尝试在网上查找一些示例,但关于msp432的信息太少。在这种情况下,没有LED亮起。我可以在哪里设置类似P1DIR = 0x00的内容? 用于WFP 1.0。 我想看到LED亮起

#include <ti/devices/msp432p4xx/driverlib/driverlib.h>

/*标准包括*/
#include <stdint.h>
#include <stdbool.h>

//![简单定时器A配置]
/* Timer_A PWM配置参数*/
Timer_a_PWMConfig pwmConfig =

       Timer_A_CLOCKSOURCE_SMCLK,
       Timer_a_CLOCKSOURCE_diver_1,
       3.2万,
       Timer_a_CAPTURECOMPare_register_1,
       Timer_a_OUTPUTMODE_RESET_SET,
       3200
};
//![简单定时器A配置]

内部主(无效)

   /*停止监视程序*/
   MAP_WDT_A_HoldTimer();

   //![简单定时器A示例]
   /*将MCLK设置为REFO,低频模式为128Khz
    *将SMCLK设置为64Khz */
   MAP_CS_setReference振 荡器频率(CS_REFO_128KHZ);
   MAP_CS_initClockSignal (CS_MCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_1);
   MAP_CS_initClockSignal (CS_SMCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_2);
   MAP_PCM_setPowerState(PCM_AM_LH_VCORE0);

   /*将2.4 的外围输出配置为PWM ,将WFP的6.7 配置为按钮
    *中断*/
   MAP_GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口P2,GPIO_PIN4,
           GPIO主要模块功能);
   MAP_GPIO_setAsInputPinWithPullUp阻 器(GPIO_PORT_P1, GPIO_PIN1);
   MAP_GPIO清除InterruptFlag (GPIO端口P1,GPIO PIN1);
   MAP_GPIO_enableInterrupt (GPIO端口_P1,GPIO _PIN1);

   /*将Timer_A配置为具有大约500ms和的周期
    * 10 % 的初始占空比(3200 tick) *
   MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig);
   //![简单定时器A示例]

   /*启用中断并启动监视程序计时器*/
   MAP_Interrupt_enableInterrupt (INT_Port1);
   MAP_Interrupt_enableSleepOnIsrExit();
   MAP_Interrupt_enableMaster();

   /*不使用时休眠*/
   同时(1)
   {
       MAP_PCM_GotoLPM0();
   }
}

/*端口1 ISR -此ISR将逐步增加PWM的占空比
 *按下按钮
 */
void Port1_IRQHandler(void)

   UINT32_t状态= MAP_GPIO _getEnabledInterruptStatus (GPIO端口P1);
   MAP_GPIO清除InterruptFlag (GPIO端口P1,状态);

   IF (状态和GPIO _PIN1)
   {
       IF (pwmConfig.dutyCycle == 2.88万)
           pwmConfig.dutyCycle = 3200;
       否则
           pwmConfig.dutyCycle +=3200;

       MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig);
   }
}

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

    您是否见过此示例?
    dev.ti.com/.../

    MSP432P401R LaunchPad开箱即用代码也很有用,具有一个很好的PWM示例:
    dev.ti.com/.../

    请调查这些代码示例并了解如何使用PWM,如果您还有其他问题,请告知我们。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,我已经看过了! 我不知道在哪里更改频率和占空比。 有解释的心吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我还不知道在哪里可以改变频率和工作周期。 我还需要在哪里更改LED针脚编号? 我想使用红色的WFP 1.0
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Halimatus,

    您可以通过更改定时器A的时钟源/时钟源频率来更改频率。这取决于您要使用的时钟以及如何设置。 您可以在同一位置找到有关时钟源的更多示例,标有"CS_..."。

    对于占空比,您可以在Timer_a_PWMConfig结构中更改占空比。 有关详细信息,请参阅Driverlib API指南:
    dev.ti.com/.../

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

    我还是很困惑,例如60 Hz和25的占空比应该放在哪里?

    /* DriverLib包括*/

    #include <ti/devices/msp432p4xx/driverlib/driverlib.h>

    /*标准包括*/

    #include <stdint.h>

    #include <stdbool.h>

    //![简单定时器A配置]

    /* Timer_A PWM配置参数*/

    Timer_a_PWMConfig pwmConfig =

        Timer_A_CLOCKSOURCE_SMCLK,

        Timer_a_CLOCKSOURCE_diver_1,

        3.2万,

        Timer_a_CAPTURECOMPare_register_1,

        Timer_a_OUTPUTMODE_RESET_SET,

        3200

    };

    //![简单定时器A配置]

    内部主(无效)

      /*停止监视程序*/

      MAP_WDT_A_HoldTimer();

      //![简单定时器A示例]

      /*将MCLK设置为REFO,低频模式为128Khz

      *将SMCLK设置为64Khz */

      MAP_CS_setReference振 荡器频率(CS_REFO_128KHZ);

      MAP_CS_initClockSignal (CS_MCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_1);

      MAP_CS_initClockSignal (CS_SMCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_2);

      MAP_PCM_setPowerState(PCM_AM_LH_VCORE0);

      /*将2.4 的外围输出配置为PWM ,将WFP的6.7 配置为按钮

      *中断*/

      MAP_GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口P2,GPIO_PIN4,

          GPIO主要模块功能);

      MAP_GPIO_setAsInputPinWithPullUp阻 器(GPIO_PORT_P1, GPIO_PIN1);

      MAP_GPIO清除InterruptFlag (GPIO端口P1,GPIO PIN1);

      MAP_GPIO_enableInterrupt (GPIO端口_P1,GPIO _PIN1);

      /*将Timer_A配置为具有大约500ms和的周期

      * 10 % 的初始占空比(3200 tick) *

      MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig);

      //![简单定时器A示例]

      /*启用中断并启动监视程序计时器*/

      MAP_Interrupt_enableInterrupt (INT_Port1);

      MAP_Interrupt_enableSleepOnIsrExit();

      MAP_Interrupt_enableMaster();

      /*不使用时休眠*/

      同时(1)

      {

        MAP_PCM_GotoLPM0();

      }

    }

    /*端口1 ISR -此ISR将逐步增加PWM的占空比

    *按下按钮

    */

    void Port1_IRQHandler(void)

      UINT32_t状态= MAP_GPIO _getEnabledInterruptStatus (GPIO端口P1);

      MAP_GPIO清除InterruptFlag (GPIO端口P1,状态);

      IF (状态和GPIO _PIN1)

      {

        IF (pwmConfig.dutyCycle == 2.88万)

          pwmConfig.dutyCycle = 3200;

        否则

          pwmConfig.dutyCycle +=3200;

        MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig);

      }

    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外,请参阅数据表和TRM以了解有关时钟系统的信息。

    数据表:www.ti.com/.../msp432p401r.pdf
    电话: www.ti.com/.../slau356g.pdf

    另外,在更改您要使用的针脚时,您必须将定时器A输出导入到WFP 1.0。

    实际执行某些PWM的端口映射示例: dev.ti.com/.../
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否举个例子? 我的意思是,我想使用60 Hz的频率和25的占空比?
    我在网上读了一些注释,他们说CCR0,CCR1,CCR2,CCR3有自己的占空比?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因为我想使用60Hz,所以方程式将是2400万 (24MHz)/60 (Hz)?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Halimatus,

    您是否阅读了定时器A的技术参考手册并参考了API文档? 它有助于解释您提出的许多问题。

    也就是说,为了让您了解您在上面指出的代码示例的方法,让我引导您了解一下,您可以继续进行所需的更改,以执行您所需的任何操作。  

    [报价用户="Halimatus Karim"]

    Timer_a_PWMConfig pwmConfig =

        Timer_A_CLOCKSOURCE_SMCLK,

        Timer_a_CLOCKSOURCE_diver_1,

        3.2万,

        Timer_a_CAPTURECOMPare_register_1,

        Timer_a_OUTPUTMODE_RESET_SET,

        3200

    };

    [/引述]

    这是Timer_a_PWM配置结构。 您可以在此处设置各种功能,例如计时器A的源时钟,它将帮助您创建PWM,周期和占空比。 有关详细信息,请参阅上面链接的API文档。  

    [报价用户="Halimatus Karim"]

      /*将MCLK设置为REFO,低频模式为128Khz

      *将SMCLK设置为64Khz */

      MAP_CS_setReference振 荡器频率(CS_REFO_128KHZ);

      MAP_CS_initClockSignal (CS_MCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_1);

      MAP_CS_initClockSignal (CS_SMCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_2);

    [/引述]

    在这里,您将MCLK设置为REFO,频率为128KHz,将SMCLK (这是上述定时器A的来源)设置为64kHz (因为CS_CLock_diverer_2128/2=64)。

    [报价用户="Halimatus Karim"]

      /*配置GPPWM 2.4 作为外设输出 */

      MAP_GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口P2,GPIO_PIN4,

          GPIO主要模块功能);

    [/引述]

    这是您的PWM输出,它将出现在WFP 2.4 插针上。   

    [报价用户="Halimatus Karim"]

      /*将Timer_A配置为具有大约500ms和的周期

      * 10 % 的初始占空比(3200 tick) *

      MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig);

    [/引述]

    这是将其设置为PWM的计时器的开始。 您注意到您有一个大约500ms (2Hz)的周期。 它是3.2万 (在PWM配置结构中设置的周期)/64KHz (定时器A源时钟)= 500ms周期。 对于10 % 占空比,他们已将PWM配置结构(.10*3.2万)中的tick数设置为3200。  

    要达到60赫兹(25 % 占空比),您必须根据来自计时器A的时钟设置适当地处理PWM配置结构  

    1/60Hz =周期= x/6.4万,其中x是tick数计时器A需要在64kHz时钟源频率下计数1个周期。  

    0.25 * x = y,其中y是x的占空比的刻度数  

    然后,X和Y将进入PWM配置结构的适当位置。  

    我希望这有助于您更好地了解如何生成PWM。 如有任何疑问,请随时提出。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哦,是的,谢谢。我现在感觉更好了。 IM目前正在处理指示灯在板上闪烁的问题,但人的眼睛看不到它,但当我使用相机录制时,我可以看到闪烁(提取帧后)。我相信我们的眼睛只能看到高达24fps ~30fps,频率是60Hz。 此外,根据我从一些研究中了解到的,100 Hz时的20 % 占空比与10Hz时的20 % 的工作循环相比会看起来稳定,后者看起来会打开和关闭。 我还在网上读到过一些信息,如果75 % 占空比,则LED与50 % 占空比根本不闪烁。您能解释更多信息吗? 我是否需要更改占空比或频率,以使LED仅对摄像头可见,而不对我们的眼睛可见?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Halimatus,

    听起来很酷! 老实说,我不确定如果没有您描述的资源,我是否可以提供有关您问题的更多详细信息。 我只能说,75 % 占空比实际上将关闭一半,就像任何具有50 % 占空比的事物一样,因此当它实际闪烁时,它可能会显示为"开"。 当然,所有这些都取决于PWM的周期。

    如果我现在已经按照您的喜好回答了帖子,请验证答案。 如果您对此或其他任何问题有任何疑问,请随时询问/创建有关新主题的另一条线索(如果您有)。