04DSP学习-利用syscfg配置EPWM

news/2024/10/4 23:41:56/

打开syscfg文件,左侧control栏中找到EPWM,点击,发现TI提供了一些帮助文档,帮助了解如何使用syscfg以及如何了解EPWM。我们结合配置过程去理解如何使用。

设计目标

使用EPWM1;增减计数;PWM频率为10kHz;高有效互补;死区为1us;开启EPWM中断。

开始设置

首先,点击“ADD”,开始EPWM的设计。

这里的名字是可以自定义的,我们以EPWM1为例,参考命名方式,命名成myEPWM1。选择Hardware 为 EPWM1 BP。指的是用板载的EPWM接口。

下面的“Load EPWM Settings From Device Memory Export”和“Copy Settings”不适用于初次配置EPWM。

“Template Code Generation”是指是否需要生成一个模板,勾选与否不影响我们的使用,勾选了之后,syscfg会除了帮我们生成一个初始化的函数之外,额外会生成一个模板,用处不大。

“EPWM Global Load”是对多个通道进行全局加载,我们也不需要。

时基寄存器设置

EPWM Time Base,称之为时基模块,用于给EPWM提供时间基准。

调试模式设置

“Emulation Mode”调试模式,主要设置调试过程中时基模块如何运行,选择第一个“Stop after next Time Base counter increment or decrement”意思是时基模块会即时停止。

分频设置

按照推荐的设置,但是需要掌握如何计算EPWM的时钟频率,这关系到PWM的频率设置。图中给了计算方法,时基模块的时钟等于TBCLK=EPWMCLK/(HSPCLKDIV*CLKDIV)。其中EPWMCLK指的是EPWM模块的时钟。CLKDIV和HSPCLKDIV分别对应了 Time Base Clock Divider和High Speed Clock Divider。因此,按照默认设置就是将EPWM模块的时钟2分频。

在Clock Tree中观察EPWM模块的时钟频率,如下图所示。

EPWM的时钟频率是100MHz。因此时基模块的频率为100MHz/2=50MHz,即时基模块计数一次,时间是1/(50M)s。

加载模式设置

这里是选择是否使用影子寄存器模式,在EPWM中,有很多地方可以将加载模式设置成使用影子寄存器模式,影子寄存器可以等待当前计数周期完成后,再去加载,对当前计数周期没有影响,这样更加的安全。

加载事件,指的是当达到什么事件时,将时基加载到寄存器中。我们可以不设置同步,只让计数器计数到0时装载,这里的同步指的是不同EPWM模块之间的同步。

计数模式及周期设置

我们要求PWM的频率为10kHz,前面我们设计了时基模块的频率为50MHz,在设计时基周期时,需要配合计数模式。当选择增计数或者减计数时,PWM计数时锯齿波,而选择增减计数时,是三角波。

其与PWM频率之间的关系是

因此,10kHz需要计数器计数到 50MHz/10kHz/2=2500。相应的设置Time Base Period 为2500。

比较寄存器设置

PWM是脉冲宽度调制,需要通过设计比较值与计数器进行比较,才能改变电平的宽度。我们以占空比50%为例进行设置,则比较寄存器的值设置为2500。注意到,一个EPWM模块可以设置4个比较寄存器的值,来触发不同的事件,他们的功能是相同的,这里我们只设置CMPA。

动作寄存器设置

用来配置EPWM在发生特殊事件时,应该如何动作。注意!每一个EPWM可以有两个输出,分别是EPWMxA和EPWMxB。两者可以相互独立设置。在本篇博客中,我们要设置A和B互补,所以只需要设置A即可。设计规则参考PWM原理,当调制波大于载波时输出高电平,调制波小于载波时输出低电平,则

死区寄存器设置

在控制逆变器时,我们需要避免上下管同时导通,所以需要配置死区。syscfg贴心的为开发者准备了常见的模式。图中解释了上升沿和下降沿延时。从图中可以发现,我们需要的是高有效互补,意思是高电平有效,A和B互补。

我们只需要点击一下,则帮助我们配置好了逻辑关系。如图所示

接下来我们需要配置影子寄存器模式以及延时的时间,我们需要死区大小为1us,则计数设置为1us/(1/50MHz)=50。

以上便完成了死区的设置。

其余模块对于生成基本的PWM用处不大,具体地功能和应用方法参考应用手册。

生成board.c 和.h文件

编译工程,观察board.c

在IO初始化中,对EPWM的引脚进行了初始化

在EPWM初始化中,对EPWM的功能进行了初始化

注意事项!

  • 如果想上电即看到PWM波形,需要关闭强制低电平,否则会看到一个始终高电平 一个始终低电平,因为设置了两个互补 。

  • 需要在main.c中加入对器件的初始化函数,直接调用即可,初始化的主要是时钟

  • 需要预定义变量,_LAUNCHXL_F28379D

未预定义时,代码块是灰色的。这个Device_init()函数默认是给control_Card使用的,不是launchPad。

复制_LAUNCHXL_F28379D,右键工程,选择Properties,如下图依次点击,然后apply and close

注意已经发生了变化。修改后,相应的代码块不是灰色了。

示波器查看结果

(1) 不预定义 _LAUNCHXL_F28379D

开关频率为5kHz,死区位2us

(2) 预定义 _LAUNCHXL_F28379D

开关频率为10kHz,死区位1us

(忽略我的小破示波器没有校准的问题~谢谢)


http://www.ppmy.cn/news/1534652.html

相关文章

多线程-初阶(1)

本节⽬标 • 认识多线程 • 掌握多线程程序的编写 • 掌握多线程的状态 • 掌握什么是线程不安全及解决思路 • 掌握 synchronized、volatile 关键字 1. 认识线程(Thread) 1.1 概念 1) 线程是什么 ⼀个线程就是⼀个 "执⾏流". 每个线…

深入浅出:现代JavaScript开发者必知必会的Web性能优化技巧

亲爱的读者们,欢迎来到本期博客。今天,我们将深入探讨JavaScript开发者在日常工作中如何提升Web性能。在快节奏的Web开发世界中,性能优化至关重要。本文将分享一些实用技巧,帮助你构建快速、高效的Web应用。 1. 使用CDN加速资源加…

量子计算:颠覆未来计算的革命性技术

量子计算:颠覆未来计算的革命性技术 量子计算作为下一代颠覆性技术,正在引领计算领域的重大变革。与传统计算机基于比特的二进制运算不同,量子计算通过量子比特(qubits)在叠加态和纠缠态下实现并行计算,能…

C# 入坑JAVA 潜规则 注解 列表 listMch,该列表存储了一个映射(Map)的集合 等 入门系列3

java注解 好像和C# 特性 差不多 Data Builder NoArgsConstructor AllArgsConstructor 在Java中,Data、Builder、NoArgsConstructor和AllArgsConstructor是Lombok库提供的注解,它们用于简化Java对象的创建和处理。Lombok是一个流行的Java库,…

滚雪球学MySQL[2.2讲]:基本数据操作详解:插入、查询、更新与删除

全文目录: 前言2.2 基本数据操作1. 插入数据(INSERT)基本语法示例1:向所有列插入数据示例2:插入部分列的数据 2. 查询数据(SELECT)基本语法示例1:查询所有数据示例2:查询…

力扣10.1

983. 最低票价 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。 火车票有 三种不同的销售方式 : 一张 为期一天 的通行证售…

ECCV 2024 | 融合跨模态先验与扩散模型,快手处理大模型让视频画面更清晰!

计算机视觉领域顶级会议 European Conference on Computer Vision(ECCV 2024)将于9月29日至10月4日在意大利米兰召开,快手音视频技术部联合清华大学所发表的题为《XPSR: Cross-modal Priors for Diffusion-based Image Super-Resolution》——…

Windows 开发工具使用技巧

Windows 开发工具使用技巧 1. Visual Studio 快捷键:掌握常用快捷键,比如 F5(启动调试),Ctrl K, Ctrl C(注释选择代码),Ctrl K, Ctrl U(取消注释)。 调…