1
0

main.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include <MyProject.h>
  2. uint8 data g_1mTick = 0;
  3. /**
  4. @brief 参考电压,偏置电压配置
  5. @date 2022-07-14
  6. */
  7. void VREFConfigInit(void)
  8. {
  9. // 配置参考电压为5V
  10. SetReg(VREF_VHALF_CR, VRVSEL1 | VRVSEL0, VRVSEL0);
  11. // 配置半电压为2.5V
  12. SetBit(VREF_VHALF_CR, VHALFSEL1 | VHALFSEL0);
  13. #if (VREF_OUT_EN)
  14. SetBit(P3_AN, PIN5);
  15. SetBit(P3_OE, PIN5);
  16. #endif
  17. #if (VHALF_EN)
  18. SetBit(P3_AN, P32);
  19. SetBit(VREF_VHALF_CR, VHALFEN);
  20. #endif
  21. SetBit(VREF_VHALF_CR, VREFEN);
  22. }
  23. /**
  24. @brief 硬件初始化,初始化需要使用的硬件设备配置,FOC必须配置的是运放电压、运放初始化、ADC初始化、Driver初始化
  25. 其他的可根据实际需求加。
  26. @date 2022-07-14
  27. */
  28. void HardwareInit(void)
  29. {
  30. VREFConfigInit();
  31. CMP3_Init();
  32. GPIO_Init();
  33. ADC_Init();
  34. Driver_Init();
  35. AMP_Init();
  36. Timer3_Init();
  37. CMP3_Interrupt_Init();
  38. ClrBit(IP2, PSYSTICK1 | PSYSTICK0);
  39. SetBit(DRV_SR, SYSTIE);
  40. EA = 1;
  41. }
  42. /**
  43. @brief 部分变量初始化,上电运行一次
  44. @date 2022-07-14
  45. */
  46. void SoftwareInit(void)
  47. {
  48. memset(&mcFocCtrl, 0, sizeof(FOCCTRL));
  49. /* -----保护----- */
  50. mcFaultSource = 0;
  51. /*****电机状态机时序变量***********/
  52. McStaSet.SetMode = 0;
  53. mcCurOffset.IuOffsetSum = 16383;
  54. mcCurOffset.IvOffsetSum = 16383;
  55. mcCurOffset.Iw_busOffsetSum = 16383;
  56. mcState = mcReady;
  57. mcFaultSource = FaultNoSource;
  58. }
  59. void main(void)
  60. {
  61. uint16 PowerUpCnt = 0;
  62. for (PowerUpCnt = 0; PowerUpCnt < 55000; PowerUpCnt++);
  63. SoftwareInit();
  64. HardwareInit();
  65. while (1)
  66. {
  67. if (!mcCurOffset.OffsetFlag)
  68. {
  69. GetCurrentOffset();
  70. }
  71. else
  72. {
  73. MC_Control();
  74. if (g_1mTick)
  75. {
  76. if ((mcState != mcInit) && (mcState != mcReady))
  77. {
  78. mcFocCtrl.SpeedFlt = LPF_Zero_Update(FOC__EOME, mcFocCtrl.SpeedFlt, 30);
  79. }
  80. else
  81. {
  82. mcFocCtrl.SpeedFlt = 0;
  83. }
  84. SetBit(ADC_CR, ADCBSY);
  85. Power_Currt = (ADC7_DR);
  86. Power_Currt = Abs_F16(Power_Currt - mcCurOffset.Iw_busOffset);
  87. mcFocCtrl.mcADCCurrentbus = LPF_Zero_Update(Power_Currt << 2, mcFocCtrl.mcADCCurrentbus, 20);
  88. if (mcState != mcRun)
  89. {
  90. mcFocCtrl.mcDcbusFlt = LPF_Zero_Update(ADC2_DR, mcFocCtrl.mcDcbusFlt, 50);
  91. }
  92. else
  93. {
  94. mcFocCtrl.mcDcbusFlt = FOC__UDCFLT;
  95. }
  96. TargetRef_Process();
  97. Speed_response();
  98. ATORamp();
  99. g_1mTick = 0;
  100. }
  101. }
  102. }
  103. }