#include bool data isCtrlPowOn = false; bool data TickFlag = false; Loop_Control_t xdata loopCtrl; // 环路控制 Estimated_Data_t xdata estData; // 数据采集 Fault_Check_t xdata faultCheck; Fault_Type_e xdata FaultSource; Sys_State_e xdata sysState; FOCCTRL xdata mcFocCtrl; /** @brief 硬件初始化,初始化需要使用的硬件设备配置,FOC必须配置的是运放电压、运放初始化、ADC初始化、Driver初始化 其他的可根据实际需求加。 @date 2022-07-14 */ void HardwareInit(void) { CMP3_Init(); GPIO_Init(); LED_GPIO_Init(); ADC_Init(); AMP_Init(); // 附加配置 处理程序丢失问题 !>待验证 Config_Init(); Driver_Init(); PWM_Timer_Init(); // 硬件过流中断初始化 CMP3_Interrupt_Init(); // 调试串口初始化 UART1_Init(); // Systick定时器 使能与中断优先级配置 ClrBit(IP2, PSYSTICK1 | PSYSTICK0); SetBit(DRV_SR, SYSTIE); EA = 1; } /** @brief 部分变量初始化,上电运行一次 @date 2022-07-14 */ void SoftwareInit(void) { memset(&mcFocCtrl, 0, sizeof(FOCCTRL)); McStaSet.SetMode = 0; mcCurOffset.IuOffsetSum = 16383; mcCurOffset.IvOffsetSum = 16383; mcCurOffset.Iw_busOffsetSum = 16383; } /** @function main @brief 主函数 @date 2025-04-17 */ void main(void) { uint16_t PowerUpCnt = 0; for (PowerUpCnt = 0; PowerUpCnt < 55000; PowerUpCnt++); SoftwareInit(); HardwareInit(); while (1) { if (!mcCurOffset.OffsetFlag) { GetCurrentOffset(); } else { Motor_Control_State(); if (TickFlag) { // 喂狗 SetBit(WDT_CR, WDTRF); // 获取滤波数据 Get_LPF_Value(); // 输入命令处理 Get_Target_Ref(); // 故障处理与故障恢复 Motor_Fault_Handle(); // 环路响应 if ((sysState == MOTOR_RUN) || (sysState == MOTOR_STOP)) { Loop_Control(); } // 故障指示 LED_State_Display(FaultSource); // 滤波器带宽动态调整 if (sysState == MOTOR_RUN) { ATORamp(); } TickFlag = false; } } } }