嵌入式学习小组
直播中

李维嘉

7年用户 1414经验值
私信 关注

32位单片机M058 PWM移相的实现方法求分享

目前想要驱动一个H桥电路,硬件连接的是PWM0和PWM1口,想要实现PWM0和PWM1同频率,同占空比的90度相位差的PWM. 请教大家一下实现的思路,基于M051_Series_BSP_CMSIS_V3.01.003库。

回帖(1)

卓侨汉

2024-1-13 16:07:49
在M051_Series_BSP_CMSIS_V3.01.003库中,可以使用Timer和PWM模块实现PWM移相,具体步骤如下:

1. 配置Timer0和Timer1为PWM模式,并设置同一周期的计数值(周期可以根据实际需要调整)。

2. 配置PWM0和PWM1的占空比和极性,使它们输出同频率、同占空比、90度相位差的PWM信号。

3. 在Timer0的比较匹配中断中,将Timer1的比较值设为当前计数值加上一定的相位差。比如,如果要实现90度相位差,则将Timer1的比较值设为当前计数值加上PWM周期的四分之一。

4. 在Timer1的比较匹配中断中,将Timer0的比较值设为当前计数值加上相同的相位差。

5. 重复步骤3和步骤4,实现持续的PWM移相。

以下是具体的代码实现(仅供参考):

```c
#include "NUC505Series.h"

/* 定义PWM周期和占空比 */
#define PWM_PERIOD  (255)
#define PWM_DUTY    (128)

/* 定义PWM移相的相位差 */
#define PWM_PHASE_DIFF  (PWM_PERIOD / 4)

/* 定义Timer0和Timer1的比较值 */
volatile uint32_t u32Timer0CMP, u32Timer1CMP;

void TMR0_IRQHandler()
{
    /* 清除Timer0中断标志 */
    TIMER_ClearIntFlag(TIMER0);

    /* 设置Timer1比较值 */
    TIMER_SET_CMP_VALUE(TIMER1, 0, u32Timer1CMP);
}

void TMR1_IRQHandler()
{
    /* 清除Timer1中断标志 */
    TIMER_ClearIntFlag(TIMER1);

    /* 设置Timer0比较值 */
    TIMER_SET_CMP_VALUE(TIMER0, 0, u32Timer0CMP);
}

int main()
{
    /* 初始化系统时钟和中断向量表 */
    SystemInit();
    NVIC_EnableIRQ(TMR0_IRQn);
    NVIC_EnableIRQ(TMR1_IRQn);

    /* 配置GPIO引脚为PWM功能 */
    GPIO_SetMode(PA, BIT15, GPIO_MODE_OUTPUT);
    PWM_ConfigOutputChannel(PWM0, PWM_CH0, PWM_PERIOD, PWM_DUTY);
    PWM_EnableOutput(PWM0, PWM_CH0);

    GPIO_SetMode(PA, BIT14, GPIO_MODE_OUTPUT);
    PWM_ConfigOutputChannel(PWM1, PWM_CH0, PWM_PERIOD, PWM_DUTY);
    PWM_EnableOutput(PWM1, PWM_CH0);

    /* 配置Timer0和Timer1为PWM模式 */
    TIMER_Open(TIMER0, TIMER_PWM_MODE, PWM_PERIOD);
    TIMER_EnableInt(TIMER0);
    TIMER_Start(TIMER0);

    TIMER_Open(TIMER1, TIMER_PWM_MODE, PWM_PERIOD);
    TIMER_EnableInt(TIMER1);
    TIMER_Start(TIMER1);

    /* 设置Timer0和Timer1比较值 */
    u32Timer0CMP = PWM_PERIOD / 2;
    u32Timer1CMP = PWM_PERIOD / 2 + PWM_PHASE_DIFF;
    TIMER_SET_CMP_VALUE(TIMER0, 0, u32Timer0CMP);
    TIMER_SET_CMP_VALUE(TIMER1, 0, u32Timer1CMP);

    /* 进入主循环 */
    while (1);
}
```
举报

更多回帖

发帖
×
20
完善资料,
赚取积分