ET6000系列MCU XBAR在PWM封波保护中的应用详解

cathy的头像
cathy 发布于:周二, 09/03/2024 - 10:58 ,关键词:

ET6000系列芯片内部都包含了一个XBAR模块,它在提升系统整体性能、优化信号流管理和降低处理延时方面起到重要作用。

XBAR在PWM(脉冲宽度调制)信号的封波应用中,扮演着关键的角色。具体来说,XBAR可以用来协调和控制PWM信号的生成与其它系统组件(ADC,GPIO)之间的互动,以实现精确的电机控制或电源转换等功能。比如当系统检测到异常情况需要迅速反应时(例如电机过载或短路),XBAR可以迅速调整PWM信号的路由,立即将PWM输出设置为安全状态(如低电平或零输出),以实施紧急封锁,保护电机和电力电子器件免受损害。

在此篇文章中,我们将对 ET6000系列MCU XBAR在PWM封波中的应用进行详细说明。

1.XBAR功能介绍

XBAR模块主要功能,是为芯片的输入管脚,输出管脚和内部模块之间提供灵活的连接关系,这些连接关系可通过配置进行路由选择,同时可以通过内部集成的可配置逻辑单元(CLU)对部分连接关系进行逻辑运算,以提供更大的灵活性和可能性。

XBAR模块主要包含以下常用5种类型的XBAR单元:

  • INXB(Input XBAR 输出到其他XBAR子模块)
  • PFXB (SrPWM Fault XBAR , 输出到SRPWM模块)
  • ETXB(ETimer XBAR, 输出到ETIMER模块)
  • CLU(ADC CLU, ETIMER CLU, OPXB CLU 输出到其他XBAR子模块)
  • OPXB(OUTPUT XBAR, 输出到芯片IO管脚)

以下就PWM保护常用的XBAR子模块进行详细讲解。

1.1 INXB

Input XBAR 的输入信号来源于GPIO, 总共支持5组GPIO共80个GPIO。可输出到3个CLU子单元以及PFXB,ETXB,OPXB XBAR模块。Input XBAR 的输入源最大支持80路,输出最大支持16路。

表1
输入Index输出
GPIO0_0~GPIO0_15
GPIO1_0~GPIO1_15
GPIO2_0~GPIO2_15
GPIO3_0~GPIO3_15
GPIO4_0~GPIO4_15
0:79XCSA
XCET
XCOX
PFXB
PSXB
EFXB
OPXB

1.2 PFXB

SrPWM Fault XBAR 的输入信号来源内部各自信号, 总共支持65个输入源。可输出18路SPWM Fault Out信号。

SrPWM Fault XBAR 的输入源最大支持68路,输出最大支持18路。

表2
输入Index输出
Dflash_ecc_err0SrPWM Fault_Out[0:17]
Dflash_bus_err1
Pflash_ecc_err2
Pflash_bus_err3
Sar_core_err[2:0]4:6
Sar_wdt_evt[11:0]7:18
Cmpc_cmp0_rls[3:0]19:22
Cmpc_cmp1_rls[3:0]23:26
Wdt0_rst27
Wdt1_rst28
Cpu0_rst_evt29
Cpu1_rst_evt30
Cpu0_lockup31
Cpu1_lockup32
Cpu0_ecc_err33
Cpu1_ecc_err34
Sram_ecc_err35
Sysc_can_ecc_err36
Bus_timeout37
Cpu0_bus_err_flag38
Cpu1_bus_err_flag39
Clock_fault40
Por_uv_warn41
Pwr_ocp_warn42
Power_err43
Sysc_temp_warn44
InputXBAR[15:0]45:60
Epwm_xbar_sync[3:0]61:64
N/A65:67

1.3 OPXB

Output XBAR 的输入信号来源内部各信号, 总共支持78个输入源。可输出8路Output XBAR Out信号, 该8路信号直接输出到芯片管脚。Output XBAR 的输入源最大支持80路,输出最大支持8路。

表3
输入Index输出
Wdt0_rst0Output XBAR_Out[0:7]
Wdt1_rst1
Cpu0_rst_evt2
Cpu1_rst_evt3
Cpu0_lockup4
Cpu1_lockup5
Cpu0_ecc_err6
Cpu1_ecc_err7
Sram_ecc_err8
Sysc_can_ecc_err9
Bus_timeout10
Cpu0_bus_err_flg11
Cpu1_bus_err_flg12
Clock_fault13
Por_uv_warn14
Pwr_ocp_warn15
Power_err16
Sysc_temp_warn17
Inputxbar[15:0]18:33
Inputxbar_clu2out[3:0]34:37
Epwm_xbar_sync[3:0]38:41
Sar_xbar_in[11:0]42:53
Pit_of_exp[3:0]54:57
Stm_oc0_exp[3:0]58:61
Stm_oc1_exp[3:0]62:65
Stm_oc2_exp[3:0]66:69
Stm_oc3_exp[3:0]70:73
Cfg_opxb_sw[3:0]74:77
N/A78:79

2. XBAR输入与输出信号对应关系

输入信号经过每个XBAR子模块的预处理后,会基于输出通道进行选择,每个输出通道可以选择所有输入信号中的其中一路或多路信号 进行或逻辑操作后作为输出。所有的输入信号需经过4选1选通选择,选通后的Mux信号再经过或逻辑后才会输出到输出通道。

需要注意的是:!!!在选择输入信号时,如果2个信号同时存在于一个4选1组中,则只会有一个输入信号有效,所以应该避免需要的输入信号同时存在于一个4选1组,或者将这个2个信号单独安排输出在2个输出通道上。

1.jpg


图1
3. XBAR配置流程
2.jpg


图2 XBAR详细设计

XBAR模块软件配置流程如下:

  1. 根据输入信号MUX表选择对应的输入信号

  2. 根据每个模块的特性,分别设置对应输入通道的输入滤波,输入极性。

  3. 选择对应的输出通道,并配置输出通道的配置参数,如输出是否取反,输出信号处理方式,输出是否展宽等。

  4. 配置XBAR MUX寄存器,选择XBAR模块输入的信号对应的输出通道

  5. 设置输出通道使能

另外:如果配置INXB模块,还需要考虑INXB输出是否经过CLU单元,如果需要,还需要进行以下额外配置:

  1. 配置对应CLU单元,选择需要输入的INXB 输出信号

  2. 选择是否需要BYBASS该信号

  3. 选择对应CLU单元对信号处理的逻辑算法模式

  4. 配置对应输出的中断触发类型,并使能该通道中断

  5. 配置对应输出的输出极性,最后使能输出

4. PWM故障保护模块应用

4.1 PWM故障保护输入路径

PWM模块故障保护输入信号主要有以下三种:

  • 外部GPIO输入

    故障信号通过GPIO输入,先经过Input XBAR再给到SrPWM Fault XBAR模块输出故障保护信号,最后输入到SRPWM的故障保护模块。

  • 模拟比较器ACMP输入

    预先设定模拟比较器参考端的保护门限电压,实时监测模拟比较器的输入端电压,比较器输出给到SrPWM Fault XBAR模块输出故障保护信号,最后输入到SRPWM的故障保护模块。

  • ADC模块输入

    预先设定ADC模块子模块模拟看门狗的保护门限电压,实时采集输入电压,模拟看门狗告警信号输出给到SrPWM Fault XBAR模块输出故障保护信号,最后输入到SRPWM的故障保护模块。

3.jpg

图3

4.2 SrPWM模块故障输入信号说明

由表2 可以看出,XBAR的PFXB子模块最多可输出18路输出信号送往SrPWM模块的故障保护单元。这18路信号被分成3组(每组6bit)送往三组SRPWM通道(每组4个通道)。在每一组的6bit信号中,前4bit被送往SrPWM模块的前级保护单元,后2bit被送往SrPWM模块的后级保护单元。

SrPWM对故障输入的配置请参考《AN0002 SRPWM前后级保护应用指南.pdf》。

4.jpg

图4
4.3 ADC模块故障输入信号说明

每个ADC模块总共有16个虚拟通道,每个虚拟通道可产生:

  • 滤波前超上门限事件

  • 滤波前超下门限事件

  • 滤波后超上门限事件

  • 滤波后超下门限事件

共64个信号,在送入XBAR模块后,选出4个信号后送入PFXB子模块用于封波保护。筛选可通过调用XBAR驱动APIXBAR_ADC_WdgMux_Sel来完成。

5.jpg

图5
4.3 应用示例

假设GPIO2_15输入为故障信号,用于PWM的封波保护。输入信号为低电平有效。需要封波保护的SrPWM通道为PWM5,封波后PWM输出置0,保护类型为无约束保护, 使用前级保护单元封波。

参考[第三章节XBAR配置流程](#3. XBAR配置流程)如下:

  1. 参考PWM故障保护输入路径图3可得知,GPIO输入信号作为封波输入,需要经过XBAR的INXB和PFXB。所以需要这2个模块分别进行配置。
  2. INXB的输入信号为GPIO2_15, 参考表1, 则输入的index 为47. INXB的输出总共有16个通道,可以选择任意一个通道输出,此例程选择通道0.
  3. PFXB的输入信号为INXB的输出0通道,参考表2,则PFXB输入信号的index为45, PFXB的输出总共有18个通道,参考图4可得知,若要对PWM5封波,需要将PFXB的输出信号安排到CH6~9的任意一个上, 此例程选择通道6。ch6 对应前级保护的ch0。

XBAR配置参考代码如下:

/** 
    * @brief  XBAR Configure for GPIO input  to PWM  Fault in
*/
void BSP_XBAR_GPIO2PwmProtectInit(void)
{    
    XBAR_INXB_InCfg_TypeDef  inputCfg;    
    XBAR_PFSXB_InCfg_TypeDef pfxb_inputCfg;    
    XBAR_InChMsk_TypeDef     inputChMsk;
    
    /* 1. input channel configure  */    
    memset(&inputCfg, 0, sizeof(XBAR_INXB_InCfg_TypeDef));    
    memset(&pfxb_inputCfg, 0, sizeof(XBAR_PFSXB_InCfg_TypeDef));    
    XBAR_InputChMsk_Init(&inputChMsk);
    
    /* whether to enable edge trigger */    
    inputCfg.inEdgeEn = DISABLE;    
    /* whether to enable input filter */    
    inputCfg.inFilterEn = DISABLE;    
    /* whether to invert the input signal level */    
    inputCfg.inInvertEn = DISABLE;    
    /* select edge trigger type */    
    inputCfg.inEdgeType = XBAR_IN_EDGE_FALLING;
    
    /*      
        * 2. select Input XBAR input channel     
        * IN:  GPIO2_15     * OUT: INXB_OUT0     
    */    
    /* add GPIO2_15 */    
    XBAR_Input_Add_Source(&inputChMsk, INXB_SRC_GPIO2_GRP + 15); /* 47 */    
    XBAR_INXB_Input_Channel_Init(&inputCfg, &inputChMsk);    
    /* configure XBAR output channel  out_ch0  */    
    XBAR_INXB_Output_Mux_Config((uint16_t)BIT_MASK(0), &inputChMsk);    
    /* output config */    
    XBAR_INXB_Output_Latch_Disable((uint16_t)BIT_MASK(0));    
    XBAR_INXB_Output_Invert_Disable((uint16_t)BIT_MASK(0));    
    XBAR_INXB_Output_Enable((uint16_t)BIT_MASK(0));
    
    /*      
        * 3. select PFXB XBAR input channel     
        * IN:  INXB_OUT0     
        * OUT: OUT: PFXB_OUT[5:0]-> PWM_CH0~3 PFXB_OUT[11:6]-> PWM_CH4~7  PFXB_OUT[17:12]-> PWM_CH8~11    
    */    
    /* add INXB_OUT0 */    
    XBAR_InputChMsk_Init(&inputChMsk);    
    XBAR_Input_Add_Source(&inputChMsk, PFSXB_SRC_INXB_OUT_GRP + 0);      /* 45 */   
    /* whether to enable edge trigger */   
    pfxb_inputCfg.inEdgeEn = DISABLE;    
    /* whether to invert the input signal level */    
    pfxb_inputCfg.inInvertEn = DISABLE;    
    /* select edge trigger type */    
    pfxb_inputCfg.inEdgeType = XBAR_IN_EDGE_FALLING;    
    XBAR_PFXB_Input_Channel_Init(&pfxb_inputCfg, &inputChMsk);    
    /* configure XBAR output channel  out_ch6 -> PWM_CH4~7 */    
    XBAR_PFXB_Output_Mux_Config((uint16_t)BIT_MASK(6), &inputChMsk);    
    /* output config */    
    XBAR_PFXB_Output_Latch_Disable((uint16_t)BIT_MASK(6));    
    XBAR_PFXB_Output_Invert_Enable((uint16_t)BIT_MASK(6));    
    XBAR_PFXB_Output_Enable((uint16_t)BIT_MASK(6));
}

SrPWM故障保护配置参考代码如下:

SRPWM_PREPInitTypeDef stPREPInit;

memset(&stPREPInit, 0, sizeof(SRPWM_PREPInitTypeDef));

stPREPInit.a.unresFaultProtectSig   = SRPWM_PREP_SIG_FAULT_REAL0;   /* 0/1/2/3 */
stPREPInit.a.unresFaultProtectState = SRPWM_PREP_STATE_CLR;
stPREPInit.b.unresFaultProtectSig   = SRPWM_PREP_SIG_FAULT_REAL0;
stPREPInit.b.unresFaultProtectState = SRPWM_PREP_STATE_CLR;
SRPWM_PREPInit(SRPWM5, &stPREPInit);

4.4 总结

模拟比较器ACMP和ADC模拟看门狗输入封波的配置与GPIO输入封波配置类似,只是PFXB的输入信号选择变为:

  • Sar_wdt_evt[0:11],来自经过XBAR模块选择后的ADC看门狗事件。
  • Cmpc_cmp0_rls[0:3],来自模拟比较器模块输出比较结果
  • Cmpc_cmp1_rls[0:3],来自模拟比较器模块输出比较结果

来源:翌创微

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 23