这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 学习AI8051开发板例程:34AI8051的高级PWM的硬件移相

共1条 1/1 1 跳转至

学习AI8051开发板例程:34AI8051的高级PWM的硬件移相

高工
2026-03-17 19:13:03     打赏

AI8051内部集成了高级PWM新增硬件移相功能:

内容:主要是通过其高级PWM定时器(PWMA)的主从模式实现的,这种机制可以将某个PWM通道作为“主”,它的特定时间(比如更新溢出)去触发另外一个作为“从”的PWM通道,从而在他们之间建立精确的硬件相位关系。

今天先和大家分享不对称PWM模式:

在不对称模式下,生成的两个中心对齐PWM信号间允许存在可编程相移。频率由PWMA ARR寄存器的值确定,而占空比和相移则由一对PWMACCRx寄存器确定。两个寄存器分别控制递增计数和递减计数期间的PWM,这样每半个PWM周期便会调节一次PWM:

    OCIREFC (或 OC2REFC) 由 PWMA CCR1和 PWMA CCR2 控制

    OC3REFC (或 OC4REFC)由 PWMA_CCR3和 PWMA CCR4 控制

两个通道可以独立选择不对称PWM模式(每对CCR寄存器控制一个OCx输出),只需向PWMA CCMRx寄存器的OCxM 位写入“1110”(不对称PWM模式1)或“1111"(不对称PWM模式2)给定通道用作不对称PWM通道时,也可使用其互补通道。例如,如果通道1上产生OCIREFC信号(不对称PWM模式1),则由于不对称PWM模式1的原因,通道2上可输出 OC2REF信号或OC2REFC信号。

(注:出于兼容性原因,0CxM[3:0]位域分为两部分,最高有效位与最低有效的3位不相邻。)

下图显示了不对称PWM模式下可以产生的信号示例(通道1到通道4在不对称PWM模式1下配置)。

与死区发生器配合使用时,这可控制相移全桥直流到直流转换器。

34-1.png

二:软件代码如下:

2.1 PWM的初始化过程

    PWM1_Duty = 15000;
    PWM2_Duty = 5000;
    PWM3_Duty = 5000+3000;
    PWM4_Duty = 5000+7000;

    PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
    PWMA_CCER2 = 0x00;

    PWMA_CCMR1X = 0x00;//通道1:PWM2模式
    PWMA_CCMR1 = 0x70;
    PWMA_CCMR2X = 0x01;//通道2:不对称PWM2模式
    PWMA_CCMR2 = 0x70;
    PWMA_CCMR3X = 0x00;//通道3:PWM2模式
    PWMA_CCMR3 = 0x70;
    PWMA_CCMR4X = 0x01;//通道4:不对称PWM2模式
    PWMA_CCMR4 = 0x70;

    PWMA_CCER1 = 0x55; //配置通道输出使能和极性
    PWMA_CCER2 = 0x55;

    PWMA_ARRH = (u8)(PWM_PERIOD >> 8); //设置周期时间
    PWMA_ARRL = (u8)PWM_PERIOD;

    PWMA_ENO = 0x00;
    PWMA_ENO |= ENO1P; //使能输出
    PWMA_ENO |= ENO1N; //使能输出
		
    PWMA_ENO |= ENO2P; //使能输出
    PWMA_ENO |= ENO2N; //使能输出
		
    PWMA_ENO |= ENO3P; //使能输出
    PWMA_ENO |= ENO3N; //使能输出
		
    PWMA_ENO |= ENO4P; //使能输出
    PWMA_ENO |= ENO4N; //使能输出

    PWMA_PS = 0x00;  //高级 PWM 通道输出脚选择位
    PWMA_PS |= PWM1_1; //选择 PWM1_0 通道
    PWMA_PS |= PWM2_0; //选择 PWM2_0 通道
    PWMA_PS |= PWM3_0; //选择 PWM3_0 通道
    PWMA_PS |= PWM4_0; //选择 PWM4_0 通道

2.2 更新PWM的脉宽

void UpdatePwm(void)
{
    PWMA_CCR1H = (u8)(PWM1_Duty >> 8); //设置占空比时间
    PWMA_CCR1L = (u8)(PWM1_Duty);
    PWMA_CCR2H = (u8)(PWM2_Duty >> 8); //设置占空比时间
    PWMA_CCR2L = (u8)(PWM2_Duty);
    PWMA_CCR3H = (u8)(PWM3_Duty >> 8); //设置占空比时间
    PWMA_CCR3L = (u8)(PWM3_Duty);
    PWMA_CCR4H = (u8)(PWM4_Duty >> 8); //设置占空比时间
    PWMA_CCR4L = (u8)(PWM4_Duty);
}

三:实物测试

这里我使用的是P2.0 和P2.1:

34-2.png





关键词: AI8051     PWM     不对称模式    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]