avery 7 mesi fa
parent
commit
65ffe3d3f8

+ 40 - 47
System/FU68xx_5_DMA.h

@@ -1,53 +1,46 @@
-/********************************************************************************
-
- **** Copyright (C), 2019, Fortior Technology Co., Ltd.                      ****
-
- ********************************************************************************
- * File Name     : FU68xx_4_DMA.h
- * Author        : Bruce HW&RD
- * Date          : 2019-03-27
- * Description   : .C file function description
- * Version       : 1.0
- * Function List :
- * 
- * Record        :
- * 1.Date        : 2019-03-27
- *   Author      : Bruce HW&RD
- *   Modification: Created file
-
-********************************************************************************/
-
 #ifndef __FU68XX_5_DMA_H__
 #define __FU68XX_5_DMA_H__
 
-/**************************************************************************************************///Including Header Files
 #include <FU68xx_5_MCU.h>
-/**************************************************************************************************///Define Macro
-// DMA Pipe Config
- #define DMA_PIPE        (DMACFG2 | DMACFG1 | DMACFG0)
- #define UART1_XDATA     0x00                                         // DMA管道--UART1-->XDATA
- #define XDATA_UART1     (DMACFG0)                                    // DMA管道--UART1<--XDATA
- #define I2C_XDATA       (DMACFG1)                                    // DMA管道--I2C  -->XDATA
- #define XDATA_I2C       (DMACFG0 | DMACFG1)                          // DMA管道--I2C  <--XDATA
- #define SPI_XDATA       (DMACFG2)                                    // DMA管道--SPI  -->XDATA
- #define XDATA_SPI       (DMACFG2 | DMACFG0)                          // DMA管道--SPI  <--XDATA
- #define UART2_XDATA     (DMACFG2 | DMACFG1)                          // DMA管道--UART2-->XDATA
- #define XDATA_UART2     (DMACFG2 | DMACFG1 | DMACFG0)                // DMA管道--UART2<--XDATA
-
-// DMA IE config
- #define DMA_IE_EN       DMAIE                                        // 使能DMA中断
- #define DMA_IE_DIS      0x00                                         // 禁能DMA中断
-
-// DMA transmission order
- #define DMA_FHSB        ENDIAN                                       // DMA先发高8位
- #define DMA_FLSB        0x00                                         // DMA先发低8位
-/**************************************************************************************************///Define Global Symbols
-/**************************************************************************************************///Function Subject
-#define Wait_DMA(a)       while (ReadBit(*(&DMA0_CR0 + a), DMABSY))
-#define Switch_DMA(a)     SetBit(*(&DMA0_CR0 + a), DMAEN | DMABSY)
-
-extern void Init_DMA(uint8 DMAIrq, uint8 DMAFMod);
-extern void Conf_DMA(uint8 DMAx, uint8 DMAPipe, uint16 DMAAddr, uint8 DMALen);
-
 
+// DMA管道参数表
+#define DMA_PIPE						(DMACFG2 | DMACFG1 | DMACFG0)
+#define UART1_XDATA						(0x00)
+#define XDATA_UART1						(DMACFG0)
+#define I2C_XDATA						(DMACFG1)
+#define XDATA_I2C						(DMACFG0 | DMACFG1)
+#define SPI_XDATA						(DMACFG2)
+#define XDATA_SPI						(DMACFG2 | DMACFG0) 
+#define UART2_XDATA						(DMACFG2 | DMACFG1)
+#define XDATA_UART2						(DMACFG2 | DMACFG1 | DMACFG0)
+
+// DMA中断控制
+#define DMA_IE_EN						DMAIE
+#define DMA_IE_DIS						0x00
+
+// DMA传输顺序
+#define DMA_FHSB						ENDIAN
+#define DMA_FLSB						0x00
+
+// DMA状态
+#define DMA_BSY							(DMABSY)
+#define DMA_IRQ							(DMAIF)
+
+// DMA中断优先级配置
+#define DMA_IRQ_L1						(0)
+#define DMA_IRQ_L2						(PDMA0)
+#define DMA_IRQ_L3						(PDMA1)
+#define DMA_IRQ_L4						(PDMA0 | PDMA1)
+
+// DMA操作函数
+#define Wait_DMA(a)						while (ReadBit(*(&DMA0_CR0 + a), DMABSY))
+#define Switch_DMA(a)					SetBit(*(&DMA0_CR0 + a), DMAEN | DMABSY)
+
+// DMA配置函数
+void Set_IRQ_DMA(uint8_t DMA_IRQ_Priority);
+void Conf_DMA(uint8_t DMAx, uint8_t DMAPipe, uint16_t DMAAddr, uint8_t DMALen);
+void Set_DMA_Pipe(uint8_t DMAx,uint8_t DMAPipe);
+void Start_DMA(uint8_t DMAx);
+bool Get_DMA_Status(uint8_t DMAx,uint8_t DMAStatus);
+void Set_DMA_Data_Package(uint8_t DMAx, uint16_t ulAddr, uint8_t cLen);
 #endif

+ 0 - 58
System/FU68xx_5_MCU.h

@@ -1,14 +1,3 @@
-/******************* (C) COPYRIGHT 2020 Fortiortech Shenzhen *******************
-* File Name          : FU68xx_5_MCU.h
-* Creat Author       : Bruce, R&D
-* Modify Author      : Bruce, R&D
-* Creat Date         : 2020-10-12
-* Modify Date        : 2020-11-03
-* Description        :
-********************************************************************************
-* All Rights Reserved
-*******************************************************************************/
-
 #ifndef __FU68XX_5_MCU_H__
 #define __FU68XX_5_MCU_H__
 
@@ -99,48 +88,6 @@
  sbit    TSDIE                                    = IE^1;                       //               rw-- TSD中断使能
  sbit    EX0                                      = IE^0;                       //               rw-- 外部中断0使能
 
-//// sfr     IP0                            = 0xe8;                                 // RV:  00H  外设中断优先级设置G0
-//// sbit    PDRV1                                    = IP0^7;                      //               rw-- DRV优先级配置1
-//// sbit    PDRV0                                    = IP0^6;                      //               rw-- DRV优先级配置0
-//// sbit    PX11                                     = IP0^5;                      //               rw-- 外部中断1优先级配置1
-//// sbit    PX10                                     = IP0^4;                      //               rw-- 外部中断1优先级配置0
-//// sbit    PX01                                     = IP0^3;                      //               rw-- 外部中断0优先级配置1
-//// sbit    PX00                                     = IP0^2;                      //               rw-- 外部中断0优先级配置0
-//// sbit    PLVW1                                    = IP0^1;                      //               rw-- LVW优先级配置1
-//// sbit    PLVW0                                    = IP0^0;                      //               rw-- LVW优先级配置0
-
-//// sfr     IP1                            = 0xfa;                                 // RV:  00H  外设中断优先级设置G1
-//// #define PCMP1                                    0x80                          //               rw-- CMP优先级配置1
-//// #define PCMP0                                    0x40                          //               rw-- CMP优先级配置0
-//// #define PADC1                                    0x20                          //               rw-- ADC优先级配置1
-//// #define PADC0                                    0x10                          //               rw-- ADC优先级配置0
-//// #define PTIM11                                   0x08                          //               rw-- TIM1优先级配置1
-//// #define PTIM10                                   0x04                          //               rw-- TIM1优先级配置0
-//// #define PTIM21                                   0x02                          //               rw-- TIM2优先级配置1
-//// #define PTIM20                                   0x01                          //               rw-- TIM2优先级配置0
-
-//// sfr     IP2                            = 0xc8;                                 // RV:  00H  外设中断优先级设置G2
-//// sbit    PTIM41                                   = IP2^7;                      //               rw-- TIM4优先级配置1
-//// sbit    PTIM40                                   = IP2^6;                      //               rw-- TIM4优先级配置0
-//// sbit    PSYSTICK1                                = IP2^5;                      //               rw-- SysTick优先级配置1
-//// sbit    PSYSTICK0                                = IP2^4;                      //               rw-- SysTick优先级配置0
-//// sbit    PTIM31                                   = IP2^3;                      //               rw-- TIM3优先级配置1
-//// sbit    PTIM30                                   = IP2^2;                      //               rw-- TIM3优先级配置0
-//// sbit    PRTC1                                    = IP2^1;                      //               rw-- RTC优先级配置1
-//// sbit    PRTC0                                    = IP2^0;                      //               rw-- RTC优先级配置0
-
-//// sfr     IP3                            = 0x8a;                                 // RV:  00H  外设中断优先级设置G3
-//// #define PDMA1                                    0x80                          //               rw-- DMA优先级配置1
-//// #define PDMA0                                    0x40                          //               rw-- DMA优先级配置0
-//// #define PSPI_UT21                                0x20                          //               rw-- SPI/UT2优先级配置1
-//// #define PSPI_UT20                                0x10                          //               rw-- SPI/UT2优先级配置0
-//// #define PI2C_UT11                                0x08                          //               rw-- I2C/UT1优先级配置1
-//// #define PI2C_UT10                                0x04                          //               rw-- I2C/UT1优先级配置0
-//// #define PCMP31                                   0x02                          //               rw-- CMP3优先级配置1
-//// #define PCMP30                                   0x01                          //               rw-- CMP3优先级配置0
-
-
-
  sfr     IP0                            = 0x8a;                                 // RV:  00H  外设中断优先级设置G0
  #define PDRV1                                    0x80                          //               rw-- DRV优先级配置1
  #define PDRV0                                    0x40                          //               rw-- DRV优先级配置0
@@ -257,11 +204,6 @@
  #define UART2IEN                                 0x1000                        //               rw--UART2中断使能
  sfr     UT2_DR                         = 0x89;    
 
-// #define UT2_BAUD                       *(_IO uint16 xdata *)0x4042             // RV:009bH  UART2波特率控制寄存器
-// #define BAUD2_SEL                                0x8000                        //               rw--倍频使能
-// #define UART2CH                                  0x4000                        //               rw--UART2功能转移使能
-// #define UART2IEN                                 0x2000                        //               rw--UART2中断使能
-// sfr     UT2_DR                         = 0x89;                                 // RV:  00H  UART2数据寄存器
 /******************************************************************************///LIN
  sfr     LIN_CR                         = 0xb9;                                 // RV:0000H  LIN控制寄存器
  #define LINIE                                    0x08                          //               rw-- LIN中断使能

+ 0 - 37
System/FU68xx_5_MDU.h

@@ -1,28 +1,7 @@
-/********************************************************************************
-
- **** Copyright (C), 2019, Fortior Technology Co., Ltd.                      ****
-
- ********************************************************************************
- * File Name     : FU68xx_4_MDU.h
- * Author        : Bruce HW&RD
- * Date          : 2019-03-27
- * Description   : .C file function description
- * Version       : 1.0
- * Function List :
- * 
- * Record        :
- * 1.Date        : 2019-03-27
- *   Author      : Bruce HW&RD
- *   Modification: Created file
-
-********************************************************************************/
-
 #ifndef __FU68XX_5_MDU_H__
 #define __FU68XX_5_MDU_H__
 
-/**************************************************************************************************///Including Header Files
 #include <FU68xx_5_MCU.h>
-/**************************************************************************************************///Define Macro
 
 /**
  * @brief 运行SMDU且不等待运行结束
@@ -94,8 +73,6 @@
                                                                 iSin = SCAT2_RES2 ;\
                                                                 iCos = SCAT2_RES1;\
                                                             } while (0);
-// 
-
 
 
 #define LPF_MDU(iX, ucK, iYh, iYl)                          do { \
@@ -123,17 +100,3 @@
 
 
 #endif                                   
-// #define MuiltS1_H_MDU(iA, iB, iCh)                          do {            
-////                                                                MUL0_MA = iA;
-
-////                                                                MUL0_MB = iB;
-
-////                                                                SMDU_RunBlock(0 , 2);//无符号乘法
-
-////                                                                iCh =   MUL0_MCL;
-////                                                   
-//////                                                                MDU_CR = MDUDONE;
-//                                                           
-//                                                               } while (0) ;                                  
-                                    
-//#endif

+ 0 - 19
System/FU68xx_5_Type.h

@@ -1,22 +1,3 @@
-/********************************************************************************
-
- **** Copyright (C), 2019, Fortior Technology Co., Ltd.                      ****
-
- ********************************************************************************
- * File Name     : FU68xx_4_Type.h
- * Author        : Bruce HW&RD
- * Date          : 2019-03-27
- * Description   : .C file function description
- * Version       : 1.0
- * Function List :
- * 
- * Record        :
- * 1.Date        : 2019-03-27
- *   Author      : Bruce HW&RD
- *   Modification: Created file
-
-********************************************************************************/
-
 #ifndef __FU68XX_5_TYPE_H__
 #define __FU68XX_5_TYPE_H__
 

+ 1 - 1
User/Application/Control.c

@@ -19,7 +19,7 @@ void Get_Target_Ref(void)
         #if (CONTROL_MODE == NONEMODE)
         isCtrlPowOn = true;
         motorControl.TargetRef = TARGET_SPEED_SET;
-        mcFocCtrl.QoutValue = I_Value(1.0);
+        motorControl.QOutRef = I_Value(1.0);
         #elif (CONTROL_MODE == UARTMODE)
         #endif
     }

+ 35 - 17
User/Application/Interrupt.c

@@ -19,9 +19,7 @@ void LVW_TSD_INT(void) interrupt 0
     }
     
     if (TSDIF)
-    {
-        TSDIF = 0;
-    }
+    { TSDIF = 0; }
 }
 
 /**
@@ -110,19 +108,31 @@ void SYStick_INT(void) interrupt 10
         if (mcFocCtrl.State_Count > 0)
         { mcFocCtrl.State_Count--; }
         
-        if (mcFocCtrl.mcAcbustime < 30000)
-        {
-            mcFocCtrl.mcAcbustime++;
-        }
-        
         DRV_SR = (DRV_SR | DCIF) & (~SYSTIF);// 清零标志位
     }
 }
 
 
+/**
+ * @function     COM1_INT_Handler
+ * @brief        I2C/UART1 共用此中断
+ * @date         2025-11-05
+*/
+void COM1_INT_Handler(void) interrupt 13
+{
+	if (TI)
+    { TI = 0; }
+    
+    if (RI)
+    { RI = 0; }
+}
 
-
-void USART_INT(void)  interrupt 14
+/**
+ * @function     COM_INT_Handler
+ * @brief        SPI/UART2/LIN 共用此中断
+ * @date         2025-11-05
+*/
+void COM2_INT_Handler(void) interrupt 14
 {
     if (UT2TI)
     { UT2TI = 0; }
@@ -131,13 +141,21 @@ void USART_INT(void)  interrupt 14
     { UT2RI = 0; }
 }
 
-void USART_INT1(void)  interrupt 13
+/**
+ * @function     DAM_INT_Handler
+ * @brief        DMA中断函数
+ * @date         2025-11-05
+*/
+void DAM_INT_Handler(void) interrupt 15
 {
-    if (TI)
-    { TI = 0; }
-    
-    if (RI)
-    { RI = 0; }
+	if(ReadBit(DMA0_CR0,DMAIF))
+	{
+		memset(&DebugDat,0,64);
+		ClrBit(DMA0_CR0,DMAIF);
+	}
+	if(ReadBit(DMA1_CR0,DMAIF))
+	{
+		ClrBit(DMA1_CR0,DMAIF);
+	}
 }
 
-

+ 11 - 15
User/Application/main.c

@@ -17,31 +17,27 @@ void HardwareInit(void)
     // 上电等待
     uint16 PowerUpCnt = 0;
     
-    for (PowerUpCnt = 0; PowerUpCnt < 10000; PowerUpCnt++) {};
+    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);
+	
     // 系统定时器初始化
-    SysTick();
-    
+    Sys_Tick();
     _nop_(); _nop_();
-    
     EA = 1;
 }
 
@@ -58,13 +54,11 @@ void SoftwareInit(void)
     memset(&mcProtectTime, 0, sizeof(ProtectVarible));    // ProtectVarible保护次数清零
     /***********过流保护**************/
     memset(&mcCurVarible, 0, sizeof(CurrentVarible));     // 电流保护的变量清零
-    memset(&ConTrolCmd, 0, sizeof(CONTROLCMDD));
     /*****电机状态机时序变量***********/
     McStaSet.SetMode = 0;
     /*************外部控制环************/
     memset(&mcFocCtrl, 0, sizeof(FOCCTRL));             // mcFocCtrl变量清零
     mcFocCtrl.mcDcbus_chazhi = 32760;
-    /******ADC采样滤波值*********/
     /**************************电流偏置校准变量**********************/
     memset(&mcCurOffset, 0, sizeof(CurrentOffset));    // mcCurOffset变量清零
     mcCurOffset.IuOffsetSum = 16383;
@@ -104,12 +98,14 @@ void main(void)
             Power_In_Control();
             // LED灯故障显示
             LED_State_Display(mcFaultSource);
-            // 喂狗
-            SetBit(WDT_CR, WDTRF);
-            IsTick = false;
             Tick_Task();
             // 故障保护函数功能
             Fault_Detection();
+			// 调试信息上载
+			Dabug_Data_Update();
+            // 喂狗
+            SetBit(WDT_CR, WDTRF);
+            IsTick = false;
         }
         
         Motor_Control_State();

+ 14 - 173
User/Function/AddFunction.c

@@ -4,9 +4,7 @@ extern uint16 SKI1, SKP1;
 
 CurrentVarible     xdata   mcCurVarible;
 FOCCTRL            xdata   mcFocCtrl;
-ILIMIT             xdata   mcIimit;
 MCRAMP             xdata   mcSpeedRamp;
-CONTROLCMDD        xdata   ConTrolCmd;
 
 
 void FaultProcess(void)
@@ -35,31 +33,6 @@ uint32 Abs_F32(int32 value)
     }
 }
 
-/*****转矩补偿和无转矩补偿时过流值设置*****/
-void DCOvercurrentValue(void)
-{
-    static uint8 DAC_Value, DAC_Value2;
-    DAC_Value = DAC_OvercurrentValue;
-    DAC_Value2 = DAC0_DR;
-    
-    if (DAC_Value < DAC_Value2)
-    {
-        DAC_Value2 -= 1;
-    }
-    else if (DAC_Value > DAC_Value2)
-    {
-        DAC_Value2 += 1;
-    }
-    
-    if (DAC_Value2 < 255)
-    {
-        DAC0_DR = (uint8)DAC_Value2;
-    }
-    else
-    {
-        DAC0_DR = 255;
-    }
-}
 /*---------------------------------------------------------------------------*/
 /*  Name     :   void Speed_response(void)
     /* Input    :   NO
@@ -84,14 +57,13 @@ void Speed_response(void)
             else
             {
                 motorControl.TargetRef = 0;
-                mcSpeedRamp.DecValue    = Motor_Speed_Dec1;
+                mcSpeedRamp.DecValue = Motor_Speed_Dec1;
             }
         }
         else                                                                                                                            //如果达到上油转速后,将起动速度环增量变为运行速度环增量
         {
             Current_Speed_PI();
-            DCOvercurrentValue();
-            mcSpeedRamp.IncValue    = Motor_Speed_Inc;
+            mcSpeedRamp.IncValue = Motor_Speed_Inc;
             
             if ((!isCtrlPowOn) || (motorControl.TargetRef == 0))
             {
@@ -107,7 +79,7 @@ void Speed_response(void)
         {
             case 0:
             {
-                if (mcFocCtrl.SpeedFlt > MOTOR_LOOP_RPM)
+                if (motorControl.ActualSpeed > MOTOR_LOOP_RPM)
                 {
                     if (Start_CNT < 15)
                     {
@@ -118,7 +90,7 @@ void Speed_response(void)
                         mcFocCtrl.CtrlMode = 1;
                         Start_CNT = 0;
                         #if (LOOP_MODE == SPEED_CONTROL_MODE)
-                        mcSpeedRamp.ActualValue = mcFocCtrl.SpeedFlt + _Q15(150 / MOTOR_SPEED_BASE);
+                        mcSpeedRamp.ActualValue = motorControl.ActualSpeed + _Q15(150 / MOTOR_SPEED_BASE);
                         #endif
                         mcFocCtrl.LoopTime = SPEED_LOOP_TIME;
                         mcFocCtrl.IND_DEC_LoopTime = SPEED_INC_DEC_TIME;
@@ -131,7 +103,6 @@ void Speed_response(void)
             
             case 1:
             {
-                IsLimit_Over_deal();
                 mcFocCtrl.LoopTime++;
                 mcFocCtrl.IND_DEC_LoopTime++;
                 
@@ -147,7 +118,7 @@ void Speed_response(void)
                     #if (OUT_LOOP_CONTROL)
                     {
                         #if (LOOP_MODE == SPEED_CONTROL_MODE)
-                        mcFocCtrl.IsRef = HW_Zero_Calc(mcSpeedRamp.ActualValue - mcFocCtrl.SpeedFlt);
+                        mcFocCtrl.IsRef = HW_Zero_Calc(mcSpeedRamp.ActualValue - motorControl.ActualSpeed);
                         #endif
                         
                         STT_FOC_THECOMP_CLEAR();
@@ -156,21 +127,21 @@ void Speed_response(void)
                     {
                         mcFocCtrl.mcIqref = FOC_IQREF;
                     
-                        if (FOC_IQREF < mcFocCtrl.QoutValue)
+                        if (FOC_IQREF < motorControl.QOutRef)
                         {
                             mcFocCtrl.mcIqref += QOUTINC;
                     
-                            if (mcFocCtrl.mcIqref > mcFocCtrl.QoutValue)
-                            { mcFocCtrl.mcIqref = mcFocCtrl.QoutValue; }
+                            if (mcFocCtrl.mcIqref > motorControl.QOutRef)
+                            { mcFocCtrl.mcIqref = motorControl.QOutRef; }
                     
                             FOC_IQREF = mcFocCtrl.mcIqref;
                         }
-                        else if (FOC_IQREF > mcFocCtrl.QoutValue)
+                        else if (FOC_IQREF > motorControl.QOutRef)
                         {
                             mcFocCtrl.mcIqref -= QOUTINC;
                     
-                            if (mcFocCtrl.mcIqref < mcFocCtrl.QoutValue)
-                            { mcFocCtrl.mcIqref = mcFocCtrl.QoutValue; }
+                            if (mcFocCtrl.mcIqref < motorControl.QOutRef)
+                            { mcFocCtrl.mcIqref = motorControl.QOutRef; }
                     
                             FOC_IQREF = mcFocCtrl.mcIqref;
                         }
@@ -327,21 +298,21 @@ void Current_Speed_PI(void)
     static int16 Skp, Ski, DQkp, DQki;
     static int16 Skp_1, Ski_1, DQkp_1, DQki_1;
     
-    if (mcFocCtrl.SpeedFlt < _Q15(2000 / MOTOR_SPEED_BASE))
+    if (motorControl.ActualSpeed < _Q15(2000 / MOTOR_SPEED_BASE))
     {
         Skp = SKPRun;
         Ski = SKIRun;
         DQkp = DQKP;
         DQki = DQKI;
     }
-    else if (mcFocCtrl.SpeedFlt < _Q15(4200 / MOTOR_SPEED_BASE))
+    else if (motorControl.ActualSpeed < _Q15(4200 / MOTOR_SPEED_BASE))
     {
         Skp = SKPRun1;
         Ski = SKIRun1;
         DQkp = DQKP_zhong;
         DQki = DQKI_zhong;
     }
-    else if (mcFocCtrl.SpeedFlt > _Q15(4700 / MOTOR_SPEED_BASE))
+    else if (motorControl.ActualSpeed > _Q15(4700 / MOTOR_SPEED_BASE))
     {
         Skp = SKPRun2;
         Ski = SKIRun2;
@@ -401,133 +372,3 @@ void Current_Speed_PI(void)
 
 uint16 AimFrequencyMaxVAC = 500;
 
-
-
-void IsLimit_Over_tect(void)
-{
-    if (mcIimit.flag == 0 || mcIimit.flag == 3)
-    {
-        if ((mcFocCtrl.IDQFlt > I_OVER))
-        {
-            mcIimit.mcIDQtime3 = 0;
-            
-            if (mcIimit.mcIDQtime1 < 50)
-            {
-                mcIimit.mcIDQtime1++;
-            }
-            else
-            {
-                mcIimit.flag = 1;
-            }
-        }
-    }
-    
-    if (mcIimit.flag == 1)
-    {
-        if ((mcFocCtrl.IDQFlt < I_LIMIT))
-        {
-            mcIimit.mcIDQtime1 = 0;
-            
-            if (mcIimit.mcIDQtime2 < 50)
-            {
-                mcIimit.mcIDQtime2++;
-            }
-            else
-            {
-                mcIimit.flag = 2;
-            }
-        }
-        
-        mcIimit.mcIDQtime4++;
-        
-        if (mcIimit.mcIDQtime4 >= 45000)
-        {
-            mcIimit.flag = 2;
-            mcIimit.mcIDQtime4 = 0;
-        }
-    }
-    
-    if (mcIimit.flag == 2)
-    {
-        mcIimit.mcIDQtime2 = 0;
-        
-        if (mcIimit.mcIDQtime3 < 10000)
-        {
-            mcIimit.mcIDQtime3++;
-        }
-        else
-        {
-            mcIimit.flag = 3;
-        }
-    }
-    
-    //PPPPPP
-    if (mcIimit.Pflag == 0 || mcIimit.Pflag == 3)
-    {
-        if ((mcFocCtrl.Powerlpf > P_OVER))
-        {
-            mcIimit.mcPtime3 = 0;
-            
-            if (mcIimit.mcPtime1 < 50)
-            {
-                mcIimit.mcPtime1++;
-            }
-            else
-            {
-                mcIimit.Pflag = 1;
-            }
-        }
-    }
-    
-    if (mcIimit.Pflag == 1)
-    {
-        if ((mcFocCtrl.Powerlpf < P_LIMIT))
-        {
-            mcIimit.mcPtime1 = 0;
-            
-            if (mcIimit.mcPtime2 < 50)
-            {
-                mcIimit.mcPtime2++;
-            }
-            else
-            {
-                mcIimit.Pflag = 2;
-            }
-        }
-        
-        mcIimit.mcPtime4++;
-        
-        if (mcIimit.mcPtime4 >= 45000)
-        {
-            mcIimit.Pflag = 2;
-            mcIimit.mcPtime4 = 0;
-        }
-    }
-    
-    if (mcIimit.Pflag == 2)
-    {
-        mcIimit.mcPtime2 = 0;
-        
-        if (mcIimit.mcPtime3 < 10000)
-        {
-            mcIimit.mcPtime3++;
-        }
-        else
-        {
-            mcIimit.Pflag = 3;
-        }
-    }
-}
-
-void IsLimit_Over_deal(void)
-{
-    if ((mcIimit.flag == 1) || mcIimit.Pflag == 1)
-    {
-        motorControl.TargetRef =  _Q15(1800 / MOTOR_SPEED_BASE);
-    }
-    else if ((mcIimit.flag == 2) || (mcIimit.Pflag == 2))
-    {
-        motorControl.TargetRef = mcSpeedRamp.ActualValue;
-    }
-}
-

+ 69 - 25
User/Function/FocControl.c

@@ -57,7 +57,6 @@ void Motor_Control_State(void)
                 mcFaultSource = 0;
                 memset(&mcFaultDect, 0, sizeof(FaultVarible));
                 memset(&mcFocCtrl, 0, sizeof(FOCCTRL));
-                memset(&mcIimit, 0, sizeof(ILIMIT));
                 mcFocCtrl.mcDcbus_chazhi = 32760;
                 McStaSet.SetMode = 0;
                 memset(&VoltageComp, 0, sizeof(VOLCOMP));
@@ -66,22 +65,77 @@ void Motor_Control_State(void)
                 #if (FiledWeakenCompEnable)
                 memset(&mcFieldWeaken, 0, sizeof(FieldWeakeningTypeDef));
                 #endif
-                mcState = mcAlign;
-                mcFocCtrl.State_Count = Align_Time;
+                // 此模块不需要预充电
+                mcState = mcCharge;
             }
             
             break;
         }
         
-        case mcCharge: // 预充电状态,MCU输出固定频率占空比,预充电结束后,跳入mcTailWind
+        case mcCharge:
         {
-            Motor_Charge();
+            if ((mcFocCtrl.State_Count == 0) && (mcFocCtrl.ChargeStep !=5 ))
+            {
+                    mcFocCtrl.ChargeStep ++;
+                    mcFocCtrl.State_Count = 30;
+                #if (1)
+            
+                if (mcFocCtrl.ChargeStep == 4)
+                { mcFocCtrl.ChargeStep = 5; }
+                
+                #endif
+            }
             
-            if (mcFocCtrl.State_Count == 0)
+            switch (mcFocCtrl.ChargeStep)
             {
-                MOE = 0;                   // 关闭输出
-                mcState = mcAlign;
-                mcFocCtrl.State_Count = Align_Time;
+                case 0:
+                {
+                    // 配置占空比
+                    DRV_DR = Calib_Duty * DRV_ARR;
+                    // DRV_CTL:PWM来源选择
+                    // OCS = 0, DRV_COMR
+                    // OCS = 1, FOC/SVPWM/SPWM
+                    ClrBit(DRV_CR, OCS);
+                    mcFocCtrl.ChargeStep = 1;
+                    mcFocCtrl.State_Count = 30;
+                    break;
+                }
+                
+                // U相下桥臂通
+                case 1:
+                {
+                    DRV_CMR |= 0x01;
+                    MOE = 1;
+                    break;
+                }
+                
+                // V相下桥臂导通
+                case 2:
+                {
+                    DRV_CMR |= 0x04;
+                    break;
+                }
+                
+                // W相下桥臂导通
+                case 3:
+                {
+                    DRV_CMR |= 0x10;
+                    break;
+                }
+                
+                case 4:
+                {
+                    MOE = 0;
+                    mcState = mcCharge;
+                    mcFocCtrl.State_Count = Align_Time;
+                    break;
+                }
+                
+                case 5:
+                {
+                    DRV_CMR |= 0x3F;
+                    break;
+                }
             }
             
             break;
@@ -181,12 +235,12 @@ void Tick_Task(void)
 {
     if ((mcState == mcStart) || (mcState == mcRun) || (mcState == mcStop))
     {
-        mcFocCtrl.BEmf         =  LPF_Zero_Update(FOC__EMF, mcFocCtrl.BEmf, LPF_K(5.0));
-        mcFocCtrl.Powerlpf     =  LPF_Zero_Update(FOC__POW, mcFocCtrl.Powerlpf, LPF_K(1.0));
-        mcFocCtrl.IDQFlt       =  LPF_Zero_Update(mcCurVarible.Max_is, mcFocCtrl.IDQFlt, LPF_K(1.0));
-        mcFocCtrl.UDFlt       =  LPF_Zero_Update(FOC__UD, mcFocCtrl.UDFlt, LPF_K(30.0));          //LPF_K(30.0)
-        mcFocCtrl.UQFlt       =  LPF_Zero_Update(FOC__UQ, mcFocCtrl.UQFlt, LPF_K(30.0));          //LPF_K(30.0)
+        mcFocCtrl.Powerlpf =  LPF_Zero_Update(FOC__POW, mcFocCtrl.Powerlpf, LPF_K(1.0));
+        mcFocCtrl.IDQFlt =  LPF_Zero_Update(mcCurVarible.Max_is, mcFocCtrl.IDQFlt, LPF_K(1.0));
+        mcFocCtrl.UDFlt =  LPF_Zero_Update(FOC__UD, mcFocCtrl.UDFlt, LPF_K(30.0));          //LPF_K(30.0)
+        mcFocCtrl.UQFlt =  LPF_Zero_Update(FOC__UQ, mcFocCtrl.UQFlt, LPF_K(30.0));          //LPF_K(30.0)
         motorControl.ActualSpeed = LPF_Zero_Update(FOC__EOME, motorControl.ActualSpeed, LPF_K(71.0));
+        motorControl.BackEMF = LPF_Zero_Update(FOC__EMF, motorControl.BackEMF, LPF_K(5.0));
         
         if (mcFocCtrl.Powerlpf <= 0)
         {mcFocCtrl.Powerlpf = 0;}
@@ -194,20 +248,10 @@ void Tick_Task(void)
     else
     {
         mcFocCtrl.IDQFlt = 0;
-        mcFocCtrl.BEmf = 0;
         mcFocCtrl.Powerlpf = 0;
         motorControl.ActualSpeed = 0;
+        motorControl.BackEMF = 0;
     }
     
-    #if 0
-    User_Dri_timer1ms();     //user控制1ms中断
-    IsLimit_Over_tect();     //限流处理
-    #if (Debugg==1)
-    {
-        PC_MONITOR_1MS();   //工具
-        CMDMONI_WT_SENDCMD();
-    }
-    #endif
-    #endif
     StarRampDealwith();
 }

+ 1 - 45
User/Function/FocControlFunction.c

@@ -160,51 +160,7 @@ void FOC_Init(void)
     SetBit(DRV_CR, DRVEN);
     SetBit(DRV_CR, OCS);
 }
-/*---------------------------------------------------------------------------*/
-/*  Name     :   void Motor_Charge(void)
-    /* Input    :   NO
-    /* Output   :   NO
-    /* Description: 预充电,当一直处于预充电状态下,不接电机,可用于验证IPM或者Mos。
-    预充电分三步
-    第一步是对U相进行预充电
-    第二步是对U,V两相进行预充电
-    第三步是对U、V、W三相进行预充电。
-    /*---------------------------------------------------------------------------*/
-void Motor_Charge(void)
-{
-    if (McStaSet.SetFlag.ChargeSetFlag == 0)
-    {
-        McStaSet.SetFlag.ChargeSetFlag = 1;
-        DRV_DR = Calib_Duty * DRV_ARR;              //下桥臂10% duty
-        //          DRV_CMR = 0x00;
-        /*  ---------------------------------------------------------------------
-            DRV_CTL:PWM来源选择
-            OCS = 0, DRV_COMR
-            OCS = 1, FOC/SVPWM/SPWM
-            ----------------------------------------------------------------------*/
-        ClrBit(DRV_CR, OCS);
-        mcFocCtrl.ChargeStep = 0;
-    }
-    
-    if ((mcFocCtrl.State_Count < Charge_Time) && (mcFocCtrl.ChargeStep == 0))
-    {
-        mcFocCtrl.ChargeStep = 1;
-        DRV_CMR |= 0x01;                    // U相下桥臂通
-        MOE = 1;
-    }
-    
-    if (( mcFocCtrl.State_Count <= (Charge_Time << 1) / 3) && (mcFocCtrl.ChargeStep == 1))
-    {
-        mcFocCtrl.ChargeStep = 2;
-        DRV_CMR |= 0x04;                    // V相下桥臂导通
-    }
-    
-    if ((mcFocCtrl.State_Count <= Charge_Time / 3) && (mcFocCtrl.ChargeStep == 2))
-    {
-        mcFocCtrl.ChargeStep = 3;
-        DRV_CMR |= 0x10;                    // W相下桥臂导通
-    }
-}
+
 /*---------------------------------------------------------------------------*/
 /*  Name     :   void Motor_Align(void)
     /* Input    :   NO

+ 4 - 4
User/Function/Protect.c

@@ -151,7 +151,7 @@ void Fault_Start(void)
         {
             mcFaultDect.StartSpeedCnt++;
             
-            if ((motorControl.ActualSpeed > MOTOR_MAX_SPEED) && (mcFocCtrl.BEmf < 1300))
+            if ((motorControl.ActualSpeed > MOTOR_MAX_SPEED) && (motorControl.BackEMF < 1300))
             {
                 mcFaultDect.StartSpeedCnt = 0;
                 mcFaultSource          = FaultStart;
@@ -170,7 +170,7 @@ void Fault_Start(void)
             {
                 mcFaultDect.StartDelay = 300;
                 
-                if ((mcFocCtrl.BEmf < 500)) //&&(mcFocCtrl.CtrlMode==0))
+                if ((motorControl.BackEMF < 500)) //&&(mcFocCtrl.CtrlMode==0))
                 {
                     mcFaultDect.StartESCount++;
                     
@@ -242,7 +242,7 @@ void Fault_Stall(void)
         else
         {
             //method 1,判断反电动势太小或当反电动势太小,转速太大
-            if ((mcFocCtrl.BEmf < 1000) || ((FOC__EOME > _Q15(3000.0 / MOTOR_SPEED_BASE)) && (mcFocCtrl.BEmf < 2000)))
+            if ((motorControl.BackEMF < 1000) || ((FOC__EOME > _Q15(3000.0 / MOTOR_SPEED_BASE)) && (motorControl.BackEMF < 2000)))
             {
                 mcFaultDect.StallDectEs++;
                 
@@ -284,7 +284,7 @@ void Fault_Stall(void)
             }
             
             //method 3
-            //                      if((mcFocCtrl.BEmf<=25*(uint32)motorControl.ActualSpeed/10)&&mcFocCtrl.BEmf>=10*(uint32)motorControl.ActualSpeed/10)//1.15
+            //                      if((motorControl.BackEMF<=25*(uint32)motorControl.ActualSpeed/10)&&motorControl.BackEMF>=10*(uint32)motorControl.ActualSpeed/10)//1.15
             //                      {
             //                          mcFaultDect.StallDectEs2 = 0;
             //                      }

+ 10 - 7
User/Hardware/ADC.c

@@ -1,10 +1,10 @@
 /**
- * @copyright None
- * @file      ADC.c
- * @author    Comment Vivre
- * @date      2025-11-03
- * @brief     None
- */
+    @copyright None
+    @file      ADC.c
+    @author    Comment Vivre
+    @date      2025-11-03
+    @brief     None
+*/
 #include <MyProject.h>
 
 /**
@@ -76,7 +76,8 @@ void AMP_Init(void)
     // 增益为外部配置
     ClrBit(AMP_CR1, AMP0_GAIN2 | AMP0_GAIN1 | AMP0_GAIN0 | AMP_PH_GAIN2 | AMP_PH_GAIN1 | AMP_PH_GAIN0);
 }
-uint16_t uCurr, vCurr;
+
+int16_t uCurr, vCurr;
 /**
     @function     Get_ADC_Value
     @brief        读取ADC转换值
@@ -95,9 +96,11 @@ void Get_ADC_Value(void)
     motorControl.ACBus    = LPF_Zero_Update(VACBUS_ADC, motorControl.ACBus, LPF_K(1.0));
     motorControl.IGBTTemp = LPF_Zero_Update(IGBT_NTC_ADC, motorControl.IGBTTemp, LPF_K(20.0));
     // 数据处理
+    #if 0
     // 测试
     uCurr = ADC0_DR;
     vCurr = ADC1_DR;
     motorControl.uPhaseCurr = uCurr - mcCurOffset.IuOffset;
     motorControl.vPhaseCurr = vCurr - mcCurOffset.IvOffset;
+    #endif
 }

+ 6 - 6
User/Hardware/CMP.c

@@ -1,10 +1,10 @@
 /**
- * @copyright None
- * @file      CMP.c
- * @author    Comment Vivre 
- * @date      2025-11-03
- * @brief     None
- */
+    @copyright None
+    @file      CMP.c
+    @author    Comment Vivre
+    @date      2025-11-03
+    @brief     None
+*/
 #include <Myproject.h>
 
 void CMP0_Init(void)

+ 89 - 204
User/Hardware/DMA.c

@@ -1,145 +1,135 @@
-#include "DMA.h"
-#include <FU68xx_5_DMA.h>
-
-
-//#define DMALENT 128
-
-unsigned char xdata sg_ucUartDbgData[DMALENT] = {0xaa, 0xbb};
-char                sg_cUartDataLen;
-unsigned char       sg_ucUartDataSum;
-
-void DMA0_XRAMToUART_Init(void)
-{
-    /* -----DMACFG2:DMACFG1: DMACFG0-->001  传输方向XRAMToUART----- */
-    SetReg(DMA0_CR0, DMAEN | DMACFG2 | DMACFG1 | DMACFG0 | DMAIE, DMACFG0 );  // DMAIE和DMACFG0为1
-    DMA0_LEN =  DMALENT;                                                                   // 设置传输长度为7,每传输7字节产生一次中断
-    DMA0_BA  =  (uint16)GetAddr_UARTDBG();                                                              // 设置RAM中的首地址
-    SetBit(DMA0_CR0, DMAEN);                                                         // 使能DMA1
-}
+#include <MyProject.h>
 
 /**
-    获取缓存区的地址
-
-    @return  缓存区地址
+    @function     Conf_DMA
+    @brief        DMA配置
+    @param[in]    DMAx: DMA通道
+**           DMAPipe: DMA管道,可选参数如下
+                    UART1_XDATA    UART1-->XDATA
+                    XDATA_UART1    UART1<--XDATA
+                    I2C_XDATA      I2C  -->XDATA
+                    XDATA_I2C      I2C  <--XDATA
+                    SPI_XDATA      SPI  -->XDATA
+                    XDATA_SPI      SPI  <--XDATA
+                    UART2_XDATA    UART2-->XDATA
+                    XDATA_UART2    UART2<--XDATA
+**           DMAAddr: 传输首地址,可取地址范围:0x0000~0x0317
+**           DMALen: DMALen    数据包大小(1~64)
+    @return       None
+    @date         2025-11-05
 */
-unsigned char * GetAddr_UARTDBG(void)
+void Conf_DMA(uint8_t DMAx, uint8_t DMAPipe, uint16_t DMAAddr, uint8_t DMALen)
 {
-    return &sg_ucUartDbgData;
+    // 等待DMAx传输结束
+    Wait_DMA(DMAx);
+    // 禁止DMAx的传输
+    ClrBit(*(&DMA0_CR0 + DMAx), DMAEN);
+    // 设置DMAx的传输管道
+    SetReg(*(&DMA0_CR0 + DMAx), DMA_PIPE, DMAPipe);
+    // 设置DMAx传输数量
+    *(&DMA0_LEN + DMAx) = DMALen - 1;
+    // 设置DMAx传输首地址
+    *(&DMA0_BA + DMAx) = DMAAddr & 0x07ff;
 }
 
-
 /**
-    配置DMA
+    @function     Set_DMA_Pipe
+    @brief        配置DMA传输通道
 
-    @param DMAx      DMA通道
-    @param DMAPipe   DMA管道,可选参数如下
-                        UART1_XDATA    UART1-->XDATA
-                        XDATA_UART1    UART1<--XDATA
-                        I2C_XDATA      I2C  -->XDATA
-                        XDATA_I2C      I2C  <--XDATA
-                        SPI_XDATA      SPI  -->XDATA
-                        XDATA_SPI      SPI  <--XDATA
-                        UART2_XDATA    UART2-->XDATA
-                        XDATA_UART2    UART2<--XDATA
-    @param DMAAddr   传输首地址,可取地址范围:0x0000~0x0317
-    @param DMALen    数据包大小(1~64)
+    @param[in]    DMAx: [输入/出]
+**           DMAPipe: [输入/出]
+    @date         2025-11-05
 */
-void Conf_DMA(uint8 DMAx, uint8 DMAPipe, uint16 DMAAddr, uint8 DMALen)
-{
-    Wait_DMA(DMAx);                                                   // 等待DMAx传输结束
-    ClrBit(*(&DMA0_CR0 + DMAx), DMAEN);                               // 禁止DMAx的传输
-    SetReg(*(&DMA0_CR0 + DMAx), DMA_PIPE, DMAPipe);                   // 设置DMAx的传输管道
-    *(&DMA0_LEN + DMAx) = DMALen - 1;                                 // 设置DMAx传输数量
-    *(&DMA0_BA + DMAx) = DMAAddr & 0x07ff;                           // 设置DMAx传输首地址
-}
-
-
-
-
-void SetPipe_DMA0(eType_DMA_PIPE ePipe)
+void Set_DMA_Pipe(uint8_t DMAx, uint8_t DMAPipe)
 {
     bool bTmp = false;
     
-    if (ReadBit(DMA0_CR0, DMAEN))
+    if (ReadBit(*(&DMA0_CR0 + DMAx), DMAEN))
     {
         bTmp = true;
         
-        while (ReadBit(DMA0_CR0, DMABSY));
+        while (ReadBit(*(&DMA0_CR0 + DMAx), DMABSY));
         
-        ClrBit(DMA0_CR0, DMAEN);
+        ClrBit(*(&DMA0_CR0 + DMAx), DMAEN);
     }
     
-    SetReg(DMA0_CR0, DMACFG2 | DMACFG1 | DMACFG0, ePipe);
+    SetReg(*(&DMA0_CR0 + DMAx), DMACFG2 | DMACFG1 | DMACFG0, DMAPipe);
     
     if (bTmp)
-    {
-        SetBit(DMA0_CR0, DMAEN);
-    }
+    { SetBit(*(&DMA0_CR0 + DMAx), DMAEN); }
 }
 
-void SetPipe_DMA1(eType_DMA_PIPE ePipe)
+/**
+    @function     Set_DMA_Data_Package
+    @brief        配置DMA传输数据
+    @param[in]    DMAx: [输入/出]
+**           ulAddr: [输入/出]
+**           cLen: [输入/出]
+    @date         2025-11-05
+*/
+void Set_DMA_Data_Package(uint8_t DMAx, uint16_t ulAddr, uint8_t cLen)
 {
     bool bTmp = false;
     
-    if (ReadBit(DMA1_CR0, DMAEN))
+    if (ReadBit(*(&DMA0_CR0 + DMAx), DMAEN))
     {
         bTmp = true;
         
-        while (ReadBit(DMA1_CR0, DMABSY));
+        while (ReadBit(*(&DMA0_CR0 + DMAx), DMABSY));
         
-        ClrBit(DMA1_CR0, DMAEN);
+        ClrBit(*(&DMA0_CR0 + DMAx), DMAEN);
     }
     
-    SetReg(DMA1_CR0, DMACFG2 | DMACFG1 | DMACFG0, ePipe);
+    *(&DMA0_LEN + DMAx) =  cLen - 1;
+    *(&DMA0_BA + 2 * DMAx)  =  ulAddr;
     
     if (bTmp)
-    {
-        SetBit(DMA1_CR0, DMAEN);
-    }
+    { SetBit(*(&DMA0_CR0 + DMAx), DMAEN); }
 }
 
-void SetDataPackage_DMA0(unsigned short ulAddr, char cLen)
+
+/**
+    @function     Start_DMA
+    @brief        启动DMA传输
+    @param[in]    DMAx: [输入/出]
+    @date         2025-11-05
+*/
+void Start_DMA(uint8_t DMAx)
 {
-    bool bTmp = false;
-    
-    if (ReadBit(DMA0_CR0, DMAEN))
-    {
-        bTmp = true;
-        
-        while (ReadBit(DMA0_CR0, DMABSY));
-        
-        ClrBit(DMA0_CR0, DMAEN);
-    }
-    
-    DMA0_LEN =  cLen;
-    DMA0_BA  =  ulAddr;
-    
-    if (bTmp)
-    {
-        SetBit(DMA0_CR0, DMAEN);
-    }
+    SetBit(*(&DMA0_CR0 + DMAx), DMAEN | DMABSY);
 }
 
-void SetDataPackage_DMA1(unsigned short ulAddr, char cLen)
+/**
+    @function     Get_DMA_Status
+    @brief        获取DMA状态
+    @param[in]    DMAx: [输入/出]
+**           DMAStatus: [输入/出]
+    @return       状态
+    @date         2025-11-05
+*/
+bool Get_DMA_Status(uint8_t DMAx, uint8_t DMAStatus)
 {
-    bool bTmp = false;
+    return ReadBit(*(&DMA0_CR0 + DMAx), DMAStatus);
+}
+
+/**
+    @function     Set_IRQ_DMA
+    @brief        使能中断 配置中断优先级
+    @param[in]    DMA_IRQ: [输入/出]
+    @date         2025-11-05
+*/
+void Set_IRQ_DMA(uint8_t DMA_IRQ_Priority)
+{
+    // 使能DMA中断
+    SetBit(DMA0_CR0, DMAIE);
     
-    if (ReadBit(DMA1_CR0, DMAEN))
+    if (!EA)
     {
-        bTmp = true;
-        
-        while (ReadBit(DMA1_CR0, DMABSY));
-        
-        ClrBit(DMA1_CR0, DMAEN);
+        EA = 1;
     }
     
-    DMA1_LEN = cLen;
-    DMA1_BA  = ulAddr;
-    
-    if (bTmp)
-    {
-        SetBit(DMA1_CR0, DMAEN);
-    }
+    // 配置中断优先级
+    SetReg(IP1, PDMA1 | PDMA0, DMA_IRQ_Priority);
 }
 
 void SetEndian_DMA(eType_DMA_Endian eEndian)
@@ -177,112 +167,7 @@ void SetEndian_DMA(eType_DMA_Endian eEndian)
     }
 }
 
-void SetIRQ_DMA(ebool eIRQ, eType_DMA_IRQ eIP)
-{
-    SetReg(DMA0_CR0, DMAIE, eIRQ ? DMAIE : 0);
-    
-    if (!EA)
-    {
-        EA = 1;
-    }
-    
-    if (eIRQ)
-    {
-        SetReg(IP1, PDMA1 | PDMA0, eIP);
-    }
-}
 
-void SetDbgMod_DMA(void)
-{
-    bool bTmp = false;
-    
-    if (ReadBit(DMA1_CR0, DMAEN))
-    {
-        bTmp = true;
-        
-        while (ReadBit(DMA1_CR0, DMABSY));
-        
-        ClrBit(DMA1_CR0, DMAEN);
-    }
-    
-    SetBit(DMA1_CR0, DBGEN);
-    SetBit(DMA1_CR0, ((eType_DMA_PIPE)DRAM_SPI));
-    DMA1_LEN = 4;
-    
-    if (bTmp)
-    {
-        SetBit(DMA1_CR0, DMAEN);
-    }
-}
 
-/**
-    设置DMA1的DBG模式
-
-    @param Addr   要DBG输出的地址
-*/
-uint16 xdata spidebug[4] = { 0 };
-void Set_DBG_DMA(uint16 DMAAddr)
-{
-    //  SPI_Init();
-    ClrBit(DMA1_CR0, DMAEN);                                // 禁止DMA1传输
-    SetBit(DMA1_CR0, DBGEN | DRAM_SPI);                     // 设置DMA1使用DBG模式,XDATA发送数据到SPI
-    
-    if (!ReadBit(DMAAddr, 0x4000))
-    {
-        SetBit(DMA1_CR0, DBGSW);    //根据DMAAddr判断是否在XRAM区,如果是则开启DBGSW
-    }
-    
-    DMA1_LEN = 7;                                           // 设置DMA1发送数量为8
-    //      DMA1_BA = (uint16)spidebug & 0x07ff;
-    DMA1_BA = DMAAddr & 0x07ff;                             // 设置DMA1发送首地址
-    SetBit(*(&DMA0_CR0 + 1), DMAEN | DMABSY);
-    //    Switch_DMA(1);                                       // 启动DMA1
-}
 
 
-void SetDbgData_DMA(unsigned short ulAddr)
-{
-    bool bTmp = false;
-    
-    if (ReadBit(DMA1_CR0, DMAEN))
-    {
-        bTmp = true;
-        
-        while (ReadBit(DMA1_CR0, DMABSY));
-        
-        ClrBit(DMA1_CR0, DMAEN);
-    }
-    
-    if (ulAddr <= 0xfff)
-    {
-        ulAddr += 0x70000000;
-    }
-    
-    DMA1_BA = ulAddr;
-    
-    if (bTmp)
-    {
-        SetBit(DMA1_CR0, DMAEN);
-    }
-}
-
-void EnableRun_DMA0(void)
-{
-    SetBit(DMA0_CR0, DMAEN | DMABSY);
-}
-
-void EnableRun_DMA1(void)
-{
-    SetBit(DMA1_CR0, DMAEN | DMABSY);
-}
-
-bool GetStatus_DMA0(eType_DMA_Statu eStatu)
-{
-    return ReadBit(DMA0_CR0, eStatu);
-}
-
-bool GetStatus_DMA1(eType_DMA_Statu eStatu)
-{
-    return ReadBit(DMA1_CR0, eStatu);
-}
-

+ 6 - 6
User/Hardware/DRIVER.c

@@ -1,10 +1,10 @@
 /**
- * @copyright None
- * @file      DRIVER.c
- * @author    Comment Vivre 
- * @date      2025-11-03
- * @brief     None
- */
+    @copyright None
+    @file      DRIVER.c
+    @author    Comment Vivre
+    @date      2025-11-03
+    @brief     None
+*/
 #include <MyProject.h>
 
 

+ 7 - 7
User/Hardware/GPIO.c

@@ -1,10 +1,10 @@
 /**
- * @copyright None
- * @file      GPIO.c
- * @author    Comment Vivre 
- * @date      2025-11-03
- * @brief     None
- */
+    @copyright None
+    @file      GPIO.c
+    @author    Comment Vivre
+    @date      2025-11-03
+    @brief     None
+*/
 #include <Myproject.h>
 
 /**
@@ -182,7 +182,7 @@ void Power_In_Control(void)
         
         case POWER_RUN:
         {
-            #if 1
+            #if 0
         
             // 暂不释放复位
             if (mcFaultSource == FaultNoSource)

+ 6 - 6
User/Hardware/SMDU.c

@@ -1,10 +1,10 @@
 /**
- * @copyright None
- * @file      SMDU.c
- * @author    Comment Vivre 
- * @date      2025-11-03
- * @brief     None
- */
+    @copyright None
+    @file      SMDU.c
+    @author    Comment Vivre
+    @date      2025-11-03
+    @brief     None
+*/
 #include <MyProject.h>
 // ------------------------------------------------------------------------------------------------------------------
 // 1. PI控制器初始化

+ 8 - 8
User/Hardware/TIMER.c

@@ -1,10 +1,10 @@
 /**
- * @copyright None
- * @file      TIMER.c
- * @author    Comment Vivre 
- * @date      2025-11-03
- * @brief     None
- */
+    @copyright None
+    @file      TIMER.c
+    @author    Comment Vivre
+    @date      2025-11-03
+    @brief     None
+*/
 #include <Myproject.h>
 
 void Timer2_Init(void)
@@ -76,11 +76,11 @@ void Timer4_Init(void)
 }
 
 /**
-    @function     SysTick
+    @function     Sys_Tick
     @brief        任务定时器
     @date         2025-11-01
 */
-void SysTick(void)
+void Sys_Tick(void)
 {
     // 配置计数值
     SYST_ARR = 24000;

+ 65 - 5
User/Hardware/UART.c

@@ -1,18 +1,34 @@
 #include <Myproject.h>
 
+// 1 / 115200 * 640 *1000 ≈ 5.6 ms
+uint8_t xdata DebugDat[64] = {0};
+
+
+/**
+    @function     UART1_Init
+    @brief        调试串口配置
+    @date         2025-11-05
+*/
 void UART1_Init(void)
 {
+    // 使能端口 P05 P06 复用为串口
     SetBit(PH_SEL, UART1EN);
+    // 模式1 全/半双工模式
     UT_MOD1 = 0;
     UT_MOD0 = 1;
+    // 多机通讯关闭
     SM2 = 0;
+    // 允许接收
     REN = 1;
+    // 关闭中断
     ES0 = 0;
-    SetBit(IP3, PI2C_UT11);
-    ClrBit(IP3, PI2C_UT10);    // 中断优先级别3
-    // SetBit(UT_BAUD , UART_2xBAUD);  //????0-->Disable  1-->Enable
-    // default baudrate:9600-0x9b,1200-0x4E1
-    UT_BAUD = 0x9B;
+    // 优先级配置为最低
+    ClrBit(IP3, PI2C_UT11 | PI2C_UT10);
+    // 波特率配置
+    // 参考波特率 115200 --> 0x0C 9600 --> 0x9B
+    UT_BAUD = 0x0C;
+    // DMA发送配置
+    Conf_DMA(0, XDATA_UART1, DebugDat, 64);
     ES0 = 1;
 }
 
@@ -49,3 +65,47 @@ void UART2_Init(void)
 }
 
 
+
+
+/**
+    @function     Dabug_Data_Update
+    @brief        调试信息上载 !高字节在前
+    @date         2025-11-05
+*/
+void Dabug_Data_Update(void)
+{
+    static uint8_t update_delay_cnt = 0;
+    uint8_t sumcheck = 0, addcheck = 0;
+    uint16_t i = 0, flen = 0, switch_temp = 0;
+    
+    if (++ update_delay_cnt > 9)
+    {
+        update_delay_cnt = 0;
+        *(_IO uint16_t xdata *)(&DebugDat +  0) = 0xABFF;
+        *(_IO uint16_t xdata *)(&DebugDat +  2) = 0xFFF1;
+        *(_IO uint16_t xdata *)(&DebugDat +  4) = 0x3800;
+        *(_IO uint16_t xdata *)(&DebugDat +  6) = (mcCurOffset.IuOffset >> 8) | (mcCurOffset.IuOffset << 8);
+        *(_IO uint16_t xdata *)(&DebugDat +  8) = (mcCurOffset.IvOffset >> 8) | (mcCurOffset.IvOffset << 8);
+        #if 0
+        switch_temp = (uint16_t)motorControl.uPhaseCurr;
+        *(_IO uint16_t xdata *)(&DebugDat + 10) = (switch_temp >> 8) | (switch_temp << 8);
+        switch_temp = (uint16_t)motorControl.vPhaseCurr;
+        *(_IO uint16_t xdata *)(&DebugDat + 12) = (switch_temp >> 8) | (switch_temp << 8);
+        #endif
+        *(_IO uint16_t xdata *)(&DebugDat + 14) = (motorControl.DCBus >> 8) | (motorControl.DCBus << 8);
+        flen = DebugDat[4] + DebugDat[5] * 256;
+        
+        // 计算校验
+        for (i = 0; i < (flen + 6); i++)
+        {
+            sumcheck += DebugDat[i];
+            addcheck += sumcheck;
+        }
+        
+        //将计算出来的校验数据写入数据帧
+        DebugDat[flen + 6] = sumcheck;
+        DebugDat[flen + 7] = addcheck;
+        Set_DMA_Data_Package(0, DebugDat, 0x40);
+        Switch_DMA(0);
+    }
+}

+ 22 - 61
User/include/AddFunction.h

@@ -14,42 +14,32 @@ typedef struct
 
 typedef struct
 {
-    int16  mcDcbusFlt;                     // 母线电压
-    int16  mcAcbusFlt;                     // 母线电压
-    int16  mcAcbustime;                     // 母线电压
-    int16  mcDcbus;                     // 母线电压
-    int16  mcAcbus;                     // 母线电压
-    int16  mcDcbus_max_temp;                     // 母线电压最大值
-    int16  mcAcbus_max_temp;                     // 母线电压最大值
-    int16  mcDcbus_min_temp;                     // 母线电压最小值
-    int16  mcDcbus_max;                     // 母线电压最大值
-    int16  mcAcbus_max;                     // 母线电压最大值
-    int16  mcDcbus_min;                     // 母线电压最小值
-    int16  mcDcbus_chazhi;                     // 母线电压最小值
-    uint16 mcDcbus_count;
-    uint16 CtrlMode;                       // 控制模式
-    int16  Powerlpf;                       // 功率滤波后的值
-    int16  IsRef;                  // 速度闭环PI计算结果
+    int16  mcDcbusFlt;	// 母线电压
+    int16  mcDcbus;	// 母线电压
+    int16  mcDcbus_max_temp;	// 母线电压最大值
+    int16  mcDcbus_min_temp;	// 母线电压最小值
+    int16  mcDcbus_max;	// 母线电压最大值
+    int16  mcDcbus_min;	// 母线电压最小值
+    int16  mcDcbus_chazhi;	// 母线电压最小值
+    uint16 CtrlMode;	// 控制模式
+    int16  Powerlpf;	// 功率滤波后的值
+    int16  IsRef;	// 速度闭环PI计算结果
     
-    int16  mcIqref;                        // Q轴给定电流
-    int16  mcIdref;                        // Q轴给定电流
+    int16  mcIqref;	// Q轴给定电流
+    int16  mcIdref;	// Q轴给定电流
     
-    int16  IqRef;                            // Q 轴参考电流
-    int16  IdRef;                          // D 轴参考电流
-    int16  UQFlt;                                     // UQ滤波后的值
-    int16  UDFlt;                                       // UD滤波后的值
+    int16  IqRef;	// Q 轴参考电流
+    int16  IdRef;	// D 轴参考电流
+    int16  UQFlt;	// UQ滤波后的值
+    int16  UDFlt;	// UD滤波后的值
     
-    int16  QoutValue;
-    int16  SpeedFlt;                       // 当前速度滤波后的值
-    uint16 BEmf;                           // 反电动势
     uint16 IDQFlt;
-    uint16 RunStateCnt;                    // 运行状态计数
-    uint16 LoopTime;                       // 外环时间
-    uint16 IND_DEC_LoopTime;               // 外环时间
-    uint16 ChargeStep;                     // 预充电的步骤
-    uint16 State_Count;                    // 电机各个状态的时间计数
-    uint16 iiqq;                    // 电机各个状态的时间计数
-    uint16 iiqq2;                    // 电机各个状态的时间计数
+    uint16 RunStateCnt;	// 运行状态计数
+    uint16 LoopTime;	// 外环时间
+    uint16 IND_DEC_LoopTime;	// 外环时间
+    uint16 ChargeStep;	// 预充电的步骤
+    uint16 State_Count;	// 电机各个状态的时间计数
+    uint16 iiqq;	// 电机各个状态的时间计数
     int16  foc_comp_temp;
     int16  STT_FOC_THECOMP;
     uint8  CurrentAlignStatus;
@@ -65,36 +55,9 @@ typedef struct
 } MCRAMP;
 
 
-typedef struct
-{
-    int16     yajispeed;
-    int16     fengjispeed;
-    int16       dianzifakaidu;
-    int16     sitongfa;
-    uint8     RunMode1; //运行模式
-    uint8     RunMode2; //运行模式
-    uint8     dianjiare;
-} CONTROLCMDD;
-
-typedef struct
-{
-    uint8    mcIDQtime1;
-    uint8    mcIDQtime2;
-    uint16   mcIDQtime3;
-    uint32   mcIDQtime4;
-    uint8    mcPtime1;
-    uint8    mcPtime2;
-    uint16   mcPtime3;
-    uint32   mcPtime4;
-    int16    flag;
-    int16    Pflag;
-} ILIMIT;
-
 extern CurrentVarible xdata   mcCurVarible;
 extern FOCCTRL        xdata   mcFocCtrl;
 extern MCRAMP         xdata   mcSpeedRamp;
-extern ILIMIT         xdata   mcIimit;
-extern CONTROLCMDD    xdata   ConTrolCmd;
 
 extern void   Fault_Detection(void);
 extern void   PFCFault_Detection(void);
@@ -106,8 +69,6 @@ extern uint32 Abs_F32(int32 value);
 extern void   StarRampDealwith(void);
 
 extern void Current_Speed_PI(void);
-extern void IsLimit_Over_tect(void);
-extern void IsLimit_Over_deal(void);
 
 #endif
 

+ 0 - 4256
User/include/DMA.H

@@ -1,4256 +0,0 @@
-#ifndef __DMA_H__
-#define __DMA_H__
-
-#include "FU68xx_5_MCU.h"
-
-/*************************************************************************************/
-#define DMALENT 128
-typedef enum
-{
-    UART_DRAM  = 0,
-    DRAM_UART  = DMACFG0,
-    I2C_DRAM   = DMACFG1,
-    DRAM_I2C   = DMACFG1 | DMACFG0,
-    SPI_DRAM   = DMACFG2,
-    DRAM_SPI   = DMACFG2 | DMACFG0,
-    UART2_DRAM = DMACFG2 | DMACFG1,
-    DRAM_UART2 = DMACFG2 | DMACFG1 | DMACFG0
-}eType_DMA_PIPE;
-
-typedef enum
-{
-    DMA_IRQ_L1 = 0,
-    DMA_IRQ_L2 = 0x40,
-    DMA_IRQ_L3 = 0x80,
-    DMA_IRQ_L4 = 0xc0
-}eType_DMA_IRQ;
-
-typedef enum
-{
-    BIG_ENDIAN    = 0,
-    LITTLE_ENDIAN = ENDIAN
-}eType_DMA_Endian;
-
-typedef enum
-{
-    DMA_BSY = DMABSY,
-    DMA_IRQ = DMAIF
-}eType_DMA_Statu;
-
-/******************************************************************************///Function Subject
-extern void DMA0_XRAMToUART_Init(void);
-extern unsigned char* GetAddr_UARTDBG(void);
-extern void SetPipe_DMA0(eType_DMA_PIPE ePipe);
-extern void SetPipe_DMA1(eType_DMA_PIPE ePipe);
-extern void SetDataPackage_DMA0(unsigned short ulAddr, char cLen);
-extern void SetDataPackage_DMA1(unsigned short ulAddr, char cLen);
-extern void EnableRun_DMA0(void);
-extern void EnableRun_DMA1(void);
-extern bool GetStatus_DMA0(eType_DMA_Statu eStatu);
-extern bool GetStatus_DMA1(eType_DMA_Statu eStatu);
-extern void SetEndian_DMA(eType_DMA_Endian eEndian);
-extern void SetIRQ_DMA(ebool eIRQ, eType_DMA_IRQ eIP);
-extern void SetDbgMod_DMA(void);
-extern void SetDbgData_DMA(unsigned short ulAddr);
-extern void Set_DBG_DMA(uint16 DMAAddr);
-extern void Conf_DMA(uint8 DMAx, uint8 DMAPipe, uint16 DMAAddr, uint8 DMALen);
-
-#endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 17 - 1
User/include/Definition.h

@@ -80,6 +80,7 @@
 // 外环
 #define POWER_CONTROL_MODE              (0xA0)
 #define SPEED_CONTROL_MODE				(0xB0)
+
 // ------------------------------------------------------------------------------------------------------------------
 // 2.电机控制参数定义与配置
 
@@ -158,7 +159,7 @@ typedef struct
 	uint16_t PauseDelayCnt;
 	uint8_t BlinkCnt;
 }LED_Control_t;
-extern LED_Control_t ledControl;
+extern volatile LED_Control_t ledControl;
 void LED_State_Display(uint8_t Xn0);
 
 
@@ -196,10 +197,14 @@ typedef struct
 	int16_t TargetRef;
 	int16_t ActualRef;
 	int16_t ActualSpeed;
+	int16_t QOutRef;
 	
 	int16_t IQRef;
 	int16_t IDRef;
 	
+	// 保护相关
+	uint16_t BackEMF;
+	// 测试
 	int16_t uPhaseCurr;
 	int16_t vPhaseCurr;
 }Motor_Control_t;
@@ -219,6 +224,15 @@ void AMP_Init(void);
 void GPIO_Init(void);
 void PreDriver_Falut_Init(void);
 
+void Sys_Tick(void);
+// 串口初始化
+void UART1_Init(void);
+void UART2_Init(void);
+
+extern uint8_t xdata DebugDat[64];
+void Dabug_Data_Update(void);
+
+
 // 增量式硬件PI控制器初始化
 void HW_Zero_PI_Init(void);
 void HW_One_PI_Init(void);
@@ -235,6 +249,8 @@ int16_t LPF_Zero_Update(int16_t Xn1, int16_t Xn0, int16_t K);
 int16_t LPF_One_Update(int16_t Xn1, int16_t Xn0, int16_t K);
 int16_t LPF_Two_Update(int16_t Xn1, int16_t Xn0, int16_t K);
 
+
+
 // ------------------------------------------------------------------------------------------------------------------
 // 6.函数声明 变量声明
 

+ 7 - 15
User/include/Myproject.h

@@ -39,11 +39,7 @@ typedef union
     struct
     {
         uint8 CalibFlag        :1;                     // 电流校准的标志位
-        uint8 ChargeSetFlag    :1;                     // 预充电配置标志位
         uint8 AlignSetFlag     :1;                     // 预定位配置标志位
-        uint8 TailWindSetFlag  :1;                     // 顺逆风配置标志位
-        uint8 StartSetFlag     :1;                     // 启动配置标志位
-        uint8 PosiCheckSetFlag :1;                     // 位置检测配置标志位
     } SetFlag;
 }MotStaM;
 
@@ -58,19 +54,9 @@ void CMP3_Interrupt_Init(void);
 void CMP5_Init(void);
 
 
-
-
-
-
-
-
-void UART1_Init(void);
-void UART2_Init(void);
-
 void Timer2_Init(void);
 void Timer3_Init(void);
 void Timer4_Init(void);
-void SysTick(void);
 void SPI_Init(void);
 
 void WatchDogConfig(uint32 value, uint8 Status);
@@ -113,7 +99,6 @@ typedef struct
 		   
 }FieldWeakeningTypeDef;
 
-/* Exported variables ---------------------------------------------------------------------------*/
 extern FieldWeakeningTypeDef xdata mcFieldWeaken;	
 extern void GetFieldWeakenUsAndUdc_Q15(int16 Ud, int16 Uq , uint16 Dcbus);
 extern void GetFieldWeakenIdRefAndIqRef_Q15(int16 Is);
@@ -122,5 +107,12 @@ extern int16 mcFieldWeakenPI(int16 feedbackvalue, int16 referencevalue);
 extern void  FiledWeakenControl(int16 Ud, int16 Uq , uint16 Dcbusk,int16 Is);
 #endif
 
+typedef enum
+{
+    BIG_ENDIAN    = 0,
+    LITTLE_ENDIAN = ENDIAN
+}eType_DMA_Endian;
+
+extern void SetEndian_DMA(eType_DMA_Endian eEndian);
 
 #endif