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

add adc && update iv_measure.c

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

+ 74 - 3
Application/app/iv_measure.c

@@ -1,6 +1,8 @@
 #include "iv_measure.h"
 #include "iv_measure.h"
 #include "bsp/ml5238.h"
 #include "bsp/ml5238.h"
 #include "bsp/cs1180.h"
 #include "bsp/cs1180.h"
+#include "bsp/gd32_adc.h"
+#include "bsp/clock.h"
 /* measure the current & voltage for battery pack by using
 /* measure the current & voltage for battery pack by using
  * ms5238 & cs1180(only used when bms is in small current loading)
  * ms5238 & cs1180(only used when bms is in small current loading)
 */
 */
@@ -8,13 +10,82 @@
 /* this is the inited gain set to the ms5238, but the really gain is  calibrated
 /* this is the inited gain set to the ms5238, but the really gain is  calibrated
 *  by measure_system_calibrate
 *  by measure_system_calibrate
 */
 */
-#define IMON_INITED_GAIN 10
-static float imon_gain = IMON_INITED_GAIN;
+static float imon_gain_10x = 10.0f;
+static float imon_gain_50x = 50.0f;
+static float imon_gain_now;
+static float vim0_10x = 0.0f;
+static float vim0_50x = 0.0f;
+static float vim0_now;
+#define r_resistor 1.0f // 1ºÁÅ·
+#define r_pcb_resistor 2.0f // pcb resistor
+static float r_sense = r_resistor + r_pcb_resistor;
+static float v_ref = 3300.0f; //adc ref = 3.3v
+static float max_adc = 65535.0f;
+
+static void __inline__ select_gain_10x(int select){
+	if (select){
+		ML5238_IMON_OUT_10X();
+		imon_gain_now = imon_gain_10x;
+		vim0_now = vim0_10x;
+	}else {
+		ML5238_IMON_OUT_50X();
+		imon_gain_now = imon_gain_50x;
+		vim0_now = vim0_50x;
+	}
+}
+
 
 
 /*calibrate when startup && temperature is changed more than 5? degree
 /*calibrate when startup && temperature is changed more than 5? degree
 * calibrate the ms5238's IMON output voltage gain
 * calibrate the ms5238's IMON output voltage gain
 */
 */
-int measure_system_calibrate(void){
+void current_calibrate(void){
+	/* calibrate the 10x gain */
+	ML5238_IMON_OUT_ZERO_10X();
+	vim0_10x = adc_sample(ADC_CHAN_IMON ,TRUE);
+	ML5238_IMON_OUT_V2000_10X();
+	float vim1 = adc_sample(ADC_CHAN_IMON, FALSE);
+	ML5238_IMON_OUT_V100_10X();
+	float vr = adc_sample(ADC_CHAN_IMON, FALSE);
+	imon_gain_10x = ML5238_GAIN(vim0_10x, vim1, vr);
+
+	/* calibrate the 50x gain */
+	ML5238_IMON_OUT_ZERO_50X();
+	vim0_50x = adc_sample(ADC_CHAN_IMON ,TRUE);
+	ML5238_IMON_OUT_V2000_50X();
+	vim1 = adc_sample(ADC_CHAN_IMON, FALSE);
+	ML5238_IMON_OUT_V100_50X();
+	vr = adc_sample(ADC_CHAN_IMON, FALSE);
+	imon_gain_50x = ML5238_GAIN(vim0_50x, vim1, vr);
+
+	select_gain_10x(0);//default gain is 50x, if 50x overflow, use 10x
+
+}
+
+void measure_system_init(void){
+	adc_init();
+	ml5238_init();
+	cs1180_init();
+	current_calibrate();
+}
 
 
+float get_imon_current(bool calibration){
+	float adc = adc_sample(ADC_CHAN_IMON, calibration);
+	if (adc >= 0xFFF0){
+		//overflow, use 10x
+		if (imon_gain_now == imon_gain_50x){
+			select_gain_10x(1);
+			adc = adc_sample(ADC_CHAN_IMON, calibration);
+		}
+	}
+	float cali_adc = ML5238_V_RSENSER(adc, vim0_now, imon_gain_now);
+
+	return (cali_adc/max_adc) * v_ref / r_sense;
 }
 }
 
 
+float get_vmon_voltage(int cell, bool calibration){
+	ml5238_select_cell_to_vmon(cell);
+	delay_us(50);
+	float adc = adc_sample(ADC_CHAN_VMON, calibration);
+
+	return adc/max_adc * v_ref;
+}

+ 56 - 0
Application/bsp/gd32_adc.c

@@ -0,0 +1,56 @@
+#include "gd32_adc.h"
+#include "gpio.h"
+/* For 12-bits resolution, the total conversion time is 
+sampling time + 12.5 ADCCLK cycles */
+void adc_init(void){
+	rcu_periph_clock_enable(RCU_GPIOA);
+	rcu_periph_clock_enable(RCU_GPIOB);	
+	gpio_mode_analog_input(GPIOA, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
+	gpio_mode_analog_input(GPIOB, GPIO_PIN_1|GPIO_PIN_0);
+
+    /* config ADC clock */
+    rcu_adc_clock_config(RCU_ADCCK_AHB_DIV3); //adc clock:28M 
+
+	rcu_periph_clock_enable(RCU_ADC);
+	adc_deinit();
+
+	adc_resolution_config(ADC_RESOLUTION_12B);
+    /* ADC trigger config */
+    adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE); 
+	adc_special_function_config(ADC_SCAN_MODE,ENABLE);
+	/* ADC data alignment config */
+	adc_data_alignment_config(ADC_DATAALIGN_RIGHT);
+	/* ADC channel length config */
+	adc_channel_length_config(ADC_REGULAR_CHANNEL, 1);
+
+	adc_discontinuous_mode_config(ADC_REGULAR_CHANNEL, 1);
+
+	//hardware oversample to 16bit
+	adc_oversample_mode_config(ADC_OVERSAMPLING_ONE_CONVERT, ADC_OVERSAMPLING_SHIFT_4B, ADC_OVERSAMPLING_RATIO_MUL256);
+}
+
+int adc_sample(int chan, int calibration){
+	int value = -0xFFFFFF;
+	if (chan == ADC_CHAN_AUX_CURR || chan == ADC_CHAN_IMON || chan == ADC_CHAN_VMON){
+		adc_oversample_mode_enable();
+	}else {
+		adc_oversample_mode_disable();
+	}
+    /* ADC regular channel config */
+    adc_regular_channel_config(0, chan, ADC_SAMPLETIME_7POINT5);//7.5 + 12.5 = 20 cycle, 20/(28*1000000)
+	adc_enable();
+	if (calibration) {
+		/* ADC calibration and reset calibration */
+    	adc_calibration_enable();
+	}
+	
+	adc_software_trigger_enable(ADC_REGULAR_CHANNEL);
+    while(SET != adc_flag_get(ADC_FLAG_EOC));
+    value = adc_regular_data_read();
+	adc_flag_clear(ADC_FLAG_EOC);
+	adc_disable();
+
+	return value;
+}
+
+

+ 16 - 0
Application/bsp/gd32_adc.h

@@ -0,0 +1,16 @@
+#ifndef _GD32_ADC_H__
+#define _GD32_ADC_H__
+#include "gd32f3x0_libopt.h"
+
+#define ADC_CHAN_AUX_CURR  ADC_CHANNEL_1
+#define ADC_CHAN_IMON      ADC_CHANNEL_9
+#define ADC_CHAN_VMON      ADC_CHANNEL_8
+#define ADC_CHAN_TEMPERATURE_1 ADC_CHANNEL_4
+#define ADC_CHAN_TEMPERATURE_2 ADC_CHANNEL_5
+#define ADC_CHAN_TEMPERATURE_3 ADC_CHANNEL_6
+#define ADC_CHAN_TEMPERATURE_4 ADC_CHANNEL_7
+
+int adc_sample(int chan, int calibration);
+void adc_init(void);
+#endif /* _GD32_ADC_H__ */
+

+ 5 - 0
Application/bsp/gpio.h

@@ -25,6 +25,11 @@
 #define IS_HALL1_DETECTED() !gpio_input_bit_get(GPIOC, GPIO_PIN_15)
 #define IS_HALL1_DETECTED() !gpio_input_bit_get(GPIOC, GPIO_PIN_15)
 #define IS_HALL2_DETECTED() !gpio_input_bit_get(GPIOC, GPIO_PIN_13)
 #define IS_HALL2_DETECTED() !gpio_input_bit_get(GPIOC, GPIO_PIN_13)
 
 
+static __inline__ void gpio_mode_analog_input(uint32_t gpio_periph, uint32_t pin){
+	gpio_mode_set(gpio_periph, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, pin);
+}
+
+
 static __inline__ void gpio_mode_input(uint32_t gpio_periph, uint32_t pull_up_down, uint32_t pin){
 static __inline__ void gpio_mode_input(uint32_t gpio_periph, uint32_t pull_up_down, uint32_t pin){
 	gpio_mode_set(gpio_periph, GPIO_MODE_INPUT, pull_up_down, pin);
 	gpio_mode_set(gpio_periph, GPIO_MODE_INPUT, pull_up_down, pin);
 }
 }

+ 3 - 3
Application/bsp/ml5238.c

@@ -1,9 +1,9 @@
 #include <string.h>
 #include <string.h>
 #include "spi.h"
 #include "spi.h"
 #include "ml5238.h"
 #include "ml5238.h"
-#include "ml5238_reg.h"
 
 
-static int ml5238_write(uint8_t regaddr, uint8_t data);
+
+
 static int ml5238_read(uint8_t regaddr, uint8_t *data);
 static int ml5238_read(uint8_t regaddr, uint8_t *data);
 
 
 
 
@@ -95,7 +95,7 @@ void ml5238_irq_handler(void){
 }
 }
 
 
 
 
-static int ml5238_write(uint8_t regaddr, uint8_t data){
+int ml5238_write(uint8_t regaddr, uint8_t data){
 	uint16_t send_data=(((uint16_t)regaddr)<<(0x08+1u))|((uint16_t)data);
 	uint16_t send_data=(((uint16_t)regaddr)<<(0x08+1u))|((uint16_t)data);
 	ml5238_cs(0);
 	ml5238_cs(0);
 	int ret = spi0_send_uint16(send_data, NULL);
 	int ret = spi0_send_uint16(send_data, NULL);

+ 27 - 0
Application/bsp/ml5238.h

@@ -1,10 +1,12 @@
 #ifndef _ML5238_H__
 #ifndef _ML5238_H__
 #define _ML5238_H__
 #define _ML5238_H__
+#include "bsp/clock.h"
 void ml5238_init(void);
 void ml5238_init(void);
 void ml5238_softreset(void);
 void ml5238_softreset(void);
 int ml5238_enable_discharger_mosfet(int enable);
 int ml5238_enable_discharger_mosfet(int enable);
 int ml5238_enable_charger_mosfet(int enable);
 int ml5238_enable_charger_mosfet(int enable);
 int ml5238_short_current_detect(int mode);
 int ml5238_short_current_detect(int mode);
+int ml5238_select_cell_to_vmon(int cell);
 
 
 
 
 #define SHORT_CURRENT_MODE_DISABLE -1
 #define SHORT_CURRENT_MODE_DISABLE -1
@@ -17,5 +19,30 @@ int ml5238_short_current_detect(int mode);
  * multi 2 to the adc value, to get the real vol 
  * multi 2 to the adc value, to get the real vol 
  */
  */
 #define cell_real_vol(v) (v * 2)
 #define cell_real_vol(v) (v * 2)
+
+#include "ml5238_reg.h"
+int ml5238_write(uint8_t regaddr, uint8_t data);
+
+/* IMON output 0V, used to cali the GAIN */
+#define ML5238_IMON_OUT_ZERO_10X() {ml5238_write(ML5238_IMON, 0x12);delay_us(50);};
+#define ML5238_IMON_OUT_ZERO_50X() {ml5238_write(ML5238_IMON, 0x13);delay_us(50);};
+
+/* IMON output 2V, used to cali the GAIN */
+#define ML5238_IMON_OUT_V2000_10X() {ml5238_write(ML5238_IMON, 0x14);delay_us(50);};
+#define ML5238_IMON_OUT_V2000_50X() {ml5238_write(ML5238_IMON, 0x15);delay_us(50);};
+
+/* IMON output 100mV, used to cali the GAIN */
+#define ML5238_IMON_OUT_V100_10X() {ml5238_write(ML5238_IMON, 0x1c);delay_us(50);};
+#define ML5238_IMON_OUT_V100_50X() {ml5238_write(ML5238_IMON, 0x1d);delay_us(50);};
+
+/* IMON output real pin's voltage */
+#define ML5238_IMON_OUT_10X() {ml5238_write(ML5238_IMON, 0x10);delay_us(50);};
+#define ML5238_IMON_OUT_50X() {ml5238_write(ML5238_IMON, 0x11);delay_us(50);};
+
+//vim0 == xxx_OUT_ZERO_xxx, vim1 == xxx_OUT_V2000_xxx, vr == xxx_OUT_V100_xxx
+#define ML5238_GAIN(vim0, vim1, vr) ((vim1-vim0)/vr)
+
+//r_v :real voltage, gain == ML5238_GAIN
+#define ML5238_V_RSENSER(r_v, vim0, gain) ((r_v-vim0)/gain)
 #endif /* _ML5238_H__ */
 #endif /* _ML5238_H__ */
 
 

+ 59 - 35
Project/BMS.uvoptx

@@ -140,7 +140,7 @@
         <SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Number>0</Number>
           <Key>JL2CM3</Key>
           <Key>JL2CM3</Key>
-          <Name>-U20080643 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0GD32F3x0.FLM -FS08000000 -FL010000 -FP0($$Device:GD32F330C8$Flash\GD32F3x0.FLM)</Name>
+          <Name>-U81480416 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0GD32F3x0.FLM -FS08000000 -FL010000 -FP0($$Device:GD32F330C8$Flash\GD32F3x0.FLM)</Name>
         </SetRegEntry>
         </SetRegEntry>
         <SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Number>0</Number>
@@ -221,7 +221,7 @@
 
 
   <Group>
   <Group>
     <GroupName>Application</GroupName>
     <GroupName>Application</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
@@ -237,6 +237,18 @@
       <RteFlg>0</RteFlg>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
       <bShared>0</bShared>
     </File>
     </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>2</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Application\app\iv_measure.c</PathWithFileName>
+      <FilenameWithoutPath>iv_measure.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
   </Group>
 
 
   <Group>
   <Group>
@@ -247,7 +259,7 @@
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>2</FileNumber>
+      <FileNumber>3</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -259,7 +271,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>3</FileNumber>
+      <FileNumber>4</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -271,7 +283,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>4</FileNumber>
+      <FileNumber>5</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -283,7 +295,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>5</FileNumber>
+      <FileNumber>6</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -295,7 +307,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>6</FileNumber>
+      <FileNumber>7</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -307,7 +319,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>7</FileNumber>
+      <FileNumber>8</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -319,7 +331,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>8</FileNumber>
+      <FileNumber>9</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -331,7 +343,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>2</GroupNumber>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>9</FileNumber>
+      <FileNumber>10</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -341,6 +353,18 @@
       <RteFlg>0</RteFlg>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
       <bShared>0</bShared>
     </File>
     </File>
+    <File>
+      <GroupNumber>2</GroupNumber>
+      <FileNumber>11</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Application\bsp\gd32_adc.c</PathWithFileName>
+      <FilenameWithoutPath>gd32_adc.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
   </Group>
 
 
   <Group>
   <Group>
@@ -359,7 +383,7 @@
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>10</FileNumber>
+      <FileNumber>12</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -371,7 +395,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>11</FileNumber>
+      <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -383,7 +407,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>12</FileNumber>
+      <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -395,7 +419,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <FileNumber>15</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -407,7 +431,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>14</FileNumber>
+      <FileNumber>16</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -419,7 +443,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>15</FileNumber>
+      <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -431,7 +455,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -443,7 +467,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -455,7 +479,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -467,7 +491,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -479,7 +503,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -491,7 +515,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -503,7 +527,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -515,7 +539,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -527,7 +551,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -539,7 +563,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -551,7 +575,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -563,7 +587,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -575,7 +599,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -587,7 +611,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -599,7 +623,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -611,7 +635,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -623,7 +647,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>4</GroupNumber>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -643,7 +667,7 @@
     <RteFlg>0</RteFlg>
     <RteFlg>0</RteFlg>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>2</FileType>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -655,7 +679,7 @@
     </File>
     </File>
     <File>
     <File>
       <GroupNumber>5</GroupNumber>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 11 - 1
Project/BMS.uvprojx

@@ -339,7 +339,7 @@
               <MiscControls></MiscControls>
               <MiscControls></MiscControls>
               <Define></Define>
               <Define></Define>
               <Undefine></Undefine>
               <Undefine></Undefine>
-              <IncludePath>..\Librarys\CMSIS\5.7.0\Include,..\Librarys\CMSIS\GD32F3x0\Include,..\Librarys\GD32F3x0_Drivers\include</IncludePath>
+              <IncludePath>..\Librarys\CMSIS\5.7.0\Include,..\Librarys\CMSIS\GD32F3x0\Include,..\Librarys\GD32F3x0_Drivers\include,..\Application</IncludePath>
             </VariousControls>
             </VariousControls>
           </Cads>
           </Cads>
           <Aads>
           <Aads>
@@ -388,6 +388,11 @@
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\Application\app\main.c</FilePath>
               <FilePath>..\Application\app\main.c</FilePath>
             </File>
             </File>
+            <File>
+              <FileName>iv_measure.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Application\app\iv_measure.c</FilePath>
+            </File>
           </Files>
           </Files>
         </Group>
         </Group>
         <Group>
         <Group>
@@ -433,6 +438,11 @@
               <FileType>1</FileType>
               <FileType>1</FileType>
               <FilePath>..\Application\bsp\clock.c</FilePath>
               <FilePath>..\Application\bsp\clock.c</FilePath>
             </File>
             </File>
+            <File>
+              <FileName>gd32_adc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Application\bsp\gd32_adc.c</FilePath>
+            </File>
           </Files>
           </Files>
         </Group>
         </Group>
         <Group>
         <Group>