|
|
@@ -71,7 +71,7 @@ static void current_10x_calibrate(void){
|
|
|
float vim1 = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
|
|
|
ML5238_IMON_OUT_V100_10X();
|
|
|
float vr = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
|
|
|
- imon_gain_10x = ML5238_GAIN(vim0_10x, vim1, vr);
|
|
|
+ imon_gain_10x = 10.0f;//ML5238_GAIN(vim0_10x, vim1, vr);
|
|
|
}
|
|
|
|
|
|
static void current_50x_calibrate(void){
|
|
|
@@ -110,13 +110,14 @@ void measure_adc_init(void){
|
|
|
/* get battery pack's current (mA) */
|
|
|
static float get_pack_current_by_gd(void){
|
|
|
float adc = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
|
|
|
- if (adc >= (max_gd_adc - 0xF) && (!_is_x10_gain())){//overflow, use 10x gain
|
|
|
+ if (adc >= (max_gd_adc - 255.0f) && (!_is_x10_gain())){//overflow, use 10x gain
|
|
|
select_gain_10x(1);
|
|
|
adc = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
|
|
|
- }else if (adc <= 0x1F && (_is_x10_gain())){// is too small, select 50x gain
|
|
|
+ }else if (abs(adc - vim0_now) <= 255.0f && (_is_x10_gain())){// is too small, select 50x gain
|
|
|
select_gain_10x(0);
|
|
|
adc = adc_sample_avg(ADC_CHAN_IMON, GD32_ADC_READ_TIMES);
|
|
|
}
|
|
|
+
|
|
|
float cali_adc = ML5238_V_RSENSER(adc, vim0_now, imon_gain_now);
|
|
|
|
|
|
return (int)((cali_adc / max_gd_adc) * v_gd_ref / r_sense * 1000);
|
|
|
@@ -128,8 +129,11 @@ static float get_pack_current_by_cs1180(int *valid){
|
|
|
return (vol / r_sense) * 1000 - 5.0f;//°å×ӹ̶¨5MA£¬cs1180ÎÞ·¨²âÁ¿µ½
|
|
|
}
|
|
|
|
|
|
-float get_pack_current(void){
|
|
|
+float get_pack_current(int *current_5238){
|
|
|
float current = get_pack_current_by_gd();
|
|
|
+ if (current_5238 != NULL){
|
|
|
+ *current_5238 = (int)current;
|
|
|
+ }
|
|
|
if (cs1180_change_gain(current) == 0) {
|
|
|
int valid = 1;
|
|
|
float cs1180_current = get_pack_current_by_cs1180(&valid);
|