/** @copyright None @file DRIVER.c @author Comment Vivre @date 2025-11-03 @brief None */ #include /** @function Driver_Init @brief 驱动初始化 @date 2025-11-01 */ void Driver_Init(void) { DRV_ARR = PWM_VALUE_LOAD ; // 载波频率的周期值 DRV_DTR = PWM_LOAD_DEADTIME; // 死区时间 DRV_DR = 0; DRV_CMR = 0x0abf; //UH/VH/WH UL/VL/WL 互补 DRV_OUT = 0x00; //空闲电平,默认高电平有效 // 驱动电平配置 #if (PWM_LEVEL_MODE == HIGH_LEVEL) ClrBit(PI_CR, HINV | LINV); #elif (PWM_LEVEL_MODE == LOW_LEVEL) SetBit(PI_CR, HINV | LINV); #elif (PWM_LEVEL_MODE == UP_H_DOWN_L) SetReg(PI_CR, HINV | LINV, LINV); #elif (PWM_LEVEL_MODE == UP_L_DOWN_H) SetReg(PI_CR, HINV | LINV, HINV); #endif ClrBit(DRV_SR, FGIE); //FG中断使能 // 清中断标志位,使能中断,配置比较值,设置中断优先级 ClrBit(DRV_SR, DCIF); /************************************************** DRV比较匹配中断模式 当计数值等于DRV_COMR时,根据DCIM的设置判断是否产生中断标记 00:不产生中断 01:上升方向 10:下降方向 11:上升/下降方向 *************************************************/ SetBit(DRV_SR, DCIM1); ClrBit(DRV_SR, DCIM0); // 设置DRV计数器的比较匹配值,当DRV计数值与COMR相等时,根据DRV_SR寄存器的DCIM是否产生比较匹配事件 DRV_COMR = (PWM_VALUE_LOAD >> 3); SetBit(IP0, PDRV1); SetBit(IP0, PDRV0); ClrBit(DRV_SR, DCIP); ClrBit(DRV_CR, FOCEN); // MESEL为0,ME模块工作在BLDC模式 // MESEL为1,ME模块工作在FOC/SVPWM/SPWM模式 SetBit(DRV_CR, MESEL); SetBit(DRV_CR, DRVEN); //计数器使能 ClrBit(DRV_CR, DRPE); //计数器比较值预装载使能 SetBit(DRV_CR, DRVOE); //Driver输出使能 }