Prechádzať zdrojové kódy

feat:sim_board转速环测试可行

guohui27 2 rokov pred
rodič
commit
400d40c634

+ 80 - 15
ReadMe.md

@@ -1,19 +1,84 @@
-**增加功能、发现异常、解决异常及手段、现存异常或风险**
-**请一至两日内至少提交一次,在实现一个目标过程中任何完整的变动都可以提交**
-**请获取新版本后详细阅读readme,并在推送前详细书写readme**
+[![pipeline status](http://git.midea.com/DEP-MITBG/dep-mt/fan-group/fanplatformng/badges/master/pipeline.svg)](http://git.midea.com/DEP-MITBG/dep-mt/fan-group/fanplatformng/-/commits/master) [![coverage report](http://git.midea.com/DEP-MITBG/dep-mt/fan-group/fanplatformng/badges/master/coverage.svg)](http://git.midea.com/DEP-MITBG/dep-mt/fan-group/fanplatformng/-/commits/master)
 
-## 2022年2月09日10:26:09 王志宇
-调试Throttle的采样功能,制作旋钮调速。
-Version:tmp/newhardware - fix(UnderVoltageProtect)feat(AddThrottleCmdOfSpeed)
+# 所需开发环境、工具
+|         环境          |         用途         |                               备注                               |
+| :-------------------: | :------------------: | :--------------------------------------------------------------: |
+|        IAR 8.4        |   MCU程序编译调试    |                             自行安装                             |
+|  Visual Studio 2022  |  仿真调试、单元测试  |                  自行安装,需要安装C++开发环境                   |
+| Matlab/Simulink 2020b |       仿真测试       |                             自行安装                             |
+|         xmake         |   单元测试构建调试   |       tools目录下有安装包,配合vscode xmake extension使用        |
+|        clangd         | 代码提示、转跳、补全 | 可直接使用tools目录下可执行文件,配合vscode clangd extension使用 |
+|        Python         |      自动化测试      |                     自行安装,建议使用conda                      |
+|        doxygen        |       文档生成       |                             自行安装                             |
 
-## 2022年2月11日10:22:26 王志宇
-问题:
-突然掉电会炸板子
-修复BUG:
-突然掉电的逻辑中,欠压无法正常触发,原因是由于状态机配合,会跑到stopdownhook中的三相短路,且第三层状态机会在Initpos和stop来回切换。
-已经修复,经过试验,可以掉电正常保护,还有较多的裕量进行其他操作。
+# VS code开发环境配置说明
 
-遗留问题:
-故障中很多故障被屏蔽了。尤其是 软件过流一上电就会过流 需要加处理。
-状态机修复掉电炸板子BUG后有无其他问题需要注意。
+**注:请先完成基本工具的安装**
 
+## xmake扩展安装配置(需要安装xmake,Visual Studio 2022)
+
+在VS Code扩展中搜索xmake,点击安装
+
+安装后在底部状态栏platform选择**windows**,architecture选择**x64**,mode先择**debug**
+
+点击Build即可构建项目,确认项目能够成功构建后,按下组合键"ctrl+shift+p",输入"xmake",在自动补全中选择"xmake: UpdateIntellisense",确认.vscode目录下生成了"compile_commands.json"文件
+
+## clangd扩展安装配置
+
+### **Step 1**
+
+在VS Code扩展中搜索C/C++ Extension Pack,点击安装
+
+在VS code工作区设置(按ctrl+,打开,点击工作区)中搜索"c_cpp engine",将"C_Cpp Intelli Engine"配置为
+```
+disabled
+```
+![](docs/c_cpp_config.png)
+### **Step 2**
+
+在VS Code扩展中搜索clangd,点击安装
+
+在VS code工作区设置(按ctrl+,打开,点击工作区)中搜索clangd,将Clangd:Arguments配置为
+
+```
+--compile-commands-dir=${workspaceFolder}/.vscode
+```
+![](docs/clangd_config.png)
+将Clangd:Path配置为
+```
+${workspaceFolder}/tools/clangd.exe
+```
+![](docs/clangd_config2.png)
+按下组合键"ctrl+shift+p",输入"clangd",在自动补全中选择"clangd: Restart language server"运行,底部状态栏中显示"clangd:idle"表示工作正常
+
+## 安装C++ TestMate
+
+在VS Code扩展中搜索C++ TestMate,点击安装,无需配置
+
+安装后即可在测试菜单中运行单元测试
+
+## (可选)安装todo tree
+
+在VS Code扩展中搜索todo tree,点击安装
+
+## (可选)安装Doxygen Documentation Generator
+
+在VS Code扩展中搜索Doxygen Documentation Generator,点击安装
+
+安装后输入"/**"后回车,即可自动创建doxygen注释
+
+
+## vscode 插件清单
+ms-vscode.cpptools-extension-pack
+
+matepek.vscode-catch2-test-adapter
+
+llvm-vs-code-extensions.vscode-clangd
+
+cschlosser.doxdocgen
+
+eamodio.gitlens
+
+Gruntfuggly.todo-tree
+
+tboox.xmake-vscode

+ 124 - 0
User project/1.FrameLayer/Source/app.c

@@ -6,6 +6,20 @@
 #include "TimeTask_Event.h"
 #include "InputCapture.h"
 
+#include "syspar.h"
+#include "user.h"
+#include "TimeTask_Event.h"
+#include "FSM_1st.h"
+#include "FSM_2nd.h"
+#include "can.h"
+#include "cmdgennew.h"
+#include "canAppl.h"
+#include "flash_master.h"
+#include "torquesensor.h"
+#include "power.h"
+#include "STLmain.h"
+
+
 void PeripheralInit();
 void PeripheralStart();
 
@@ -44,6 +58,43 @@ void AppInit()
 //
 //    uart_voMonitorInit();
 
+
+
+    /* Code Para Init */
+    CodeParaInit();
+    /* AssitPara Init */
+    ass_voAssitEEInit();
+    /* PowerInit */
+    power_voPowerInit();
+    /* DisplayInit */
+    display_voDisplayInit();
+#ifdef RUN_ARCH_SIM
+    cp_stFlg.SpiOffsetFirstSetFlg = 1;
+#else
+    /* Para Copy */
+    mn_voParaSet();
+    //cp_stFlg.ParaFirstSetFlg = 0;  //eeprom save test
+    if(cp_stFlg.ParaFirstSetFlg == 0)
+    {
+        flash_voParaInit();
+        /* Parameter Default Value Write*/ 
+        i2c_voDefaultWriteBuffer();
+        i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
+        /* Cycling History Info clear */ 
+        CodeHistoryParaDelete();
+        mn_voEEHistoryParaUpdate();
+        i2c_voHistoryWriteBuffer();
+        i2c_voHistoryWrite2EE(&i2c_stTXCoef, &i2c_stTXOut); 
+        /* Read EE and Update code para */
+        mn_voParaSet();
+    }
+#endif
+    
+    Can_voUpdateMC_UpcInfo();
+    /* System parameter initial */
+    mn_voSoftwareInit();
+
+
     /* 启动外设 */
 
     PeripheralStart();
@@ -55,6 +106,79 @@ void AppLoop()
     /* Uart Monitor Service */
 //    ReadFrame_Poll2();
 //    uart_voMainDec();
+
+    /* Control mode FSM reset */
+    if (!sysfsm_stFlg.blFSMRstOvrFlg)
+    {
+        RUN_FSM_voInit();
+        Switch_speed_FSMInit();
+        sysfsm_stFlg.blFSMRstOvrFlg = TRUE;
+    }
+
+    /* Control mode variable clear */
+    if (!sysfsm_stFlg.blCtrlMdVarClcOvrFlg)
+    {
+        sysfsm_stFlg.blCtrlMdVarClcOvrFlg = TRUE;
+    }
+    CanRx_Process();
+    ReadFrame_Poll2();
+    uart_voMainDec();
+
+    TimingTaskLoopServer();
+
+#ifndef RUN_ARCH_SIM
+    if(cp_stFlg.SpiOffsetFirstSetFinishFlg == TRUE && switch_flg.SysRun_Flag == FALSE && cp_stFlg.SpiOffsetFirstSetFlg==0 && FSM2nd_Run_state.state == Exit)
+    {
+        DISABLE_IRQ;
+        
+        MC_UpcInfo.stMContorlInfo.uwSaveFlg = 1;
+        cp_stFlg.SpiOffsetFirstSetFlg = 1;
+        mn_voEEUperParaUpdate();
+        /* Parameter real value write*/ 
+        i2c_voParaWriteBuffer();
+        i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
+        MC_UpcInfo.stMContorlInfo.uwSaveFlg = 0;
+
+        ENABLE_IRQ;
+    }
+
+    if (cp_stFlg.ParaUpdateFlg == TRUE)
+    {
+        mn_voParaUpdate();
+    }
+
+    if (power_stPowStateOut.powerstate == POWER_OFF)
+    {
+        if (FSM2nd_Run_state.state == Exit)
+        {
+            if (cp_stFlg.ParaHistorySaveEEFinishFlg == FALSE)
+            {
+                DISABLE_IRQ;
+                cp_stHistoryPara.uwOpenTimes++;
+                cp_stHistoryPara.ulODOTime = MC_RideLog.ODO_Time;
+                cp_stHistoryPara.ulTripSumTime = MC_RideLog.TRIP_Time;
+                mn_voEEHistoryParaUpdate();
+                i2c_voHistoryWriteBuffer();
+                i2c_voHistoryWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
+                cp_stFlg.ParaHistorySaveEEFinishFlg = TRUE;
+                flash_voWrite();
+                /* Error Log Write */
+                flash_voErrorWrite();
+                if (cp_stFlg.ParaSaveEEFlg == TRUE)
+                {
+                    mn_voEEUperParaUpdate();
+                    /* Parameter real value write*/ 
+                    i2c_voParaWriteBuffer();
+                    i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
+
+                    cp_stFlg.ParaSaveEEFinishFlg = TRUE;
+                    cp_stFlg.ParaSaveEEFlg = FALSE;
+                }
+                ENABLE_IRQ;
+            }
+        }
+    }
+#endif
 }
 
 void PeripheralInit()

+ 9 - 104
User project/1.FrameLayer/Source/main.c

@@ -58,38 +58,15 @@ int main(void) /* parasoft-suppress GJB5369-4_2_1_10 "mismatch" */
     DISABLE_IRQ; 
     /* MCU Core and GPIO configuration */
     hw_voHardwareSetup1();
-    /* Api Init*/
-    iRt_Init();
-    /* Code Para Init */
-    CodeParaInit();
-    /* AssitPara Init */
-    ass_voAssitEEInit();
     /* Peripheral configuration */
     hw_voHardwareSetup2();
-    /* PowerInit */
-    power_voPowerInit();
-    /* DisplayInit */
-    display_voDisplayInit();
-    /* Para Copy */
-    mn_voParaSet();
-    //cp_stFlg.ParaFirstSetFlg = 0;  //eeprom save test
-    if(cp_stFlg.ParaFirstSetFlg == 0)
-    {
-        flash_voParaInit();
-        /* Parameter Default Value Write*/ 
-        i2c_voDefaultWriteBuffer();
-        i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
-        /* Cycling History Info clear */ 
-        CodeHistoryParaDelete();
-        mn_voEEHistoryParaUpdate();
-        i2c_voHistoryWriteBuffer();
-        i2c_voHistoryWrite2EE(&i2c_stTXCoef, &i2c_stTXOut); 
-        /* Read EE and Update code para */
-        mn_voParaSet();
-    }
-    Can_voUpdateMC_UpcInfo();
-    /* System parameter initial */
-    mn_voSoftwareInit();
+
+    /* Api Init*/
+    iRt_Init();
+
+    /* Api App Init*/
+    AppInit();
+
     /* Timer enable */
     hw_voTimEn();
     /* Interrupts of peripherals enable*/
@@ -108,76 +85,7 @@ int main(void) /* parasoft-suppress GJB5369-4_2_1_10 "mismatch" */
     /* Enter infinite loop */
     while (1)
     {
-        /* Control mode FSM reset */
-        if (!sysfsm_stFlg.blFSMRstOvrFlg)
-        {
-            RUN_FSM_voInit();
-            Switch_speed_FSMInit();
-            sysfsm_stFlg.blFSMRstOvrFlg = TRUE;
-        }
-
-        /* Control mode variable clear */
-        if (!sysfsm_stFlg.blCtrlMdVarClcOvrFlg)
-        {
-            sysfsm_stFlg.blCtrlMdVarClcOvrFlg = TRUE;
-        }
-        CanRx_Process();
-        ReadFrame_Poll2();
-        uart_voMainDec();
-
-        TimingTaskLoopServer();
-
-        if(cp_stFlg.SpiOffsetFirstSetFinishFlg == TRUE && switch_flg.SysRun_Flag == FALSE && cp_stFlg.SpiOffsetFirstSetFlg==0 && FSM2nd_Run_state.state == Exit)
-        {
-            DISABLE_IRQ;
-            
-            MC_UpcInfo.stMContorlInfo.uwSaveFlg = 1;
-            cp_stFlg.SpiOffsetFirstSetFlg = 1;
-            mn_voEEUperParaUpdate();
-            /* Parameter real value write*/ 
-            i2c_voParaWriteBuffer();
-            i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
-            MC_UpcInfo.stMContorlInfo.uwSaveFlg = 0;
-
-            ENABLE_IRQ;
-        }
-
-        if (cp_stFlg.ParaUpdateFlg == TRUE)
-        {
-            mn_voParaUpdate();
-        }
-
-        if (power_stPowStateOut.powerstate == POWER_OFF)
-        {
-            if (FSM2nd_Run_state.state == Exit)
-            {
-                if (cp_stFlg.ParaHistorySaveEEFinishFlg == FALSE)
-                {
-                    DISABLE_IRQ;
-                    cp_stHistoryPara.uwOpenTimes++;
-                    cp_stHistoryPara.ulODOTime = MC_RideLog.ODO_Time;
-                    cp_stHistoryPara.ulTripSumTime = MC_RideLog.TRIP_Time;
-                    mn_voEEHistoryParaUpdate();
-                    i2c_voHistoryWriteBuffer();
-                    i2c_voHistoryWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
-                    cp_stFlg.ParaHistorySaveEEFinishFlg = TRUE;
-                    flash_voWrite();
-                    /* Error Log Write */
-                    flash_voErrorWrite();
-                    if (cp_stFlg.ParaSaveEEFlg == TRUE)
-                    {
-                        mn_voEEUperParaUpdate();
-                        /* Parameter real value write*/ 
-                        i2c_voParaWriteBuffer();
-                        i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
-
-                        cp_stFlg.ParaSaveEEFinishFlg = TRUE;
-                        cp_stFlg.ParaSaveEEFlg = FALSE;
-                    }
-                    ENABLE_IRQ;
-                }
-            }
-        }
+        AppLoop();
     }
 
     return 0;
@@ -643,8 +551,6 @@ void mn_voSoftwareInit(void)
 {
     /* System coefficient calculate */
     cof_voSysInit();
-    /* Api App Init*/
-    AppInit();
     /* Control Parameters init */
     mn_voMcParInit();
     /*cmd handle Initial */
@@ -656,7 +562,7 @@ void mn_voSoftwareInit(void)
     /* TempInit */
     TempInit();
     /* CANInit */
-    Can_voInitMC_Run();
+    //Can_voInitMC_Run();
     /* Alarm init */
     alm_voInit();
     alm_voCoef();
@@ -664,7 +570,6 @@ void mn_voSoftwareInit(void)
     adc_voSampleInit();
     adc_voSampleCoef(&adc_stCof);
     /* UART init */
-//    uart_voApplInit();
     uart_voMonitorInit();
 }
 

+ 25 - 1
User project/1.FrameLayer/Source/tbc.c

@@ -33,7 +33,7 @@ Revising History (ECL of this file):
 #include "canAppl.h"
 #include "alarm.h"
 #include "STLmain.h"
-
+#include "api.h"
 /*************************************************************************
  Exported Functions (N/A)
 *************************************************************************/
@@ -67,6 +67,30 @@ void tbc_voUpIsr(void)
 
     /* 1st FSM */
     FSM1st_Sys_state.Tbcup_hook();
+
+#ifdef RUN_ARCH_SIM
+    SWORD elecOmega = 0;
+    INJ_PT(INT16, uart_slSpdRefRpm, 4);
+    INJ_PT(INT16, spi_stResolverOut.uwSpiThetaPu, 0);
+    INJ_PT(INT16, elecOmega, 1);
+
+    spi_stResolverOut.swSpdFbkPu = ((SLONG)elecOmega << 15) / cof_uwWebRadps * 10;
+    
+    TEST_PT(INT, scm_uwAngParkPu, 0);
+    TEST_PT(INT, scm_swSpdRefPu, 1);
+    TEST_PT(INT, scm_stSpdFbkLpf.slY.sw.hi, 2);
+    TEST_PT(INT, uart_slSpdRefRpm, 3);
+    TEST_PT(INT, alm_unCode.all, 4);
+    TEST_PT(INT, adc_stUpOut.uwVdcLpfPu, 5);
+
+    TEST_PT(INT, scm_swIqRefPu, 6);
+    TEST_PT(INT, scm_swIqFdbLpfPu, 7);
+
+    TEST_PT(INT, adc_stDownOut.slSampIaPu, 8);
+    TEST_PT(INT, adc_stDownOut.swIaPu, 9);
+    TEST_PT(INT, adc_stUpOut.swCalibIaPu, 10);
+
+#endif
 }
 
 /***************************************************************

+ 2 - 0
User project/3.BasicFunction/Include/can.h

@@ -24,6 +24,7 @@ Revising History (ECL of this file):
 #ifdef RUN_ARCH_SIM
 #include "typedefine.h"
 
+
 #define ID_MC_BC     0x710
 #define ID_MC_TO_BMS 0x712
 #define ID_MC_TO_PBU 0x713
@@ -88,6 +89,7 @@ void     CanRx_Process(void);
 void     DataProcess(UWORD ID, UBYTE Mode, UWORD Cmd, UBYTE Data[]);
 ULONG    CRC32_Calculate(const UBYTE pData[], UWORD Length);
 
+
 #else
 
 #include "typedefine.h"

+ 2 - 1
User project/3.BasicFunction/Source/can.c

@@ -39,7 +39,8 @@ void     cd_DelChar(CAN_Buf_TypeDef *ptCANRx, UBYTE ucNum)
 {}
 void     CAN_RxData_Process(CAN_Buf_TypeDef *ptCANRx, UWORD TimeOutCnt)
 {}
-void     CanRx_Process(void);
+void     CanRx_Process(void)
+{}
 void     DataProcess(UWORD ID, UBYTE Mode, UWORD Cmd, UBYTE Data[])
 {}
 ULONG    CRC32_Calculate(const UBYTE pData[], UWORD Length)

+ 49 - 57
User project/4.BasicHardwSoftwLayer/1.BasicHardwLayer/Include/board_config.h

@@ -40,14 +40,14 @@
 /* ---------------------------------- 系统时钟 ---------------------------------- */
 
 #define HW_MCU_CLOCK_HZ 72000000UL
-#define HW_CORECLK_KHZ HW_CLK_CORE_KHZ // Internal Clock
-#define HW_AHBCLK_KHZ  HW_CLK_AHB_KHZ  // AHB Clock
-#define HW_APB1CLK_KHZ HW_CLK_APB1_KHZ // APB1 Clock
-#define HW_APB2CLK_KHZ HW_CLK_APB2_KHZ // APB2 Clock
-#define HW_TIM0CLK_KHZ HW_CLK_TIM0_KHZ // TIM0 Clock
-#define HW_TIM1CLK_KHZ HW_CLK_TIM0_KHZ /100
-#define HW_TIM2CLK_KHZ HW_CLK_TIM0_KHZ 
-#define HW_TIM5CLK_KHZ HW_CLK_TIM0_KHZ / 2 
+#define HW_CORECLK_KHZ  HW_CLK_CORE_KHZ // Internal Clock
+#define HW_AHBCLK_KHZ   HW_CLK_AHB_KHZ  // AHB Clock
+#define HW_APB1CLK_KHZ  HW_CLK_APB1_KHZ // APB1 Clock
+#define HW_APB2CLK_KHZ  HW_CLK_APB2_KHZ // APB2 Clock
+#define HW_TIM0CLK_KHZ  HW_CLK_TIM0_KHZ // TIM0 Clock
+#define HW_TIM1CLK_KHZ  HW_CLK_TIM0_KHZ / 100
+#define HW_TIM2CLK_KHZ  HW_CLK_TIM0_KHZ
+#define HW_TIM5CLK_KHZ  HW_CLK_TIM0_KHZ / 2
 
 /* --------------------------------- 电力系统参数 --------------------------------- */
 
@@ -84,7 +84,7 @@
 #define HW_RLYON_OVER_MS 200
 
 /* ---------------------------------- 输入捕获 ---------------------------------- */
-#define HW_CAP_TIM_HZ  40
+#define HW_CAP_TIM_HZ 40
 
 /* ---------------------------------- EEPROM参数 ---------------------------------- */
 
@@ -94,56 +94,48 @@
 #define HW_I2C_EE_ADDR_BLOCK3   0xA4
 #define HW_I2C_EE_ADDR_BLOCK4   0xA6
 
-
-
 /* ========================================================================== */
 /* ================================ API接口序号定义 =============================== */
 /* ========================================================================== */
-#define HW_PWMCNT_TIMER                 0
-#define HW_TBS_TIMER                    1
-#define HW_EVENT1MS_TIMER               2
-#define HW_SYSTICK_TIMER                3
-
-#define TBS_TIMER                       0
-#define SYSTICK_TIMER                   1
-
-/* ADC0 injected group*/      
-#define HW_ADC_IA_CH                       0
-#define HW_ADC_IB_CH                       1
-#define HW_ADC_IC_CH                       2 
-
-/* ADC1 injected group*/       
-#define HW_ADC_IDC_CH                      0
-
-/* ADC0 regular group*/  
-#define HW_ADC_UDC_CH                      0
-#define HW_ADC_U6V_CH                      1
-#define HW_ADC_U5V_CH                      2
-#define HW_ADC_PCBTEMP_CH                  3
-#define HW_ADC_MOTTEMP_CH                  4
-#define HW_ADC_U12V_CH                     5
-#define HW_ADC_THRO_CH                     6
-#define HW_ADC_TORQ_CH                     7
-  
+#define HW_TBC_HALF_UPDATE_TIMER 0
+#define HW_TBS_TIMER             1
+#define HW_EVENT1MS_TIMER        2
+#define HW_SYSTICK_TIMER         3
+
+/* ADC0 injected group*/
+#define HW_ADC_IA_CH 0
+#define HW_ADC_IB_CH 1
+#define HW_ADC_IC_CH 2
+
+/* ADC1 injected group*/
+#define HW_ADC_IDC_CH 0
+
+/* ADC0 regular group*/
+#define HW_ADC_UDC_CH     0
+#define HW_ADC_U6V_CH     1
+#define HW_ADC_U5V_CH     2
+#define HW_ADC_PCBTEMP_CH 3
+#define HW_ADC_MOTTEMP_CH 4
+#define HW_ADC_U12V_CH    5
+#define HW_ADC_THRO_CH    6
+#define HW_ADC_TORQ_CH    7
+
 /* GPIO*/
-#define HW_GPIO_POWERSTATE_PIN             0  ///> GPIOC  PIN0
-#define HW_GPIO_POWERLOCK_PIN              1  ///> GPIOC  PIN1 
-#define HW_GPIO_BLIG_EN_PIN                2  ///> GPIOC  PIN7 
-#define HW_GPIO_BLIG_6V_12V_EN_PIN         3  ///> GPIOC  PIN8 
-#define HW_GPIO_FLIG_EN_PIN                4  ///> GPIOC  PIN15 
-#define HW_GPIO_FLIG_6V_12V_EN_PIN         5  ///> GPIOC  PIN13
-#define HW_GPIO_BREAK_PIN                  6  ///> GPIOC  PIN14 
-#define HW_GPIO_UARTTX_PIN                 7  ///> GPIOC  PIN10 
-#define HW_GPIO_UARTRX_PIN                 8  ///> GPIOC  PIN11 
-#define HW_GPIO_SPICS_PIN                  9  ///> GPIOD  PIN2
-#define HW_GPIO_CANTX_PIN                  10 ///> GPIOB  PIN9 
-#define HW_GPIO_CANRX_PIN                  11 ///> GPIOB  PIN8 
-#define HW_GPIO_CANSTB_PIN                 12 ///> GPIOA  PIN12 
-#define HW_GPIO_I2CWP_PIN                  13 ///> GPIOC  PIN12 
-#define HW_GPIO_CADDIR_PIN                 14 ///> GPIOB  PIN2
-#define HW_GPIO_CADENCE_PIN                15 ///> GPIOB  PIN10
-
-/* TIMER */
-#define HW_TIMER_CANDANCE_PIN             0  ///> TIMER1  CH2
-#define HW_TIMER_BIKESPD_PIN              1  ///> TIMER1  CH3
+#define HW_GPIO_POWERSTATE_PIN     0  ///> GPIOC  PIN0
+#define HW_GPIO_POWERLOCK_PIN      1  ///> GPIOC  PIN1
+#define HW_GPIO_BLIG_EN_PIN        2  ///> GPIOC  PIN7
+#define HW_GPIO_BLIG_6V_12V_EN_PIN 3  ///> GPIOC  PIN8
+#define HW_GPIO_FLIG_EN_PIN        4  ///> GPIOC  PIN15
+#define HW_GPIO_FLIG_6V_12V_EN_PIN 5  ///> GPIOC  PIN13
+#define HW_GPIO_BREAK_PIN          6  ///> GPIOC  PIN14
+#define HW_GPIO_UARTTX_PIN         7  ///> GPIOC  PIN10
+#define HW_GPIO_UARTRX_PIN         8  ///> GPIOC  PIN11
+#define HW_GPIO_SPICS_PIN          9  ///> GPIOD  PIN2
+#define HW_GPIO_CANTX_PIN          10 ///> GPIOB  PIN9
+#define HW_GPIO_CANRX_PIN          11 ///> GPIOB  PIN8
+#define HW_GPIO_CANSTB_PIN         12 ///> GPIOA  PIN12
+#define HW_GPIO_I2CWP_PIN          13 ///> GPIOC  PIN12
+#define HW_GPIO_CADDIR_PIN         14 ///> GPIOB  PIN2
+#define HW_GPIO_CADENCE_PIN        15 ///> GPIOB  PIN10
+
 /* Api Device Index Definations */

+ 0 - 3
User project/4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/user.h

@@ -462,9 +462,6 @@ Update Time
                       Deadband Compensation parameters define
 ==============================================================================*/
 /* Api Device Index Definations */
-#define TBS_TIMER                       0
-#define SYSTICK_TIMER                   1
-      
 #define ADC_IA_CH                       0
 #define ADC_IB_CH                       1
 #define ADC_IC_CH                       2 

+ 1 - 1
User project/4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Source/CodePara.c

@@ -41,7 +41,7 @@ void CodeParaInit(void)
     UWORD i;
 #if ((MOTOR_ID_SEL == MOTOR_WELLING_CITY_36V) || (MOTOR_ID_SEL == MOTOR_WELLING_CITY_48V))
 {
-    cp_stFlg.RunModelSelect = CityBIKE; //CityBIKE;//ClZLOOP; 
+    cp_stFlg.RunModelSelect = ClZLOOP; //CityBIKE;//ClZLOOP; 
     cp_stFlg.RotateDirectionSelect = BackwardRotate;
 }
 #elif ((MOTOR_ID_SEL == MOTOR_WELLING_MTB_36V) || (MOTOR_ID_SEL == MOTOR_WELLING_MTB_48V))

+ 2 - 2
User project/5.Api_rt/api_rt_pwm.c

@@ -80,12 +80,12 @@ void iRtPwm_UpdateIsr(uint8_t devIndex)
         else
         {               
             /* Reset Timer6 counts*/
-            iTimer_Reset(HW_PWMCNT_TIMER); 
+            iTimer_Reset(HW_TBC_HALF_UPDATE_TIMER); 
             /* TBC Down interrupt */
             iRtPwm_CountMaxIsr(devIndex);
             
             /* Timing management, refer to the Software design description for details */
-            while ((iTimer_GetCount(HW_PWMCNT_TIMER) < HW_INIT_PWM_PERIOD) && (ulOvTimeCnt < 10000))
+            while ((iTimer_GetCount(HW_TBC_HALF_UPDATE_TIMER) < HW_INIT_PWM_PERIOD) && (ulOvTimeCnt < 10000))
             {
                 ulOvTimeCnt++;
             };

+ 2 - 2
User project/5.Api_rt/api_rt_timer.c

@@ -12,8 +12,8 @@ ApiRtTimer_Handle Timers[GENERAL_TIMER_COUNT + 1];
 
 void iRtTimer_Init()
 {
-    Timers[HW_PWMCNT_TIMER].TimerBase      = TIMER6;
-    Timers[HW_PWMCNT_TIMER].TickISR.Enable = 0;
+    Timers[HW_TBC_HALF_UPDATE_TIMER].TimerBase      = TIMER6;
+    Timers[HW_TBC_HALF_UPDATE_TIMER].TickISR.Enable = 0;
     
     Timers[HW_TBS_TIMER].TimerBase      = TIMER3;
     Timers[HW_TBS_TIMER].TickISR.Enable = 0;

BIN
tests/sim/FanPlatformAuto.slx


+ 14 - 9
tests/sim/init_model.m

@@ -1,17 +1,21 @@
+
 % Motor Parameter 
-Ls=0.17050;
-Ld=0.17050;
-Lq=0.21500;
-Rs=18.25;
+Ls=0.0000765;
+Ld=0.0000765;
+Lq=0.000102;
+Rs=0.015;
 Ra=Rs;
-P=5;
-Psif=0.31344;
-J=2620e-7;
+P=7;
+Psif=0.0048;
+J=2500e-7;
 InerRate=1;
 
 % AC Voltage 
 Vac=310;
 
+% DC Voltage 
+Vdc=38;
+
 % Control Speed 
 Rpm=1620;
 Freq=Rpm/60*P;
@@ -19,8 +23,9 @@ w=Rpm/60*2*pi;
 we=Freq*2*pi;
 
 % Sample Parameter 
-MaxIphase = 8.25;
-MaxVdc = 641.9;
+MaxIphase = 140; % Code = 156
+MaxIdc = 95.24;
+MaxVdc = 60.5;
 
 load('injection_dtype.mat');
 

+ 1 - 1
tests/sim/sim_board/api_rt/api_rt_adc.h

@@ -9,7 +9,7 @@
 extern "C" {
 #endif // __cplusplus
 
-#define API_RT_ADC_DEVICE_COUNT 1
+#define API_RT_ADC_DEVICE_COUNT 3
 #define API_RT_ADC_RESULT_SIZE  16
 
 typedef struct

+ 13 - 0
tests/sim/sim_board/api_rt/api_rt_gpio.c

@@ -11,6 +11,19 @@ void iRtGpioLow_Init()
     Gpios[0].GpioBase = &ledPin;
     Gpios[1].GpioBase = &capPin;
     Gpios[2].GpioBase = &ledPin;
+    Gpios[3].GpioBase = &ledPin;
+    Gpios[4].GpioBase = &ledPin;
+    Gpios[5].GpioBase = &ledPin;
+    Gpios[6].GpioBase = &ledPin;
+    Gpios[7].GpioBase = &ledPin;
+    Gpios[8].GpioBase = &ledPin;
+    Gpios[9].GpioBase = &ledPin;
+    Gpios[10].GpioBase = &ledPin;
+    Gpios[11].GpioBase = &ledPin;
+    Gpios[12].GpioBase = &ledPin;
+    Gpios[13].GpioBase = &ledPin;
+    Gpios[14].GpioBase = &ledPin;
+    Gpios[15].GpioBase = &ledPin;
 }
 
 void iGpio_SetMode(uint16_t pin, ApiGpio_PinMode mode)

+ 1 - 1
tests/sim/sim_board/api_rt/api_rt_gpio.h

@@ -9,7 +9,7 @@
 extern "C" {
 #endif // __cplusplus
 
-#define GPIO_PIN_COUNT 3
+#define GPIO_PIN_COUNT 16
 
 typedef struct
 {

+ 5 - 5
tests/sim/sim_board/api_rt/api_rt_pwm.c

@@ -15,7 +15,7 @@ void iRtPwm_AdcEocIsr()
         Adcs[1].Results[HW_ADC_IA_CH] = Pwms[0].AdcTriggerAdcBase->SamplingOutput[0];
         Adcs[1].Results[HW_ADC_IB_CH] = Pwms[0].AdcTriggerAdcBase->SamplingOutput[1];
         Adcs[1].Results[HW_ADC_IC_CH] = Pwms[0].AdcTriggerAdcBase->SamplingOutput[2];
-        Pwms[0].AdcTriggerIndex += 3;
+        Pwms[0].AdcTriggerIndex += 1;
         Pwms[0].PwmPrdCnt = 1;
         if (Pwms[0].AdcTriggerIndex < Pwms[0].AdcTriggerUpCounts)
         {
@@ -34,7 +34,7 @@ void iRtPwm_AdcEocIsr()
         Pwms[0].PwmPrdCnt = 0;
         if (Pwms[0].AdcTriggerIndex < Pwms[0].AdcTriggerDownCounts)
         {
-            Pwms[0].AdcTriggerTimerBase->CompareReloadInput = Pwms[0].AdcTriggerDownTicks[1];  ///< 设定Rdson采样触发值
+            //Pwms[0].AdcTriggerTimerBase->CompareReloadInput = Pwms[0].AdcTriggerUpTicks[1];  
         }
         else
         {
@@ -73,7 +73,7 @@ void iRtPwm_Init()
     Pwms[0].AdcTriggerTimerBase                = &sampleTrigTimer2;
     Pwms[0].AdcTriggerAdcBase                  = &adc2;
     Pwms[0].AdcTriggerIndex                    = 0;
-    Pwms[0].AdcTriggerUpCounts                 = 1;
+    Pwms[0].AdcTriggerUpCounts                 = 2;
     Pwms[0].AdcTriggerDownCounts               = 0;
     Pwms[0].AdcTriggerUpTicks[0]               = HW_INIT_HHPWM_PERIOD;
     Pwms[0].AdcTriggerDownTicks[0]             = 0;
@@ -423,7 +423,7 @@ void iRtPwm_UpdateIsr()
             if (Pwms[0].MultiSyncEnable == 1 && Pwms[0].AdcTriggerUpCounts > 0)
             {
                 Pwms[0].AdcTriggerIndex                         = 0;
-                Pwms[0].AdcTriggerTimerBase->CompareReloadInput = Pwms[0].AdcTriggerUpTicks[0];
+                Pwms[0].AdcTriggerTimerBase->CompareReloadInput = Pwms[0].AdcTriggerUpTicks[1];  ///< 设定Rdson采样触发值
                 Pwms[0].AdcTriggerAdcBase->Base.Enable          = 1;
             }
             if (Pwms[0].CountZeroISR.Enable && Pwms[0].CountZeroISR.Action != 0)
@@ -449,7 +449,7 @@ void iRtPwm_UpdateIsr()
             if (Pwms[0].MultiSyncEnable == 1 && Pwms[0].AdcTriggerDownCounts > 0)
             {
                 Pwms[0].AdcTriggerIndex                         = 0;
-                Pwms[0].AdcTriggerTimerBase->CompareReloadInput = Pwms[0].AdcTriggerDownTicks[0];
+                //Pwms[0].AdcTriggerTimerBase->CompareReloadInput = Pwms[0].AdcTriggerDownTicks[0];
                 Pwms[0].AdcTriggerAdcBase->Base.Enable          = 1;
             }
             if (Pwms[0].CountMaxISR.Enable && Pwms[0].CountMaxISR.Action != 0)

+ 5 - 4
tests/sim/sim_board/api_rt/api_rt_timer.c

@@ -7,14 +7,15 @@ ApiRtTimer_Handle Timers[GENERAL_TIMER_COUNT + 1];
 
 void iRtTimer_Init()
 {
-    Timers[0].TimerBase = &tbsTick;
-
-    Timers[1].TimerBase = &sysTick;
+    Timers[HW_TBC_HALF_UPDATE_TIMER].TimerBase = &tbcHalfUpdateTick;
+    Timers[HW_TBS_TIMER].TimerBase = &tbsTick;
+    Timers[HW_EVENT1MS_TIMER].TimerBase = &event1MsTick;
+    Timers[HW_SYSTICK_TIMER].TimerBase = &sysTick;
 }
 
 uint32_t iTimer_GetClock(uint8_t devIndex)
 {
-    return 64000000UL;
+    return 72000000UL;
 }
 
 void iTimer_Start(uint8_t devIndex)

+ 1 - 1
tests/sim/sim_board/api_rt/api_rt_timer.h

@@ -10,7 +10,7 @@
 extern "C" {
 #endif // __cplusplus
 
-#define GENERAL_TIMER_COUNT     1
+#define GENERAL_TIMER_COUNT     3
 #define SYSTEM_TICK_TIMER_INDEX GENERAL_TIMER_COUNT
 
 typedef struct

+ 2 - 0
tests/sim/sim_board/include/mcu_instance.h

@@ -11,6 +11,8 @@ extern struct Sim_Gpio      capPin;
 extern struct Sim_Gpio      breakPin;
 extern struct Sim_Timer     sysTick;
 extern struct Sim_Timer     tbsTick;
+extern struct Sim_Timer     tbcHalfUpdateTick;
+extern struct Sim_Timer     event1MsTick;
 extern struct Sim_Timer     sampleTrigTimer;
 extern struct Sim_Timer     sampleTrigTimer2;
 extern struct Sim_DMA       pwmLoadDma;

+ 24 - 7
tests/sim/sim_board/source/board.c

@@ -38,6 +38,8 @@ void BoardInit(double ts)
     Sim_GpioInit(&breakPin);
     Sim_TimerInit(&sysTick);
     Sim_TimerInit(&tbsTick);
+    Sim_TimerInit(&tbcHalfUpdateTick);
+    Sim_TimerInit(&event1MsTick);
     Sim_TimerInit(&sampleTrigTimer);
     Sim_TimerInit(&sampleTrigTimer2);
     Sim_DMAInit(&pwmLoadDma);
@@ -52,6 +54,8 @@ void BoardInit(double ts)
     scheduler.Register(&scheduler, &breakPin.Base);
     scheduler.Register(&scheduler, &sysTick.Base);
     scheduler.Register(&scheduler, &tbsTick.Base);
+    scheduler.Register(&scheduler, &tbcHalfUpdateTick.Base);
+    scheduler.Register(&scheduler, &event1MsTick.Base);
     scheduler.Register(&scheduler, &sampleTrigTimer.Base);
     scheduler.Register(&scheduler, &sampleTrigTimer2.Base);
     scheduler.Register(&scheduler, &pwmLoadDma.Base);
@@ -109,26 +113,39 @@ void BoardInit(double ts)
     sampleTrigTimer2._CompareValue        = TICK_TRANS(HW_SAMPLE_BEFORE_UPDATE_CNTS);
     sampleTrigTimer2.CompareReloadInput   = TICK_TRANS(HW_SAMPLE_BEFORE_UPDATE_CNTS);
     scheduler.TriggerBind(&scheduler, &sampleTrigTimer2.Base, TimerTriggerOutCCIF, &adc2.Base, AdcTriggerInSample);
-    sampleTrigTimer2.Base.Enable = 0;
+    // sampleTrigTimer2.Base.Enable = 0;
 
     /* 采样触发定时器配置3 */
-    scheduler.TriggerBind(&scheduler, &sampleTrigTimer2.Base, TimerTriggerOutCCIF, &adc3.Base, AdcTriggerInSample);
+    //scheduler.TriggerBind(&scheduler, &sampleTrigTimer2.Base, TimerTriggerOutCCIF, &adc3.Base, AdcTriggerInSample);
+    
+    /* Tbc半更新定时器配置 */
+    tbcHalfUpdateTick.CountMode             = TimerEdgeAlignedMode;
+    tbcHalfUpdateTick.CountDir              = TimerCountUp;
+    tbcHalfUpdateTick.PreloadEnable         = 0;
+    tbcHalfUpdateTick.CountReloadInput      = TICK_TRANS(HW_INIT_PWM_PERIOD - 1);
 
     /* Tbs定时器配置 */
     tbsTick.CountMode             = TimerEdgeAlignedMode;
-    tbsTick.CountDir              = TimerCountDown;
+    tbsTick.CountDir              = TimerCountUp;
     tbsTick.PreloadEnable         = 0;
     tbsTick.CountReloadInput      = TICK_TRANS(HW_TIM_CLOCK_HZ / HW_INIT_FTBS_HZ - 1);
     tbsTick.UpdateInterruptEnable = 1;
-    scheduler.InterruptBind(&scheduler, &tbsTick.Base, TimerInterruptOutUIF, TbsTimerIsr);
-
+    //scheduler.InterruptBind(&scheduler, &tbsTick.Base, TimerInterruptOutUIF, TbsTimerIsr);
+
+    /* Event1Ms定时器配置 */
+    event1MsTick.CountMode             = TimerEdgeAlignedMode;
+    event1MsTick.CountDir              = TimerCountUp;
+    event1MsTick.PreloadEnable         = 0;
+    event1MsTick.CountReloadInput      = TICK_TRANS(HW_TIM_CLOCK_HZ / 1000 - 1);
+    event1MsTick.UpdateInterruptEnable = 1;
+    
     /* SysTick定时器配置 */
     sysTick.CountMode             = TimerEdgeAlignedMode;
     sysTick.CountDir              = TimerCountDown;
     sysTick.PreloadEnable         = 0;
     sysTick.UpdateInterruptEnable = 1;
     sysTick.CountReloadInput      = TICK_TRANS(HW_TIM_CLOCK_HZ / 1000);
-    scheduler.InterruptBind(&scheduler, &sysTick.Base, TimerInterruptOutUIF, SystickIsr);
+    //scheduler.InterruptBind(&scheduler, &sysTick.Base, TimerInterruptOutUIF, SystickIsr);
 
     /* Capture配置 */
     inputCap.CountMax                   = TICK_TRANS(HW_TIM_CLOCK_HZ / 100 / HW_CAP_TIM_HZ);
@@ -139,7 +156,7 @@ void BoardInit(double ts)
     inputCap.Channel[3].Edge            = CaptureRisingEdge;
     inputCap.Channel[3].Enable          = 1;
     inputCap.Channel[3].InterruptEnable = 1;
-    scheduler.InterruptBind(&scheduler, &inputCap.Base, CaptureInterruptOut1, CaptureIsr);
+    //scheduler.InterruptBind(&scheduler, &inputCap.Base, CaptureInterruptOut1, CaptureIsr);
 
     scheduler.AppTimeSlice.Add(&scheduler.AppTimeSlice, 1, 1, 0, BackgroundTask);
 

+ 2 - 0
tests/sim/sim_board/source/mcu_instance.c

@@ -10,6 +10,8 @@ struct Sim_Gpio      capPin;
 struct Sim_Gpio      breakPin;
 struct Sim_Timer     sysTick;
 struct Sim_Timer     tbsTick;
+struct Sim_Timer     tbcHalfUpdateTick;
+struct Sim_Timer     event1MsTick;
 struct Sim_Timer     sampleTrigTimer;
 struct Sim_Timer     sampleTrigTimer2;
 struct Sim_DMA       pwmLoadDma;

+ 1 - 1
tests/sim/sim_board/source/sfun_wrapper.c

@@ -7,7 +7,7 @@ void McuInit(double ts)
 {
     BoardInit(ts);
 }
-
+int16_t cnt;
 void McuRun(const double *ain, const int32_t *din, const injection_dtype *ctrl, double *aout, int *dout, double *watchOut)
 {
     /* ADC模块输入 */