DRIVER.c 2.5 KB

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