1.电池检测更新(该计算方式误差也大)

This commit is contained in:
payton 2023-08-30 18:43:41 +08:00
parent de86887968
commit b3eeab62bb
2 changed files with 75 additions and 10 deletions

View File

@ -103,7 +103,30 @@ UINT32 sf_battery_voltage_convert(UINT32 resistanceGnd, UINT32 resistanceVin, UI
*/ */
//volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 511; //volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 511;
volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 2696; //volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 2696;
volt = (27 * adcVal + 3097) / 531;
return volt;
}
/*************************************************
Function: sf_aa_battery_voltage_convert
Description: battery voltage convert
Input: resistanceGnd:Grounding terminal resistance,resistanceVin:Input resistance,adcVal:adc val
Output: N/A
Return: Volt * 10
Others: N/A
*************************************************/
UINT32 sf_aa_battery_voltage_convert(UINT32 resistanceGnd, UINT32 resistanceVin, UINT32 adcVal)
{
UINT32 volt = 0;
/*511 * (detected voltage) / (SARADC reference voltage)
DC input voltage x resistanceGnd/(resistanceGnd + resistanceVin) = detected voltage,
SARADC reference voltage:1.8V
*/
//volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 511;
volt = (27 * adcVal + 554) / 539;
return volt; return volt;
} }
@ -112,10 +135,20 @@ UINT32 sf_battery_convert_to_adc(UINT32 resistanceGnd, UINT32 resistanceVin, UIN
UINT32 adcVal = 0; UINT32 adcVal = 0;
//adcVal = volt * resistanceGnd * 511 / 27 / (resistanceGnd + resistanceVin); //adcVal = volt * resistanceGnd * 511 / 27 / (resistanceGnd + resistanceVin);
adcVal = volt * resistanceGnd * 2696 / 27 / (resistanceGnd + resistanceVin); //adcVal = volt * resistanceGnd * 2696 / 27 / (resistanceGnd + resistanceVin);
adcVal = (volt * 531 - 3097) / 27;
return adcVal; return adcVal;
} }
UINT32 sf_aa_battery_convert_to_adc(UINT32 resistanceGnd, UINT32 resistanceVin, UINT32 volt)
{
UINT32 adcVal = 0;
//adcVal = volt * resistanceGnd * 511 / 27 / (resistanceGnd + resistanceVin);
//adcVal = volt * resistanceGnd * 2696 / 27 / (resistanceGnd + resistanceVin);
adcVal = (volt * 539 - 554) / 27;
return adcVal;
}
UINT32 sf_get_max_value(UINT32 *_ValueList) UINT32 sf_get_max_value(UINT32 *_ValueList)
{ {
UINT8 readBatCnt = 0; UINT8 readBatCnt = 0;
@ -320,7 +353,7 @@ UINT32 sf_battery_adc_value_get_once(void)
if(sf_adc_value_get(SF_ADC_BATT, &batAdc) == SUCCESS) if(sf_adc_value_get(SF_ADC_BATT, &batAdc) == SUCCESS)
{ {
batVoltageVal = sf_battery_voltage_convert(24, 100, batAdc); batVoltageVal = sf_aa_battery_voltage_convert(24, 100, batAdc);
//batVoltageVal += 2; //batVoltageVal += 2;
if(puiPara->BatteryLogSwitch) if(puiPara->BatteryLogSwitch)
printf("Bat ADC Value:%d After Convert:%d(%d.%dV)\n",batAdc,batVoltageVal,batVoltageVal/10,batVoltageVal%10); printf("Bat ADC Value:%d After Convert:%d(%d.%dV)\n",batAdc,batVoltageVal,batVoltageVal/10,batVoltageVal%10);
@ -638,7 +671,7 @@ signed int sf_battery_value_fast_get(void)
if(puiPara->BatteryLogSwitch) if(puiPara->BatteryLogSwitch)
{ {
printf("%s:%d [%d]Other Battery ADC Value=%d,After Convert:%d(%d.%dV)\n", __FUNCTION__, __LINE__, readBatCnt + 1, sf_battery_convert_to_adc(24, 100, batValueList[readBatCnt]), printf("%s:%d [%d]Other Battery ADC Value=%d,After Convert:%d(%d.%dV)\n", __FUNCTION__, __LINE__, readBatCnt + 1, sf_aa_battery_convert_to_adc(24, 100, batValueList[readBatCnt]),
batValueList[readBatCnt], batValueList[readBatCnt] / 10, batValueList[readBatCnt] % 10); batValueList[readBatCnt], batValueList[readBatCnt] / 10, batValueList[readBatCnt] % 10);
} }
} }
@ -844,7 +877,7 @@ void sf_battery_level_polling(void)
} }
else else
{ {
printf("[average]Other Battery Adc:%d After Convert:(%d.%dV)\n\n", sf_battery_convert_to_adc(24, 100, BatVoltageVal),BatVoltageVal / 10, BatVoltageVal % 10); printf("[average]Other Battery Adc:%d After Convert:(%d.%dV)\n\n", sf_aa_battery_convert_to_adc(24, 100, BatVoltageVal),BatVoltageVal / 10, BatVoltageVal % 10);
} }
} }
} }

View File

@ -107,7 +107,30 @@ UINT32 sf_battery_voltage_convert(UINT32 resistanceGnd, UINT32 resistanceVin, UI
*/ */
//volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 511; //volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 511;
volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 2696; //volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 2696;
volt = (27 * adcVal + 3097) / 531;
return volt;
}
/*************************************************
Function: sf_aa_battery_voltage_convert
Description: battery voltage convert
Input: resistanceGnd:Grounding terminal resistance,resistanceVin:Input resistance,adcVal:adc val
Output: N/A
Return: Volt * 10
Others: N/A
*************************************************/
UINT32 sf_aa_battery_voltage_convert(UINT32 resistanceGnd, UINT32 resistanceVin, UINT32 adcVal)
{
UINT32 volt = 0;
/*511 * (detected voltage) / (SARADC reference voltage)
DC input voltage x resistanceGnd/(resistanceGnd + resistanceVin) = detected voltage,
SARADC reference voltage:1.8V
*/
//volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 511;
volt = (27 * adcVal + 554) / 539;
return volt; return volt;
} }
@ -116,10 +139,19 @@ UINT32 sf_battery_convert_to_adc(UINT32 resistanceGnd, UINT32 resistanceVin, UIN
UINT32 adcVal = 0; UINT32 adcVal = 0;
//adcVal = volt * resistanceGnd * 511 / 27 / (resistanceGnd + resistanceVin); //adcVal = volt * resistanceGnd * 511 / 27 / (resistanceGnd + resistanceVin);
adcVal = volt * resistanceGnd * 2696 / 27 / (resistanceGnd + resistanceVin); //adcVal = volt * resistanceGnd * 2696 / 27 / (resistanceGnd + resistanceVin);
adcVal = (volt * 531 - 3097) / 27;
return adcVal; return adcVal;
} }
UINT32 sf_aa_battery_convert_to_adc(UINT32 resistanceGnd, UINT32 resistanceVin, UINT32 volt)
{
UINT32 adcVal = 0;
//adcVal = volt * resistanceGnd * 511 / 27 / (resistanceGnd + resistanceVin);
//adcVal = volt * resistanceGnd * 2696 / 27 / (resistanceGnd + resistanceVin);
adcVal = (volt * 539 - 554) / 27;
return adcVal;
}
UINT32 sf_get_max_value(UINT32 *_ValueList) UINT32 sf_get_max_value(UINT32 *_ValueList)
{ {
UINT8 readBatCnt = 0; UINT8 readBatCnt = 0;
@ -349,7 +381,7 @@ UINT32 sf_battery_adc_value_get_once(void)
{ {
if(sf_adc_value_get(SF_ADC_BATT, &batAdc) == SUCCESS) if(sf_adc_value_get(SF_ADC_BATT, &batAdc) == SUCCESS)
{ {
batVoltageVal = sf_battery_voltage_convert(24, 100, batAdc); batVoltageVal = sf_aa_battery_voltage_convert(24, 100, batAdc);
//batVoltageVal += 4; //batVoltageVal += 4;
if(puiPara->BatteryLogSwitch) if(puiPara->BatteryLogSwitch)
printf("Bat ADC Value:%lu After Convert:%lu(%lu.%luV)\n",batAdc,batVoltageVal,batVoltageVal/10,batVoltageVal%10); printf("Bat ADC Value:%lu After Convert:%lu(%lu.%luV)\n",batAdc,batVoltageVal,batVoltageVal/10,batVoltageVal%10);
@ -663,7 +695,7 @@ signed int sf_battery_value_fast_get(void)
if(puiPara->BatteryLogSwitch) if(puiPara->BatteryLogSwitch)
{ {
printf("%s:%d [%d]Other Battery ADC Value=%lu,After Convert:%lu(%lu.%luV)\n", __FUNCTION__, __LINE__, readBatCnt + 1, sf_battery_convert_to_adc(24, 100, batValueList[readBatCnt]), printf("%s:%d [%d]Other Battery ADC Value=%lu,After Convert:%lu(%lu.%luV)\n", __FUNCTION__, __LINE__, readBatCnt + 1, sf_aa_battery_convert_to_adc(24, 100, batValueList[readBatCnt]),
batValueList[readBatCnt], batValueList[readBatCnt] / 10, batValueList[readBatCnt] % 10); batValueList[readBatCnt], batValueList[readBatCnt] / 10, batValueList[readBatCnt] % 10);
} }
} }
@ -1692,7 +1724,7 @@ void sf_battery_print(void)
} }
else else
{ {
printf("Other ADC Value=%lu V:(%lu.%luV)\n", sf_battery_convert_to_adc(24, 100, BatVoltageVal), BatVoltageVal / 10, BatVoltageVal % 10); printf("Other ADC Value=%lu V:(%lu.%luV)\n", sf_aa_battery_convert_to_adc(24, 100, BatVoltageVal), BatVoltageVal / 10, BatVoltageVal % 10);
} }
} }
#endif #endif