当前位置: 首页 > news >正文

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

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


http://www.mrgr.cn/news/39667.html

相关文章:

  • MySQL 为什么一定要有一个主键
  • 美客多自养号测评的常见问题与解决方案,从零开始的技术指南
  • HyperWorks的四面体网格剖分
  • 如何快速建立自己的异地互联的远程视频监控系统,通过web浏览器可以直接查看公网上的监控视频(上)
  • 【C语言指南】数据类型详解(上)——内置类型
  • 【C++掌中宝】类和对象(二):隐藏的this指针
  • springboot项目中属性的使用优先级;maven编译插件切换环境变量
  • 大模型产品架构全景解读:从应用场景到技术支持的完整路径
  • Spring整合Mybatis
  • 手把手教你使用YOLOv11训练自己数据集(含环境搭建 、数据集查找、模型训练)
  • 从“抄袭”到“原创”:5个超实用的论文降重技巧!
  • 南沙C++信奥赛陈老师解一本通题 1269:【例9.13】庆功会
  • 【Git原理与使用】分支管理
  • 图像超分经典网络 SRGAN 解析 ~ 如何把 GAN 运用在其他视觉任务上
  • springboot体重管理与健康饮食推荐小程序计算机毕业设计源码15351
  • 《ToDesk 云电脑、易腾云、青椒云移动端体验实测:让手机秒变超级电脑》
  • GEE数据集:1996 年到 2020 年全球红树林观测数据集(JAXA)(更新)
  • 代码随想录算法训练营day43
  • 啤酒在文学中的浪漫形象:精酿啤酒的诗意之旅
  • 需求梳理时,如何平衡各方的利益冲突?