24974|83

1万

帖子

28

TA的资源

裸片初长成(高级)

楼主
 

【C2000 LaunchPad】PWM 模块原理及使用 [复制链接]

 

 

PWM模块原理及使用

 

F280278PWM(四个模块),4HRPWM,特别对设计高精度电源提供了方便,每个PWM模块中又包括以下几个子模块:时基(Time-base)模块、计数比较(Counter-compare)模块、功能限定(Action-qualifier)模块、死区控制(Dead-band)模块、斩波(PWM-chopper)模块、事件触发(Event-trigger)模块、制动(Trip-zone)(不知道这样翻译恰当否)模块、数字比较(Digital Compare)模块。从这些模块的命名上看,用它来做个电源,是再恰当不过的了。

 

一、时基子模块(TB

每一个ePWM模块,都有自己的TB,它产生PWM的所有定时事件,且有同步逻辑,可以使多个PWM模块有序工作。

TBPRDPWM的计数周期寄存器。

TBPHS:相位控制寄存器,在多个PWM模块级联时,可以控制每路输出的相位。当时基模块的同步脉冲到来时,使计数器从TBPHS设置的值开始计数(丢弃当前计数值)。

TBCTLTB的控制寄存器,可以对相位方向(只在up-down时有用)控制,决定是上计数时同步(PHSDIR=1)还是下计数时同步(PHSDIR=0);决定TB输入时钟的分频系数;向下一级输出的同步脉冲的输出方式;计数值重装方式、计数方式、同步允许等控制。

TBCTR:计数寄存器。TB模块的当前计数值。

TBSTSTB的状态寄存器。

 

二、计数比较子模块(CC

此模块实现与TB的比较及控制。产生CMPACMPB比较事件;控制PWM的占空比。

CMPCTL:计数比较控制寄存器。决定是否使用影子寄存器及计数值的重装方法。

CMPA:计数比较值设定寄存器A

CMPAMCMPA的影子寄存器。

CMPB:计数比较值设定寄存器B

 

三、功能限定子模块(AQ

这个子模块主要对TBCC模块产生的事件,作出相应的响应,如计数器到达设定同期时、到达0时、到达CMPA时、到达CMPB时,相应的EPWMxAEPWMxB的输出状态。

AQCTLA:设定EPWMxA在以上事件时的输出

AQCTLB:设定EPWMxB在以上事件时的输出

 

四、死区控制子模块(DB

在同步整流及桥式电机驱动时,上下臂的控制开关(晶体管或MOS管)的导通与关闭会出现一定的延时,这有可能导致上下臂开关的同时导能现象。DB子模块可以有效地防止这种现象的发生。

DBCTLDB通用控制寄存器,主要产生死区控制的方法。

DBRED:上升沿延时控制寄存器,产生延迟的周期数。

DBFED:下降沿延时控制寄存器,产生延迟的周期数。

 

五、PWM斩波模块(PC

PWM的周期较长,用高频变压器作驱动器,就会达不到目的,并有可能烧坏器件。使用PC模块可以将PWM波经过“再调制”后的高频波作驱动就可以解决这个问题。

PCCTLPC控制寄存器,实现“再调制”波的duty控制、“调制”频率控制等。

 

六、制动子模块(TZ

TZ模块是当系统出现问题,或者发出制动信号时,达到所期望的系统响应。F280273TZ外部信号输入,TZ信号可以连接到任意一个PWM模块。当制动条件产生后,它可以使EPWMxA EPWMxB产生:高电平输出、低电平输出、高阻输出、不动作。可以一次性(one-shot)或逐周期(cycle-by-cycle)控制。可以受DC子模块控制等

TZSELTZ选择寄存器,用来选择TZ

TZCTLTZ控制寄存器,用来EPWMxAEPWMxB的输出。

TZEINTTZ中断允许寄存器。

TZDCSEL:数字比较事件选择寄存器。

 

七、事件触发子模块(ET

它由TBCCDC子模块触发源输入,产生CPU中断及触发ADC SOCstart of converter),

ETSEL:事件触发选择寄存器,选择触发源,SOC、中断允许控制,EPWMxSOCAEPWMxSOCB输出控制,

ETPS:触发事件分频寄存器,控制由n次事件产生后引发中断或响应。

ETFRC:强制触发寄存器。用于强制产生某一响应。

 

从以上可见,模块相互的作用及产生事件并不用CPU干预,这是实时控制所需要的,因为这样可以尽快地作为响应。如PWM输出后的某一时间产生ADC转换,都是由模块自己协调的,CPU只用设置好相应的寄存器就可以了。

 

八、程序示例

EPWM1A EPWM1B输出互补PWM波,并并使用TZ1TZ2对它作制动控制。例程中还用timer1控制PWM的占空比以作演示。

1InitEPwm1Gpio(),对IO口初始化

       ……

    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;   // Configure GPIO0 as EPWM1A

    GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;   // Configure GPIO1 as EPWM1B

2InitTzGpio(),TZ口初始化

       ……

   GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 3;  // Asynch input GPIO12 (TZ1)

   GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3;  // Asynch input GPIO16 (TZ2)

3PWM模块设置

    // Enable TZ1 and TZ2 as one shot trip sources

    EALLOW;

    EPwm1Regs.TZSEL.bit.OSHT1 = 1;

    EPwm1Regs.TZSEL.bit.OSHT2 = 1;

 

    // What do we want the TZ1 and TZ2 to do?

    EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_HI;

    EPwm1Regs.TZCTL.bit.TZB = TZ_FORCE_LO;

 

    // Enable TZ interrupt

    EPwm1Regs.TZEINT.bit.OST = 1;

    EDIS;

 

    EPwm1Regs.TBPRD = 6000;                         // Set timer period

    EPwm1Regs.TBPHS.half.TBPHS = 0x0000;          // Phase is 0

    EPwm1Regs.TBCTR = 0x0000;                       // Clear counter

 

    // Setup TBCLK

    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;       // Count up

    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;        // Disable phase loading

    EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; //loaded from its shadow register

    EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;     // Clock ratio to SYSCLKOUT

    EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

 

    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;  // Load registers every ZERO

    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;

    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;

    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

 

    // Setup compare

    EPwm1Regs.CMPA.half.CMPA = 3000;

 

    // Set actions

    EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;  //当计数值等于CMPA时,将PWM1A输出置高

    EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;

 

    EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR;          // Set PWM1A on Zero

    EPwm1Regs.AQCTLB.bit.PRD = AQ_SET;

    // 触发ADC SOC

    //EPwm1Regs.ETSEL.bit.SOCAEN = 1;

……

 

4 ConfigCpuTimer(&CpuTimer1, 60, 1000);//设置Timer1

5Timer1中断:

interrupt void INT13_ISR(void)     // INT13 or CPU-Timer1

{

   GpioDataRegs.GPATOGGLE.bit.GPIO3 = 1;

   EPwm1Regs.CMPA.half.CMPA++;

   if ( EPwm1Regs.CMPA.half.CMPA > 5999 )

      EPwm1Regs.CMPA.half.CMPA =1;

   //PieCtrlRegs.PIEACK.all |= ;

}

九、编译运行

发现,接在EPWM1A EPWM1B的两个LED由暗至亮交替。

最新回复

找到问题了  详情 回复 发表于 2017-11-6 22:45

点评

xiexie .....  详情 回复 发表于 2013-8-3 10:35
楼主赶紧出SCI的教程吧,在下恭候多时了,SCI调不通啊  详情 回复 发表于 2012-12-11 15:07
你好,我做个按键的程序,在ram调试没问题,在flash里调试,一按下按键就进入ILLEGAL_ISR(void)这个中断函数,请问是怎么回事呢  详情 回复 发表于 2012-12-6 21:44
 
点赞 关注(4)

回复
举报

1万

帖子

28

TA的资源

裸片初长成(高级)

沙发
 

PDF文件

PWM 模块原理及使用.pdf (96.54 KB, 下载次数: 836)

点评

请问楼主IIC的教程出了吗  详情 回复 发表于 2012-12-15 10:53
 
 

回复

2781

帖子

417

TA的资源

五彩晶圆(中级)

板凳
 
太给力了~
 
个人签名
 
 

回复

388

帖子

0

TA的资源

纯净的硅(初级)

4
 
学习了!谢谢!
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(中级)

5
 
太好了,正在学习
 
 
 

回复

373

帖子

0

TA的资源

纯净的硅(中级)

6
 

回复 楼主 dontium 的帖子

你好,我做个按键的程序,在ram调试没问题,在flash里调试,一按下按键就进入ILLEGAL_ISR(void)这个中断函数,请问是怎么回事呢

点评

这要看你的按键处理函数了  详情 回复 发表于 2012-12-6 23:33
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

7
 
按字面解释楼上好像是用法错误了,建议把中断关了调试下
 
 
 

回复

973

帖子

15

TA的资源

纯净的硅(高级)

8
 
课设正需要pwm,不过时间有限,先用430做了,等课设做完,再来研究c2000
 
 
 

回复

1万

帖子

28

TA的资源

裸片初长成(高级)

9
 

回复 6楼 wudayongnb 的帖子

这要看你的按键处理函数了

点评

LZ看一下我的问题吧,也是按键的,麻烦了:)  详情 回复 发表于 2013-8-14 20:02
楼主,你好,我的按键函数里调用了DELAY_US(10000); 延时10ms来消除抖动,结果每次按下按键就进入ILLEGAL_ISR(void)这个中断函数,注释掉延时函数就没问题了,你看这是怎么回事呢  详情 回复 发表于 2012-12-7 09:46
 
 
 

回复

1453

帖子

18

TA的资源

纯净的硅(高级)

10
 
动作真快
 
 
 

回复

373

帖子

0

TA的资源

纯净的硅(中级)

11
 

回复 9楼 dontium 的帖子

楼主,你好,我的按键函数里调用了DELAY_US(10000); 延时10ms来消除抖动,结果每次按下按键就进入ILLEGAL_ISR(void)这个中断函数,注释掉延时函数就没问题了,你看这是怎么回事呢

点评

从你上一个提问看,你是在FLASH中调试时出现的这个问题,而RAM中却正常。 这个延时函数有这样的定义 .sect \"ramfuncs\" 不知道你是怎么处理的。  详情 回复 发表于 2012-12-7 11:18
 
 
 

回复

1万

帖子

28

TA的资源

裸片初长成(高级)

12
 

回复 11楼 wudayongnb 的帖子

从你上一个提问看,你是在FLASH中调试时出现的这个问题,而RAM中却正常。
这个延时函数有这样的定义
  .sect "ramfuncs"

不知道你是怎么处理的。

点评

它这个延时估计调用的是系统延时,需要注意下初始化的顺序  详情 回复 发表于 2012-12-7 13:36
我也不知道该怎么处理啊,就是按系统给的,请问该怎么处理呢  详情 回复 发表于 2012-12-7 11:32
 
 
 

回复

373

帖子

0

TA的资源

纯净的硅(中级)

13
 

回复 12楼 dontium 的帖子

我也不知道该怎么处理啊,就是按系统给的,请问该怎么处理呢

点评

要拷贝到RAM里运行才可以。 这个问题,我准备以后发个专门的帖子和大家讨论  详情 回复 发表于 2012-12-7 12:03
 
 
 

回复

1万

帖子

28

TA的资源

裸片初长成(高级)

14
 

回复 13楼 wudayongnb 的帖子

要拷贝到RAM里运行才可以。

这个问题,我准备以后发个专门的帖子和大家讨论
 
 
 

回复

554

帖子

1237

TA的资源

纯净的硅(中级)

15
 
不错的分享啊  实际经验啊
 
 
 

回复

2606

帖子

0

TA的资源

五彩晶圆(初级)

16
 

回复 12楼 dontium 的帖子

它这个延时估计调用的是系统延时,需要注意下初始化的顺序

点评

嗯,使用的是Timer1,处理时,使用的是中断  详情 回复 发表于 2012-12-7 18:48
可否详细说一下呢  详情 回复 发表于 2012-12-7 15:08
 
个人签名工程 = 数学+物理+经济
 
 

回复

373

帖子

0

TA的资源

纯净的硅(中级)

17
 

回复 16楼 安_然 的帖子

可否详细说一下呢
 
 
 

回复

1万

帖子

28

TA的资源

裸片初长成(高级)

18
 

回复 16楼 安_然 的帖子

嗯,使用的是Timer1,处理时,使用的是中断
 
 
 

回复

373

帖子

0

TA的资源

纯净的硅(中级)

19
 

回复 楼主 dontium 的帖子

楼主赶紧出SCI的教程吧,在下恭候多时了,SCI调不通啊

点评

多谢棒场,我写的算不上“教程” SCI已有讨论: https://bbs.eeworld.com.cn/thread-360852-1-2.html  详情 回复 发表于 2012-12-11 16:26
 
 
 

回复

1万

帖子

28

TA的资源

裸片初长成(高级)

20
 

回复 19楼 wudayongnb 的帖子

多谢棒场,我写的算不上“教程”

SCI已有讨论:
https://bbs.eeworld.com.cn/thread-360852-1-2.html
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表