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] P5.6 TIMER_A2 hgih 频率 PWM 生成。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/565266/msp432p401r-msp432-p5-6-timer_a2-hgih-frequency-pwm-generation

器件型号:MSP432P401R

[MSP432] P5.6 TIMER_A2 hgih 频率 PWM 生成。

您好!

我必须 通过 P5.6在1Hz 至3MHz 范围内生成各种 PWM 频率、但我无法生成超过24kHz 的频率。

请查看以下设置值、并为我提供一种在 P5.6上生成高频 PWM 的方法。

SMCLK 设置:

MAP_CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_Clock_divider _1);

定时器控制: tassel= SMCLK,ID = 0,EX=0。  
…  


  PWM_Disable_P5P6_7 (_pin);

  Timer_A2->CCR[0]=_PERIOD;                // PWM 周期/2
  switch (_pin){
  情况6:/*将 GPIO2.6配置为 PWM 的外设输出*/
   Timer_A2->CCTL[1]= TIMER_A_CCTLN_OUTMOD_6;// CCR3切换/置位
   Timer_A2->CCR[1]=占空比;                 // CCR3 PWM 占空比
   Timer_A2->CCR[2]=_Duty;                 // CCR4 PWM 占空比

   中断;

  情况7:/*将 GPIO2.7配置为 PWM 的外设输出*/
   Timer_A2->CCTL[2]= TIMER_A_CCTLN_OUTMOD_6;// CCR4切换/置位
   Timer_A2->CCR[2]=_Duty;                 // CCR4 PWM 占空比

   中断;
  }

  Timer_A2->Ex0 = ex;
    Timer_A2->CTL =((clk & 0x03)<< 8)|//TIMER_A_CTL_tassel_2 | // SMCLK
             ((id & 0x03)<< 6)|
              Timer_A_CTL_MC_3;  //向上/向下计数模式

   PWM_Enable_P5P6_7 (_Pin);


…………

引脚控制

void PWM_Enable_P5P6_7 (int _pin)

 switch (_pin){

 情况6:/*将 GPIO5.6配置为 PWM 的外设输出*/
  P5->DIR |=  BIT6; // P5.6 -输出
  P5->SEL0 |=  BIT6; // P5.6 -端口映射功能
  P5->SEL1 &=~(BIT6); // P5.6 -默认 PM 函数= TimerA CCRx

  中断;

 情况7:/*将 GPIO5.7配置为 PWM 的外设输出*/
  P5->DIR |=  BIT7; // P5.7 -输出
  P5->SEL0 |=  BIT7; // P5.7 -端口映射功能
  P5->SEL1 &=~(BIT7); // P5.7 -默认 PM 函数= TimerA CCRx

  中断;
 }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    SMCLK 频率是多少? 什么是_period 和_Duty 值? 您在引脚上观察到什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复。

    DCO 设为48Mhz、SMCLK 被选择 DCO 作为分频器1。
       MAP_CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 48);
       MAP_CS_initClockSignal (CS_MCLK、CS_DCOCLK_SELECT、CS_Clock_divider _1);
       MAP_CS_initClockSignal (CS_HSMCLK、CS_DCOCLK_SELECT、CS_Clock_divider _1);
       MAP_CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_Clock_divider _1);
       MAP_CS_initClockSignal (CS_ACLK、CS_REFOCLK_SELECT、CS_CLOCK_DELUGER_1);

    参数_period /_Duty 在100 至65535范围内放置、并且已经检查了数字逻辑和示波器。

    当_period 设置为100时、它生成240kHz、但0.01占空比 不稳定。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "0.01"意味着什么? 寄存器不能包含浮点值。 对于"不稳定"、您意味着什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Daniel:

    您是否从以下示例开始尝试过? dev.ti.com/.../

    我将对此进行更深入的研究、但需要一些时间。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     占空 比=_period  * _Duty / 100

    因此、如果_period 为100、则_Duty 将作为整数从0变为100。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我找不到任何提供运行时间频率/占空比变化的示例。

    谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    占空比变量的类型是什么? 在哪里计算? 也许、展示该代码不是一个好主意吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    PC 程序具有基于 用户输入的_period 值和 calucates _Duty 、_period 和_Duty 的类型都是整数。

    这里是测试输入值、这些输入值会生成240kHz PWM、如所附的屏幕截图。

    MAP_CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 48);

    MAP_CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_Clock_divider _1);

    _port =5、_pin = 6、_enable =1、_period=100、_Duty=50、 CLK=2、id =0、ex =1

    bool PWM_Pin_Control (uint_fast8_t _port、 uint_fast8_t _pin、uint_fast8_t _enable、int _period、  int _duty、 unsigned char clk、unsigned char id、unsigned char ex)

         if (_port == 2)

         {

              三、工作安排

         }

         否则、如果(_port == 5)

         {

              PWM_Disable_P5P6_7 (_pin);

              Timer_A2->CCR[0]=_PERIOD;         // PWM 周期/2

              switch (_pin){

                   情况6:/*将 GPIO5.6配置为 PWM 的外设输出*/

                   Timer_A2->CCTL[1]= TIMER_A_CCTLN_OUTMOD_6;// CCR3切换/置位

                   Timer_A2->CCR[1]=_DUTY;          // CCR3 PWM 占空比

                   中断;

                   情况7:/*将 GPIO5.7配置为 PWM 的外设输出*/

                   Timer_A2->CCTL[2]= TIMER_A_CCTLN_OUTMOD_6;// CCR4切换/置位

                   Timer_A2->CCR[2]=_DUTY;          // CCR4 PWM 占空比

                   中断;

              }

              Timer_A2->Ex0 = ex;

              Timer_A2->CTL =((clk & 0x03)<< 8)|//TIMER_A_CTL_tassel_2 | // SMCLK

                                             ((id & 0x03)<< 6)|

                                             Timer_A_CTL_MC_3; //向上/向下计数模式

              if (_enable!= 0)

              PWM_Enable_P5P6_7 (_Pin);

              否则{

                   MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P5、GPIO_PIN[_PIN]);

              }

         }

         否则{

              返回 false;

         }

         返回 true;

    谢谢。

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

    您上面提到的行("_Duty =_period *_Duty / 100")不会出现在此代码中。 它实际上是一条真实的线路吗? 如果不是、不起作用的_Duty 的值是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正如我在上面提到的、PC 程序计算占空比值("_Duty =_period *_Duty / 100")并将数据传输到 MSP432。 Duty 不是我的问题的重点。

    我的问题是、我需要3MHz PWM 频率、但 CAN P5.6无法生成超过20kHz 的频率。 时钟配置和周期是我的问题所在。
    以下设置值可生成20kHz PWM。
    MAP_CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 48);
    MAP_CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_Clock_divider _1);
    _port =5、_pin = 6、_enable =1、_period=100、_Duty=50、 CLK=2、id =0、ex =1

    如何在 P5.6引脚上生成3MHz PWM?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您会得到最高频率、其中_Duty=1和_period=2。 当您尝试此操作时、具体会发生什么情况?