/** @copyright None @file main.c @author Comment Vivre @date 2025-10-31 @brief 主函数 初始化 主循环 */ #include bool data IsTick = false; bool data isCtrlPowOn = false; Motor_Control_t motorControl; void HardwareInit(void) { // 上电等待 uint16 PowerUpCnt = 0; while (PowerUpCnt++ < 10000); // 参考电压初始化 VREF_Config_Init(); // 外部中断初始化 预驱故障中断保护 PreDriver_Falut_Init(); // IO初始化 GPIO_Init(); // ADC端口初始化 ADC_Init(); // AMP初始化 AMP_Init(); // 驱动初始化 Driver_Init(); // 串口初始化 UART1_Init(); Set_IRQ_DMA(DMA_IRQ_L1); // 系统定时器初始化 Sys_Tick(); _nop_(); _nop_(); EA = 1; } /* --------------------------------------------------------------------------------- Function Name : void SoftwareInit(void) Description : 软件初始化,初始化所有定义变量,按键初始化扫描 Input : 无 Output : 无 ----------------------------------------------------------------------------------*/ void SoftwareInit(void) { memset(&mcFaultDect, 0, sizeof(FaultVarible)); // FaultVarible变量清零 /************保护次数*************/ memset(&mcProtectTime, 0, sizeof(ProtectVarible)); // ProtectVarible保护次数清零 /***********过流保护**************/ memset(&mcCurVarible, 0, sizeof(CurrentVarible)); // 电流保护的变量清零 /*****电机状态机时序变量***********/ McStaSet.SetMode = 0; /*************外部控制环************/ memset(&mcFocCtrl, 0, sizeof(FOCCTRL)); // mcFocCtrl变量清零 mcFocCtrl.mcDcbus_chazhi = 32760; // 电流校准变量初始化 memset(&mcCurOffset, 0, sizeof(CurrentOffset)); mcCurOffset.IuOffsetSum = 16383; mcCurOffset.IvOffsetSum = 16383; mcCurOffset.Iw_busOffsetSum = 16383; /*****速度环的响应***/ memset(&mcSpeedRamp, 0, sizeof(MCRAMP)); // mcSpeedRamp变量清零 mcSpeedRamp.IncValue = Motor_Speed_Inc; mcSpeedRamp.DecValue = Motor_Speed_Dec; mcState = mcReady; mcFaultSource = 0; } /** @function main @brief 主函数 电机驱动主循环 任务循环 @date 2025-10-31 */ void main(void) { HardwareInit(); SoftwareInit(); _nop_(); _nop_(); _nop_(); WatchDogConfig(600, 1); while (1) { if (IsTick) { Get_ADC_Value(); // 目标转速设置 Get_Target_Ref(); // 环路响应 Speed_response(); // 上电控制 Power_In_Control(); // LED灯故障显示 LED_State_Display(mcFaultSource); Tick_Task(); // 故障保护函数功能 Fault_Detection(); // 调试信息上载 Dabug_Data_Update(); // 喂狗 SetBit(WDT_CR, WDTRF); IsTick = false; } Motor_Control_State(); Get_Current_Offset(); } }