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

加入电机和mos的温度测量

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

+ 1 - 1
Applications/app/app.c

@@ -95,7 +95,7 @@ static u32 _app_report_task(void *p) {
 	can_report_phase_voltage(0x45);
 	if (++loop % 10 == 0) {
 		can_report_pid_value(0x45, PID_TRQ_id);
-		sys_debug("max exec time %d\n", g_meas_foc.exec_max_time);
+		sys_debug("max exec time %d, %d\n", g_meas_foc.exec_max_time, get_motor_temp());
 		sys_debug("sat = %d, %d, %d\n", PMSM_FOC_Get()->pi_id->is_sat, PMSM_FOC_Get()->pi_iq->is_sat, PMSM_FOC_Get()->pi_speed->is_sat);
 	}
 	return 500;

+ 20 - 3
Applications/bsp/adc.c

@@ -7,8 +7,8 @@
 #define REG_CHAN_DMA 1
 
 #ifdef REG_CHAN_DMA
-#define REG_CHAN_NUM 5
-s16 adc_buffer[REG_CHAN_NUM] = {0, 0, 0, 0, 0};
+#define REG_CHAN_NUM 7
+s16 adc_buffer[REG_CHAN_NUM] = {0, 0, 0, 0, 0, 0, 0};
 
 static void adc_dma_init(void)
 {
@@ -85,6 +85,8 @@ static void adc0_init(void){
 	adc_regular_channel_config(ADC0, 2, U_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
 	adc_regular_channel_config(ADC0, 3, V_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
 	adc_regular_channel_config(ADC0, 4, W_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC0, 5, MOS_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC0, 6, MOTOR_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
 #endif
     /* configure ADC regular channel trigger */
     adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
@@ -193,7 +195,14 @@ static void adc_gpio_init(void) {
 	rcu_periph_clock_enable(W_VOL_ADC_RCU);
 	gpio_init(W_VOL_ADC_GROUP, W_VOL_ADC_MODE, GPIO_OSPEED_50MHZ, W_VOL_ADC_PIN);
 #endif
-
+#ifdef MOS_TEMP_ADC_CHAN
+	rcu_periph_clock_enable(MOS_TEMP_ADC_RCU);
+	gpio_init(MOS_TEMP_ADC_CHAN, MOS_TEMP_ADC_MODE, GPIO_OSPEED_50MHZ, MOS_TEMP_ADC_PIN);
+#endif
+#ifdef MOTOR_TEMP_ADC_CHAN
+	rcu_periph_clock_enable(MOTOR_TEMP_ADC_RCU);
+	gpio_init(MOTOR_TEMP_ADC_CHAN, MOTOR_TEMP_ADC_MODE, GPIO_OSPEED_50MHZ, MOTOR_TEMP_ADC_PIN);
+#endif
 
 }
 
@@ -221,6 +230,14 @@ void adc_get_uvw_phaseV(u16 *uvw) {
 	uvw[2] = adc_buffer[4];
 }
 
+u16 adc_get_mos_temp(void) {
+	return adc_buffer[5];
+}
+
+u16 adc_get_motor_temp(void) {
+	return adc_buffer[6];
+}
+
 void adc_start_convert(void) {
 	int drop = 2;
     /* clear the ADC flag */

+ 2 - 0
Applications/bsp/adc.h

@@ -127,5 +127,7 @@ void adc_stop_convert(void);
 u16 adc_get_vbus(void);
 u16 adc_get_throttle(void);
 void adc_get_uvw_phaseV(u16 *uvw);
+u16 adc_get_mos_temp(void);
+u16 adc_get_motor_temp(void);
 
 #endif /* _ADC_H__ */

+ 4 - 2
Applications/bsp/board_mc_v1.h

@@ -26,7 +26,7 @@
 #define CONFIG_UNDER_VOL_DC_CURR 15.0F
 #define CONFIG_MAX_FW_D_CURR     100.0F //d轴最大的退磁电流
 
-#define CONFIG_CURR_LP_CUT_FREQ (3000.0F)
+#define CONFIG_CURR_LP_CUT_FREQ (2000.0F)
 
 #define CONFIG_CURR_LP_PARAM (CONFIG_CURR_LP_CUT_FREQ*2*3.14F/(float)FOC_PWM_FS)
 
@@ -107,7 +107,7 @@
 #define W_PHASE_ADC_RCU 	RCU_GPIOA
 #define W_PHASE_ADC_MODE 	GPIO_MODE_AIN
 
-#define ADC_TO_CURR_ceof1 (0.3362f/1.0f)
+#define ADC_TO_CURR_ceof1 (0.3362f)
 #define ADC_TO_CURR_ceof2 (0.3404f)
 
 
@@ -125,6 +125,7 @@
 #define MOS_TEMP_ADC_PIN 	GPIO_PIN_3
 #define MOS_TEMP_ADC_RCU 	RCU_GPIOA
 #define MOS_TEMP_ADC_MODE 	GPIO_MODE_AIN
+#define MOS_TEMP_R(adc) ((adc)/ADC_FULL_MAX / ((1.0f - (adc)/ADC_FULL_MAX)/(10.0f*1000.0f)))
 
 /* 电机温度采集 */
 #define MOTOR_TEMP_ADC_CHAN     ADC_CHANNEL_0
@@ -132,6 +133,7 @@
 #define MOTOR_TEMP_ADC_PIN 	GPIO_PIN_0
 #define MOTOR_TEMP_ADC_RCU 	RCU_GPIOA
 #define MOTOR_TEMP_ADC_MODE 	GPIO_MODE_AIN
+#define MOTOR_TEMP_R(adc) ((adc)/ADC_FULL_MAX / ((1.0f - (adc)/ADC_FULL_MAX)/2000.0f))
 
 /* 是否有母线电流采集 */
 #define NO_SAMPLE_IDC //如果硬件没有采集母线电流,定义一下

+ 1 - 1
Applications/foc/core/PMSM_FOC_Core.c

@@ -373,7 +373,7 @@ void PMSM_FOC_Schedule(void) {
 	if (gFoc_Ctrl.plot_type != Plot_None) {
 		if (gFoc_Ctrl.ctrl_count % 5 == 0) {
 			if (gFoc_Ctrl.plot_type == Plot_Phase_curr) {
-				plot_3data16(FtoS16x10(gFoc_Ctrl.in.s_iABC[0]), FtoS16x10(gFoc_Ctrl.in.s_iABCFilter[0]), FtoS16x10(gFoc_Ctrl.in.s_iABCComp[0]));
+				plot_3data16(FtoS16(gFoc_Ctrl.in.s_iABCComp[0]), FtoS16(gFoc_Ctrl.in.s_iABCComp[1]), FtoS16(gFoc_Ctrl.in.s_iABCComp[2]));
 			}else if (gFoc_Ctrl.plot_type == Plot_Phase_vol) {
 				plot_3data16(FtoS16x10(gFoc_Ctrl.in.s_vABC[0]), FtoS16x10(gFoc_Ctrl.in.s_vABC[1]), FtoS16x10(gFoc_Ctrl.in.s_vABC[2]));
 			}

+ 0 - 25
Applications/foc/motor/ntc.c

@@ -1,25 +0,0 @@
-#include "ntc.h"
-#include "bsp/bsp.h"
-#include "bsp/adc.h"
-
-static ntc_t _ntc;
-void ntc_sensor_init(void) {
-	_ntc.temp_avg = 0;
-	_ntc.low_pass_filter = 0.5f;
-	ntc_sensor_sample();
-}
-
-void ntc_sensor_sample(void){
-	u16 w_temp = adc_sample_regular_channel(MOTOR_TEMP_CHAN, 16);
-    w_temp -= ( s32 )(V0_V *4096/ ADC_REFERENCE_VOLTAGE );
-    w_temp *= (ADC_REFERENCE_VOLTAGE/dV_dT);
-    w_temp = w_temp / 4096 + ( s32 )( T0_C );
-
-	_ntc.temp_avg = w_temp * _ntc.low_pass_filter + _ntc.temp_avg * (1.0f - _ntc.low_pass_filter);
-}
-
-
-int ntc_sensor_temperature(void){
-	return _ntc.temp_avg;
-}
-

+ 0 - 21
Applications/foc/motor/ntc.h

@@ -1,21 +0,0 @@
-#ifndef _NTC_H__
-#define _NTC_H__
-typedef struct {
-	int temp_avg;
-	float low_pass_filter;
-}ntc_t;
-
-/************ Temperature sensing section ***************/
-/* V[V]=V0+dV/dT[V/Celsius]*(T-T0)[Celsius]*/
-#define V0_V                          1.055f /*!< in Volts */
-#define T0_C                          25 /*!< in Celsius degrees */
-#define dV_dT                         0.023f /*!< V/Celsius degrees */
-#define T_MAX                         110 /*!< Sensor measured
-                                                       temperature at maximum
-                                                       power stage working
-                                                       temperature, Celsius degrees */
-void ntc_sensor_init(void);
-void ntc_sensor_sample(void);
-int ntc_sensor_temperature(void);
-#endif /* _NTC_H__ */
-

+ 58 - 0
Applications/foc/ntc.c

@@ -0,0 +1,58 @@
+#include "os/os_types.h"
+#include "bsp/bsp.h"
+#include "bsp/adc.h"
+#include "libs/utils.h"
+
+#define KTY_TEMP_INTVAL 10
+#define KTY_TEMP_OFFSET 4
+static const u16 kty_table[] = {
+	359, 391, 424, 460, 498, 538, 581, 603, 626, 672, 722, 773, 826, 882, 
+	940, 1000, 1062, 1127, 1194, 1262, 1334, 1407, 1482, 1560, 1640, 1722, 1807, 1893, 
+	1982, 2073, 2166, 2261, 2357, 2452, 2624 };
+
+#define NTC_TEMP_INTVAL 10
+#define NCT_TEMP_OFFSET 1
+static const u16 ntc_table[] = {
+	43117, 27493, 18015, 12100, 8300, 5825, 4160, 3023,  2232, 1672, 1270, 977, 599,  
+	476, 382, 310, 254, 210,  174,  146, 123, 105, 90, 77, 66, 58, 50, 44};
+
+s16 ntc_get_mos_temp(u16 r) {
+	int i = 0;
+	for (; i < ARRAY_SIZE(ntc_table); i++) {
+		if (r <= ntc_table[i]) {
+			break;
+		}
+	}
+	if (i == 0) {
+		return -40;
+	}else if (i >= ARRAY_SIZE(ntc_table)) {
+		return 251;
+	}else if (r == ntc_table[i]) {
+		return (s16)((i - KTY_TEMP_OFFSET) * KTY_TEMP_INTVAL);
+	}
+	int delta = ntc_table[i] - ntc_table[i - 1];
+	float detla_tmp = (float)KTY_TEMP_INTVAL / (float)delta * (float)(r - ntc_table[i-1]); //插值
+
+	return (s16)((i-1-KTY_TEMP_OFFSET)*KTY_TEMP_INTVAL + detla_tmp);
+
+}
+
+s16 ntc_get_motor_temp(u16 r) {
+	int i = 0;
+	for (; i < ARRAY_SIZE(kty_table); i++) {
+		if (r <= kty_table[i]) {
+			break;
+		}
+	}
+	if (i == 0) {
+		return -10;
+	}else if (i >= ARRAY_SIZE(kty_table)) {
+		return 301;
+	}else if (r == kty_table[i]) {
+		return (s16)((i - NCT_TEMP_OFFSET) * NTC_TEMP_INTVAL);
+	}
+	int delta = kty_table[i] - kty_table[i - 1];
+	float detla_tmp = (float)NTC_TEMP_INTVAL / (float)delta * (float)(r - kty_table[i-1]); //插值
+
+	return (s16)((i-1-NCT_TEMP_OFFSET)*NTC_TEMP_INTVAL + detla_tmp);
+}

+ 7 - 0
Applications/foc/ntc.h

@@ -0,0 +1,7 @@
+#ifndef _NTC_H__
+#define _NTC_H__
+#include "os/os_types.h"
+s16 ntc_get_motor_temp(u16 r);
+s16 ntc_get_mos_temp(u16 r);
+#endif /*_NTC_H__ */
+

+ 43 - 0
Applications/foc/samples.c

@@ -5,6 +5,7 @@
 #include "math/fix_math.h"
 #include "os/os_task.h"
 #include "foc/foc_config.h"
+#include "foc/ntc.h"
 #include "bsp/delay.h"
 #include "libs/logger.h"
 
@@ -23,6 +24,13 @@ static samples_t _throttle;
 #ifdef U_VOL_ADC_CHAN
 static samples_t _uvw_phase[3];
 #endif
+#ifdef MOTOR_TEMP_ADC_CHAN
+static samples_t motor_temp;
+#endif
+#ifdef MOS_TEMP_ADC_CHAN
+static samples_t mos_temp;
+#endif
+
 void samples_init(void){
 	_vbus.filted_value = (CONFIG_RATED_DC_VOL);
 	_vbus.value = (CONFIG_RATED_DC_VOL);
@@ -43,6 +51,17 @@ void samples_init(void){
 	_uvw_phase[2].lowpass = 0.01f;
 	sample_uvw_phase();
 #endif
+#ifdef MOTOR_TEMP_ADC_CHAN
+	motor_temp.value = motor_temp.filted_value = 0;
+	motor_temp.lowpass = 0.01;
+	sample_motor_temp();
+#endif
+#ifdef MOS_TEMP_ADC_CHAN
+	mos_temp.value = mos_temp.filted_value = 0;
+	mos_temp.lowpass = 0.01;
+	sample_mos_temp();
+#endif
+
 	shark_task_create(sample_task, NULL);
 }
 
@@ -61,6 +80,13 @@ int get_vbus_int(void){
 	return _vbus.filted_int;
 }
 
+s16 get_motor_temp(void) {
+	return motor_temp.filted_value;
+}
+
+s16 get_mos_temp(void) {
+	return mos_temp.filted_value;
+}
 
 float get_throttle_float(void) {
 #ifdef THROTTLE_CHAN
@@ -73,6 +99,8 @@ static u32 sample_task(void *param) {
 	sample_vbus();
 	sample_throttle();
 	sample_uvw_phase();
+	sample_motor_temp();
+	sample_mos_temp();
 	return 0;
 }
 
@@ -108,3 +136,18 @@ void sample_uvw_phase(void) {
 #endif
 }
 
+void sample_motor_temp(void) {
+	u16 adc = adc_get_motor_temp();
+	u16 r = MOTOR_TEMP_R(adc);
+	motor_temp.value = ntc_get_motor_temp(r);
+	LowPass_Filter(motor_temp.filted_value, motor_temp.value, motor_temp.lowpass);
+}
+
+void sample_mos_temp(void) {
+	u16 adc = adc_get_motor_temp();
+	u16 r = MOS_TEMP_R(adc);
+	mos_temp.value = ntc_get_motor_temp(r);
+	LowPass_Filter(mos_temp.filted_value, mos_temp.value, mos_temp.lowpass);
+}
+
+

+ 4 - 1
Applications/foc/samples.h

@@ -13,6 +13,9 @@ void get_phase_vols(float *uvw);
 void sample_uvw_phase(void);
 void sample_vbus(void);
 void sample_throttle(void);
-
+void sample_motor_temp(void);
+void sample_mos_temp(void);
+s16 get_motor_temp(void);
+s16 get_mos_temp(void);
 #endif /* _SAMPLES_H__ */
 

+ 4 - 2
Applications/prot/can_foc_msg.c

@@ -79,12 +79,14 @@ void can_report_pid_value(u8 can, u8 id) {
 }
 
 void can_report_foc_status(u8 can) {
-	u8 data[12];
+	u8 data[16];
 	encoder_can_key(data, CMD_2_CAN_KEY(Foc_Report_Status));
 	mc_get_running_status(data+2);
 	u32 errMask = PMSM_FOC_GetCriticalError();
 	encode_u32(data + 3, errMask);
-	encode_u32(data + 7, shark_get_seconds());
+	encode_s16(data + 7, get_motor_temp());
+	encode_s16(data + 9, get_mos_temp());
+	encode_u32(data + 11, shark_get_seconds());
 	can_send_message(get_indicator_can_id(can), data, sizeof(data), 0);
 }
 

+ 63 - 51
Project/MC100.uvoptx

@@ -488,6 +488,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>16</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Applications\foc\ntc.c</PathWithFileName>
+      <FilenameWithoutPath>ntc.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -498,7 +510,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -510,7 +522,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -522,7 +534,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -534,7 +546,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -554,7 +566,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -566,7 +578,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -578,7 +590,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>4</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -590,7 +602,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -610,7 +622,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -622,7 +634,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -634,7 +646,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -646,7 +658,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -658,7 +670,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -670,7 +682,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -682,7 +694,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -694,7 +706,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -706,7 +718,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -718,7 +730,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -730,7 +742,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -742,7 +754,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -754,7 +766,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -766,7 +778,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -778,7 +790,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -790,7 +802,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -810,7 +822,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>41</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -822,7 +834,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <FileNumber>42</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -834,7 +846,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>42</FileNumber>
+      <FileNumber>43</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -846,7 +858,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>43</FileNumber>
+      <FileNumber>44</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -858,7 +870,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>44</FileNumber>
+      <FileNumber>45</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -870,7 +882,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>45</FileNumber>
+      <FileNumber>46</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -890,7 +902,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>46</FileNumber>
+      <FileNumber>47</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -902,7 +914,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>47</FileNumber>
+      <FileNumber>48</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -914,7 +926,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>48</FileNumber>
+      <FileNumber>49</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -934,7 +946,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>49</FileNumber>
+      <FileNumber>50</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -946,7 +958,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>50</FileNumber>
+      <FileNumber>51</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -958,7 +970,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>51</FileNumber>
+      <FileNumber>52</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -970,7 +982,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>52</FileNumber>
+      <FileNumber>53</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -982,7 +994,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>53</FileNumber>
+      <FileNumber>54</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -994,7 +1006,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>54</FileNumber>
+      <FileNumber>55</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1006,7 +1018,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>55</FileNumber>
+      <FileNumber>56</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1018,7 +1030,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>56</FileNumber>
+      <FileNumber>57</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1030,7 +1042,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>57</FileNumber>
+      <FileNumber>58</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1042,7 +1054,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>58</FileNumber>
+      <FileNumber>59</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1054,7 +1066,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>59</FileNumber>
+      <FileNumber>60</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1066,7 +1078,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>60</FileNumber>
+      <FileNumber>61</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1078,7 +1090,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>61</FileNumber>
+      <FileNumber>62</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1090,7 +1102,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>62</FileNumber>
+      <FileNumber>63</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1102,7 +1114,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>63</FileNumber>
+      <FileNumber>64</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1114,7 +1126,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>64</FileNumber>
+      <FileNumber>65</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1134,7 +1146,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>10</GroupNumber>
-      <FileNumber>65</FileNumber>
+      <FileNumber>66</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1146,7 +1158,7 @@
     </File>
     <File>
       <GroupNumber>10</GroupNumber>
-      <FileNumber>66</FileNumber>
+      <FileNumber>67</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 5 - 0
Project/MC100.uvprojx

@@ -468,6 +468,11 @@
               <FileType>1</FileType>
               <FilePath>..\Applications\foc\motor\hall.c</FilePath>
             </File>
+            <File>
+              <FileName>ntc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Applications\foc\ntc.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>

BIN
Simulink/ADRC.slx.autosave