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

加入双转把支持

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

+ 1 - 1
Applications/app/app.c

@@ -160,7 +160,7 @@ static u32 _app_report_task(void *p) {
 		//sys_debug("_>%f, %f, %f\n", ladrc_observer_get()->ld, ladrc_observer_get()->lq, ladrc_observer_get()->poles);
 		encoder_log();
 		//motor_debug();
-		//sample_log();
+		sample_log();
 		PMSM_FOC_LogDebug();
 		//F_debug();
 		//eCtrl_debug_log();

+ 2 - 2
Applications/bsp/gd32/adc.c

@@ -528,7 +528,7 @@ u16 adc_get_thro_5v(void) {
 #ifdef THROTTLE_5V_BUFF_IDX
 	return adc_buffer[THROTTLE_5V_BUFF_IDX] * VREF_3V3_COMPESTION();
 #else
-	return 0;
+	return 0xFFFF;
 #endif
 }
 
@@ -536,7 +536,7 @@ u16 adc_get_thro2_5v(void) {
 #ifdef THROTTLE2_5V_BUFF_IDX
 	return adc_buffer[THROTTLE2_5V_BUFF_IDX] * VREF_3V3_COMPESTION();
 #else
-	return 0;
+	return 0xFFFF;
 #endif
 }
 

+ 1 - 0
Applications/bsp/gd32/board_mc105_v3.h

@@ -32,6 +32,7 @@
 
 #define CONFIG_96V_MODE_VOL (60.0F)
 
+#define CONFIG_DAUL_THROTTLE 1  //双转把
 //#define CONFIG_SENSORLESS_TOW_SAMPLES
 //#define CONFIG_SMO_OBSERVER 
 #define CONFIG_LADRC_OBSERVER

+ 1 - 0
Applications/foc/core/PMSM_FOC_Core.h

@@ -69,6 +69,7 @@ typedef enum {
 	FOC_CRIT_ENC_AB_Err,
 	FOC_CRIT_Vol_HW_Err, //17
 	FOC_CRIT_PHASE_UNBalance_Err, /* 三相不平衡错误,比如相线螺丝松了 */
+	FOC_CRIT_THRO2_Err,
 	FOC_CRIT_Err_Max = 32,
 }FOC_CritiCal_Ebit_t;
 

+ 38 - 7
Applications/foc/motor/motor.c

@@ -17,6 +17,7 @@
 #include "foc/core/etcs.h"
 #include "app/nv_storage.h"
 #include "foc/motor/mot_params_ind.h"
+#include "foc/motor/throttle.h"
 #include "foc/limit.h"
 
 #ifdef CONFIG_DQ_STEP_RESPONSE
@@ -109,9 +110,10 @@ static void MC_Check_MosVbusThrottle(void) {
 	if (vbus_vol <= nv_get_foc_params()->s_minDCVol) {
 		mc_set_critical_error(FOC_CRIT_ACC_Un_Err);
 	}
-	if ((get_throttle_float() < nv_get_foc_params()->f_minThroVol) || (get_throttle_float() > nv_get_foc_params()->f_maxThroVol)) {
+	if (throttle_is_all_error()) {
 		if (!motor.b_ignor_throttle) {
 			mc_set_critical_error(FOC_CRIT_THRO_Err);
+			mc_set_critical_error(FOC_CRIT_THRO2_Err);
 		}
 	}
 	if (abc[0] > vbus_vol/2 || abc[1] > vbus_vol/2 || abc[2] > vbus_vol/2) {
@@ -139,6 +141,16 @@ static u32 _self_check_task(void *p) {
 			mc_lock_motor(false);
 		}
 	}
+	if (!motor.b_ignor_throttle) {
+		if (throttle_is_all_error()) {
+			mc_set_critical_error(FOC_CRIT_THRO_Err);
+			mc_set_critical_error(FOC_CRIT_THRO2_Err);
+		}else if (throttle1_is_error()) {
+			mc_set_critical_error(FOC_CRIT_THRO_Err);
+		}else if (throttle2_is_error()) {
+			mc_set_critical_error(FOC_CRIT_THRO2_Err);
+		}
+	}
 	if (fan_pwm_is_running()) {
 	#ifdef GPIO_FAN1_IN_GROUP
 		if ((get_delta_ms(motor.fan[0].start_ts) >= 5000) && (motor.fan[0].rpm == 0)) {
@@ -253,19 +265,36 @@ mc_gear_t *mc_get_gear_config(void) {
 	return mc_get_gear_config_by_gear(motor.n_gear);
 }
 
-bool mc_critical_can_not_run(void) {
-	u32 mask = FOC_Cri_Err_Mask(FOC_CRIT_IDC_OV) | FOC_Cri_Err_Mask(FOC_CRIT_MOTOR_TEMP_Err) | FOC_Cri_Err_Mask(FOC_CRIT_MOS_TEMP_Err) | FOC_Cri_Err_Mask(FOC_CRIT_Angle_Err) | FOC_Cri_Err_Mask(FOC_CRIT_Vol_HW_Err);
+/* 必须立即停机 */
+bool mc_critical_need_stop(void) {
+	u32 mask = FOC_Cri_Err_Mask(FOC_CRIT_IDC_OV) | FOC_Cri_Err_Mask(FOC_CRIT_Angle_Err) | FOC_Cri_Err_Mask(FOC_CRIT_Vol_HW_Err);
 	u32 err = motor.n_CritiCalErrMask & mask;
 	return (err != 0);
 }
 
+bool mc_critical_can_not_run(void) {
+	u32 mask = FOC_Cri_Err_Mask(FOC_CRIT_MOTOR_TEMP_Err) | FOC_Cri_Err_Mask(FOC_CRIT_MOS_TEMP_Err);
+	u32 err = motor.n_CritiCalErrMask & mask;
+	bool crit_err = (err != 0) || mc_critical_need_stop() || throttle_is_all_error();
+	return crit_err;
+}
+
 bool mc_unsafe_critical_error(void) {
 	u32 err = motor.n_CritiCalErrMask & (~(FOC_Cri_Err_Mask(FOC_CRIT_Fan_Err)));
 #ifdef CONFIG_DQ_STEP_RESPONSE
 	sys_debug("err=0x%x\n", err);
 	err = err & (~(FOC_Cri_Err_Mask(FOC_CRIT_Encoder_Err)));
 	err = err & (~(FOC_Cri_Err_Mask(FOC_CRIT_THRO_Err)));
+	err = err & (~(FOC_Cri_Err_Mask(FOC_CRIT_THRO2_Err)));
 	sys_debug("err=0x%x\n", err);
+#else
+	if (!throttle_is_all_error()) {//不是两个转把都有问题,忽略出问题的转把错误
+		if (throttle1_is_error()) {
+			err = err & (~(FOC_Cri_Err_Mask(FOC_CRIT_THRO_Err)));
+		}else if (throttle2_is_error()) {
+			err = err & (~(FOC_Cri_Err_Mask(FOC_CRIT_THRO2_Err)));
+		}
+	}
 #endif
 	if (motor.b_ignor_throttle) {
 		err = err & (~(FOC_Cri_Err_Mask(FOC_CRIT_THRO_Err)));
@@ -909,7 +938,7 @@ bool mc_throttle_released(void) {
 	if (motor.b_ignor_throttle) {
 		return motor.u_throttle_ration == 0;
 	}
-	return get_throttle_float() <= nv_get_foc_params()->n_startThroVol;
+	return throttle_is_released();
 }
 
 static bool mc_is_gpio_mlock(void) {
@@ -1264,7 +1293,7 @@ static void mc_process_epm_move(void) {
 		target_vel = -nv_get_foc_params()->s_maxEpmRPMBck;
 		target_trq = nv_get_foc_params()->s_maxEpmTorqueLimBck;
 	}else if (!motor.b_epm_cmd_move) {
-		target_vel = thro_get_ration(get_throttle_float()) * 2.0f * (float)target_vel;
+		target_vel = thro_get_ration(throttle_get_signal()) * 2.0f * (float)target_vel;
 		step = 0.07f;
 	}
 	step_towards(&motor.f_epm_vel, target_vel, step);
@@ -1338,7 +1367,7 @@ static void mc_process_curise(void) {
 
 #ifndef CONFIG_DQ_STEP_RESPONSE
 static bool mc_can_stop_foc(void) {
-	if (mc_critical_can_not_run()) {
+	if (mc_critical_need_stop()) {
 		return true;
 	}
 	if (motor.mode == CTRL_MODE_CURRENT) {
@@ -1395,6 +1424,8 @@ void Sched_MC_mTask(void) {
 
 	adc_vref_filter();
 
+	throttle_detect();
+
 	F_all_Calc();
 
 #ifdef CONFIG_CRUISE_ENABLE_ACCL
@@ -1472,7 +1503,7 @@ void Sched_MC_mTask(void) {
 				mc_process_throttle_epm();
 				mc_process_epm_move();
 			}else {
-				float thro = get_throttle_float();
+				float thro = throttle_get_signal();
 				if (motor.b_ignor_throttle) {
 					float r = (float)motor.u_throttle_ration/100.0f;
 					thro = thro_ration_to_voltage(r);

+ 94 - 0
Applications/foc/motor/throttle.c

@@ -0,0 +1,94 @@
+#include "foc/foc_config.h"
+#include "foc/samples.h"
+#include "math/fast_math.h"
+#include "bsp/bsp_driver.h"
+#include "libs/logger.h"
+#include "app/nv_storage.h"
+#include "foc/motor/throttle.h"
+
+static u8 err_mask;
+
+bool throttle1_is_error(void) {
+	if (err_mask & (THRO1_5V_ERR_BIT | THRO1_SIG_ERR_BIT)) {
+		return true;
+	}
+	return false;
+}
+
+bool throttle2_is_error(void) {
+	if (err_mask & (THRO2_5V_ERR_BIT | THRO2_SIG_ERR_BIT)) {
+		return true;
+	}
+	return false;
+}
+
+u8 throttle_get_errors(void) {
+	return err_mask;
+}
+
+bool throttle_is_all_error(void) {
+#if CONFIG_DAUL_THROTTLE==1
+	return throttle1_is_error() && throttle2_is_error();
+#else
+	return throttle1_is_error();
+#endif
+}
+
+float throttle_get_signal(void) {
+#if CONFIG_DAUL_THROTTLE==1
+	if (throttle1_is_error() && throttle2_is_error()) {
+		return 0.0f;
+	}else if (throttle1_is_error() && !throttle2_is_error()) {
+		float thr = get_thro2_5v_float() - get_throttle2_float();
+		return fclamp(thr, nv_get_foc_params()->n_startThroVol, nv_get_foc_params()->n_endThroVol);
+	}else if (!throttle1_is_error() && throttle2_is_error()) {
+		return get_throttle_float();
+	}else {
+		float thr1 = get_throttle_float();
+		float thr2 = get_thro2_5v_float() - get_throttle2_float();
+		return (thr1+thr2)/2.0f;
+	}
+#else
+	return get_throttle_float();
+#endif
+}
+
+bool throttle_is_released(void) {
+#if CONFIG_DAUL_THROTTLE==1
+	float signal = 0;
+	if (throttle1_is_error() && !throttle2_is_error()) {
+		float thr = get_thro2_5v_float() - get_throttle2_float();
+		signal = fclamp(thr, nv_get_foc_params()->n_startThroVol, nv_get_foc_params()->n_endThroVol);
+	}else if (!throttle1_is_error() && throttle2_is_error()) {
+		signal = get_throttle_float();
+	}else {
+		float thr1 = get_throttle_float();
+		float thr2 = get_thro2_5v_float() - get_throttle2_float();
+		signal = (thr1+thr2)/2.0f;
+	}
+	return signal <= nv_get_foc_params()->n_startThroVol;
+#else
+	return get_throttle_float() <= nv_get_foc_params()->n_startThroVol;
+#endif
+}
+
+void throttle_detect(void) {
+	float thr_5v = get_thro_5v_float();
+	float thr_sig = get_throttle_float();
+	if (thr_sig <= nv_get_foc_params()->f_minThroVol || thr_sig >=nv_get_foc_params()->f_maxThroVol) {
+		err_mask |= THRO1_SIG_ERR_BIT;
+	}
+	if (thr_5v <= 4.5f || thr_5v >= 5.5f) {
+		err_mask |= THRO1_5V_ERR_BIT;
+	}
+#if CONFIG_DAUL_THROTTLE==1
+	thr_5v = get_thro2_5v_float();
+	thr_sig = get_throttle2_float();
+	if (thr_sig <= nv_get_foc_params()->f_minThroVol || thr_sig >=nv_get_foc_params()->f_maxThroVol) {
+		err_mask |= THRO2_SIG_ERR_BIT;
+	}
+	if (thr_5v <= 4.5f || thr_5v >= 5.5f) {
+		err_mask |= THRO2_5V_ERR_BIT;
+	}
+#endif
+}

+ 16 - 0
Applications/foc/motor/throttle.h

@@ -0,0 +1,16 @@
+#ifndef _THROTTLE_H__
+#define _THROTTLE_H__
+#define THRO1_5V_ERR_BIT 0x01 
+#define	THRO2_5V_ERR_BIT 0x02
+#define	THRO1_SIG_ERR_BIT 0x04
+#define	THRO2_SIG_ERR_BIT 0x08
+
+bool throttle_is_released(void);
+bool throttle_is_all_error(void);
+u8 throttle_get_errors(void);
+float throttle_get_signal(void);
+void throttle_detect(void);
+bool throttle1_is_error(void);
+bool throttle2_is_error(void);
+#endif /* _THROTTLE_H__ */
+

+ 2 - 2
Applications/foc/samples.c

@@ -152,7 +152,7 @@ float get_adc_vref(void) {
 
 float get_thro_5v_float(void) {
 	u16 adc = adc_get_thro_5v();
-	if (adc == 0) {
+	if (adc == 0xFFFF) {
 		return 5.0f;
 	}
 	return (float)adc * (ADC_REFERENCE_VOLTAGE*(2.0f)/ADC_FULL_MAX);
@@ -160,7 +160,7 @@ float get_thro_5v_float(void) {
 
 float get_thro2_5v_float(void) {
 	u16 adc = adc_get_thro2_5v();
-	if (adc == 0) {
+	if (adc == 0xFFFF) {
 		return 5.0f;
 	}
 	return (float)adc * (ADC_REFERENCE_VOLTAGE*(2.0f)/ADC_FULL_MAX);

+ 62 - 50
Project/MC105_V3_Z100.uvoptx

@@ -491,6 +491,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>26</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Applications\foc\motor\throttle.c</PathWithFileName>
+      <FilenameWithoutPath>throttle.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -501,7 +513,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -513,7 +525,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -525,7 +537,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -537,7 +549,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -557,7 +569,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -569,7 +581,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -581,7 +593,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>4</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -593,7 +605,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -613,7 +625,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -625,7 +637,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -637,7 +649,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -649,7 +661,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -661,7 +673,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -673,7 +685,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -685,7 +697,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>41</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -697,7 +709,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <FileNumber>42</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -709,7 +721,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>42</FileNumber>
+      <FileNumber>43</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -721,7 +733,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>43</FileNumber>
+      <FileNumber>44</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -733,7 +745,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>44</FileNumber>
+      <FileNumber>45</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -745,7 +757,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>45</FileNumber>
+      <FileNumber>46</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -757,7 +769,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>46</FileNumber>
+      <FileNumber>47</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -769,7 +781,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>47</FileNumber>
+      <FileNumber>48</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -789,7 +801,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>48</FileNumber>
+      <FileNumber>49</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -801,7 +813,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>49</FileNumber>
+      <FileNumber>50</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -813,7 +825,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>50</FileNumber>
+      <FileNumber>51</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -825,7 +837,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>51</FileNumber>
+      <FileNumber>52</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -837,7 +849,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>52</FileNumber>
+      <FileNumber>53</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -849,7 +861,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>53</FileNumber>
+      <FileNumber>54</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -869,7 +881,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>54</FileNumber>
+      <FileNumber>55</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -881,7 +893,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>55</FileNumber>
+      <FileNumber>56</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -893,7 +905,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>56</FileNumber>
+      <FileNumber>57</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -913,7 +925,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>57</FileNumber>
+      <FileNumber>58</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -925,7 +937,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>58</FileNumber>
+      <FileNumber>59</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -937,7 +949,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>59</FileNumber>
+      <FileNumber>60</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -949,7 +961,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>60</FileNumber>
+      <FileNumber>61</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -961,7 +973,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>61</FileNumber>
+      <FileNumber>62</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -973,7 +985,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>62</FileNumber>
+      <FileNumber>63</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -985,7 +997,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>63</FileNumber>
+      <FileNumber>64</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -997,7 +1009,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>64</FileNumber>
+      <FileNumber>65</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1009,7 +1021,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>65</FileNumber>
+      <FileNumber>66</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1021,7 +1033,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>66</FileNumber>
+      <FileNumber>67</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1033,7 +1045,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>67</FileNumber>
+      <FileNumber>68</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1045,7 +1057,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>68</FileNumber>
+      <FileNumber>69</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1057,7 +1069,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>69</FileNumber>
+      <FileNumber>70</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1069,7 +1081,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>70</FileNumber>
+      <FileNumber>71</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1081,7 +1093,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>71</FileNumber>
+      <FileNumber>72</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1093,7 +1105,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>72</FileNumber>
+      <FileNumber>73</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1113,7 +1125,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>10</GroupNumber>
-      <FileNumber>73</FileNumber>
+      <FileNumber>74</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1125,7 +1137,7 @@
     </File>
     <File>
       <GroupNumber>10</GroupNumber>
-      <FileNumber>74</FileNumber>
+      <FileNumber>75</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1137,7 +1149,7 @@
     </File>
     <File>
       <GroupNumber>10</GroupNumber>
-      <FileNumber>75</FileNumber>
+      <FileNumber>76</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 5 - 0
Project/MC105_V3_Z100.uvprojx

@@ -518,6 +518,11 @@
               <FileType>1</FileType>
               <FilePath>..\Applications\foc\motor\mot_params_ind.c</FilePath>
             </File>
+            <File>
+              <FileName>throttle.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Applications\foc\motor\throttle.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>