Beispiel #1
0
static int shell_adcalib(int argc, char *argv[])
{
	int i;

	i = ReadBatVol();
	PrintLog(0, "电池电压: %dmV\n", i);
	i = ReadTemperature();
	PrintLog(0, "当前温度: %d.%dC\n", i/10, i%10);

	return 0;
}
Beispiel #2
0
/**
* @brief 可充电电池监测
*/
static void BatteryMonitor(void)
{
#define VOL_CHARGE		4800
#define VOL_UNCHARGE	5700
#define VOL_BATLOW		3000
#define VOL_BATBAD		5810
#define BATCAP_CHK		((VOL_UNCHARGE-VOL_CHARGE)/8)

	int batv = ReadBatVol();

	if(batv < VOL_BATLOW) {  // 没插电池
		BatCapacityStatus = 0;
		//GpioSetValue(GPIO_BAT_CHARGE, 0);  //停止充电
		if(0 == RunState.batbad) {
			PrintLog(LOGTYPE_ALARM, "battery disconnected!\n");
			RunStateModify()->batbad = 1;
		}
		/*if(RunState.batcharge) {
			PrintLog(LOGTYPE_ALARM, "battery stop charge\n");
			RunStateModify()->batcharge = 0;
		}*/
		return;
	}
	else if(RunState.batbad) {
		PrintLog(LOGTYPE_ALARM, "battery connected!\n");
		RunStateModify()->batbad = 0;
	}

	

	if(batv < VOL_UNCHARGE) {
		GpioSetValue(GPIO_BAT_CHARGE, 1);  //充电
		if(0 == RunState.batcharge) {
			PrintLog(LOGTYPE_ALARM, "battery start charge\n");
			RunStateModify()->batcharge = 1;
		}
	}
	else {
		GpioSetValue(GPIO_BAT_CHARGE, 0);  //停止充电
		if(RunState.batcharge) {
			PrintLog(LOGTYPE_ALARM, "battery stop charge\n");
			RunStateModify()->batcharge = 0;
		}
	}

	if(batv <= (VOL_CHARGE+BATCAP_CHK)) BatCapacityStatus = 0;
	else if(batv >= (VOL_UNCHARGE-BATCAP_CHK)) BatCapacityStatus = 3;
	else if(batv < ((VOL_UNCHARGE+VOL_CHARGE)/2)) BatCapacityStatus = 1;
	else BatCapacityStatus = 2;
}