159 lines
4.0 KiB
C
159 lines
4.0 KiB
C
|
|
/*----------------------------------------------------------------*
|
|||
|
|
* *
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ѹ<EFBFBD><EFBFBD>ȡģ<EFBFBD><EFBFBD> *
|
|||
|
|
* *
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>Ǯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
|
|||
|
|
* *
|
|||
|
|
* ʱ<EFBFBD>䣺2017-02-10 *
|
|||
|
|
* *
|
|||
|
|
*----------------------------------------------------------------*/
|
|||
|
|
|
|||
|
|
#include "includes.h"
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ŵ<EFBFBD><C5B5>ı<EFBFBD><C4B1><EFBFBD>־
|
|||
|
|
uint8_t bat_CurrentEvent = 0;
|
|||
|
|
uint32_t Poweroff_time = 0;
|
|||
|
|
|
|||
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
void Battery_Init(void)
|
|||
|
|
{
|
|||
|
|
// ADC<44><43>ʼ<EFBFBD><CABC><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>һ<EFBFBD><D2BB>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Battery_Open()
|
|||
|
|
{
|
|||
|
|
// ADC<44><43>ʼ<EFBFBD><CABC><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>һ<EFBFBD><D2BB>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
uint32_t DS2788_ReadBattery(data_dtu_t *sample)
|
|||
|
|
{
|
|||
|
|
uint32_t adc = 0;
|
|||
|
|
static uint8_t last_PowerStatus = 0;
|
|||
|
|
uint8_t powerStatus;
|
|||
|
|
int16_t voltMulti = 1; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
// Ϊ<>˱<EFBFBD><CBB1><EFBFBD>ADCģ<43><C4A3><EFBFBD><EFBFBD>ʹ<EFBFBD>ó<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ִ<EFBFBD><D6B4>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>ã<EFBFBD><C3A3>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ص<EFBFBD>ѹ<EFBFBD><D1B9>adcֵ<63><D6B5><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
// <20>˴<EFBFBD>ֱ<EFBFBD><D6B1>ȡ<EFBFBD><C8A1>ʹ<EFBFBD><CAB9>
|
|||
|
|
adc = dcBuff.sampleData.adWeight;
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>λmV (3000mv * 610K / 100K / 4095 = 4.468864<EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><EFBFBD><EFBFBD>ѹ3.0v<EFBFBD><EFBFBD>100K/610K<30><4B>ѹ)
|
|||
|
|
sample->batVoltage = adc * 4.468864;
|
|||
|
|
// <20><><EFBFBD>ص<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
sample->batVoltage += 80;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(sample->batVoltage >= 5800)
|
|||
|
|
voltMulti = sample->batVoltage / 2900;
|
|||
|
|
|
|||
|
|
if(!dcBuff.configDisplay.op_SEND_GPS_DATA)
|
|||
|
|
{
|
|||
|
|
if(sample->batVoltage >= 3580 * voltMulti)
|
|||
|
|
sample->batPct = 100;
|
|||
|
|
else if(sample->batVoltage >= 3510 * voltMulti)
|
|||
|
|
sample->batPct = 80;
|
|||
|
|
else if(sample->batVoltage >= 3410 * voltMulti)
|
|||
|
|
sample->batPct = 60;
|
|||
|
|
else if(sample->batVoltage >= 3310 * voltMulti)
|
|||
|
|
sample->batPct = 40;
|
|||
|
|
else if(sample->batVoltage >= 3210 * voltMulti)
|
|||
|
|
sample->batPct = 20;
|
|||
|
|
else if(sample->batVoltage >= 3110 * voltMulti)
|
|||
|
|
sample->batPct = 10;
|
|||
|
|
else if(sample->batVoltage >= 3010 * voltMulti)
|
|||
|
|
sample->batPct = 5;
|
|||
|
|
else
|
|||
|
|
sample->batPct = 0;
|
|||
|
|
|
|||
|
|
sample->batMaxCapa = 65535;
|
|||
|
|
adc = 76000ul / 100 * sample->batPct;
|
|||
|
|
if(adc > 65535)
|
|||
|
|
sample->batCapa = 65535;
|
|||
|
|
else
|
|||
|
|
sample->batCapa = adc;
|
|||
|
|
}
|
|||
|
|
else // <20>۳<EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
if(sample->batVoltage >= 4180)
|
|||
|
|
sample->batPct = 100;
|
|||
|
|
else if(sample->batVoltage >= 4060)
|
|||
|
|
sample->batPct = 90;
|
|||
|
|
else if(sample->batVoltage >= 3980)
|
|||
|
|
sample->batPct = 80;
|
|||
|
|
else if(sample->batVoltage >= 3920)
|
|||
|
|
sample->batPct = 70;
|
|||
|
|
else if(sample->batVoltage >= 3870)
|
|||
|
|
sample->batPct = 60;
|
|||
|
|
else if(sample->batVoltage >= 3820)
|
|||
|
|
sample->batPct = 50;
|
|||
|
|
else if(sample->batVoltage >= 3790)
|
|||
|
|
sample->batPct = 40;
|
|||
|
|
else if(sample->batVoltage >= 3770)
|
|||
|
|
sample->batPct = 30;
|
|||
|
|
else if(sample->batVoltage >= 3740)
|
|||
|
|
sample->batPct = 20;
|
|||
|
|
else if(sample->batVoltage >= 3680)
|
|||
|
|
sample->batPct = 10;
|
|||
|
|
else if(sample->batVoltage >= 3450)
|
|||
|
|
sample->batPct = 5;
|
|||
|
|
else
|
|||
|
|
sample->batPct = 0;
|
|||
|
|
|
|||
|
|
sample->batMaxCapa = 3000;
|
|||
|
|
sample->batCapa = sample->batMaxCapa / 100 * sample->batPct;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sample->batTempr = 0;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5>ı<EFBFBD><C4B1><EFBFBD>־
|
|||
|
|
powerStatus = VCC_POWER_STATUS();
|
|||
|
|
if(powerStatus)
|
|||
|
|
sample->batCurrent = 1;
|
|||
|
|
else
|
|||
|
|
sample->batCurrent = -1;
|
|||
|
|
|
|||
|
|
if(last_PowerStatus != powerStatus)
|
|||
|
|
bat_CurrentEvent = 1;
|
|||
|
|
else
|
|||
|
|
bat_CurrentEvent = 0;
|
|||
|
|
last_PowerStatus = powerStatus;
|
|||
|
|
|
|||
|
|
if(!dcBuff.configDisplay.op_SEND_GPS_DATA)
|
|||
|
|
{
|
|||
|
|
bat_veryLow = 0;
|
|||
|
|
sample->batLow = 0;
|
|||
|
|
}
|
|||
|
|
else // <20>۳<EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
// <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>3.77v(30%)<29><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬
|
|||
|
|
// <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>3.82v(50%)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
|
if(sample->batVoltage <= 3770)
|
|||
|
|
bat_veryLow = 1;
|
|||
|
|
if(sample->batVoltage >= 3820)
|
|||
|
|
bat_veryLow = 0;
|
|||
|
|
|
|||
|
|
// <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>3.82v(50%)<29><>Ϊ<EFBFBD><CEAA>״̬
|
|||
|
|
// <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>3.92v(70%)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
|
sample->batLow = dcBuff.dtuData.batLow;
|
|||
|
|
if(sample->batVoltage <= 3820)
|
|||
|
|
sample->batLow = 1;
|
|||
|
|
if(sample->batVoltage >= 3920)
|
|||
|
|
sample->batLow = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ӡ<EFBFBD><D3A1>Ϣ
|
|||
|
|
printf("batVoltage:\t%.2f v\n", (sample->batVoltage / 10) / 100.0);
|
|||
|
|
if(dcBuff.configDisplay.op_SEND_GPS_DATA)
|
|||
|
|
{
|
|||
|
|
printf("\nbat_veryLow:\t%d\n", bat_veryLow);
|
|||
|
|
printf("batLow:\t\t%d\n", sample->batLow);
|
|||
|
|
}
|
|||
|
|
printf("batPct:\t\t%d %%\n", sample->batPct);
|
|||
|
|
printf("batCapa:\t%d mAhr\n", sample->batCapa);
|
|||
|
|
printf("batMaxCapa:\t%d mAhr\n", sample->batMaxCapa);
|
|||
|
|
printf("batCurrent:\t%d mA\n", sample->batCurrent);
|
|||
|
|
// printf("batTempr:\t%d <20><>\n", sample->batTempr);
|
|||
|
|
|
|||
|
|
return TRUE;
|
|||
|
|
}
|