04DSP学习-利用syscfg配置EPWM

打开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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值