1.电压测试软件并更新电压计算

This commit is contained in:
payton 2023-07-07 10:18:34 +08:00
parent be89f163b9
commit 5c6d89d3b6
4 changed files with 94 additions and 39 deletions

View File

@ -85,7 +85,7 @@ UINT32 sf_battery_voltage_convert(UINT32 resistanceGnd, UINT32 resistanceVin, UI
SARADC reference voltage:1.8V
*/
volt = 25 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 512;
volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 511;
return volt;
}
@ -94,7 +94,7 @@ UINT32 sf_battery_convert_to_adc(UINT32 resistanceGnd, UINT32 resistanceVin, UIN
{
UINT32 adcVal = 0;
adcVal = volt * resistanceGnd * 512 / 25 / (resistanceGnd + resistanceVin);
adcVal = volt * resistanceGnd * 511 / 27 / (resistanceGnd + resistanceVin);
return adcVal;
}
@ -288,17 +288,19 @@ UINT32 sf_battery_adc_value_get_once(void)
if(sf_adc_value_get(SF_ADC_DC, &batAdc) == SUCCESS)
{
dcVoltageVal = sf_battery_voltage_convert(10, 100, batAdc);
dcVoltageVal += 2;
}
if(sf_adc_value_get(SF_ADC_LI, &batAdc) == SUCCESS)
{
liPolymerVoltageVal = sf_battery_voltage_convert(15, 100, batAdc);
liPolymerVoltageVal += 2;
}
if(sf_adc_value_get(SF_ADC_BATT, &batAdc) == SUCCESS)
{
batVoltageVal = sf_battery_voltage_convert(15, 100, batAdc);
batVoltageVal += 3;
batVoltageVal += 2;
}
_DcVoltageVal = dcVoltageVal;
@ -729,15 +731,15 @@ void sf_battery_level_polling(void)
if(puiPara->BatteryLogSwitch)
{
printf("\n[average]DC,After Convert:(%d.%dV),Is Dc In=%s\n", DcVoltageVal / 10, DcVoltageVal % 10, IsPowerDcIn == 1? "Yes" : "No");
printf("\n[average]DC Adc:%d After Convert:(%d.%dV),Is Dc In=%s\n", sf_battery_convert_to_adc(10, 100, DcVoltageVal), DcVoltageVal / 10, DcVoltageVal % 10, IsPowerDcIn == 1? "Yes" : "No");
if(LiPolymerVoltageVal)
{
printf("[average]Li Battery,After Convert:(%d.%dV)\n\n", LiPolymerVoltageVal / 10, LiPolymerVoltageVal % 10);
printf("[average]Li Battery Adc:%d After Convert:(%d.%dV)\n\n", sf_battery_convert_to_adc(15, 100, LiPolymerVoltageVal), LiPolymerVoltageVal / 10, LiPolymerVoltageVal % 10);
}
else
{
printf("[average]Other Battery,After Convert:(%d.%dV)\n\n", BatVoltageVal / 10, BatVoltageVal % 10);
printf("[average]Other Battery Adc:%d After Convert:(%d.%dV)\n\n", sf_battery_convert_to_adc(15, 100, BatVoltageVal),BatVoltageVal / 10, BatVoltageVal % 10);
}
}
}

View File

@ -33,4 +33,5 @@ BOOL sf_battery_check_init(void);
void sf_set_need_check_first(void);
BOOL sf_is_enough_power_to_update(void);
BOOL sf_is_battery_low(UINT8 refresh, UINT8 nightMode);
void sf_BatteryInfoSave(char *name);
#endif

View File

@ -69,6 +69,10 @@ ID FLG_ID_SF_BSTTERY = 0;
#define SF_DC_IN_VOLATAGE 70
#define SF_LI_IN_VOLATAGE 99
#if SF_BATTERY_TEST == ENABLE
UINT32 LiPolymerVoltageValTest = 0;
UINT32 BatVoltageValTest = 0;
#endif
/*************************************************
Function: sf_battery_voltage_convert
Description: battery voltage convert
@ -86,7 +90,7 @@ UINT32 sf_battery_voltage_convert(UINT32 resistanceGnd, UINT32 resistanceVin, UI
SARADC reference voltage:1.8V
*/
volt = 25 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 512;
volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 511;
return volt;
}
@ -95,7 +99,7 @@ UINT32 sf_battery_convert_to_adc(UINT32 resistanceGnd, UINT32 resistanceVin, UIN
{
UINT32 adcVal = 0;
adcVal = volt * resistanceGnd * 512 / 25 / (resistanceGnd + resistanceVin);
adcVal = volt * resistanceGnd * 511 / 27 / (resistanceGnd + resistanceVin);
return adcVal;
}
@ -132,6 +136,8 @@ void sf_adc_init(void)
// Enable adc control logic
adc_setEnable(TRUE);
gpio_direction_output(P_GPIO_0,0);
gpio_direction_output(P_GPIO_1,0);
}
/*************************************************
Function: sf_adc_value_get
@ -144,7 +150,7 @@ void sf_adc_init(void)
UINT32 sf_adc_value_get(UINT32 mux, UINT32 *pval)
{
static UINT8 getAdcFlg = 0;
static UINT8 outputflag = 1;
//static UINT8 outputflag = 1;
*pval = 0;
if(getAdcFlg)
@ -153,13 +159,6 @@ UINT32 sf_adc_value_get(UINT32 mux, UINT32 *pval)
}
getAdcFlg = 1;
if(outputflag)
{
outputflag = 0;
gpio_direction_output(P_GPIO_0,0);
gpio_direction_output(P_GPIO_1,0);
vos_util_delay_ms(1);
}
if(SF_ADC_BATT == mux)//bat_det
{
@ -187,7 +186,7 @@ UINT32 sf_adc_value_get(UINT32 mux, UINT32 *pval)
gpio_set_value(P_GPIO_1, 1);//adc_muxb
}
//vos_util_delay_us(500);
//vos_util_delay_us(400);
vos_util_delay_ms(1);
*pval = adc_readData(0);
@ -291,17 +290,19 @@ UINT32 sf_battery_adc_value_get_once(void)
if(sf_adc_value_get(SF_ADC_DC, &batAdc) == SUCCESS)
{
dcVoltageVal = sf_battery_voltage_convert(10, 100, batAdc);
dcVoltageVal += 4;
}
if(sf_adc_value_get(SF_ADC_LI, &batAdc) == SUCCESS)
{
liPolymerVoltageVal = sf_battery_voltage_convert(15, 100, batAdc);
liPolymerVoltageVal += 4;
}
if(sf_adc_value_get(SF_ADC_BATT, &batAdc) == SUCCESS)
{
batVoltageVal = sf_battery_voltage_convert(15, 100, batAdc);
batVoltageVal += 3;
batVoltageVal += 4;
}
_DcVoltageVal = dcVoltageVal;
@ -640,7 +641,10 @@ signed int sf_battery_value_fast_get(void)
ret = SUCCESS;
}
#if SF_BATTERY_TEST == ENABLE
LiPolymerVoltageValTest = LiPolymerVoltageVal;
BatVoltageValTest = BatVoltageVal;
#endif
return ret;
}
@ -827,7 +831,7 @@ void sf_battery_thread_init(void)
if(!dofirst)
return;
dofirst = 0;
sf_adc_init();
VK_TASK_HANDLE s_handle_batt = 0;
vos_flag_create(&FLG_ID_SF_BSTTERY, NULL, "FLG_ID_SF_BSTTERY");
@ -1228,24 +1232,16 @@ BOOL sf_is_battery_low(UINT8 refresh, UINT8 nightMode)
*************************************************/
BOOL sf_battery_check_init(void)
{
if(sf_battery_value_fast_get() == SUCCESS)
{
if(sf_is_battery_low(0, 0) == TRUE)
sf_adc_init();
if(sf_is_battery_low(1, 0) == TRUE)
{
printf("[%s:%d]power off because low battery\n", __FUNCTION__, __LINE__);
//Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_BATT_EMPTY); //shutdown start
#if SF_IQ_TEST != ENABLE
sf_set_power_off_flag(1);
flow_preview_set_stop_flag(TRUE);
return FALSE;
}
}
else
{
return FALSE;
}
#if HW_S530
sf_view_osd_battery_draw(TRUE);
#endif
}
return TRUE;
}
void sf_set_need_check_first(void)
@ -1276,5 +1272,55 @@ BOOL sf_is_enough_power_to_update(void)
return TRUE;
}
#if SF_BATTERY_TEST == ENABLE
void sf_BatteryInfoSave(char *name)
{
char *tmpBuf = NULL;
UINT32 LibatAdc = 0;
UINT32 batAdc = 0;
//char fileName[64] = {0};
int fd = 0;
struct stat st;
tmpBuf = malloc(512);
if (tmpBuf == NULL) {
printf("%s:%d tmpBuf malloc err\n", __FUNCTION__, __LINE__);
return;
}
//snprintf(fileName, sizeof(fileName), "%s", SF_BATTERY_TEST_FILE);
if(access(SF_BATTERY_TEST_FILE, F_OK) == 0)
{
printf("fileName:%s\n",SF_BATTERY_TEST_FILE);
fd = open(SF_BATTERY_TEST_FILE, O_APPEND | O_WRONLY);
}
else {
fd = open(SF_BATTERY_TEST_FILE, O_APPEND | O_WRONLY | O_CREAT);
}
LibatAdc = sf_battery_convert_to_adc(15, 100, LiPolymerVoltageValTest);
batAdc = sf_battery_convert_to_adc(15, 100, BatVoltageValTest);
sprintf(tmpBuf, "%s BatAdc=%lu BatVal=%lu LiBatAdc=%lu LiBatVal=%lu\r\n", name, batAdc, BatVoltageValTest, LibatAdc, LiPolymerVoltageValTest);
printf("%s\r", tmpBuf);
if(fd)
{
fstat(fd, &st);
lseek(fd, 0, SEEK_END);
write(fd, tmpBuf, strlen(tmpBuf));
close(fd);
printf("Add Success st_size:%ld\n", st.st_size);
}
free(tmpBuf);
}
#endif
#endif

View File

@ -35,6 +35,7 @@
#include <unistd.h>
#include <sf_i2c_driver.h>
#include "PrjCfg.h"
#include "sf_battery.h"
static UINT8 McuSubVersion = 0;
static UINT16 McuVersion = 0;
@ -1375,7 +1376,7 @@ UINT8 sf_mcu_reg_set(MCUParam_t attrId, UINT8 val)
printf("Firmware compile time:%s %s VER:%s\n", __DATE__, __TIME__,SF_BASE_VERSION);
printf("%s:%d DailyReportSwitch=%d %02d:%02d\n",__FUNCTION__,__LINE__, puiPara->DailyReportSwitch, puiPara->DailyReportTime2.Hour, puiPara->DailyReportTime2.Min);
printf("%s:%d isUsb = %d isCard = %d isCardFull = %d val = %d simCardInsert = %ld start mode = %d\n",__FUNCTION__,__LINE__, isUsb, isCard, isCardFull, val, simCardInsert, PowerOnMode);
sf_mcu_get_irshtter();
if (attrId > SF_MCU_PARAM_MAX)
{
printf("attrId ERROR!\n");
@ -2193,6 +2194,11 @@ void sf_add_file_name_to_send_list(char *sendfname)
close(fd);
printf("Add Success st_size:%ld\n", st.st_size);
}
#if SF_BATTERY_TEST == ENABLE
char str1[5] = { 0 };
memcpy(str1, sendfname + 4, 4);
sf_BatteryInfoSave(str1);
#endif
}
#if defined __FREERTOS