详解EPWM相关寄存器设置问题
eeskill 2023-12-01


1 TZ 故障捕获子模块



TZ子模块可以工作在Cycle-by-Cycle、One-Shot两种模式下,这两种状态的区别是:

one-shot是永久起作用的,恢复它只有人工清除。 而Cycle-by-Cycle却是本周期有用,下一周期自动恢复

外部触发选择寄存器TZSEL 寄存器设置选项如下:



TZCTL主要设置TZA 和TZB寄存器即可,主要定义当外部触发事件发生时,定义EPWMxA和EPWMxB所采取的动作:

TZEINT 中断使能寄存器控制周期触发和单次触发的中断标志使能


TZ** 是外部触发标志寄存器TZCLR外部触发清零寄存器这两个理解起来比较简单,所以不再做过多说明,就是中断的时候查询标志位,然后中断发生了就把标志位清零即可!



TZFRC 外部触发强制寄存器


TZ寄存器配置代码

EALLOW; EPwm1Regs.TZCTL.bit.TZA= TZ_FORCE_HI; //Forced Hi (EPWM1A = High state) EPwm1Regs.TZCTL.bit.TZB = TZ_FORCE_HI; //Forced Hi (EPWM1B = High state) EPwm1Regs.TZFRC.bit.OST =1; //Forces a fault on the OST latch and sets the OST** bit. EDIS;

2DB 死区产生

2.1DB寄存器设置


2.2死区产生子模块内部结构

结合上图可以看出,DBCLT[IN_MODEL]就是选择哪个作为输入信号源进行延时控制;通过延时模块之后,实现上升沿和下降沿的延时功能;

然后有一个反相器模块,可以产生互补的输出信号,是否反转可以通过寄存器DBCTL[POLSEL]进行设置,感觉这个寄存器就是设置信号是否反转的,如果是1就反转,如果0就不反转,就这样子!

DBCTL[OUT_MODE]主要作用是选择那个信号进行输出,如果选择0,那么之前的延时的信号就被旁路掉了,整个DB模块就不起作用了,选择1才会产生死区功能;

2.3经典死区配置方案(感觉这里的后缀 C 就是互补的意思,没后缀则无互补,这个在2.4的波形图里面可以得到更好的体现)


2.4加入死区延时的波形输出 (对比着2.2看2.3和2.4的图是最好明白寄存器配置的,也好理解输出波形是怎么样子的!)

2.5寄存器配置代码


//DBCTL (Dead-Band Control)//==========================//OUT MODE bits#defineDB_DISABLE 0x0#defineDBB_ENABLE 0x1#defineDBA_ENABLE 0x2#defineDB_FULL_ENABLE 0x3//POLSEL bits#defineDB_ACTV_HI 0x0#defineDB_ACTV_LOC 0x1#defineDB_ACTV_HIC 0x2#defineDB_ACTV_LO 0x3//IN MODE#defineDBA_ALL 0x0#defineDBB_RED_DBA_FED 0x1#defineDBA_RED_DBB_FED 0x2#defineDBB_ALL 0x3// Active Low PWMs - Setup Deadband

EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;//这里基本上都是配置两个波形都是有延时才输出的,不会旁路掉延时波形

EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LO; //低电平有效,这里会对电平进行一个反转

EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL; //选择 epwmxa作为信号源作为延时依据

EPwm1Regs.DBRED = EPWM1_MIN_DB; //设置上升沿的延时

EPwm1Regs.DBFED = EPWM1_MIN_DB; //设置下降沿的延时

EPwm1_DB_Direction = DB_UP;

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 电源
  • DC
  • AC
  • 稳压
下载排行榜
更多
评测报告
更多
广告