玩转TM4C1294XL(5)——PWM配置(死区互补输出)

1.简介
       简单介绍芯片内部的PWM模块,分享PWM的配置。本人是边学习边记录,内容仅作参考,有错误的地方请见谅。

2.PWM介绍
       本部分内容参考自TI官方手册。
       芯片内部有一个独立的PWM产生模块,相比于使用Timer的PWM模式,这个独立的PWM模块功能更强,带有死区控制,最多可以输出4组带死区的互补PWM,这样的功能还是很不错的,用来驱动H桥电路或者三相逆变桥还是很实用的。
       除了基本特性外,PWM还有一些其他特性,比如支持外部故障输入,触发ADC等。外部故障输入我的理解就是检测到外部故障信号生效时快速关断PWM,比如PWM驱动H桥,H桥输出短路时,电路检测到故障生成一个故障信号反馈到芯片内部,PWM检测到这个故障信号可以快速关断PWM信号防止H桥上的管子损坏。PWM模块也支持中断,支持的中断也有挺多种,上面说的检测到故障可以进中断,同时4个PWM模块又有自己独立的中断控制器,中断控制十分灵活。总之这个独立的PWM模块功能非常多,更详细的内容可以查看手册。
在这里插入图片描述

图1 PWM模块功能框图

3.PWM配置
       PWM配置实现M0PWM0输出1k频率25%占空比的信号。M0PWM2和M0PWM3输出一组互补的信号,20k频率50%占空比,上升沿和下降沿死区时间均为500ns。

void bsp_InitPwm(void)
{
    uint32_t ui32PWMClockRate;
    
    /********* M0PWM0输出1k 25%占空比的pwm ************/
    SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    GPIOPinConfigure(GPIO_PF0_M0PWM0);
    GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_0);
    PWMClockSet(PWM0_BASE, PWM_SYSCLK_DIV_4);   //PWM时钟源4分频 120M/4=30M
    ui32PWMClockRate = SystemCoreClock / 4;
    PWMGenConfigure(PWM0_BASE, PWM_GEN_0,
                    PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
    PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, (ui32PWMClockRate / 1000));  //1k频率
    PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0,
                         PWMGenPeriodGet(PWM0_BASE, PWM_GEN_0) / 4);   //脉宽1/4周期
    PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, true);
    PWMGenEnable(PWM0_BASE, PWM_GEN_0);
    
    /******* 一组20k带 500ns死区的pwm **********/
    SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

    GPIOPinConfigure(GPIO_PF2_M0PWM2); //配置IO功能为PWM输出
    GPIOPinConfigure(GPIO_PF3_M0PWM3);
    GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_2);
    GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_3);
    
    PWMGenConfigure(PWM0_BASE, PWM_GEN_1,
                    PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
    PWMGenPeriodSet(PWM0_BASE, PWM_GEN_1, (ui32PWMClockRate / 20000)); //20k频率
    
    PWMPulseWidthSet(PWM0_BASE, PWM_OUT_2,
                         PWMGenPeriodGet(PWM0_BASE, PWM_GEN_1) / 2); //50% Duty 
                         
    PWMDeadBandEnable(PWM0_BASE, PWM_GEN_1, 15, 15); //上升沿和下降沿都是500ns的死区
    PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT | PWM_OUT_3_BIT, true);
    PWMGenEnable(PWM0_BASE, PWM_GEN_1);
}

       配置步骤,开启外设时钟->配置PWM输出引脚->配置PWM时钟->配置PWM频率->配置脉宽->设置输出状态true->开启对应模块的输出。对于带死区时间的互补输出,需要在输出前配置死区时间,上升沿和下降沿的死区时间都是独立可设置的。互补输出的PWM需要是同一个PWM模块下的一组信号,01、23、45、67这样四组信号可以配置成互补输出。

在这里插入图片描述

图2 1kHz 25%占空比PWM

在这里插入图片描述

图3 20kHz 500ns死区互补输出PWM

PWM配置keil工程下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落叶凋凌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值