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.

[参考译文] MSP432E401Y:为 PWM 设置不同的周期

Guru**** 2569105 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/778367/msp432e401y-set-a-different-period-for-pwm

器件型号:MSP432E401Y

大家好、
我希望 PMW 中有四个不同的周期。
我基于"pwmled1_MSP_EXP432E401Y_FreeRTOS_CSS"描述了以下代码。

void * mainThread (void * arg0)
{
PWM_Handle pwm1 =空;
PWM_Handle pwm2 =空;
PWM_Handle pwm4 =空;
PWM_Handle pwm6 =空;
PWM_Params pwmParams;

/*调用驱动程序初始化函数*/
PWM_init();

PWM_PARAMS_INIT (&pwmParams);
pwmParams.idleLevel = PWM_IDLE_LOW;
pwmParams.periodUnits = PWM_PERIOD_Hz;
pwmParams.periodValue = 10000;
pwmParams.dutyUnits = PWM_Duty_Fraction;
pwmParams.dutyValue =(uint32_t)((((uint64_t) PWM_Duty_frecture_MAX * 50)/ 100);
pwm1 = PWM_OPEN (Board_PWM1、&pwmParams);
if (pwm1!=空)
{
PWM_START (pwm1);
}

pwmParams.periodValue = 3000;
pwmParams.dutyValue =(uint32_t)((((uint64_t) PWM_Duty_frecture_MAX * 50)/ 100);
pwm2 = PWM_open (Board_PWM2、&pwmParams);
if (pwm2!= NULL)
{
PWM_START (pwm2);
}

pwmParams.periodValue = 5000;
pwmParams.dutyValue =(uint32_t)((((uint64_t) PWM_Duty_frecture_MAX * 50)/ 100);
pwm4 = PWM_OPEN (Board_PWM4、&pwmParams);
if (pwm4!=空)
{
PWM_START (pwm4);
}

pwmParams.periodValue = 7000;
pwmParams.dutyValue =(uint32_t)((((uint64_t) PWM_Duty_frecture_MAX * 50)/ 100);
pwm6 = PWM_OPEN (Board_PWM6、&pwmParams);
if (pwm6!=空)
{
PWM_START (pwm6);
}

while (1);

返回(NULL);
} 

此时、PWM 工作正常。

在下一个设置中、A 将为 NULL。

pwm1 = 1、000Hz

-pwm2 = 300Hz

-pwm4 = 500Hz

-pwm6 = 700Hz

如何获得不同的频率?

谢谢。

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

    如何在 MSP_EXP432401Y.c/.h 文件中配置 PWM?

    PWMMSP432E4_Object pwmMSP432E4Objects[MSP_EXP432E401Y_PWMCOUNT;
    
    CONST PWMMSP432E4_HWAttrs pwmMSP432E4HWAttrs[MSP_EXP432E401Y_PWMCOUNT]={
    {
    pwmBaseAddr = PWM0_BASE、
    pwmOutput = PWM_OUT_0、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN、
    .pinConfig = PWMMSP432E4_PF0_M0PWM0
    }
    };
    
    CONST PWM_Config PWM_CONFIG[MSP_EXP432E401Y_PWMCOUNT ={
    {
    .fxnTablePtr =&PWMMSP432E4_fxnTable、
    .object =&pwmMSP432E4Objects[MSP_EXP432E401Y_PWM0]、
    hwAttrs =&pwmMSP432E4HWAttrs[MSP_EXP432E401Y_PWM0]
    }、
    };
    
    const uint_least8_t PWM_COUNT = MSP_EXP432E401Y_PWMCOUNT; 
    typedef 枚举 MSP_EXP432E401Y_PWMName{
    MSP_EXP432E401Y_PWM0 = 0、
    
    MSP_EXP432E401Y_PWMCOUNT
    }MSP_EXP432E401Y_PWMName; 

    此致、
    Chris

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

    大家好、 Chris San

    Board.h

    #define Board_PWM0 MSP_EXP432E401Y_PWM0
    #define Board_PWM1 MSP_EXP432E40MSP_PWM1 //添加 PF1 */
    #define Board_PWM2 MSP_EXP432E401Y_PWM2 //添加 PF2 */
    #define BOARD_PWM3 MSP_EXP432E401Y*
    
    
    /
    添加 PWM4*#PWM401Y*#EXP401Y*/添加 PWM4PWM4PWM6_PWM*#EXP401Y*#EXP401Y*/添加 PWM3_PWM*#PWM40P40P401Y*#PWM*#PWM6_PWM*#PWM64_PWM*#EXP40P401Y*#PWM*#PWM*#PWM40P40P401Y*#EXP401Y*#PWM0_PWM0_PWM0_PWM* PK5 */ 

    MSP_EXP432E401Y.h

    typedef 枚举 MSP_EXP432E401Y_PWMName{
    MSP_EXP432E401Y_PWM0 = 0、
    MSP_EXP432E401Y_PWM1、//添加 PF1 *
    MSP_EXP432E401Y_PWM2、//添加 PF2 *
    MSP_EXP432E401Y_PWM3、//添加 PF3 *
    MSP_EXP432E401Y_PWM4、//添加 PG0 *
    MSP_EXP432E401Y_PWM5、//添加 PG1 *
    MSP_EXP432E401Y_PWM6、//添加 PK4 *
    MSP_EXP432E401Y_PWM7、//添加 PK5 */
    
    MSP_EXP432E401Y_PWMCOUNT
    } MSP_EXP432E401Y_PWMName; 

    MSP_EXP432E401Y.c

    PWMMSP432E4_Object pwmMSP432E4Objects[MSP_EXP432E401Y_PWMCOUNT;
    
    CONST PWMMSP432E4_HWAttrs pwmMSP432E4HWAttrs[MSP_EXP432E401Y_PWMCOUNT]={
    {
    pwmBaseAddr = PWM0_BASE、
    pwmOutput = PWM_OUT_0、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN、
    .pinConfig = PWMMSP432E4_PF0_M0PWM0
    }、
    /***** 添加***** /
    {
    pwmBaseAddr = PWM0_BASE、
    .pwmOutput = PWM_OUT_1、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN、
    .pinConfig = PWMMSP432E4_PF1_M0PWM1
    }、
    {
    pwmBaseAddr = PWM0_BASE、
    pwmOutput = PWM_OUT_2、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN、
    .pinConfig = PWMMSP432E4_PF2_M0PWM2
    }、
    {
    pwmBaseAddr = PWM0_BASE、
    pwmOutput = PWM_OUT_3、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN、
    .pinConfig = PWMMSP432E4_PF3_M0PWM3
    }、
    {
    pwmBaseAddr = PWM0_BASE、
    pwmOutput = PWM_OUT_4、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN、
    .pinConfig = PWMMSP432E4_PG0_M0PWM4
    }、
    {
    pwmBaseAddr = PWM0_BASE、
    pwmOutput = PWM_OUT_5、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN、
    .pinConfig = PWMMSP432E4_PG1_M0PWM5
    }、
    {
    pwmBaseAddr = PWM0_BASE、
    pwmOutput = PWM_OUT_6、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN、
    .pinConfig = PWMMSP432E4_PK4_M0PWM6
    }、
    {
    pwmBaseAddr = PWM0_BASE、
    pwmOutput = PWM_OUT_7、
    pwmGenOpts = PWM_GEN_MODE_DOWN | PWM_GEN_MODE_DBG_RUN、
    .pinConfig = PWMMSP432E4_PK5_M0PWM7
    }、
    /******** /
    };
    
    const PWM_Config PWM_CONFIG[MSP_EXP432E401Y_PWMCOUNT ={
    {
    .fxnTablePtr =&PWMMSP432E4_fxnTable、
    .object =&pwmMSP432E4Objects[MSP_EXP432E401Y_PWM0]、
    hwAttrs =&pwmMSP432E4HWAttrs[MSP_EXP432E401Y_PWM0]
    }、
    /***** 添加***** /
    {
    .fxnTablePtr =&PWMMSP432E4_fxnTable、
    .object =&pwmMSP432E4Objects[MSP_EXP432E401Y_PWM1]、
    hwAttrs =&pwmMSP432E4HWAttrs[MSP_EXP432E401Y_PWM1]
    }、
    {
    .fxnTablePtr =&PWMMSP432E4_fxnTable、
    .object =&pwmMSP432E4Objects[MSP_EXP432E401Y_PWM2]、
    hwAttrs =&pwmMSP432E4HWAttrs[MSP_EXP432E401Y_PWM2]
    }、
    {
    .fxnTablePtr =&PWMMSP432E4_fxnTable、
    .object =&pwmMSP432E4Objects[MSP_EXP432E401Y_PWM3]、
    hwAttrs =&pwmMSP432E4HWAttrs[MSP_EXP432E401Y_PWM3]
    }、
    {
    .fxnTablePtr =&PWMMSP432E4_fxnTable、
    .object =&pwmMSP432E4Objects[MSP_EXP432E401Y_PWM4]、
    hwAttrs =&pwmMSP432E4HWAttrs[MSP_EXP432E401Y_PWM4]
    }、
    {
    .fxnTablePtr =&PWMMSP432E4_fxnTable、
    .object =&pwmMSP432E4Objects[MSP_EXP432E401Y_PWM5]、
    hwAttrs =&pwmMSP432E4HWAttrs[MSP_EXP432E401Y_PWM5]
    }、
    {
    .fxnTablePtr =&PWMMSP432E4_fxnTable、
    .object =&pwmMSP432E4Objects[MSP_EXP432E401Y_PWM6]、
    hwAttrs =&pwmMSP432E4HWAttrs[MSP_EXP432E401Y_PWM6]
    }、
    {
    .fxnTablePtr =&PWMMSP432E4_fxnTable、
    .object =&pwmMSP432E4Objects[MSP_EXP432E401Y_PWM7]、
    hwAttrs =&pwmMSP432E4HWAttrs[MSP_EXP432E401Y_PWM7]
    }、
    /******* /
    }; 

    谢谢。

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

    您好!

      我建议使用 API PWM_setPeriod。

    extern int_fast16_t PWM_setPeriod (PWM_Handle handle、uint32_t period); 

    此致、

    Chris

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

    大家好、Chris San

    我使用了 PWM_setPeriod、但没有成功。

    pwm1、pwm2、pwm4、pwm6 、所有周期变为10、000Hz。

    PWM_setPeriod 的返回值为 PWM_STATUS_INVALID_PERIOD (-3)。

    void * mainThread (void * arg0)
    {
    PWM_Handle pwm1 =空;
    PWM_Handle pwm2 =空;
    PWM_Handle pwm4 =空;
    PWM_Handle pwm6 =空;
    PWM_Params pwmParams;
    
    /*调用驱动程序初始化函数*/
    PWM_init();
    
    PWM_PARAMS_INIT (&pwmParams);
    pwmParams.idleLevel = PWM_IDLE_LOW;
    pwmParams.periodUnits = PWM_PERIOD_Hz;
    pwmParams.periodValue = 10000;
    pwmParams.dutyUnits = PWM_Duty_Fraction;
    pwmParams.dutyValue =(uint32_t)((((uint64_t) PWM_Duty_frecture_MAX * 50)/ 100);
    pwm1 = PWM_OPEN (Board_PWM1、&pwmParams);
    if (pwm1!=空)
    {
    PWM_setPeriod (pwm1、1000);
    PWM_START (pwm1);
    }
    
    // pwmParams.periodValue = 3000;
    pwmParams.dutyValue =(uint32_t)((((uint64_t) PWM_Duty_frecture_MAX * 50)/ 100);
    pwm2 = PWM_open (Board_PWM2、&pwmParams);
    if (pwm2!= NULL)
    {
    PWM_setPeriod (pwm2、300);
    PWM_START (pwm2);
    }
    
    // pwmParams.periodValue = 5000;
    pwmParams.dutyValue =(uint32_t)((((uint64_t) PWM_Duty_frecture_MAX * 50)/ 100);
    pwm4 = PWM_OPEN (Board_PWM4、&pwmParams);
    if (pwm4!=空)
    {
    PWM_setPeriod (pwm4、500);
    PWM_START (pwm4);
    }
    
    // pwmParams.periodValue = 7000;
    pwmParams.dutyValue =(uint32_t)((((uint64_t) PWM_Duty_frecture_MAX * 50)/ 100);
    pwm6 = PWM_OPEN (Board_PWM6、&pwmParams);
    if (pwm6!=空)
    {
    PWM_setPeriod (pwm6、700);
    PWM_START (pwm6);
    }
    
    while (1);
    
    返回(NULL);
    } 

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我无法再支持此请求/线程。 我提交了一个错误、要求提供多个 PWM 的示例、如您所述。

    此致、
    Chris