[DSP编程] 昊芯HX2000系列DSP芯片电机过流跳闸保护之二

[复制链接]
 楼主| xqn2011 发表于 2022-6-9 19:17 | 显示全部楼层 |阅读模式
本帖最后由 xqn2011 于 2022-6-9 19:19 编辑

#技术资源# #申请原创#
自昊芯推出专题讲解芯片电机过流跳闸保护以来,第一期主要讲解EPWM_TZ错误联防,本期主要讲解EPWM_DC数字比较,比较器超阈值检测将在下期内容中讲解。

HX2000系列EPWM_DC数字比较工作原理如下,由DC数字比较触发事件,与被选择产生:CBC周期限流与OST单次跳闸事件,输入TZ错误联防模块,形成三重保护输出,触发EPWMxA/B动作,关断过流输出的MOSFET桥臂,实现限流与跳闸保护,原理如下:


结合DCTRIPSEL寄存器DCAH/LCOMPSEL与DCBH/LCOMPSEL位选择,产生数字比较DCAH/L与DCBH/L信号引脚为。通过TZDCSEL寄存器选择,数字比较事件的触发条件:DCAH/L置低或置高、DCBH/L置低或置高、或DCA/BL置高与DCA/BH置低。通过DCA/BCTL[EVT1/2SRCSEL]置低,选择DCAEVT1/2与DCBEVT1/2数字比较输出。通过DCA/BCTL[EVT1/2FRCSYNCSEL]选择同步或异步采样,输出DC错误联防信号。根据TZEINT所配中断使能,通过TZSEL寄存器选择,DC事件产生周期CBC或单次OST故障。数字比较事件,与CBC周期错误联防,在同一触发引脚上同时发生时,将按优先级TZA/B>DCA/BEVT1>DCA/BEVT2触发EPWMxA/B动作。DC故障消除后,可通过引脚上的指定条件,自动清除中断标志,使EPWM波形恢复,实现瞬间限流;或手动写入TZCLR相应标志位,清除TZ**相应中断标志位,便于下次DC中断触发。

详细介绍请参见下图所示二维码B站视频链接:

由此设计EPWM_DC实例:某时刻驱动板电流(1)过流:①输出周期CBC错误联防;输入(GPIO16),触发EPWM2A置高、EPWM2B置低;②经比较器COMP输出:DC数字比较事件,输入,触发EPWM3A置高、EPWM3B置低;(2)超越阈值输出单次OST错误联防,输入(GPIO17),触发EPWM1A置高、EPWM1B置低,硬件连接如下:

基于以上分析,在CDK上开发EPWM_DC输出,代码包括:EPWM与TZ GPIO、初始化、OST、CBC及DC错误联防配置、TZ触发EPWM动作的中断服务程序,主程序调用。

  1. int main(void)
  2. {   
  3.     /*初始化系统控制*/
  4.     InitSysCtrl();
  5.     /*初始化EPwm GPIO*/
  6.     InitEPwm1Gpio();
  7.     InitEPwm2Gpio();
  8.     InitEPwm3Gpio();
  9.     /*初始化TZ GPIO*/
  10.     InitTzGpio();
  11.     /*初始化LED,用于指示DC错误联防触发*/
  12.     InitLED();
  13.     /*关中断*/
  14.     InitPieCtrl();
  15.     /*清中断*/
  16.     IER=0x0000;
  17.     IFR=0x0000;
  18.     /*初始化PIE向量表*/
  19.     InitPieVectTable();
  20.     EALLOW;
  21.     /*将epwm1_tz_isr入口地址赋给EPWM1_TZINT,执行OST单次触发动作*/
  22.     PieVectTable.EPWM1_TZINT = &epwm1_tz_isr;
  23.     /*将epwm2_tz_isr入口地址赋给EPWM2_TZINT,执行CBC周期触发动作*/
  24.     PieVectTable.EPWM2_TZINT = &epwm2_tz_isr;
  25.     /*将epwm2_tz_isr入口地址赋给EPWM3_TZINT,执行DC数字比较事件触发动作*/
  26.     PieVectTable.EPWM3_TZINT = &epwm3_tz_isr;
  27.     EDIS;
  28.     EALLOW;
  29.     /*禁用TBCLK同步,允许EPWM初始化配置*/
  30.     SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
  31.     EDIS;
  32.     /*初始化EPWM1,错误联防配置为OST*/
  33.     InitEpwm1_Example();
  34.     /*初始化EPWM2,错误联防配置为CBC*/
  35.     InitEpwm2_Example();
  36.     /*初始化EPWM3,错误联防配置为DC数字比较*/
  37.     InitEpwm3_Example();
  38.     EALLOW;
  39.     /*使能TBCLK同步,EPWM配置功能起作用*/
  40.     SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
  41.     EDIS;
  42.     /*使能打开对应CPU IER中断*/
  43.     IER|=M_INT2;
  44.     /*使能对应中断*/
  45.     PieCtrlRegs.PIEIER2.bit.INTx1 = 1;
  46.     PieCtrlRegs.PIEIER2.bit.INTx2 = 1;
  47.     PieCtrlRegs.PIEIER2.bit.INTx3 = 1;
  48.     EINT;
  49.     while (1)
  50.     {
  51.         if(EPwm_TZ_CBC_flag!=0)
  52.         {
  53.             if((EPwm_TZ_DC_flag!=0)&&(EPwm_TZ_CBC_flag>EPwm_TZ_DC_flag))
  54.             {
  55.                 GpioDataRegs.GPBSET.bit.GPIO44=1;
  56.             }
  57.             else
  58.             {
  59.                 GpioDataRegs.GPBCLEAR.bit.GPIO44=1;
  60.             }
  61.         }
  62.     }
  63.     return 0;
  64. }

CDK上开发EPWM_DC输出程序,编译结果为:


编译通过后,就可以开始调试了,CBC错误联防事件的调试结果如下:


CBC触发前与故障消除后的EPWM波形如图左,触发后的EPWM波形如图右:


DC错误联防事件的调试结果如下:


DC触发前与故障消除后的EPWM波形如图左,触发后的EPWM波形如图右:


OST错误联防事件的调试结果如下:


OST触发前后的EPWM波形如下:


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

本版积分规则

2

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部