IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 玩转TM4C1294XL(5)——PWM配置(死区互补输出) -> 正文阅读

[嵌入式]玩转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工程下载

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:44:59  更:2022-03-15 22:45:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:51:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码