我正在尝试在设计中实现相同的 ePWM 通道之间的120度相移、如 sprug04a 图59和60以及示例13代码 snip 所示。 我的设计唯一的区别是我使用的是驱动程序库例程、而不是直接寄存器访问方法、并且我尝试在 epwm1、epwm4、 epwm7、同时使 ePWM 2和3与 epwm1、ePWM 5和6的相位与 epwm4相同、而 ePWM 8 和9 的相位与 epwm7相同。 我接近成功、但不完全正确、因为我为 epwm7a/7b 获取的波形似乎与 我想要的波形相反、因此7b (7a 的补码)看起来像我希望7a 看起来的波形。 我想知道、作为一个相对较新的 ePWM 外设用户、我想做的是不是可能的、我刚刚遇到了一些寄存器设置错误、还是有一些类似简单但不明显的事情。
谢谢、
//---------------------------------- //文件信息 //-------------------- //文件名:ePWM_CONFIG.c //说明:设置 DSP ePWM 的源代码 //设计说明:处理开发板与 proto 硬件// ------ //修订历史记录: //日期 按变更描述 //--- ---- ---------------------------------------- // 20180314原始斜接 器//--- ---- ---------------------------------------- #include "ePWM.h" #include "peripherals.h" #define EPWM_TIMER_TBPRD 1875 //这将是向上向下计数模式下的3750计数或150MHz/2下的20kHz #define EPWM_MIN_CMPA 1250 //= 33% #define 门限死区1USEC 75 // initEPWM -配置 ePWM_MIN_PHASE_INT_UPM_32 位 ;t INT_UPM_PHASE_INT_UPM_U = 32位/INT_UPM_PHASE = INT_INT_INT_INT_INT_INT_UPM_U = INT_UPM_U = INT_UPM_U = INT_UPM_U 32位/INT_UPM_U = INT_UPM_U ePWM_SyncCountMode SYNC_COUNT_MODE = ePWM_COUNT_MODE_UP_ACT_SYNC; bool PHASE_ENABLE = false; switch (ePWM_group) { 案例 ePWM_Group_One: PHASE_A_BASE = EPWM1_BASE; PHASE_b_BASE = EPWM2_BASE; PHASE_c_base = EPWM3_base; PHASE_SHIFT_COUNT = 0; PHASE_ENABLE = false; SYNC_COUNT_MODE = EPWM_COUNT_MODE_UP_ACT_SYNC; 中断; 案例 ePWM_Group_Two: PHASE_A_base = EPWM4_base; PHASE_b_BASE = EPWM5_base; PHASE_c_base = EPWM6_BASE; PHASE_SHIFT_COUNT = 1250; PHASE_ENABLE = true; SYNC_COUNT_MODE = EPWM_COUNT_MODE_DOWN_ACT_SYNC; 中断; 案例 ePWM_Group_Three: PHASE_A_BASE = EPWM7_BASE; PHASE_b_BASE = EPWM8_BASE; PHASE_c_base = EPWM9_BASE; PHASE_SHIFT_COUNT = 1250; PHASE_ENABLE = true; SYNC_COUNT_MODE = EPWM_COUNT_MODE_UP_ACT_SYNC; 中断; 默认值: 断言(false); break; } ePWM_setupCommon (PHASE_A_base、PHASE_ENABLE、PHASE_SHIFT_COUNT、SYNC_COUNT_MODE); ePWM_setupCommon (PHASE_b_BASE、TRUE、0、SYNC_COUNT_MODE); ePWM_setupCommon (PHASE_c_base、 true、0、SYNC_COUNT_MODE); if (EPWM_GROUP = EPWM_GROK_ONE) { //选择 INT on 时基计数器零事件, //启用 INT,在发生第一个事件时生成 INT ePWM_setInterruptSource (PHASE_A_base、ePWM_INT_TBCTR_ZERO); ePWM_enableInterrupt (PHASE_A_base); ePWM_setInterruptEventCount (PHASE_A_base、1U); } void ePWM_setupCommon (uint32_t base、bool PHASE_ENABLE、uint16_t PHASE_SHIFT、ePWM_SyncCountMode COUNT_MODE) { //设置 TBCLK ePWM_setTimeBasePeriod (base、ePWM_setTimer );ePWM_ePwm_setTimer (base_setEPWM );ePwM_ePwm_deTimer (base_setEPWM (base_setEPWM) PHASE_SHIFT);//PHASE_SHIFT); ePWM_setTimeBaseCounter (base、0U); //设置比较值 ePWM_setCounterCompareValue (base、ePWM_COUNTER_COMPARE_A、ePWM_MIN_CMPA); //设置计数器模式 ePWM_setBaseTimeMode (base、ePWM_COUNTER_MODE_TRUE_if )= 真(UD_UPPHED);//设置计数器模式(if)=真(UPP_ENABLE (真) ePWM_enablePhaseShiftLoad (base); ePWM_setSyncOutPulseMode (base、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN); } 否则 { ePWM_DisablePhaseShiftLoad (base);//已禁用 ePWM_setSyncOutPulseMode (base、ePWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO); } ePWM_setClockPrescaler (base、ePWM_CLOCK_divider 1、ePWM_HSCLOCK_divider 1); //设置重影 EPWM_setCounterCompareShadowImage LoadMode (base、ePWM_COUNTER_COMPARE_A、ePWM_COMP_LOAD_ON_CNTR_ZERO); //设置操作 EPWM_setQualifierActionifierAction (base、ePWM_AQ_OUTPUT A、ePWM_OUTPUT HIGH、ePWM_PA_OUTPWM_OUTPUT Quali_ZERO);//设置操作 (base、ePWM_Qualifier_time_Action_Quali_Quali_Quali_Quali_Action_Action_On_Action_ ePWM_AQ_output_a、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_down_cmPA); ePWM_setDeadBandOutputSwapMode (base、ePWM_DB_output_a、 false);// A S6=0 ePWM_setDeadBandOutputSwapMode 上无交换(base、ePWM_DB_OUTPUT B、false);// B 上无交换 S7=0 ePWM_setDeadBandMode (base、ePWM_DB_RED、true);//上升沿延迟 S1 = 1 ePWM_setD_delimity 、ePWM_DB_delayMode (bandeD_sbandeD_sbed);eDbandeD_delimity、ePWM_delayDB_delaybandeD_deD_sbed //下降沿延迟反相 S3=1 ePWM_setRisingEdgeDeadBandDelayInput (base、ePWM_DB_INPUT_EPWMA);//将 ePWMA 输入到红色 S4=0 ePWM_setFallingEdgeCountedDelayInput (base、ePWM_DB_INPUT_EPWMA);//输入 ePWM_Disloading_randrastock/ePWM (undePWM);//将以 eLoad_delePWM 作为冗余模式(undePWM_ePWM_eLoadrandePWM_dePWM_deLoad);//以 eLoad/eLoad/ePWM_dePwm_reload (base);以 ePWM_ded/ePWM_dePWM_dePWM_dePWM_dePwm_randePWM_dePwm_randePwm_randePwm_randePwm_randePwm_randePwm (base); ePWM_setFallingEdgeDelayCountShadowImage LoadMode (base、ePWM_FED_LOAD_FREEZE); ePWM_DisableFallingEdgeDelayCountShadowImage LoadMode (base); ePWM_setDeadBandCounterClock (base、ePWM_DB_counter_clock_full_cycle); ePWM_setRisingEdgeDelayCount (base、(uint16_t) dutband_1USEC); ePWM_setFallingEdgeDelayCount (base、(uint16_t)死区_1_USEC); }