Преглед изворни кода

温度变化需要重新校准5238

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui пре 5 година
родитељ
комит
9f1bfdb077
4 измењених фајлова са 26 додато и 4 уклоњено
  1. 1 1
      Application/app/protocol_old.c
  2. 10 2
      Application/app/sox/measure.c
  3. 14 0
      Application/app/sox/state.c
  4. 1 1
      Application/bsp/shark_bsp.h

+ 1 - 1
Application/app/protocol_old.c

@@ -47,7 +47,7 @@ static int get_response_data(uint8_t *data, uint8_t operate, uint8_t result){
 	head->dir = 0x16;
 	head->dir = 0x16;
 	head->bStatus = 1;
 	head->bStatus = 1;
 	head->cmd = 0x10;
 	head->cmd = 0x10;
-	head->protocol = 'B';
+	head->protocol = 'C';
 	head->checksum = 0;
 	head->checksum = 0;
 
 
 	comm_response_t *response = (comm_response_t *)head->data;
 	comm_response_t *response = (comm_response_t *)head->data;

+ 10 - 2
Application/app/sox/measure.c

@@ -67,22 +67,30 @@ static void current_10x_calibrate(void){
 	/* calibrate the 10x gain */
 	/* calibrate the 10x gain */
 	ML5238_IMON_OUT_ZERO_10X();
 	ML5238_IMON_OUT_ZERO_10X();
 	vim0_10x = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
 	vim0_10x = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
+#if 0	
 	ML5238_IMON_OUT_V2000_10X();
 	ML5238_IMON_OUT_V2000_10X();
 	float vim1 = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
 	float vim1 = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
 	ML5238_IMON_OUT_V100_10X();
 	ML5238_IMON_OUT_V100_10X();
 	float vr = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
 	float vr = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
-	imon_gain_10x = 10.0f;//ML5238_GAIN(vim0_10x, vim1, vr);
+	imon_gain_10x = ML5238_GAIN(vim0_10x, vim1, vr);
+#else
+	imon_gain_10x = 10.0f;
+#endif
 }
 }
 
 
 static void current_50x_calibrate(void){
 static void current_50x_calibrate(void){
 	/* calibrate the 50x gain */
 	/* calibrate the 50x gain */
 	ML5238_IMON_OUT_ZERO_50X();
 	ML5238_IMON_OUT_ZERO_50X();
 	vim0_50x = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
 	vim0_50x = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
+#if 0
 	ML5238_IMON_OUT_V2000_50X();
 	ML5238_IMON_OUT_V2000_50X();
 	float vim1 = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
 	float vim1 = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
 	ML5238_IMON_OUT_V20_50X();
 	ML5238_IMON_OUT_V20_50X();
 	float vr = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
 	float vr = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
-	imon_gain_50x = 50.0f;//ML5238_GAIN(vim0_50x, vim1, vr);
+	imon_gain_50x = ML5238_GAIN(vim0_50x, vim1, vr);
+#else
+	imon_gain_50x = 50.0f;
+#endif
 }
 }
 
 
 /*calibrate when startup && temperature is changed more than 5? degree
 /*calibrate when startup && temperature is changed more than 5? degree

+ 14 - 0
Application/app/sox/state.c

@@ -492,6 +492,20 @@ static void _voltage_notify(void){
 }
 }
 
 
 static void _temperature_notify(void){
 static void _temperature_notify(void){
+	static int8_t pcb_temp = 100;
+	static int pcb_temp_count = 0;
+	if (pcb_temp == 100) {
+		pcb_temp = measure_value()->pack_temp[PCB_TEMP_INDEX];
+	}else {
+		if (abs(pcb_temp - measure_value()->pack_temp[PCB_TEMP_INDEX]) >= 5){//pcb温度变化超过5度,需要重新校准ML5238
+			if (pcb_temp_count ++ >= 5) {
+				current_calibrate();
+				pcb_temp = measure_value()->pack_temp[PCB_TEMP_INDEX];
+			}
+		}else {
+			pcb_temp_count = 0;
+		}
+	}
 	check_temp_state(); //check health of cell/pcb temperature
 	check_temp_state(); //check health of cell/pcb temperature
 }
 }
 
 

+ 1 - 1
Application/bsp/shark_bsp.h

@@ -27,7 +27,7 @@
 
 
 #define CELLS_NUM 15
 #define CELLS_NUM 15
 #define PACK_TEMPS_NUM 4
 #define PACK_TEMPS_NUM 4
-
+#define PCB_TEMP_INDEX 3
 #define GD32_ADC (1<<0)
 #define GD32_ADC (1<<0)
 #define CS1180_ADC (1<<1)
 #define CS1180_ADC (1<<1)