Просмотр исходного кода

电流采样

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 5 лет назад
Родитель
Сommit
bb24f30596

+ 2 - 1
Application/FOC/foc.c

@@ -6,6 +6,7 @@
 #include "foc/park_clark.h"
 #include "foc/svpwm.h"
 #include "foc/foc_task.h"
+#include "foc/phase_current.h"
 
 static void charge_cap_timer_handler(timer_t *t);
 static u32 foc_main_task_handler(void);
@@ -125,7 +126,7 @@ void foc_brake_handler(void) {
 }
 
 void foc_pwm_up_handler(void){
-
+	phase_current_adc_triger(&m_foc.current_samp);
 }
 
 void hall_detect_handler(void) {

+ 6 - 1
Application/FOC/foc_task.c

@@ -3,6 +3,7 @@
 #include "foc_task.h"
 #include "phase_current.h"
 #include "park_clark.h"
+#include "hall_speed.h"
 #include "svpwm.h"
 
 void foc_task(motor_foc_t *foc){
@@ -10,11 +11,15 @@ void foc_task(motor_foc_t *foc){
 	alpha_beta_t sample_ab, pwm_ab;
 	dq_t         sample_dq, v_dq;
 	phase_time_t         phase_time;
+	foc->motor_s.theta = hall_get_theta();
+	if (foc->override_p.is_override_theta) {
+		foc->motor_s.theta = foc->override_p.theta;
+	}
 	get_phase_current(c_sample);
 	Clark(c_sample->ia, c_sample->ib, c_sample->ic, &sample_ab);
 	Park(&sample_ab, foc->motor_s.theta, &sample_dq);
 
-	if (foc->mode == FOC_MODE_I_DQ || foc->mode == FOC_MODE_FULL_PI) {
+	if (foc->mode == FOC_MODE_PI_DQ || foc->mode == FOC_MODE_PI_FULL) {
 		v_dq.d = pi_control(&foc->PI_id, foc->dq_ref.d - sample_dq.d);
 		v_dq.q = pi_control(&foc->PI_iq, foc->dq_ref.q - sample_dq.q);
 	}else {

+ 14 - 3
Application/FOC/foc_type.h

@@ -31,6 +31,9 @@ typedef struct _phase_time {
 	u32 A;
 	u32 B;
 	u32 C;
+	u32 low;
+	u32 midle;
+	u32 high;
 }phase_time_t; //三相pwn的duty cnt
 
 typedef enum {
@@ -42,9 +45,9 @@ typedef enum {
 
 typedef enum {
 	FOC_MODE_OPEN_LOOP, //开环
-	FOC_MODE_I_DQ,      //只电流环
-	FOC_MODE_SPEED,     //只速度环
-	FOC_MODE_FULL_PI         //速度,电流环都有
+	FOC_MODE_PI_DQ,      //只电流环
+	FOC_MODE_PI_SPEED,     //只速度环
+	FOC_MODE_PI_FULL         //速度,电流环都有
 }foc_mode_t;
 
 typedef struct current_sample {
@@ -58,6 +61,13 @@ typedef struct current_sample {
 	u32   adc_inject_flags;
 }current_samp_t;
 
+typedef struct _override {
+	bool is_override_theta;
+	float theta;
+	bool is_override_v_dq;
+	dq_t v_dq;
+}override_param_t;
+
 typedef struct foc_s {
 	alpha_beta_t alpha_beta;
 	current_samp_t current_samp; /* 三相电流采样 */
@@ -74,6 +84,7 @@ typedef struct foc_s {
 	PI_ctrl_t    PI_speed;
 	volatile foc_state_t state;
 	volatile foc_mode_t mode;
+	override_param_t override_p;
 	bool gate_output;
 	u16  hall_table[8];
 }motor_foc_t;

+ 11 - 0
Application/FOC/hall_speed.c

@@ -0,0 +1,11 @@
+#include "hal/hal.h"
+#include "hall_speed.h"
+
+float hall_get_theta(void){
+	return 0.0f;
+}
+float hall_get_speed(void) {
+	return 0.0f;
+}
+
+

+ 8 - 0
Application/FOC/hall_speed.h

@@ -0,0 +1,8 @@
+#ifndef _HALL_SPEED_H__
+#define _HALL_SPEED_H__
+
+float hall_get_theta(void); //return degree
+float hall_get_speed(void); //return rpm
+
+#endif /* _HALL_SPEED_H__ */
+

+ 23 - 1
Application/FOC/phase_current.c

@@ -37,6 +37,28 @@ void get_phase_current(current_samp_t *cs){
 
 
 u32 get_phase_sample_point(current_samp_t *cs, phase_time_t *time, u8 sector){
+	u32 low_side_low_duty = FOC_PWM_period/2 - time->low;	
 	cs->sector = sector;
-	return 0;
+	if (low_side_low_duty > (TDead + MAX(TRise, TNoise))) {
+		cs->sector = SECTOR_5;
+		return FOC_PWM_period/2 - 1;
+	}
+	u32 low_side_mid_duty = FOC_PWM_period/2 - time->midle;
+	u32 delta_duty = low_side_mid_duty - low_side_low_duty;
+	if (delta_duty > low_side_low_duty * 2) {
+		return time->low - TADC;
+	}
+	u32 sample_point = time->low + (TDead + MAX(TRise, TNoise));
+	if (sample_point >= FOC_PWM_period/2) {
+         /* ADC trigger edge must be changed from positive to negative */
+        cs->adc_inject_flags= (uint16_t) LL_ADC_INJ_TRIG_EXT_FALLING;
+        sample_point = ( 2u * FOC_PWM_period / 2 ) - sample_point - (uint16_t) 1;		
+	}
+	return sample_point;
 }
+
+void phase_current_adc_triger(current_samp_t *cs){
+	HAL_ADC1_Inject_Config(cs->sector, cs->adc_inject_flags);
+	cs->adc_inject_flags = LL_ADC_INJ_TRIG_EXT_RISING;
+}
+

+ 1 - 1
Application/FOC/phase_current.h

@@ -4,6 +4,6 @@
 
 void get_phase_current(current_samp_t *cs);
 u32 get_phase_sample_point(current_samp_t *cs, phase_time_t *time, u8 sector);
-
+void phase_current_adc_triger(current_samp_t *cs);
 #endif /* _PHASE_CURRENT_H__ */
 

+ 23 - 6
Application/FOC/svpwm.c

@@ -40,7 +40,8 @@ void svpwm(alpha_beta_t *alpha_beta, float vbus, uint32_t PWM_half_period, phase
 		}
 	}
 	// PWM timings
-	uint32_t tA, tB, tC;
+	u32 tA, tB, tC;
+	u32 low, midle, high;
 	switch (sector) {
 		// sector 1-2
 	case SECTOR_1: {
@@ -52,6 +53,9 @@ void svpwm(alpha_beta_t *alpha_beta, float vbus, uint32_t PWM_half_period, phase
 		tA = (PWM_half_period - t1 - t2) / 2;
 		tB = tA + t1;
 		tC = tB + t2;
+		low = tA;
+        midle = tB;
+        high = tC;
 		break;
 	}
 	// sector 2-3
@@ -64,7 +68,9 @@ void svpwm(alpha_beta_t *alpha_beta, float vbus, uint32_t PWM_half_period, phase
 		tB = (PWM_half_period - t2 - t3) / 2;
 		tA = tB + t3;
 		tC = tA + t2;
-	
+		low = tB;
+        midle = tA;
+        high = tC;	
 		break;
 	}
 	
@@ -78,7 +84,9 @@ void svpwm(alpha_beta_t *alpha_beta, float vbus, uint32_t PWM_half_period, phase
 		tB = (PWM_half_period - t3 - t4) / 2;
 		tC = tB + t3;
 		tA = tC + t4;
-	
+		low = tB;
+        midle = tC;
+        high = tA;
 		break;
 	}
 	
@@ -92,7 +100,9 @@ void svpwm(alpha_beta_t *alpha_beta, float vbus, uint32_t PWM_half_period, phase
 		tC = (PWM_half_period - t4 - t5) / 2;
 		tB = tC + t5;
 		tA = tB + t4;
-	
+		low = tC;
+        midle = tB;
+        high = tA;	
 		break;
 	}
 	
@@ -106,7 +116,9 @@ void svpwm(alpha_beta_t *alpha_beta, float vbus, uint32_t PWM_half_period, phase
 		tC = (PWM_half_period - t5 - t6) / 2;
 		tA = tC + t5;
 		tB = tA + t6;
-	
+		low = tC;
+        midle = tA;
+        high = tB;	
 		break;
 	}
 	
@@ -120,7 +132,9 @@ void svpwm(alpha_beta_t *alpha_beta, float vbus, uint32_t PWM_half_period, phase
 		tA = (PWM_half_period - t6 - t1) / 2;
 		tC = tA + t1;
 		tB = tC + t6;
-	
+		low = tA;
+        midle = tC;
+        high = tB;	
 		break;
 	}
 	}
@@ -128,6 +142,9 @@ void svpwm(alpha_beta_t *alpha_beta, float vbus, uint32_t PWM_half_period, phase
 	phase_out->A = tA;
 	phase_out->B = tB;
 	phase_out->C = tC;
+	phase_out->low = low;
+	phase_out->midle = midle;
+	phase_out->high = high;
 	*sector_out = sector;
 }
 

+ 4 - 1
Application/Hal/adc.h

@@ -2,10 +2,11 @@
 #define _ADC_H__
 #include "hal/hal.h"
 #include "stm32f3xx_ll_adc.h"
+#include "stm32f3xx_ll_tim.h"
 #include "libs/types.h"
 typedef struct _R3_f3_1_adc_config {
   	ADC_TypeDef * ADCx;            /*!< First ADC peripheral to be used.*/
-  
+  	TIM_TypeDef * TIMx;  //which triger the staring of the adc
   	u32 volatile * ADCDataReg1[6]; /*!< Contains the Address of ADC read value for one phase
                                          and all the 6 sectors */
   	u32 volatile * ADCDataReg2[6]; /*!< Contains the Address of ADC read value for one phase
@@ -15,6 +16,7 @@ typedef struct _R3_f3_1_adc_config {
 
 static const R3_F30x_8_ADC_Config_t adc_config = {
 	.ADCx = ADC1,
+	.TIMx = TIM1,
 	.ADCConfig = {
 				CURRENT_V_ADC_CHANNAL<<ADC_JSQR_JSQ1_Pos | CURRENT_W_ADC_CHANNAL<<ADC_JSQR_JSQ2_Pos | 1<<ADC_JSQR_JL_Pos | (LL_ADC_INJ_TRIG_EXT_TIM1_TRGO & ~ADC_INJ_TRIG_EXT_EDGE_DEFAULT),
 				CURRENT_U_ADC_CHANNAL<<ADC_JSQR_JSQ1_Pos | CURRENT_W_ADC_CHANNAL<<ADC_JSQR_JSQ2_Pos | 1<<ADC_JSQR_JL_Pos | (LL_ADC_INJ_TRIG_EXT_TIM1_TRGO & ~ADC_INJ_TRIG_EXT_EDGE_DEFAULT),
@@ -45,6 +47,7 @@ static const R3_F30x_8_ADC_Config_t adc_config = {
 void HAL_ADC1_Init(void);
 void __inline HAL_ADC1_Inject_Config(u8 sector, u32 inject_flags) {
 	adc_config.ADCx->JSQR = adc_config.ADCConfig[sector] | inject_flags;
+	MODIFY_REG(adc_config.TIMx->CR2, TIM_CR2_MMS, LL_TIM_TRGO_OC4REF);
 }
 
 void __inline HAL_ADC1_Inject_Read(u8 sector, u32 *v1, u32 *v2) {

+ 1 - 1
Application/Hal/hal.h

@@ -68,7 +68,7 @@
 #define TDead NS_2_TCLK(HW_DEAD_TIME_NS)/* 死区时间 */ 
 #define TRise NS_2_TCLK(HW_RISE_TIME_NS)/* MOS 开关时间*/
 #define TNoise NS_2_TCLK(HW_NOISE_TIME_NS)/* MOS开关引入的开关噪声时间 */
-#define TADC   ((uint16_t)((ADC_TRIG_CONV_LATENCY_CYCLES + ADC_SAMPLING_CYCLES) * TIM_CLOCK_MHz) / ADC_CLOCK_MHz + 1u)/* ADC 采样时间 */
+#define TADC   ((uint16_t)((ADC_TRIG_CONV_LATENCY_CYCLES + ADC_SAMPLING_CYCLES) * 2 * TIM_CLOCK_MHz) / ADC_CLOCK_MHz + 1u)/* ADC 采样时间 */
 
 void Error_Handler(void);
 void SystemClock_Config(void);

+ 46 - 34
Project/Motor_PMSM.uvoptx

@@ -333,6 +333,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>2</GroupNumber>
+      <FileNumber>7</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Application\FOC\hall_speed.c</PathWithFileName>
+      <FilenameWithoutPath>hall_speed.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -343,7 +355,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>7</FileNumber>
+      <FileNumber>8</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -355,7 +367,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>8</FileNumber>
+      <FileNumber>9</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -375,7 +387,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>9</FileNumber>
+      <FileNumber>10</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -387,7 +399,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>10</FileNumber>
+      <FileNumber>11</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -399,7 +411,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>11</FileNumber>
+      <FileNumber>12</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -419,7 +431,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>12</FileNumber>
+      <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -431,7 +443,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -443,7 +455,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>14</FileNumber>
+      <FileNumber>15</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -463,7 +475,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>15</FileNumber>
+      <FileNumber>16</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -475,7 +487,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -487,7 +499,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -499,7 +511,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -511,7 +523,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -523,7 +535,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -535,7 +547,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -547,7 +559,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -559,7 +571,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -571,7 +583,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -583,7 +595,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -595,7 +607,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -607,7 +619,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -619,7 +631,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -631,7 +643,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -643,7 +655,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -655,7 +667,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -667,7 +679,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -679,7 +691,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -691,7 +703,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -703,7 +715,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -715,7 +727,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -727,7 +739,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -739,7 +751,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -759,7 +771,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -771,7 +783,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>41</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 5 - 0
Project/Motor_PMSM.uvprojx

@@ -418,6 +418,11 @@
               <FileType>1</FileType>
               <FilePath>..\Application\FOC\phase_current.c</FilePath>
             </File>
+            <File>
+              <FileName>hall_speed.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Application\FOC\hall_speed.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>