DSP C2000系列TMS320F28335学习之EPWM

前言

PWM脉宽调制技术在控制领域中是非常常用的技术,电机控制、电源控制等都是通过PWM进行驱动IGBT或MOSFET等开关器件进行相关控制的。
目前所在公司的项目中需要用到PWM驱动功率放大电路,用以控制电流输出,同时也是通过EPWM触发ADC进行采样电流,故此进行学习总结。
本次总结主要有以下内容:
1、PWM波的产生过程;
2、如何触发ADC?
本次总结的内容比较简单,主要是总结一下之前简单使用的内容,还有一些比如占空比的PID控制,动作事件的优先级,为什么要产生死区,TZ模块的具体应用等后续有时间可以进行补充。

1、PWM的产生

1.1 时钟

EPWM模块的时钟特地去看了一下,因为之前写过一篇文章:关于使用DSP28335的ADC模块采样电流出现无法采样数据的问题,触发ADC的时候查找问题就查到时钟这里。
时钟原理图如下Figure5所示.时基模块工作需要时钟信号,对系统时钟的分频得到时基时钟(红圈1)进行设置,主要是通过时基控制寄存器(TBCTL)的高速时基时钟分频位 HSPCLKDIV[9:7] 和时基时钟分频位 CLKDIV[12:10] 进行分频设置,通常设置为1分频,即时基时钟为系统时钟。
TBCLK = SYSCLKOUT / (HSPCLKDIV * CLKDIV)

	// 设置TBCLK
	EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0x0U;
	EPwm1Regs.TBCTL.bit.CLKDIV = 0x0U;

在这里插入图片描述
TBCLK时基时钟是否使能,EPWM模块时钟是否使能(如下图Figure1),对TBCLK时基时钟以及使用的EPWM1模块时钟进行使能,在程序中(DSP2833x_SysCtrl.c中)置1,具体程序如下所示:

SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1; // ePWM1
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Enable TBCLK within the ePWM

版权声明:本文为优快云博主「lhm8013」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_43658159/article/details/101081173

1.2 EPWM模块

DSP28335共有18路PWM,6组 * 2 EPWM(A、B)+ 6路APWM ,每组EPWM包括7个模块,时基模块TB、比较计数模块CC、动作模块AQ、死区模块DB、斩波模块DC、事件触发模块ET、错误联防模块TZ。具体如下图Figure2所示:
PWM结构图
各模块作用如下所示:
在这里插入图片描述
在这里插入图片描述

1.2.1时基模块–设置PWM产生的三种模式

PWM产生的三种模式分别为:up模式、down模式、up-down模式
PWM产生的本质是信号通过与载波比较,根据设置输出高低电平,占空比由一个周期内高电平的时间决定。在实际实现上,载波通过计数器计数得到,其周期值TBPRD即为载波计数最大值(峰值),信号是根据具体需求经过PI控制器输出得到,与载波进行比较后产生相应占空比。比如up-down模式如下图1-2-1所示。
在这里插入图片描述

周期和频率

1、up和down模式是向上计数和向下计数,其周期和频率的计算公式一致,为:
Tpwm = (TBPRD+1)* t_TBCLK,Fpwm= 1 / Tpwm
2、up-down模式是先向上计数后向下计数,其周期和频率的计算公式为:
Tpwm = 2 * TBPRD*t_TBCLK,Fpwm= 1 / Tpwm

在实际开发中,一般选用up-down模式,较前两种模式优势在于增长平滑,无较大突变,更适合实际应用。
实际设置PWM的频率为10KHz,TBCLK为150MHz,则可计算出周期为:
PRD = 150 000 000 / (10 000 * 2)= 7500

1.2.2 计数比较模块–比较事件产生,决定占空比

计数比较模块主要是通过时基计数的值与比较寄存器CMPA、CMPB进行比较,比如图1-2-1的值3900设置为CMPA的值,根据设置,当计数值大于或小于CMPA的值,AQ进行相应动作(置高或置低),就能得到相应占空比的PWM波。
比较主要有四种情况:
1、TBCTR = CMPA,PWM根据AQ动作;
2、TBCTR = CMPB,PWM根据AQ动作;
3、TBCTR = PRD,PWM根据AQ动作;
4、TBCTR = 0,PWM根据AQ动作;

注意:up或down模式只比较一次,而up-down模式比较两次。

实际过程中,比较的这个值时不断变化的,根据具体需求(参考值)通过PID控制器在不断调整,输出不同占空比的PWM,达到控制的目的。

1.2.3 动作模块AQ–根据比较结果动作,决定占空比

动作模块AQ根据动作模块寄存器AQCTLA、AQCTLB的设置对比较事件进行动作,主要有四种动作模式:
1、不动作
2、置低
3、置高
4、翻转

动作模块事件优先级
不同模式下的动作事件是有优先级的,up-down模式在向上计数和向下计数的过程中,事件优先级不一样。所有模式下,软件强制事件的优先级最高。

至此,PWM的产生基本得到解答。具体是:
1、设置TBCLK时钟以及模块时钟使能;
2、选择up-down模式,确定频率,得到周期值;
3、确定比较事件以及动作模式,决定PWM的占空比,即可得到PWM波。

2、如何触发ADC?

触发ADC的事件主要涉及到PWM模块的事件触发模块ET,根据时基模块和计数比较模块输入的比较事件以及CTR_Dir时基计数方向产生相应事件,设置事件触发选择寄存器ETSEL,选择触发ADC启动转换或进行中断请求。
在这里插入图片描述
ADC启动转换触发信号为EPWMxSOCA和EPWMxSOCB,根据ADC的设置选择某个信号或两个信号。

触发ADC启动转换的具体设置为:
1、设置哪种触发事件,
TBCTR = CMPA
TBCTR = CMPB
TBCTR = PRD
TBCTR = 0
2、什么事件模式下情况触发
每个事件、每2个事件、每3个事件,一般是设置为每个事件触发ADC启动转换。

其他问题

1、PID控制输出比较值
2、死区模块
3、TZ模块
4、斩波模块

总结

简单总结了两个问题,其他问题待后续再进行补充。
关注我,更多知识文章和技术资源,前往未(v)新(x):龙一的编程life获取

`ego-planner-swarm-master` 是一个开源项目,通常它可能是一个多智能体协同的无人机(UAV)或机器人路径规划的软件库。为了编译这个项目,你需要遵循其仓库中的说明和依赖项。以下是一个一般性的编译流程,但请注意具体步骤可能因项目而异: 1. 克隆仓库:首先需要将项目代码克隆到本地计算机。通常使用Git进行克隆: ``` git clone https://github.com/your-repository/ego-planner-swarm-master.git cd ego-planner-swarm-master ``` 2. 安装依赖:根据项目README或其他文档,安装所有必要的依赖。这可能包括系统级别的依赖和编译依赖,例如特定版本的编译器、库文件、Python版本等。 3. 编译代码:如果项目包含编译的代码(如C++源文件),你可能需要运行CMake或其他构建系统来生成可执行文件或库文件。对于CMake,通常是: ``` mkdir build cd build cmake .. make ``` 4. 设置环境变量:有时候,项目需要设置环境变量以便能够正确地运行。这通常在项目的文档中会有说明。 5. 测试:编译完成后,可能需要运行一些测试脚本来验证编译的正确性。 6. 运行程序:如果一切顺利,你应该能够按照项目文档中提供的方法来运行程序。 请记住,具体步骤应当参考项目本身的文档。如果项目使用了特殊的构建系统或有特定的编译要求,你可能需要遵循特定的指南来进行编译。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值