DSP28335 EPWM模块各重要寄存器

EPWM共有6对,每对模块均可单独输出两路(A和B)。

EPWM模块包括子模块:

TB 时基模块
CC 比较模块
AQ 动作模块
DB 死区模块
PC 斩波模块
ET 时间触发模块
TZ 错误警告模块

常用重要模块:TB、CC、AQ、ET

TB模块

实质是计数器,设置产生方波的频率、周期。计数方式有三种:递减计数,递增计数,增减计数。

TB内部寄存器

TBPRD:周期寄存器 (设置的时钟周期存入此,可通过阴影寄存器缓冲后写入,也可通过活动寄存器立即写入)
TBCTR:时基计数变值寄存器 (时基当前所计数的值存入,用于和所设定周期值比较)
TBPHS:时基相位寄存器
TBSTS:时基状态寄存器
TBCTL:控制寄存器 (重要)

TBCTL寄存器域描述
PHSDIR: 增减模式下,同步信号到来时,装载相位值后增减状态的计数方向
0:减计数
1:增计数
CLKDIV:分频,同HSPCLKDIV用
000:1分频
001:2分频
010:4分频

111:128分频
TBCLK=SYSCLKOUT/(HSPCLKDIV×CLKDIV)
HSPCLKDIV:分频,同CLKDIV用
SWFSYNC:软件强制同步脉冲
0:无效果
1:强制一次
SYNCOSEL:选择ePWMxSYNCO信号输出源(了解性)
00:ePWMxSYNCI
01:CTR=ZER0:时基计数器为0
10:CTR=CMPA:时基计数器等于比较寄存器A
11:禁止输出
PRDLD:周期寄存器阴影加载方式
0:加载阴影寄存器值
1:不加载阴影
PHSEN:使能相位
0:禁止加载
1:加载相位寄存器值
CTRMOD:计数模式
00:加
01:减
10:加减
11:停止计数
例:
EPwm1Regs.TBPRD = EPWM_TIMER_TBPRD; // 设置时钟周期
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; //时基相位寄存器赋值0
EPwm1Regs.TBCTR = 0x0000; //时基计数器清零
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // 递增计数模式
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; //禁止相位加载
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2; //2分频 设置时基时钟速率为系统时钟/4=37.5m
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2; //2分频 pwm1频率 37.5m/3750=10k

CC模块

联合TB模块,可以在周期内产生更多的事件。内部是2个比较器,预设值TBCTR的值与比较寄存器CMPA和CMPB不断进行比较的,当时基计数器的值等于其中之一时,就会产生相应的事件。

CC内部寄存器

CMPA:比较寄存器A,其值与TBCTR值比较,相同时,事件发送到动作模块。
CMPB:比较寄存器B,其值与TBCTR值比较,相同时,事件发送到动作模块。
CMPCTL:控制寄存器(重要)

CMPCTL寄存器域描述
SHDWAFULL(或SHDWBFULL):CMPA(或B)阴影寄存器满标志位
0:未满
1:满了
SHDWAMODE(或SHDWBMODE):CMPA(或B)写入值是否使用阴影
0:通过阴影寄存器写入
1:直接写入
LOADAMODE(或LOADBMODE):若使用阴影,加载条件模式选择
00:CTR=ZERO时
01:CTR=PRD时
10:CTR=ZERO或CTR=PRD是
11:禁止
例:
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;
EPwm1Regs.CMPA.half.CMPA = EPWM1_MIX_CMPA;
EPwm1Regs.CMPB = EPWM1_MIX_CMPB;

AQ模块

动作模块,相应事件并展开相关设计动作

AQ内部寄存器

AQCTLA:动作限定输出A控制寄存器
AQCTLB:动作限定输出A控制寄存器

AQCTLA域描述AQCTLB与A类似,其各项使ePWMxB输出
CBD:时间基准计数器等于CMPB寄存器且计数为
00:无动作
01:清除,使ePWMxA输出低
10:置位,使ePWMxA输出高
11:切换,使ePWMxA输出翻转(高变低,低变高)
CBU:计数器等于CMPB且计数为
00:无动作
01:清除,使ePWMxA输出低
10:置位,使ePWMxA输出高
11:切换,使ePWMxA输出翻转(高变低,低变高)
CAD:计数器等于CMPA且计数为
00:无动作
01:清除,使ePWMxA输出低
10:置位,使ePWMxA输出高
11:切换,使ePWMxA输出翻转(高变低,低变高)
CAU:计数器等于CMPA且计数为
00:无动作
01:清除,使ePWMxA输出低
10:置位,使ePWMxA输出高
11:切换,使ePWMxA输出翻转(高变低,低变高)
PRU:当计数器等于周期动作
00:无动作
01:清除,使ePWMxA输出低
10:置位,使ePWMxA输出高
11:切换,使ePWMxA输出翻转(高变低,低变高)
ZRO:当计数器等于0时
00:无动作
01:清除,使ePWMxA输出低
10:置位,使ePWMxA输出高
11:切换,使ePWMxA输出翻转(高变低,低变高)
例:
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; //递增计数时,发生比较寄存器A匹配时清除PWM1A输出
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; //计数到0 PWM1A输出高电平

软件时间响应使用AQSFRC(动作限定软件强制寄存器)与AQCSFRC(动作限定连续软件强制寄存器)实现
(可用于模拟软件调试),(了解性)

AQSFRC域描述
BLDCSF:主寄存器从映射选项重新加载
00:遇到计数器等于0的事件加载
01:遇到计数器等于周期的事件加载
10:遇到计数器等于0或周期的事件加载
11:直接加载,不经过映射
OTSFB:对输出事件B一次性软件强制
0:写0无效果,始终读0
1:触发单一S/W事件
ACTSFB:当一次性软件强制B被调用时行动
00:禁止
01:清除(低)
10:设定(高)
11:切换(高低切换)
OTSFA:对输出事件A一次性软件强制
0:写0无效果,始终读0
1:触发单一S/W事件
ACTSFA:当一次性软件强制A被调用时行动
00:禁止
01:清除(低)
10:设定(高)
11:切换(高低切换)

AQCSFRC域描述
CSFA:对输出A连续软件强制
00:无作用
01:对输出A强制产生连续低信号
10:对输出A强制产生连续高信号
11:软件强制被禁用且无效
CSFB:对输出B连续软件强制
00:无作用
01:对输出B强制产生连续低信号
10:对输出B强制产生连续高信号
11:软件强制被禁用且无效

ET模块

事件触发模块,产生中断,触发ADC等

ETSEL域描述(事件触发选择寄存器)
SCOBEN:使能ADC转换B(EPWMxSOCB)脉冲
0:禁止
1:使能
SCOBSEL:决定EPWMxSOCB脉冲何时被生成
000:保留
001:时基计数器(TBCTR)为0
010:TBCTR=TBPRD
011:保留
100:定时器递增时时间基准计数器等于CMPA
101:定时器递减时时间基准计数器等于CMPA
110:定时器递增时时间基准计数器等于CMPB
111:定时器递减时时间基准计数器等于CMPB
SOCAEN:使能ADC转换A(EPWMxSOCA)脉冲
0:禁止
1:使能
SCOASEL:决定EPWMxSOCB脉冲何时被生成
000:保留
001:时基计数器(TBCTR)为0
010:TBCTR=TBPRD
011:保留
100:定时器递增时时间基准计数器等于CMPA
101:定时器递减时时间基准计数器等于CMPA
110:定时器递增时时间基准计数器等于CMPB
111:定时器递减时时间基准计数器等于CMPB
INTEN:使能EPWM中断生成
0:禁止生成
1:启动生成
INTESEL:EPWM中断选项
000:保留
001:时基计数器(TBCTR)为0
010:TBCTR=TBPRD
011:保留
100:定时器递增时时间基准计数器等于CMPA
101:定时器递减时时间基准计数器等于CMPA
110:定时器递增时时间基准计数器等于CMPB
111:定时器递减时时间基准计数器等于CMPB

ETPS域描述(时间触发预分频寄存器)
SOCBCNT:EPWM ADC开始变换B事件(EPWMxSOCB)计数器寄存器,这些位决定有多少选定ETSEL(SOCBSEL)事件已经发生
00:没有
01:1个
10:2个
11:3个
SOCBPRD:EPWMxSOCB脉冲信号生成事件选择
00:禁用
01:第一个事件上生成EPWMxSOCB脉冲:ETPS[SOCBCNT]=0,1
10:第二个事件上生成EPWMxSOCB脉冲:ETPS[SOCBCNT]=1,0
11:第三个事件上生成EPWMxSOCB脉冲:ETPS[SOCBCNT]=1,1

SOCACNT与SOCAPRD类比B的

INTCNT:EPWM中断技术寄存器
00:没有事件发生
01:1个
10:2个
11:3个
INTPRD:在第几个事件发生中断
00:禁用
01:在第一个事件发生时中断,ETPS[INTCNT]=0,1
10:在第二个事件发生时中断,ETPS[INTCNT]=1,0
11:在第三个事件发生时中断,ETPS[INTCNT]=1,1
例:
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; //选择0匹配事件中断;
EPwm1Regs.ETSEL.bit.INTEN = 1; //使能事件触发中断
EPwm1Regs.ETPS.bit.INTPRD = ET_3RD; //三次中断请求

DB、PC、TZ寄存器可对波形锦上添花 ,初学使用时不多,用时可查阅手册。

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是DSP 28335 EPWM中心对齐模式的Demo代码,可以用来生成中心对齐PWM波形: ```c #include "DSP2833x_Device.h" #include "DSP2833x_Examples.h" void epwm_init(void); void main() { InitSysCtrl(); // 初始化系统控制寄存器 InitPieCtrl(); // 初始化中断控制器 IER = 0x0000; // 禁用中断 IFR = 0x0000; InitPieVectTable(); // 初始化 PIE 向量表 epwm_init(); // 初始化 EPWM 模块 EINT; // 使能全局中断 ERTM; // 使能全局中断响应 while(1); } void epwm_init(void) { EPwm1Regs.TBPRD = 15000; // 设置 PWM 周期为 15000 EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 设置计数器为上升下降模式 EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 禁用相位补偿 EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; // 开启周期寄存器的阴影寄存器功能 EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE; // 禁用同步 EPwm1Regs.CMPA.half.CMPA = 7500; // 设置占空比的一半为 50% EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // 开启比较器寄存器 A 的阴影寄存器功能 EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // 在计数器为 0 时加载比较器寄存器 A EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // 当计数器向上计数到 CMPA 时,设置 EPWM1A 为高电平 EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // 当计数器向下计数到 CMPA 时,设置 EPWM1A 为低电平 EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; // 当计数器向上计数到 CMPB 时,设置 EPWM1B 为高电平 EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR; // 当计数器向下计数到 CMPB 时,设置 EPWM1B 为低电平 EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL; // 在 A 端口上启用死区 EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // 死区时间为高电平 EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // 在 A 和 B 端口上启用死区 EPwm1Regs.DBRED = 50; // 设置死区时间为 50 个时钟周期 EPwm1Regs.DBFED = 50; EPwm1Regs.TZSEL.bit.OSHT1 = 1; // 在允许的情况下禁用输出保护 EPwm1Regs.TZCTL.bit.TZA = TZ_NO_CHANGE; EPwm1Regs.TZCTL.bit.TZB = TZ_NO_CHANGE; EPwm1Regs.TBCTR = 0; // 将计数器清零 } ``` 在这个Demo代码中,我们使用EPwm1模块来生成中心对齐PWM波形。我们将PWM周期设置为15000个时钟周期,并将计数器设置为上升下降模式。然后,我们将占空比的一半设置为7500,并在计数器为0时加载比较器寄存器A。最后,我们在AQCTLA和AQCTLB寄存器中设置了相应的动作,以使EPWM1A和EPWM1B输出中心对齐PWM波形。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值