DRIVER.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /* --------------------------- (C) COPYRIGHT 2021 Fortiortech ShenZhen -----------------------------
  2. File Name : DRIVER.c
  3. Author : Fortiortech Appliction Team
  4. Version : V1.0
  5. Date : 2021-04-11
  6. Description : This file contains .C file function used for Motor Control.
  7. ----------------------------------------------------------------------------------------------------
  8. All Rights Reserved
  9. ------------------------------------------------------------------------------------------------- */
  10. #include <definition.h>
  11. #include <Myproject.h>
  12. /*****************************************************************************
  13. * Function : Driver_Init
  14. * Description : Driver初始化
  15. * Input : void
  16. * Output : None
  17. * Return :
  18. * Others :
  19. * Record
  20. * 1.Date : 20190329
  21. * Author : Bruce HW&RD
  22. * Modification: Created function
  23. *****************************************************************************/
  24. void Driver_Init(void)
  25. {
  26. DRV_ARR = PWM_VALUE_LOAD ; // 载波频率的周期值
  27. DRV_DTR = PWM_LOAD_DEADTIME; // 死区时间
  28. DRV_DR = 0;
  29. DRV_CMR = 0x0ABF; // UH/VH/WH UL/VL/WL 互补
  30. DRV_OUT = 0x00; // 空闲电平,默认高电平有效
  31. /*驱动有效电平和空闲电平*/
  32. ClrBit(PI_CR , HINV); // 反相关闭
  33. ClrBit(PI_CR , LINV); // 反相关闭
  34. ClrBit(DRV_SR , FGIE); //FG中断使能 0-->Disable 1-->Enable
  35. /*清中断标志位,使能中断,配置比较值,设置中断优先级*/
  36. ClrBit(DRV_SR , DCIF); //清除DRV中断标志位
  37. /**************************************************
  38. DRV比较匹配中断模式
  39. 当计数值等于DRV_COMR时,根据DCIM的设置判断是否产生中断标记
  40. 00:不产生中断 01:上升方向
  41. 10:下降方向 11:上升/下降方向
  42. *************************************************/
  43. SetBit(DRV_SR , DCIM1);
  44. ClrBit(DRV_SR , DCIM0);
  45. /*设置DRV计数器的比较匹配值,当DRV计数值与COMR相等时,根据DRV_SR寄存器的DCIM是否产生比较匹配事件*/
  46. DRV_COMR = (PWM_VALUE_LOAD >> 3);
  47. ClrBit(IP0, PDRV1); //中断优先级设置为1,优先级低于FO硬件过流
  48. SetBit(IP0, PDRV0);
  49. SetBit(DRV_SR , DCIP); //0-->1个计数周期产生中断 1-->2个计数周期产生中断
  50. ClrBit(DRV_CR , FOCEN);
  51. /*MESEL为0,ME模块工作在BLDC模式
  52. MESEL为1,ME模块工作在FOC/SVPWM/SPWM模式*/
  53. SetBit(DRV_CR , MESEL);
  54. SetBit(DRV_CR , DRVEN); // 计数器使能 0-->Disable 1-->Enable
  55. ClrBit(DRV_CR , DRPE); // 计数器比较值预装载使能 0-->Disable 1-->Enable
  56. SetBit(DRV_CR , DRVOE); // Driver输出使能0-->Disable 1-->Enable
  57. }