DSP C2000系列TMS320F28335学习之EPWM

  • Post author:
  • Post category:其他




前言

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

版权声明:本文为CSDN博主「lhm8013」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/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获取



版权声明:本文为weixin_43658159原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。