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寄存器可对波形锦上添花 ,初学使用时不多,用时可查阅手册。

你可能感兴趣的:(笔记随笔,DSP28335,EPWM模块)