//################################################################### //// 文件:ePWM_TRIK_Zone.c //// 标题:ePWM模块使用TRIA-Zone子模块。 //// ! \addtogroup cpu01_example_list //! <h1>ePWM跳闸区域模块(ePWM_TRIK_ZONE)</h1>//! //! 此示例将ePWM1和ePWM2配置如下 //! - ePWM1将TZ1作为单次触发源 //! - ePWM2将TZ1作为循环跳闸源 //! //! 最初将TZ1拉高。 在测试过程中,请监视ePWM1或ePWM2 //! 范围上的输出。 将TZ1拉低以查看效果。 //! //! \b外部连接\n// ! - EPWM1A在GPIO0 //上! - EPWM2A在GPIO2 //上 - TZ1在GPIO12 //! //! 此示例还使用输入X条。 GPIO12 (外部 //! 触发器)将路由到输入X_bar,并从该处路由到TZ1。 //! //! TZ-事件的定义是,EPWM1A将经历一次单次跳闸 //! EPWM2A将进行逐周期跳闸。 //! // _________________ _________________ // | | | |// GPIO12 --- | I/P X-bar |---- TZ1---- | ePWM TZ模块|---- TZ-事件 // |_________ | |_________________ |//////////////###################################################################################################### //$TI发布:F2837xS支持库V210 $// 发布日期:星期二11月1日15:35:23 CDT 2016 $// $版权:版权所有(C) 2014-2016 Texas2016 Texas Instruments Incorporated - // http://www.ti.com/ 保留所有权利$//######################################################################################### // //包含的文件 // #include "F28x_Project.h" //// 定义 // #define EXTTRig //使用外部触发器进行测试时,保留未注释。 //使用ePWM触发器测试的备注。 #define DB_UP 1 //用于选择DACH参考 的定义#define reference_VDDA 0 #define reference_VDAC 1 // COMPH输入选择的定义 #define NEGIN_DAC 0 #define NEGIN_PIN 1 // CTRIPH/CTRIPOUTH输出选择的定义 #define携程_异步 0 #define携程同步 1 #define携程过滤器 2 #define CrtK_LATCH 3 //// Globals /////UINT32 EPwm6TZIntCount; UINT32 EPwm2TZIntCount; UINT16 EPwm2_DB_Direction; //// 功能原型 ///////void InitEPwm6Example(void); void InitEPwm2Example(void); //rue_int_epzipue_invoid /void //// 主 // void主(void) {//// 步骤1. 初始化系统控制: // PLL,看门狗,启用外设时钟 //此示例功能可在F2837xS_sysctrl.c文件中找到。 // InitSysCtrl();//// 步骤2. 初始化GPIO: //此示例函数可在F2837xS_GPIO .c文件中找到, //说明了如何将GPIO设置为其默认状态。 // InitGpio();//// 启用PWM1和PWM2 // //CpuSysRegs.PCLKCR2.bit.EPWM6=1; CpuSysRegs.PCLKCR2.bit.EPWM2=1;//// 在这种情况下,只需初始化ePWM1,ePWM2,ePWM3 //的GPIO引脚 InitEPwmGpio_TZ(); //raus gestricthen //InitTzGpio(); //// 步骤3。 清除所有中断并初始化PIE矢量表: //禁用CPU中断 // dint; //// 将PIE控制寄存器初始化为其默认状态。 //默认状态是禁用所有PIE中断, 并清除标志//。 //此函数位于F2837xS_PIECTRL.c文件中。 // InitPieCtrl();//// 禁用CPU中断并清除所有CPU中断标志: // IER = 0x0000; IFR = 0x0000; //// 使用指向shell Interrupt //服务例程(ISR)的指针初始化PIE矢量表。 //这将填充整个表,即使在此 示例中未使用中断//。 这对于调试非常有用。 // shell ISR例程位于F2837xS_DefaultIsr.C.中 //此函数位于F2837xS_PieVect.C.中 // 本 示例中使用的InitPieVectorTable();////中断被重新映射到此 文件中找到的// ISR函数。 // EALLOW;//这是写入EALLOW保护寄存器所必需的 //PieVectorTable.EPWM6_TZ_INT =&epwm6_tzint_isr; PieVectorTable.EPWM2_TZ_INT =&epwm2_tzint_isr; EDIS;//这是禁用写入EALLOW保护寄存器 的必需项//// 步骤4。 初始化设备外围设备: // EALLOW; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0; EDIS; //InitEPwm6Example(); InitEPwm2Example(); //配置比较器COMP1H以接受来自引脚和NEG输入的POS输入 //来自DAC // InitCMPS(); EALLOW; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =1; EDIS; //// 步骤5。 用户特定代码,启用中断: // //EPwm6TZIntCount = 0; EPwm2TZIntCount = 0; //// 启用连接到EPWM1-3 INT: //的CPU INT2 IER || M_INT1; // 在PIE中启用ePWM INTN:组3中断1-3 // //PieCtrlRegs.PIEIER2.bit.INTx6 = 1; PieCtrlRegs.PIEIER2.bit.INTx2 = 1; //// 启用全局中断和较高优先级的实时调试事件: // EINT;//启用全局中断INTM ERTM;//启用全局实时中断DBGM //// 步骤6。 空闲循环。 只需坐下来永远循环(可选): // 对于(;;) { ASM (" NOP"); } }//// epwm1_tzint_ISR - EPWM1 TZ ISR ///*__interrupt void epwm6_tzint_isr (void) { EPwm6TZIntCount++; // //要重新启用OST中断,请执行以下操作: // EALLOW; // EPwm1Regs.TZCLL.bit.OST = 1; // EPwm1Regs.TZCLL.bit.INT = 1; // EDIS; // // //确认此中断以接收来自组2的更多中断 // PieCtrlRegs.PIEACK.ALL = PIEACK_group2; }*//// epwm2_tzint_ISR - EPWM2 TZ ISR// __interrupt void epwm2_tzint_ISR(void) {//zusatz-->wnicht gebrauht //GpioDataRegs.GPATOGLE.bit.GPIO11 = 1; EPwm2TZIntCount++; // //清除标记-我们将继续采取行动 //此中断,直到TZ引脚变高 // EALLOW; EPwm2Regs.TZCLL.bit.CBC = 1; EPwm2Regs.TZCLR.bit.INT =1; EDIS; // //确认此中断以接收来自组2的更多中断 // PieCtrlRegs.PIEACK.ALL = PIEACK_group2; }//// InitEPwm2Example-初始化EPWM2配置 // void InitEPwm2Example() { // //启用TZ1作为一个逐周期跳闸源 // EALLOW; // für μ m komplettes PWM模块 EPwm2Regs.TZsel.bit.CBC1 = 1; // //设置TZA // EPwm2Regs.TZCTL.bit.TZA = TZ_FORT_LO; // EPwm2Regs.TZCTL.bit.TZB = TZ_FORT_HI; // //启用TZ中断 // // für μ m komplettes PWM模块 EPwm2Regs.TZEINT.Bit.CBC = 1; EDIS; EPwm2Regs.TBPRD = 250; //设置计时器周期 EPwm2Regs.TBPHS.bit.TBPHS = 0x0000; //相位为0 EPwm2Regs.TBCTR = 0x0000; //清除计数器 // //设置TBCLK // EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//UP;//updown;// Count Up EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; //禁用相位加载 EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//TB_DIV4; //与SYSCLKOUT的时钟比率 EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;//TB_DIV4; //只是为了观察而放慢速度 //范围。 // //设置比较 // EPwm2Regs.CMPA.bit.CMPA = 0; //设置操作 // EPwm2Regs.AQCTLB.bit.ZRO = AQ_CLEAR; EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET; //设置操作 ///* EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR; //在CAU上设置PWM2A EPwm2Regs.AQCTLA.bit.CAD = AQ_SET; //清除CAD上的PWM2A EPwm2Regs.AQCTLB.bit.CBU = AQ_set;//清除CAU上的PWM2B EPwm2Regs.AQCTLB.bit.CBD = AQ_CLEAR;//在CAD *上设置PWM2B /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // hinzufügen ä der Deadband Einstellungen //Dreht alle PWM Einstellungen um //有源低互补PWM -设置死区 // EPwm2Regs.DBCTL.bit.out模式= DB_FULL启用; EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;//DB_ACTV_LOC; EPwm2Regs.DBCTL.bit.in_mode = DBA_All; EPwm2Regs.DBRED.bit.DBRED = 2;//EPWM2_MIN_DB; EPwm2Regs.DBFED.bit.DBFED = 2;//EPWM2_MIN_DB; EPwm2_DB_direction = DB_up; // //中断,我们将在此处修改死区 // EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; //选择INT ON Zero Event EPwm2Regs.ETSEL.bit.inten = 1; //启用INT EPwm2Regs.ETPS.bit.INTPRD = ET_3; //在第三个事件上生成INT /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// für EALLOW; // //将DCB配置为TRIP4 // //EPwm8Regs.TZDCSEL.bit.DCBEVT1 = TZ_DCBH_HI; EPwm2Regs.TZDCSEL.bit.DCBEVT2 = CBC中的TZ_DCBH_HI;// Abänderung // Polarität kann noch die f ü r eingestellt werden的工作非常积极 //EPwm8Regs.DCTRIPSEL.bit.DCBHCOMPSEL = 0xF; EPwm2Regs.DCTRIPsel.bit.DCBHCOMPSEL = 0xF;//kann so bleiben alle tIPS sid Aktiv //EPwm8Regs.DCBHTRIPSEL.bit.TRIPINPUT4 = 1; EPwm2Regs.DCBHTRIPSEL.Bit.TRIPINPUT4 =1;//输入1被选为DCBH mux的组合式ORed输入 // //将DCB配置为OST // //EPwm8Regs.TZsel.bit.DCBEVT1 = 1; //启用DCBEVT2作为此ePWM模块的CBC跳闸源 EPwm2Regs.TZsel.bit.DCBEVT2 = 1;//CBC中Abänderung //Erweiterung um a EPwm2Regs.TZsel.bit.DCAEVT2 = 1; //noch möglich -->启用TZ1作为此ePWM模块的CBC跳闸源 // //将DCB路径配置为未过滤和异步 // //EPwm8Regs.DCBCTL.bit.EVT1SRCSEL = DC_EVT1; EPwm2Regs.DCBCTL.bit.EVT2SRCSEL = DC_EVT2;//CBC中的Abänderung //Erweiterung um a EPwm2Regs.DCACTL.bit.EVT2SRCSEL = DC_EVT2; //EPwm8Regs.DCBCTL.bit.EVT1FRCSYNCSEL = DC_EVT_Async; EPwm2Regs.DCBCTL.bit.EVT2FRCSYNCSEL = DC_EVT_Async;//CBC中的Abänderung //Erweiterung um a EPwm2Regs.DCACTL.bit.EVT2FRCSYNCSEL = DC_EVT_Async; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1; // //将TRIP4配置为CTRIP1H // EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX0 = 0; // //为输出启用TRIP4 Mux // EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX0 = 1; // //清除行程标志 // //EPwm8Regs.TZCLL.bit.OST = 1; EPwm2Regs.TZCLL.bit.DCBEVT2 = 1; //Erweiterung um a EPwm2Regs.TZCLL.bit.DCAEVT2 = 1; //EPwm8Regs.TZCLL.bit.INT = 1; EPwm2Regs.TZCLR.bit.INT =1; //注意:将不再生成ePWMx_TZINT PIE中断 //直到清除标志。 如果TZFLG[INT]位被清除,并且有任何 //设置了其他标志位,然后将设置另一个中断脉冲 //已生成。 清除所有标志位将防止进一步中断。 // //启用DCB中断 // //EPwm8Regs.TZEINT.Bit.OST = 1; EPwm2Regs.TZEINT.Bit.DCBEVT2 = 1; //Erweiterung um a EPwm2Regs.TZEINT.Bit.DCAEVT2 = 1; EDIS; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ////// InitTzGpio -初始化TZ GPIO ///* void InitTzGpio (void) { // //对于外部触发器,GPIO12作为TripZone的触发器 // GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;//在GPIO12上启用上拉(TZ1) GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 3;//异步输入GPIO12 (TZ1) EALLOW; InputXbarRegs.INPUT1SELECT = 12; EDIS; // //用于在输入TZ中断时进行监护 // } *////// InitEPwmGpio_TZ -初始化EPWM1A和EPWM2A GPIO // void InitEPwmGpio_TZ(void) { EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;//在GPIO2上禁用上拉(EPWM2A) GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;//将GPIO2配置为EPWM2A GpioCtrlRegs.GPAPUD.bit.GPIO3 = 1;//在GPIO3上禁用上拉(EPWM2B) GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1;//将GPIO3配置为EPWM2B EDIS; }//// 文件结尾 //// // InitCMCSS -初始化CMPS1并配置设置 // void InitCMPS(void) { EALLOW; // //启用CMDSS // Cmpss1Regs.COMPCTL.bit.COMPDACE = 1; // //NEG信号来自DAC // Cmpss1Regs.COMPCTL.bit.COMPHSOURCE = NEGIN_DAC; // //使用VDDA作为DAC的参考 // Cmpss1Regs.COMPDACCTL.bit.SELREF =参考_VDDA; // //将DAC设置为中点以进行任意引用 // CMps1Regs.DACHVALS.bit.DACVAL = 1048; // //配置CTRIPOUT路径 //异步输出馈入CTRIPH和CTRIPOUTH // Cmpss1Regs.COMPCTL.bit.CTRIPHSEL =携程_异步; //Cmpss1Regs.COMPCTL.bit.CTRIPOUTHSEL =携程_异步; // //配置CTRIPOUTH输出引脚 //将OUTPUTXBAR3配置为CTRIPOUT1H // //OutputXbarRegs.OUTPUT3MUX0TO15CFG.bit.MUX0 = 0; // //为输出启用OUTPUTXBAR3 Mux // //OutputXbarRegs.OUTPUT3MUXENABLE.bit.MUX0 = 1; EDIS; }

