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 SARADC reference voltage:1.8V
*/ */
volt = 25 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 512; volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 511;
return volt; return volt;
} }
@ -94,7 +94,7 @@ UINT32 sf_battery_convert_to_adc(UINT32 resistanceGnd, UINT32 resistanceVin, UIN
{ {
UINT32 adcVal = 0; UINT32 adcVal = 0;
adcVal = volt * resistanceGnd * 512 / 25 / (resistanceGnd + resistanceVin); adcVal = volt * resistanceGnd * 511 / 27 / (resistanceGnd + resistanceVin);
return adcVal; return adcVal;
} }
@ -288,17 +288,19 @@ UINT32 sf_battery_adc_value_get_once(void)
if(sf_adc_value_get(SF_ADC_DC, &batAdc) == SUCCESS) if(sf_adc_value_get(SF_ADC_DC, &batAdc) == SUCCESS)
{ {
dcVoltageVal = sf_battery_voltage_convert(10, 100, batAdc); dcVoltageVal = sf_battery_voltage_convert(10, 100, batAdc);
dcVoltageVal += 2;
} }
if(sf_adc_value_get(SF_ADC_LI, &batAdc) == SUCCESS) if(sf_adc_value_get(SF_ADC_LI, &batAdc) == SUCCESS)
{ {
liPolymerVoltageVal = sf_battery_voltage_convert(15, 100, batAdc); liPolymerVoltageVal = sf_battery_voltage_convert(15, 100, batAdc);
liPolymerVoltageVal += 2;
} }
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(15, 100, batAdc); batVoltageVal = sf_battery_voltage_convert(15, 100, batAdc);
batVoltageVal += 3; batVoltageVal += 2;
} }
_DcVoltageVal = dcVoltageVal; _DcVoltageVal = dcVoltageVal;
@ -729,15 +731,15 @@ void sf_battery_level_polling(void)
if(puiPara->BatteryLogSwitch) 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) 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 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); void sf_set_need_check_first(void);
BOOL sf_is_enough_power_to_update(void); BOOL sf_is_enough_power_to_update(void);
BOOL sf_is_battery_low(UINT8 refresh, UINT8 nightMode); BOOL sf_is_battery_low(UINT8 refresh, UINT8 nightMode);
void sf_BatteryInfoSave(char *name);
#endif #endif

View File

@ -69,6 +69,10 @@ ID FLG_ID_SF_BSTTERY = 0;
#define SF_DC_IN_VOLATAGE 70 #define SF_DC_IN_VOLATAGE 70
#define SF_LI_IN_VOLATAGE 99 #define SF_LI_IN_VOLATAGE 99
#if SF_BATTERY_TEST == ENABLE
UINT32 LiPolymerVoltageValTest = 0;
UINT32 BatVoltageValTest = 0;
#endif
/************************************************* /*************************************************
Function: sf_battery_voltage_convert Function: sf_battery_voltage_convert
Description: 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 SARADC reference voltage:1.8V
*/ */
volt = 25 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 512; volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 511;
return volt; return volt;
} }
@ -95,7 +99,7 @@ UINT32 sf_battery_convert_to_adc(UINT32 resistanceGnd, UINT32 resistanceVin, UIN
{ {
UINT32 adcVal = 0; UINT32 adcVal = 0;
adcVal = volt * resistanceGnd * 512 / 25 / (resistanceGnd + resistanceVin); adcVal = volt * resistanceGnd * 511 / 27 / (resistanceGnd + resistanceVin);
return adcVal; return adcVal;
} }
@ -132,6 +136,8 @@ void sf_adc_init(void)
// Enable adc control logic // Enable adc control logic
adc_setEnable(TRUE); adc_setEnable(TRUE);
gpio_direction_output(P_GPIO_0,0);
gpio_direction_output(P_GPIO_1,0);
} }
/************************************************* /*************************************************
Function: sf_adc_value_get Function: sf_adc_value_get
@ -144,7 +150,7 @@ void sf_adc_init(void)
UINT32 sf_adc_value_get(UINT32 mux, UINT32 *pval) UINT32 sf_adc_value_get(UINT32 mux, UINT32 *pval)
{ {
static UINT8 getAdcFlg = 0; static UINT8 getAdcFlg = 0;
static UINT8 outputflag = 1; //static UINT8 outputflag = 1;
*pval = 0; *pval = 0;
if(getAdcFlg) if(getAdcFlg)
@ -153,13 +159,6 @@ UINT32 sf_adc_value_get(UINT32 mux, UINT32 *pval)
} }
getAdcFlg = 1; 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 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 gpio_set_value(P_GPIO_1, 1);//adc_muxb
} }
//vos_util_delay_us(500); //vos_util_delay_us(400);
vos_util_delay_ms(1); vos_util_delay_ms(1);
*pval = adc_readData(0); *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) if(sf_adc_value_get(SF_ADC_DC, &batAdc) == SUCCESS)
{ {
dcVoltageVal = sf_battery_voltage_convert(10, 100, batAdc); dcVoltageVal = sf_battery_voltage_convert(10, 100, batAdc);
dcVoltageVal += 4;
} }
if(sf_adc_value_get(SF_ADC_LI, &batAdc) == SUCCESS) if(sf_adc_value_get(SF_ADC_LI, &batAdc) == SUCCESS)
{ {
liPolymerVoltageVal = sf_battery_voltage_convert(15, 100, batAdc); liPolymerVoltageVal = sf_battery_voltage_convert(15, 100, batAdc);
liPolymerVoltageVal += 4;
} }
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(15, 100, batAdc); batVoltageVal = sf_battery_voltage_convert(15, 100, batAdc);
batVoltageVal += 3; batVoltageVal += 4;
} }
_DcVoltageVal = dcVoltageVal; _DcVoltageVal = dcVoltageVal;
@ -640,7 +641,10 @@ signed int sf_battery_value_fast_get(void)
ret = SUCCESS; ret = SUCCESS;
} }
#if SF_BATTERY_TEST == ENABLE
LiPolymerVoltageValTest = LiPolymerVoltageVal;
BatVoltageValTest = BatVoltageVal;
#endif
return ret; return ret;
} }
@ -827,7 +831,7 @@ void sf_battery_thread_init(void)
if(!dofirst) if(!dofirst)
return; return;
dofirst = 0; dofirst = 0;
sf_adc_init();
VK_TASK_HANDLE s_handle_batt = 0; VK_TASK_HANDLE s_handle_batt = 0;
vos_flag_create(&FLG_ID_SF_BSTTERY, NULL, "FLG_ID_SF_BSTTERY"); 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) BOOL sf_battery_check_init(void)
{ {
if(sf_battery_value_fast_get() == SUCCESS) sf_adc_init();
{ if(sf_is_battery_low(1, 0) == TRUE)
if(sf_is_battery_low(0, 0) == TRUE)
{ {
printf("[%s:%d]power off because low battery\n", __FUNCTION__, __LINE__); printf("[%s:%d]power off because low battery\n", __FUNCTION__, __LINE__);
//Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_BATT_EMPTY); //shutdown start //Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_BATT_EMPTY); //shutdown start
#if SF_IQ_TEST != ENABLE
sf_set_power_off_flag(1); sf_set_power_off_flag(1);
flow_preview_set_stop_flag(TRUE); flow_preview_set_stop_flag(TRUE);
return FALSE;
}
}
else
{
return FALSE;
}
#if HW_S530
sf_view_osd_battery_draw(TRUE);
#endif #endif
}
return TRUE; return TRUE;
} }
void sf_set_need_check_first(void) void sf_set_need_check_first(void)
@ -1276,5 +1272,55 @@ BOOL sf_is_enough_power_to_update(void)
return TRUE; 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 #endif

View File

@ -35,6 +35,7 @@
#include <unistd.h> #include <unistd.h>
#include <sf_i2c_driver.h> #include <sf_i2c_driver.h>
#include "PrjCfg.h" #include "PrjCfg.h"
#include "sf_battery.h"
static UINT8 McuSubVersion = 0; static UINT8 McuSubVersion = 0;
static UINT16 McuVersion = 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("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 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); 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) if (attrId > SF_MCU_PARAM_MAX)
{ {
printf("attrId ERROR!\n"); printf("attrId ERROR!\n");
@ -2193,6 +2194,11 @@ void sf_add_file_name_to_send_list(char *sendfname)
close(fd); close(fd);
printf("Add Success st_size:%ld\n", st.st_size); 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 #if defined __FREERTOS