| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /**
- * @copyright None
- * @file DRIVER.c
- * @author Comment Vivre
- * @date 2025-11-03
- * @brief None
- */
- #include <MyProject.h>
- /**
- @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输出使能
- }
|