04DSP学习-利用syscfg配置EPWM

news2024/11/23 8:27:23

打开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.coloradmin.cn/o/2182156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ios内购支付-支付宝APP支付提现

文章目录 前言一、IOS内购支付(ios订单生成自己写逻辑即可)1.支付回调票据校验controller1.支付回调票据校验server 二、安卓APP支付宝支付1.生成订单返回支付宝字符串(用于app拉起支付宝,这里用的是证书模式)2.生成订…

相机基础概念

景深: 景深的定义 DOF:depth of filed 是指在摄影机镜头或其他成像器前沿能够取得清晰图像的成像所测定的被摄物体前后距离范围。光圈、镜头、及焦平面到拍摄物的距离是影响景深的重要因素。定义3:在镜头前方(焦点的前、后)有一…

PCL 投影滤波器

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 投影滤波 2.1.2 可视化 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新) 一、…

Java的栈帧和动态链接是什么?

在 Java 的面试过程中,不可避免的一个面试题那就是 JVM,而 JVM 的面试题中,有各种,比如在堆中会被问到的关于垃圾回收机制的相关问题,在栈中会被问到入栈以及出栈的过程,来聊一下关于栈的相关问题&#xff…

【EchoMimic整合包及教程】蚂蚁集团支付宝开源了数字人技术EchoMimic,可用于虚拟主播、视频编辑等

蚂蚁集团支付宝开源了数字人技术EchoMimic,可用于虚拟主播和视频编辑。EchoMimic是一个音频驱动的肖像动画生成工具,具有丰富的表情和流畅的动作。它支持音频驱动、姿势驱动和音频与姿势混合驱动动画,并提供了易于使用的WebUI和GradioUI界面。…

三品PLM系统如何提升企业产品研发效率?

三品PLM系统如何提升企业研发效率 在竞争日益激烈的市场环境中,企业研发效率的高低直接决定了其产品的上市速度、质量以及市场竞争力。为了应对这一挑战,越来越多的企业开始引入PLM系统,而三品PLM系统凭借其强大的功能和全面的解决方案&…

移动技术开发:音乐播放器

1 实验名称 音乐播放器 2 实验目的 掌握使用Service启动服务的方法&#xff0c;掌握BroadcastReceiver广播传递机制的实现&#xff0c;利用Activity、Service和BroadcastReceiver实现一个音乐播放器APP。 3 实验源代码 布局文件代码&#xff1a; <?xml version"1.…

yum无法使用解决办法

yum无法使用解决方法&#xff08;比较全&#xff0c;以后如果遇到别的问题还会添加&#xff09;yum无法使用解决方法&#xff08;比较全&#xff0c;以后如果遇到别的问题还会添加&#xff09; 如下&#xff0c;新装的linux虚拟机&#xff0c;yum安装wget报错 Cannot find a …

内存占用估算方法

优质博文&#xff1a;IT-BLOG-CN 通过掌握每种数据类型的大小&#xff0c;就可以更准确地预测对象和数据的内存消耗。 一、基础数据类型 Java基础数据类型结构&#xff0c;在64位系统开启指针压缩情况下的内存占用字节数&#xff1a; booleanbytecharshortintlongfloatdoub…

D23【 python 接口自动化学习】- python 基础之判断与循环

day23 match语句 学习日期&#xff1a;20240930 学习目标&#xff1a;判断与循环 --33 match语句&#xff1a;如何通过match关键字来处理程序的分支逻辑&#xff1f; 学习笔记&#xff1a; match语句的语法 基本写法 代码实现&#xff08;后续更新为自己写的代码&#xff…

软件测试学习笔记丨Mock的价值与实战

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32331 一、Mock的价值与意义 1.1 简介 测试过程中&#xff0c;对于一些不容易构造或获取的对象&#xff0c;用一个虚拟的对象来替代它&#xff0c;达到相同的效果&#xff0c;这个虚拟的对象…

YOLOv11尝鲜测试五分钟极简配置

ultralytics团队在最近又推出了YOLOv11&#xff0c;不知道在有生之年能不能看到YOLOv100呢哈哈。 根据官方文档&#xff0c;在 Python>3.8并且PyTorch>1.8的环境下即可安装YOLOv11&#xff0c;因此之前YOLOv8的环境是可以直接用的。 安装YOLOv11&#xff1a; pip instal…

安宝特分享 | AR技术重塑工业:数字孪生与沉浸式培训的创新应用

在数字化转型的浪潮中&#xff0c;AR&#xff08;增强现实&#xff09;技术与工业的结合正在呈现新的趋势和应用延伸。特别是“数字孪生”概念的崛起&#xff0c;为AR技术在工业中提供了独特而创新的切入点。 本文将探索AR如何与数字孪生、沉浸式体验和实用案例相结合&#xf…

OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(一)

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 移植须知 本文详细介绍如何将OpenHarmony小型系统的linux和LiteOS…

Elasticsearch学习笔记(3)

RestAPI Elasticsearch&#xff08;ES&#xff09;官方提供了多种语言的客户端库&#xff0c;用于与Elasticsearch进行交互。这些客户端库的主要功能是帮助开发者更方便地构建和发送DSL&#xff08;Domain Specific Language&#xff09;查询语句&#xff0c;并通过HTTP请求与…

全面提升MySQL性能:从硬件到配置再到代码的最佳实践

MySQL 是全球最流行的开源关系型数据库管理系统之一&#xff0c;广泛应用于各种规模的应用程序中。随着应用规模的增长&#xff0c;数据库的性能优化成为提升系统整体性能的关键因素。本文将从多个角度探讨如何对MySQL进行性能优化&#xff0c;帮助开发者和DBA解决实际问题&…

JWT 令牌生成报错

一、问题描述 我在获取JWT令牌时&#xff0c;报了一个这样的错误 error&#xff1a;io.jsonwebtoken.security.WeakKeyException: The signing keys size is 64 bits which is not secure enough for the HS256 algorithm. 二、问题原因 原因是我这里指定的签名密钥也就是si…

java实现的无头单向非循环链表

java实现的无头单向非循环链表 ArrayList的缺陷链表链表的概念及结构无头单向非循环链表的实现链表OJ题 ArrayList的缺陷 由于ArrayList底层是一段连续空间&#xff0c;当在ArrayList任意位置插入或者删除元素时&#xff0c;就需要将后序元素整体往前或者往后搬移&#xff0c;…

使用C语言获取iostat中的await值的方法和方案

使用C语言获取iostat中的await值的方法和方案 1. 准备工作2. 调用iostat命令并获取输出3. 解析iostat输出4. 完整实现和错误处理5. 注意事项在Linux系统中,iostat命令是sysstat软件包的一部分,用于监控系统的CPU、网卡、tty设备、磁盘、CD-ROM等设备的活动情况和负载信息。其…

逻辑回归(下): Sigmoid 函数的发展历史

背景 闲来无事翻了一下之前买的一个机器学习课程及之前记录的网络笔记&#xff0c;发现遇到公式都是截图&#xff0c;甚至是在纸上用笔推导的。重新整理一遍之前逻辑回归函数的学习笔记&#xff0c;主要是为了玩一下 LaTex 语法&#xff0c;写公式挺有意思的。 整理之前三篇笔…