batteryservice_get_voltage_by_channel(&cur_vol,ADC_CHANNEL_BAT_VOLTAGE);
- if(bat_vol.percent > 0 && bat_vol.percent<=100 && (fabsf(cur_vol - bat_vol.avg_vol) < 0.15))
+ if(bat_vol.percent > 0 && bat_vol.percent<=100 && (fabsf(cur_vol - bat_vol.avg_vol) < 0.25))
history_percent = bat_vol.percent;
// for(int i = 0; i < AVG_VOLTAGE_COUNT;i++)
// {
uint32_t current_time = 0;
float max_vol = 0;
float min_vol = 0;
+ float sum_vol = 0;
get_timestampe_ss(¤t_time);
if(history_time == 0)
history_time = current_time;
{
if(bat_vol.vol_num > 2)
{
- min_vol = bat_vol.history_data[0];
- max_vol = bat_vol.history_data[0];
- for (int i = 0;i < bat_vol.vol_num; i++)
+
+ float valid_data[AVG_VOLTAGE_COUNT] = {0};
+ int valid_idx = 0;
+ for (int i = 0; i < AVG_VOLTAGE_COUNT; i++)
{
+ if (bat_vol.history_data[i] >= 3.25 && bat_vol.history_data[i] <= 4.45)
+ {
+ valid_data[valid_idx++] = bat_vol.history_data[i];
+ sum_vol+=bat_vol.history_data[i];
+ PRINT("333history_data[%d] : %.3f\n",i,bat_vol.history_data[i]);
+ }
+ }
- PRINT("333history_data[%d] : %.3f\n",i,bat_vol.history_data[i]);
- if (bat_vol.history_data[i] < min_vol)
- min_vol = bat_vol.history_data[i];
- if (bat_vol.history_data[i] > max_vol)
- max_vol = bat_vol.history_data[i];
+ if (valid_idx > 2)
+ {
+ min_vol = valid_data[0];
+ max_vol = valid_data[0];
+ for (int i = 1; i < valid_idx; i++)
+ {
+ if (valid_data[i] < min_vol) min_vol = valid_data[i];
+ if (valid_data[i] > max_vol) max_vol = valid_data[i];
+ }
+ // 去掉最大/最小值计算平均值
+ bat_vol.avg_vol = (sum_vol - max_vol - min_vol) / (valid_idx - 2);
}
-
-
- bat_vol.avg_vol = (bat_vol.sum_vol - max_vol - min_vol) / (bat_vol.vol_num - 2);
- printf("avg_vol : %.3f\n",bat_vol.avg_vol);
- // *vol = (bat_vol.sum_vol - max_vol - min_vol) / (bat_vol.vol_num - 2);
- // printf("avg_vol : %.3f\n",*vol);
+ else
+ {
+ bat_vol.avg_vol = sum_vol / valid_idx;
+ }
+
+ if(sum_vol != bat_vol.sum_vol)
+ {
+ printf("sum_vol:%.3f != bat_vol.sum_vol:%.3f\n",sum_vol,bat_vol.sum_vol);
+ // bat_vol.sum_vol = sum_vol;
+ memset_s(&bat_vol,sizeof(BAT_VOL_T),0,sizeof(BAT_VOL_T));
+ bat_vol.right = -1;
+ }
+
}
- else
+ else {
bat_vol.avg_vol = bat_vol.sum_vol / bat_vol.vol_num;
- // *vol = bat_vol.sum_vol / bat_vol.vol_num;
+ }
+ printf("avg_vol : %.3f\n",bat_vol.avg_vol);
}
}