DSPF28335:PWM配置[DSP ePWM]


一、ePWM介绍

1.1 epwm模块

epwm模块可以用作以下功能:

  1. 输出pwm波
  2. TZ信号(跳闸信号)
  3. 时基同步输入信号或输出信号
  4. ADC开始转换信号
  5. 外部总线

ePwm模块框图:

epwm模块框图

1.2 子模块寄存器介绍

1.2.1 TB(Time-Base)

TB子模块包含以下寄存器(每个寄存器占16位):
作用:配置时钟、计数方向、相位等等。

TB子模块寄存器

1.2.2 CC(Counter-compare)

CC子模块包含以下寄存器(每个寄存器占16位):
作用:配置pwm占空比(主要),事件控制时间等等

CC子模块寄存器

1.2.3 AQ(Action-qualifier)

AQ子模块包含以下寄存器(每个寄存器占16位):
作用:控制事件发生时的动作/状态:控制pwm输出低电平或高电平

AQ子模块寄存器

1.2.4 DB(Dead-band)

DB子模块包含以下寄存器(每个寄存器占16位):
作用:传统死区控制,上升沿和下降沿延时值等

DB子模块寄存器

1.2.5 PC(PWM-chopper)

PC子模块包含以下寄存器(每个寄存器占16位):
作用:控制斩波频率、斩波串的第一个斩波宽度

PC子模块寄存器

1.2.6 TZ(Trip-zone)

TZ子模块包含以下寄存器(每个寄存器占16位):
作用:发生故障时采取的跳闸措施:如epwm输出低电平、高电平或高阻态。

TZ子模块寄存器

1.2.7 ET(Event-trigger)

ET子模块包含以下寄存器(每个寄存器占16位):
作用:使能触发中断的ePWM事件、使能触发ADC转换开始事件、事件触发频率、轮询、设置或清除事件标志

ET子模块寄存器

1.3 各个子模块负责的功能介绍

1.3.1 TB(时基)

1.3.1.1 三种计数模式

分别为上下计数、向下计数、向上计数
向上计数、向下计数模式:用于产生不对称PWM
上下计数模式:用于产生对称PWM

三种计数模式

1.3.1.2 频率计算

TBCLK = SYSCLKOUT / (HSPCLKDIV x CLKDIV)

向上/向下计数模式频率计算:

频率计算

上-下计数模式频率计算:

频率计算

1.3.1.3 EPWMxSYNCI

同步输入脉冲信号,见下图,出现脉冲信号(EPWMxSYNCI),TBPHS的值直接赋于TBPRD寄存器,然后按照原来方向继续计数。

EPWMxSYNCI

1.3.2 CC(计数器比较)

1.3.2.1 比较信号介绍

4种比较信号
CMPA、CMPB、TBPRD、ZERO

四种寄存器比较信号

1.3.2.2 比较波形

以向上计数模式为例

如图,设定CMPA和CMPB的值,当CTR计数器的值 = CMPA/CMPB寄存器的值,产生一个事件信号。

向上计数模式的比较波形

1.3.3 AQ(动作限定器)

根据上述产四种产生的信号设定事件控制类型,可设定事件的优先级

1.3.3.1 动作类型

对EPWMA、EPWMB的四种操作:do noting、clear low(低电平) 、set high(高电平)、toggle(高低切换)

动作类型

1.3.3.2 事件优先级
  1. 上下计数模式
    上下计数模式事件优先级

  2. 向上计数模式
    向上计数模式事件优先级

  3. 向下计数模式
    向下计数模式事件优先级

1.3.3.3 波形配置举例

向上计数模式,不对称pwm

波形图,动作部分说明查看1.3.3.1,由图可以看出,计数为0,PWMA、B同时输出高电平,计数到CMPA,PWMA拉低,PWMB不动作(注意这里CMPA如果计数相等可以动作PWMB),计数到CMPB,PWMB拉低,PWMA不动作。
向上计数波形图
查看例程代码:
代码例程

上下计数模式,PWM对称

波形图,动作部分说明查看1.3.3.1,由图可以看出,向上计数时,PWMA由CMPA事件产生拉高动作,PWMB由CMPB事件产生拉高动作;向下计数时,PWMA由CMPA事件产生拉低动作,PWMB由CMPB事件产生拉低动作,从而产生对称波形。
上下计数模式,对称PWM波形
波形示例代码:
代码

上下计数模式,PWM不对称
波形图,动作部分说明查看1.3.3.1,注意PWMA,向上计数时,PWMA由CMPA事件产生拉高动作,向下计数时,PWMA由CMPB事件产生拉低动作。

上下计数模式,不对称pwm波形
示例代码:
代码

1.3.4 DB(死区)

1.3.4.1 死区的工作模式

死区的工作模式

1.3.4.2 死区波形示例

死区时间波形图
波形说明:
第一个波形为原始波形,其中RED(第2个波形)和FED(第三个波形)分别为上升沿延时和下降沿延时(这里是两种死区模式),延时部分称之为死区,这两种模式这很好理解。AHC(第四个波形)表示高电平有效互补输出,上面的波形指上管驱动波形,下面的是下管驱动波形。由于高电平有效,所以死区时间内上、下两管电平均为低(无效),输出的两个波形根据EPWMA配置进行输出,ALC则正好相反。

延时时间对照表:根据DBFED,DBRED和TBCLK设置值对应延时多少us

延时时间对照表

1.3.5 PC(pwm斩波)

作用:改变斩波频率,调整第一个脉冲宽度,第二个脉冲以及后续脉冲宽度。

1.3.5.1 斩波示意图

PWM波形与PSCLK脉冲波相与,在PWM输出高电平时段,输出一段脉冲波。
斩波示意图

功能一:控制第一个脉冲宽度

第一个脉冲的计算公式:(与系统时钟和OSHTWTH值有关),OSHTWTH只占4位。
第一个脉冲计算公式
OSHTWTH的值与脉冲宽度对应关系(系统频率100M):
在这里插入图片描述
控制斩波第一个脉冲的宽度波形图如下:
波形图

功能二:改变斩波占空比

通过CHPDUTY位进行控制,有7种占空比(图中红圈)可以设置:
斩波占空比

二、代码及寄存器介绍

2.1 数据手册上的配置举例

举例一个数据手册上的配置案例:控制电机的三相逆变器

数据手册案例

EPWM Module 1 config (EPWM1模块配置)

配置如下:(配置了Active Hi Complementary(AHC)模式,EPWM1B的输出不需要配置,会根据EPWM1A来生成)
EPWM Module1 config
比较值设置:
EPWM Module1 config比较值

对应波形如下:
ePWM1

寄存器介绍:

  1. TBPRD: 时基设置
    决定时基计数器的周期 = (2 * TBPRD )TBCLK,设置PWM频率。

  2. TBPHS:相位设置
    设置相位

  3. TBCTL:时基控制
    TBCTL

  4. CMPCTL:比较器设置
    CMPCTL

  5. AQCTLA/AQCTLB:信号输出动作设置(A对应ePWMxA输出)
    信号输出动作设置

  6. DBCTL:死区生成控制寄存器
    OUT_MODE
    POLSEL

  7. DBRED / DBFED :死区延时设置

2.2 官方例程

Example_2833xEPwmDeadBand.c
以void InitEPwm1Example()配置举例

void InitEPwm1Example()
{
   // Setup TBCLK
   EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // 向上计数
   EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD;       // 设置周期
   EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;    // 失能相位加载
   EPwm1Regs.TBPHS.half.TBPHS = 0x0000;       // 相位为0
   EPwm1Regs.TBCTR = 0x0000;                  // 清计数器
   EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;   // 时钟分频
   EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2;

   // Setup shadow register load on ZERO
   EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
   EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
   EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
   EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

   // Set Compare values
   EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA;    // Set compare A value
   EPwm1Regs.CMPB = EPWM1_MIN_CMPB;              // Set Compare B value

   // Set actions
   EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;            // Set PWM1A on Zero
   EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;          // Clear PWM1A on event A, up count

   EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;            // Set PWM1B on Zero
   EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;          // Clear PWM1B on event B, up count

   // Interrupt where we will change the Compare Values
   EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;     // Select INT on Zero event
   EPwm1Regs.ETSEL.bit.INTEN = 1;                // Enable INT
   EPwm1Regs.ETPS.bit.INTPRD = ET_3RD;           // Generate INT on 3rd event

   // Information this example uses to keep track
   // of the direction the CMPA/CMPB values are
   // moving, the min and max allowed values and
   // a pointer to the correct ePWM registers
   epwm1_info.EPwm_CMPA_Direction = EPWM_CMP_UP; // Start by increasing CMPA & CMPB
   epwm1_info.EPwm_CMPB_Direction = EPWM_CMP_UP;
   epwm1_info.EPwmTimerIntCount = 0;             // Zero the interrupt counter
   epwm1_info.EPwmRegHandle = &EPwm1Regs;        // Set the pointer to the ePWM module
   epwm1_info.EPwmMaxCMPA = EPWM1_MAX_CMPA;      // Setup min/max CMPA/CMPB values
   epwm1_info.EPwmMinCMPA = EPWM1_MIN_CMPA;
   epwm1_info.EPwmMaxCMPB = EPWM1_MAX_CMPB;
   epwm1_info.EPwmMinCMPB = EPWM1_MIN_CMPB;
}

寄存器介绍:

  1. ETSEL:事件触发选择寄存器
    INTEN
    INTSEL

  2. ETPS:
    ETSEL的INTSEL是事件选择位,而下面是设置中断发生周期,由事件出现的第几次产生中断。
    INTPRD


总结

以上是DSP TMSF2833X EPWM配置介绍与总结,仅个人学习记录,若侵权删。

  • 20
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值