main.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /**
  2. @copyright None
  3. @file main.c
  4. @author Comment Vivre
  5. @date 2025-10-31
  6. @brief 主函数 初始化 主循环
  7. */
  8. #include <Myproject.h>
  9. bool data IsTick = false;
  10. bool data isCtrlPowOn = false;
  11. Curr_Offset_t xdata currOffset;
  12. Motor_Control_t motorControl;
  13. void HardwareInit(void)
  14. {
  15. // 上电等待
  16. uint16 PowerUpCnt = 0;
  17. while (PowerUpCnt++ < 10000);
  18. // 参考电压初始化
  19. VREF_Config_Init();
  20. // 外部中断初始化 预驱故障中断保护
  21. PreDriver_Falut_Init();
  22. // IO初始化
  23. GPIO_Init();
  24. // ADC端口初始化
  25. ADC_Init();
  26. // AMP初始化
  27. AMP_Init();
  28. // 驱动初始化
  29. Driver_Init();
  30. // 串口初始化
  31. UART1_Init();
  32. Set_IRQ_DMA(DMA_IRQ_L1);
  33. // 系统定时器初始化
  34. Sys_Tick();
  35. _nop_(); _nop_();
  36. EA = 1;
  37. }
  38. /* ---------------------------------------------------------------------------------
  39. Function Name : void SoftwareInit(void)
  40. Description : 软件初始化,初始化所有定义变量,按键初始化扫描
  41. Input : 无
  42. Output : 无
  43. ----------------------------------------------------------------------------------*/
  44. void SoftwareInit(void)
  45. {
  46. memset(&mcFaultDect, 0, sizeof(FaultVarible)); // FaultVarible变量清零
  47. /************保护次数*************/
  48. memset(&mcProtectTime, 0, sizeof(ProtectVarible)); // ProtectVarible保护次数清零
  49. /***********过流保护**************/
  50. memset(&mcCurVarible, 0, sizeof(CurrentVarible)); // 电流保护的变量清零
  51. /*****电机状态机时序变量***********/
  52. McStaSet.SetMode = 0;
  53. /*************外部控制环************/
  54. memset(&mcFocCtrl, 0, sizeof(FOCCTRL)); // mcFocCtrl变量清零
  55. mcFocCtrl.mcDcbus_chazhi = 32760;
  56. // 电流校准变量初始化
  57. memset(&currOffset, 0, sizeof(Curr_Offset_t));
  58. currOffset.IuOffsetSum = 16383;
  59. currOffset.IvOffsetSum = 16383;
  60. currOffset.IwBusOffsetSum = 16383;
  61. /*****速度环的响应***/
  62. memset(&mcSpeedRamp, 0, sizeof(MCRAMP)); // mcSpeedRamp变量清零
  63. mcSpeedRamp.IncValue = Motor_Speed_Inc;
  64. mcSpeedRamp.DecValue = Motor_Speed_Dec;
  65. mcState = mcReady;
  66. mcFaultSource = 0;
  67. }
  68. /**
  69. @function main
  70. @brief 主函数 电机驱动主循环 任务循环
  71. @date 2025-10-31
  72. */
  73. void main(void)
  74. {
  75. HardwareInit();
  76. SoftwareInit();
  77. _nop_(); _nop_(); _nop_();
  78. WatchDogConfig(600, 1);
  79. while (1)
  80. {
  81. if (IsTick)
  82. {
  83. Get_ADC_Value();
  84. // 目标转速设置
  85. Get_Target_Ref();
  86. // 环路响应
  87. Speed_response();
  88. // 上电控制
  89. Power_In_Control();
  90. // LED灯故障显示
  91. LED_State_Display(mcFaultSource);
  92. Tick_Task();
  93. // 故障保护函数功能
  94. Fault_Detection();
  95. // 调试信息上载
  96. Dabug_Data_Update();
  97. // 喂狗
  98. SetBit(WDT_CR, WDTRF);
  99. IsTick = false;
  100. }
  101. Motor_Control_State();
  102. }
  103. }