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路。
输入 | 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路。
输入 | 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路。
输入 | 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个输出通道上。
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》。
每个ADC模块总共有16个虚拟通道,每个虚拟通道可产生:
滤波前超上门限事件
滤波前超下门限事件
滤波后超上门限事件
滤波后超下门限事件
共64个信号,在送入XBAR模块后,选出4个信号后送入PFXB子模块用于封波保护。筛选可通过调用XBAR驱动APIXBAR_ADC_WdgMux_Sel来完成。
假设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)。