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:79 | XCSA 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_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 |
|
1.3 OPXB
Output XBAR 的输入信号来源内部各信号, 总共支持78个输入源。可输出8路Output XBAR Out信号, 该8路信号直接输出到芯片管脚。Output XBAR 的输入源最大支持80路,输出最大支持8路。
表3输入 | 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 |
|
2. XBAR输入与输出信号对应关系
输入信号经过每个XBAR子模块的预处理后,会基于输出通道进行选择,每个输出通道可以选择所有输入信号中的其中一路或多路信号 进行或逻辑操作后作为输出。所有的输入信号需经过4选1选通选择,选通后的Mux信号再经过或逻辑后才会输出到输出通道。
需要注意的是:!!!在选择输入信号时,如果2个信号同时存在于一个4选1组中,则只会有一个输入信号有效,所以应该避免需要的输入信号同时存在于一个4选1组,或者将这个2个信号单独安排输出在2个输出通道上。
图13. XBAR配置流程
图2 XBAR详细设计XBAR模块软件配置流程如下:
根据输入信号MUX表选择对应的输入信号
根据每个模块的特性,分别设置对应输入通道的输入滤波,输入极性。
选择对应的输出通道,并配置输出通道的配置参数,如输出是否取反,输出信号处理方式,输出是否展宽等。
配置XBAR MUX寄存器,选择XBAR模块输入的信号对应的输出通道
设置输出通道使能
另外:如果配置INXB模块,还需要考虑INXB输出是否经过CLU单元,如果需要,还需要进行以下额外配置:
配置对应CLU单元,选择需要输入的INXB 输出信号
选择是否需要BYBASS该信号
选择对应CLU单元对信号处理的逻辑算法模式
配置对应输出的中断触发类型,并使能该通道中断
配置对应输出的输出极性,最后使能输出
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
4.2 SrPWM模块故障输入信号说明
由表2 可以看出,XBAR的PFXB子模块最多可输出18路输出信号送往SrPWM模块的故障保护单元。这18路信号被分成3组(每组6bit)送往三组SRPWM通道(每组4个通道)。在每一组的6bit信号中,前4bit被送往SrPWM模块的前级保护单元,后2bit被送往SrPWM模块的后级保护单元。
SrPWM对故障输入的配置请参考《AN0002 SRPWM前后级保护应用指南.pdf》。
图44.3 ADC模块故障输入信号说明每个ADC模块总共有16个虚拟通道,每个虚拟通道可产生:
滤波前超上门限事件
滤波前超下门限事件
滤波后超上门限事件
滤波后超下门限事件
共64个信号,在送入XBAR模块后,选出4个信号后送入PFXB子模块用于封波保护。筛选可通过调用XBAR驱动APIXBAR_ADC_WdgMux_Sel来完成。
图54.3 应用示例假设GPIO2_15输入为故障信号,用于PWM的封波保护。输入信号为低电平有效。需要封波保护的SrPWM通道为PWM5,封波后PWM输出置0,保护类型为无约束保护, 使用前级保护单元封波。
参考[第三章节XBAR配置流程](#3. XBAR配置流程)如下:
- 参考PWM故障保护输入路径图3可得知,GPIO输入信号作为封波输入,需要经过XBAR的INXB和PFXB。所以需要这2个模块分别进行配置。
- INXB的输入信号为GPIO2_15, 参考表1, 则输入的index 为47. INXB的输出总共有16个通道,可以选择任意一个通道输出,此例程选择通道0.
- 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)。