XBAR在PWM封波中的应用
文档编号:AN0005
重要
本文档仅适用于ET6001系列MCU。
ET6000系列芯片内部都包含了一个XBAR模块,它在提升系统整体性能、优化信号流管理和降低处理延时方面起到重要作用。
XBAR在PWM (脉冲宽度调制) 信号的封波应用中,扮演着关键的角色。具体来说,XBAR可以用来协调和控制PWM信号的生成与其它系统组件 (ADC,GPIO) 之间的互动,以实现精确的电机控制或电源转换等功能。比如当系统检测到异常情况需要迅速反应时 (例如电机过载或短路),XBAR可以迅速调整PWM信号的路由,立即将PWM输出设置为安全状态 (如低电平或零输出),以实施紧急封锁,保护电机和电力电子器件免受损害。
在如下章节中,我们将对ET6000系列MCU XBAR在PWM封波中的应用进行详细说明。
XBAR功能介绍
XBAR模块主要功能,是为芯片的输入管脚,输出管脚和内部模块之间提供灵活的连接关系,这些连接关系可通过配置进行路由选择,同时可以通过内部集成的可配置逻辑单元(CLU)对部分连接关系进行逻辑运算,以提供更大的灵活性和可能性。
XBAR模块主要包含以下常用5种类型的XBAR单元:
INXB (Input XBAR输出到其他XBAR子模块)
PFXB (SRPWM Fault XBAR,输出到SRPWM模块)
ETXB (ETIMER XBAR,输出到ETIMER模块)
CLU (XCSA, XCET, XCOX输出到其他XBAR子模块)
OPXB (Output XBAR,输出到芯片IO管脚)
以下就PWM保护常用的XBAR子模块进行详细讲解。
INXB
Input XBAR的输入信号来源于GPIO,总共支持5组GPIO共 84 个GPIO。可输出到3个CLU子单元以及PFXB,ETXB,OPXB XBAR模块。Input XBAR的输入源最大支持 84 路,输出最大支持16路。
Input XBAR输入/输出信号对应关系
输入 |
index |
输出 |
GPIO0_0~GPIO0_15 GPIO1_0~GPIO1_15 GPIO2_0~GPIO2_15 GPIO3_0~GPIO3_15 GPIO4_0~GPIO4_15 |
0:83 |
XCSA XCET XCOX PFXB PSXB EFXB OPXB |
备注
GPIO0~GPIO4组的每路输入都是按顺序排列的,GPIO0_0~GPIO0_15为0~15,GPIO1_0~GPIO1_15为16~31,依次类推。 连续的4个输入信号为一组MUX选择信号, 对于同一个XBAR模块的输出信号,输入信号只能选择一组MUX4输入中的其中一个。 对于同一个XBAR模块的输出信号,输入信号可以选择多个不同组MUX4输入中的其中一个。
PFXB
SRPWM Fault XBAR的输入信号来源内部各自信号,总共支持65个输入源。可输出18路SRPWM Fault Out信号。
SRPWM Fault XBAR的输入源最大支持68路,输出最大支持18路。
SRPWM Fault XBAR输入/输出信号对应关系
输入 |
index |
输出 |
Dflash_ecc_err |
0 |
SrPWM Fault_Out[0:17] |
Dflash_bus_err |
1 |
|
Pflash_ecc_err |
2 |
|
Pflash_bus_err |
3 |
|
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_rst |
27 |
|
Wdt1_rst |
28 |
|
Cpu0_rst_evt |
29 |
|
Cpu1_rst_evt |
30 |
|
Cpu0_lockup |
31 |
|
Cpu1_lockup |
32 |
|
Cpu0_ecc_err |
33 |
|
Cpu1_ecc_err |
34 |
|
Sram_ecc_err |
35 |
|
Sysc_can_ecc_err |
36 |
|
Bus_timeout |
37 |
|
Cpu0_bus_err_flag |
38 |
|
Cpu1_bus_err_flag |
39 |
|
Clock_fault |
40 |
|
Por_uv_warn |
41 |
|
Pwr_ocp_warn |
42 |
|
Power_err |
43 |
|
Sysc_temp_warn |
44 |
|
InputXBAR[15:0] |
45:60 |
|
Epwm_xbar_sync[3:0] |
61:64 |
|
N/A |
65:67 |
OPXB
Output XBAR的输入信号来源内部各信号,总共支持78个输入源。可输出8路Output XBAR Out信号,该8路信号直接输出到芯片管脚。
Output XBAR的输入源最大支持80路,输出最大支持8路。
Output XBAR输入/输出信号对应关系
输入 |
index |
输出 |
Wdt0_rst |
0 |
Output XBAR_Out[0:7] |
Wdt1_rst |
1 |
|
Cpu0_rst_evt |
2 |
|
Cpu1_rst_evt |
3 |
|
Cpu0_lockup |
4 |
|
Cpu1_lockup |
5 |
|
Cpu0_ecc_err |
6 |
|
Cpu1_ecc_err |
7 |
|
Sram_ecc_err |
8 |
|
Sysc_can_ecc_err |
9 |
|
Bus_timeout |
10 |
|
Cpu0_bus_err_flg |
11 |
|
Cpu1_bus_err_flg |
12 |
|
Clock_fault |
13 |
|
Por_uv_warn |
14 |
|
Pwr_ocp_warn |
15 |
|
Power_err |
16 |
|
Sysc_temp_warn |
17 |
|
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/A |
78:79 |
XBAR输入与输出信号对应关系
输入信号经过每个XBAR子模块的预处理后,会基于输出通道进行选择,每个输出通道可以选择所有输入信号中的其中一路或多路信号进行或逻辑操作后作为输出。所有的输入信号需经过4选1选通选择,选通后的MUX信号再经过或逻辑后才会输出到输出通道。
注意:
在选择输入信号时,如果2个信号同时存在于一个4选1组中,则只会有一个输入信号有效,所以应该避免需要的输入信号同时存在于一个4选1组,或者将这个2个信号单独安排输出在2个输出通道上。
XBAR输入/输出信号对应关系图
XBAR配置流程
XBAR模块软件配置流程
XBAR模块软件配置流程如下:
根据输入信号MUX表选择对应的输入信号。
根据每个模块的特性,分别设置对应输入通道的输入滤波,输入极性。
选择对应的输出通道,并配置输出通道的配置参数,如输出是否取反,输出信号处理方式,输出是否展宽等。
配置XBAR MUX寄存器,选择XBAR模块输入的信号对应的输出通道。
设置输出通道使能。
另外:如果配置INXB模块,还需要考虑INXB输出是否经过CLU单元,如果需要,还需要进行以下额外配置:
配置对应CLU单元,选择需要输入的INXB输出信号。
选择是否需要Bypass该信号。
选择对应CLU单元对信号处理的逻辑算法模式。
配置对应输出的中断触发类型,并使能该通道中断。
配置对应输出的输出极性,最后使能输出。
PWM故障保护模块应用
PWM故障保护输入路径
PWM模块故障保护输入信号主要有以下三种:
外部GPIO输入
故障信号通过GPIO输入,先经过Input XBAR再给到SRPWM Fault XBAR模块输出故障保护信号,最后输入到SRPWM的故障保护模块。
模拟比较器ACMP输入
预先设定模拟比较器参考端的保护门限电压,实时监测模拟比较器的输入端电压,比较器输出给到SRPWM Fault XBAR模块输出故障保护信号,最后输入到SRPWM的故障保护模块。
ADC模块输入
PWM模块故障保护输入信号
SRPWM模块故障输入信号说明
由表1-2可以看出,XBAR的PFXB子模块最多可输出18路输出信号送往SRPWM模块的故障保护单元。这18路信号被分成3组 (每组6 bit) 送往三组SRPWM通道 (每组4个通道)。在每一组的6 bit信号中,前4 bit被送往SRPWM模块的前级保护单元,后2 bit被送往SRPWM模块的后级保护单元。
SRPWM对故障输入的配置请参考 《AN0002 SRPWM前后级保护应用指南》
SRPWM模块故障输入信号说明
ADC模块故障输入信号说明
每个ADC模块总共有16个虚拟通道,每个虚拟通道可产生:
滤波前超上门限事件
滤波前超下门限事件
滤波后超上门限事件
滤波后超下门限事件
共64个信号,在送入XBAR模块后,选出4个信号后送入PFXB子模块用于封波保护。筛选可通过调用XBAR驱动APIXBAR_ADC_WdgMux_Sel来完成。
ADC模拟看门狗信号输入XBAR说明
应用示例
假设GPIO2_15输入为故障信号,用于PWM的封波保护。输入信号为低电平有效。需要封波保护的SRPWM通道为PWM5,封波后PWM输出置0,保护类型为无约束保护,使用前级保护单元封波。
参考1.3 XBAR配置流程如下:
参考PWM故障保护输入路径图1-3可得知,GPIO输入信号作为封波输入,需要经过XBAR的INXB和PFXB。所以需要这2个模块分别进行配置。
INXB的输入信号为GPIO2_15,参考表1-1,则输入的index为47。INXB的输出总共有16个通道,可以选择任意一个通道输出,此例程选择通道0。
PFXB的输入信号为INXB的输出0通道,参考表1-2,则PFXB输入信号的index为45,PFXB的输出总共有18个通道,参考图1-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);
总结
模拟比较器ACMP和ADC模拟看门狗输入封波的配置与GPIO输入封波配置类似,只是PFXB的输入信号选择变为:
Sar_wdt_evt[0:11],来自经过XBAR模块选择后的ADC看门狗事件。
Cmpc_cmp0_rls[0:3],来自模拟比较器模块输出比较结果。
Cmpc_cmp1_rls[0:3],来自模拟比较器模块输出比较结果。
修订记录
修订记录累积了本文档每次修订的具体信息。
序号 |
版本 |
修改日期 |
修改说明 |
1 |
1.0.0 |
2024/08/27 |
初始发布 |




