DRIVER.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /**
  2. @copyright None
  3. @file DRIVER.c
  4. @author Comment Vivre
  5. @date 2025-11-03
  6. @brief None
  7. */
  8. #include <MyProject.h>
  9. /**
  10. @function Driver_Init
  11. @brief 驱动初始化
  12. @date 2025-11-01
  13. */
  14. void Driver_Init(void)
  15. {
  16. DRV_ARR = PWM_VALUE_LOAD ; // 载波频率的周期值
  17. DRV_DTR = PWM_LOAD_DEADTIME; // 死区时间
  18. DRV_DR = 0;
  19. DRV_CMR = 0x0A800; //UH/VH/WH UL/VL/WL 互补
  20. DRV_OUT = 0x00; //空闲电平,默认高电平有效
  21. // 驱动电平配置
  22. #if (PWM_LEVEL_MODE == HIGH_LEVEL)
  23. ClrBit(PI_CR, HINV | LINV);
  24. #elif (PWM_LEVEL_MODE == LOW_LEVEL)
  25. SetBit(PI_CR, HINV | LINV);
  26. #elif (PWM_LEVEL_MODE == UP_H_DOWN_L)
  27. SetReg(PI_CR, HINV | LINV, LINV);
  28. #elif (PWM_LEVEL_MODE == UP_L_DOWN_H)
  29. SetReg(PI_CR, HINV | LINV, HINV);
  30. #endif
  31. ClrBit(DRV_SR, FGIE); //FG中断使能
  32. // 清中断标志位,使能中断,配置比较值,设置中断优先级
  33. ClrBit(DRV_SR, DCIF);
  34. /**************************************************
  35. DRV比较匹配中断模式
  36. 当计数值等于DRV_COMR时,根据DCIM的设置判断是否产生中断标记
  37. 00:不产生中断 01:上升方向
  38. 10:下降方向 11:上升/下降方向
  39. *************************************************/
  40. SetReg(DRV_SR, DCIM0 | DCIM1, DCIM1);
  41. // 设置DRV计数器的比较匹配值,当DRV计数值与COMR相等时,根据DRV_SR寄存器的DCIM是否产生比较匹配事件
  42. DRV_COMR = (PWM_VALUE_LOAD >> 3);
  43. // 优先级配置为最高
  44. SetBit(IP0, PDRV1 | PDRV0);
  45. ClrBit(DRV_SR, DCIP);
  46. ClrBit(DRV_CR, FOCEN);
  47. // MESEL为0,ME模块工作在BLDC模式
  48. // MESEL为1,ME模块工作在FOC/SVPWM/SPWM模式
  49. SetBit(DRV_CR, MESEL);
  50. SetBit(DRV_CR, DRVEN); //计数器使能
  51. ClrBit(DRV_CR, DRPE); //计数器比较值预装载使能
  52. SetBit(DRV_CR, DRVOE); //Driver输出使能
  53. }