PWM波的产生过程?如何触发ADC呢?

电子说

1.3w人已加入

描述

PWM脉宽调制技术在控制领域中是非常常用的技术,电机控制、电源控制等都是通过PWM进行驱动IGBT或MOSFET等开关器件进行相关控制的。

目前所在公司的项目中需要用到PWM驱动功率放大电路,用以控制电流输出,同时也是通过EPWM触发ADC进行采样电流,故此进行学习总结。

本次总结主要有以下内容:

1、PWM波的产生过程;

2、如何触发ADC?

1、PWM的介绍

1.1 时钟

我一直在强调时钟的重要性,因为没有时钟,芯片的很多外设模块是无法工作的,在你编程的过程中可能就会遇到因为没有使能时钟导致模块无法工作的情况,所以当你的程序其他配置没有问题,却无法进行具体的寄存器操作时,你应该考虑查看是否打开了时钟。

EPWM的时基模块工作需要的时钟信号,通过对系统时钟的分频得到时基时钟(红圈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

1.2 ePWM结构及组成单元

F28335的PWM模块是加强模块,这个加强表现在它各个ePWM的独立性,每个ePWM小模块都由两路ePWM输出组成,分别为ePWMxA和ePWMxB,这一对PWM输出,可以配置成三种输出:

  • 两路独立的单边沿PWM输出;
  • 两路独立的但互相对称的双边沿PWM输出;
  • 一对双边沿非对称的PWM输出;

DSP28335共有18路PWM,6组 * 2 EPWM(A、B)+ 6路APWM,结构图如下所示。

寄存器

每组EPWM包括7个模块:

时基模块TB

比较计数模块CC

动作模块AQ

死区模块DB

斩波模块DC

事件触发模块ET

错误联防模块TZ

每个模块各自作用如下:

TB :为输出PWM产生始终基准TBCLK,配置PWM的时钟基准计数器TBCTR,设置计数器的计数模式,配置硬件或软件同步时钟基准计数器,确定ePWM同步信号输出源;

CC:确定PWM占空比,以及ePWM输出高低电平切换时间;

AQ:确定计数器和比较寄存器匹配时产生动作,即ePWM 高低电平的切换;

DB:配置输出PWM上升沿或下降沿延时时间,也可以将A、B两通道配置成互补模式,我做的逆变器就是将ePWM配置成互补模式。死区时间可以编程确定;

PC:产生高频PWM载波信号;

TZ:当外部有错误信号产生时,对PWM输出进行相应处理,比如全置高,或拉低,或置为高阻态,从而起到保护作用。当然该功能也可以通过软件强制产生;

EZ:使能ePWM中断,使能ePWM触发ADC采样,确定事件产生触发的速度和清除相关事件标志位。

ePWM模块的7个模块就像一条生产线,一级一级的经过,但DSP更高级,可以实现通过配置,使得ePWM只经过我选择的生产线,没有被选择上的就不要经过。

例如,死区控制模块可以需要也可以不需要,这就看实际系统需不需要了。在实际使用ePWM时,正常的发出PWM波往往只要要配置TB、CC、AQ、DB、ET五个模块。

上面讲了那么多,那PWM波到底是如何产生的呢?接下来就开始讲解这个问题。

2、PWM的产生

2.1 时基模块-设置PWM产生的三种模式

PWM产生的三种模式分别为:up模式、down模式、up-down模式。

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

寄存器

2.2 周期和频率的计算

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

2.3 计数比较模块-比较事件产生,决定占空比

计数比较模块主要是通过时基计数的值与比较寄存器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,达到控制的目的。

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

动作模块AQ根据动作模块寄存器AQCTLA、AQCTLB的设置对比较事件进行动作。

主要有四种动作模式:

1、不动作

2、置低

3、置高

4、翻转

动作模块事件优先级

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

至此,PWM的产生基本得到解答。具体是:

1、设置TBCLK时钟以及模块时钟使能;
2、选择up-down模式,确定频率,得到周期值;
3、确定比较事件以及动作模式,决定PWM的占空比,即可得到PWM波。=

3、如何触发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启动转换。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分