Mercurial > public > ostc4
diff Small_CPU/Src/batteryCharger.c @ 981:c6c781a2e85b default
Merge into default
| author | heinrichsweikamp |
|---|---|
| date | Tue, 11 Feb 2025 18:12:00 +0100 |
| parents | d32901746950 |
| children |
line wrap: on
line diff
--- a/Small_CPU/Src/batteryCharger.c Tue Aug 13 13:24:54 2024 +0200 +++ b/Small_CPU/Src/batteryCharger.c Tue Feb 11 18:12:00 2025 +0100 @@ -34,36 +34,17 @@ #include "scheduler.h" -/* Use This compile switch to select the new charger status control implementation */ -#define ENABLE_CHARGER_STATUS_V2 - #define CHARGER_DEBOUNCE_SECONDS (6u) /* 6 seconds used to avoid problems with charger interrupts / disconnections */ -static uint8_t battery_i_charge_status = 0; static uint16_t battery_charger_counter = 0; - -#ifdef ENABLE_CHARGER_STATUS_V2 static chargerState_t batteryChargerState = Charger_NotConnected; -#endif - -/* can be 0, 1 or 255 - * 0 is disconnected - * 1 is charging - * 255 is full - */ -uint8_t get_charge_status(void) -{ - return battery_i_charge_status; -} void set_charge_state(uint8_t newState) { -#ifdef ENABLE_CHARGER_STATUS_V2 if(newState < Charger_END) { batteryChargerState = newState; } -#endif } uint8_t get_charge_state(void) @@ -124,36 +105,20 @@ HAL_GPIO_Init(CHARGE_OUT_GPIO_PORT, &GPIO_InitStructure); } -/* static counter is used to avoid multiple counts of charge startings - and after that it is used, starting at 127 to count for the charge full signal - - there a short disconnections with the QI charger - therefore the battery_charger_counter has a countdown instead of = 0. - - battery_gas_gauge_set_charge_full and scheduleUpdateDeviceDataChargerFull are - set after disconnection as the charging process continues as long as not disconnected - to prevent the short disconnections the battery_charger_counter is used too including - upcounting again while battery_i_charge_status == 255 and the connection is established - - */ - void battery_charger_get_status_and_contral_battery_gas_gauge(uint8_t cycleTimeBase) { -#ifdef ENABLE_CHARGER_STATUS_V2 static uint8_t notifyChargeComplete = 0; -#endif #ifdef OSTC_ON_DISCOVERY_HARDWARE return; #endif -#ifdef ENABLE_CHARGER_STATUS_V2 - if(batteryChargerState == Charger_ColdStart) /* wait for the first valid voltage meassurement */ { - if((global.lifeData.battery_voltage != BATTERY_DEFAULT_VOLTAGE) && (global.lifeData.battery_voltage < BATTERY_CHARGER_CONNECTED_VOLTAGE)) + if(global.lifeData.battery_voltage != BATTERY_DEFAULT_VOLTAGE) /* wait for first valid voltage value */ { - if(global.lifeData.battery_voltage > BATTERY_ENDOF_CHARGE_VOLTAGE) /* Voltage close to full state => maybe new battery inserted */ + if((global.lifeData.battery_voltage < BATTERY_CHARGER_CONNECTED_VOLTAGE) + && (global.lifeData.battery_voltage > BATTERY_ENDOF_CHARGE_VOLTAGE)) /* Voltage close to full state => maybe new battery inserted */ { battery_gas_gauge_set_charge_full(); } @@ -179,7 +144,13 @@ battery_charger_counter = CHARGER_DEBOUNCE_SECONDS; } break; - case Charger_Finished: battery_charger_counter = 0; + case Charger_Finished: if((get_voltage() >= BATTERY_ENDOF_CHARGE_VOLTAGE) && (get_voltage() < BATTERY_CHARGER_CONNECTED_VOLTAGE)) /* stopping does not necessarily mean battery is full */ + { + global.dataSendToMaster.chargeStatus = CHARGER_complete; + global.deviceDataSendToMaster.chargeStatus = CHARGER_complete; + notifyChargeComplete = 1; + } + battery_charger_counter = 10; batteryChargerState = Charger_LostConnection; /* no break */ case Charger_LostConnection: /* the charger stops charging when charge current is 1/10 */ @@ -188,10 +159,6 @@ { notifyChargeComplete = 1; } - else - { - notifyChargeComplete = 0; - } if(battery_charger_counter >= cycleTimeBase) { battery_charger_counter -= cycleTimeBase; @@ -199,7 +166,7 @@ else { battery_charger_counter = 0; - battery_i_charge_status = 0; + global.dataSendToMaster.chargeStatus = CHARGER_off; global.deviceDataSendToMaster.chargeStatus = CHARGER_off; @@ -207,12 +174,13 @@ { battery_gas_gauge_set_charge_full(); scheduleUpdateDeviceDataChargerFull(); - notifyChargeComplete = 0; } + notifyChargeComplete = 0; batteryChargerState = Charger_NotConnected; } break; - default: break; + default: batteryChargerState = Charger_NotConnected; /* unexpected state => reinitialize state machine */ + break; } } else @@ -221,8 +189,7 @@ /* wait for disconnection to write and reset */ switch(batteryChargerState) { - case Charger_NotConnected: battery_i_charge_status = 1; - battery_charger_counter = 0; + case Charger_NotConnected: battery_charger_counter = 0; batteryChargerState = Charger_WarmUp; break; case Charger_LostConnection: batteryChargerState = Charger_Active; @@ -230,7 +197,6 @@ case Charger_WarmUp: battery_charger_counter += cycleTimeBase; if(battery_charger_counter >= CHARGER_DEBOUNCE_SECONDS ) { - battery_i_charge_status = 2; scheduleUpdateDeviceDataChargerCharging(); batteryChargerState = Charger_Active; } @@ -251,11 +217,8 @@ if(HAL_GPIO_ReadPin(CHARGE_IN_GPIO_PORT,CHARGE_IN_PIN)) /* high => charger stopped charging */ { + battery_charger_counter = 30; batteryChargerState = Charger_Finished; - global.dataSendToMaster.chargeStatus = CHARGER_complete; - global.deviceDataSendToMaster.chargeStatus = CHARGER_complete; - battery_charger_counter = 30; - notifyChargeComplete = 1; } else { @@ -279,117 +242,11 @@ HAL_Delay(1); break; - default: /* wait for disconnection */ + default: batteryChargerState = Charger_NotConnected; /* unexpected state => reinitialize state machine */ break; } } } -#else - /* on disconnection or while disconnected */ - if(HAL_GPIO_ReadPin(CHARGE_IN_GPIO_PORT,CHARGE_IN_PIN)) - { - if(battery_charger_counter) - { - battery_charger_counter--; - global.dataSendToMaster.chargeStatus = CHARGER_lostConnection; - global.deviceDataSendToMaster.chargeStatus = CHARGER_lostConnection; - } - /* max count down to 127+5 or 127+20 */ - if((battery_i_charge_status == 255) && battery_charger_counter < 127) - { -// battery_gas_gauge_set_charge_full(); -// scheduleUpdateDeviceDataChargerFull(); - battery_charger_counter = 0; - } - - if(battery_charger_counter == 0) - { - battery_i_charge_status = 0; - global.dataSendToMaster.chargeStatus = CHARGER_off; - global.deviceDataSendToMaster.chargeStatus = CHARGER_off; - - } - return; - } - - /* connected */ - - /* wait for disconnection to write and reset */ - if(battery_i_charge_status == 255) - { - global.dataSendToMaster.chargeStatus = CHARGER_complete; - global.deviceDataSendToMaster.chargeStatus = CHARGER_complete; - - if(((cycleTimeBase > 1) && (battery_charger_counter < 127+5)) || (battery_charger_counter < 127+20)) - battery_charger_counter++; - return; - } - - if(battery_charger_counter == 0) - battery_i_charge_status = 1; - - /* charger is connected and didn't signal full yet */ - global.dataSendToMaster.chargeStatus = CHARGER_running; - global.deviceDataSendToMaster.chargeStatus = CHARGER_running; - - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.Pin = CHARGE_OUT_PIN; - GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStructure.Pull = GPIO_NOPULL; - GPIO_InitStructure.Speed = GPIO_SPEED_LOW; - HAL_GPIO_Init(CHARGE_OUT_GPIO_PORT, &GPIO_InitStructure); - HAL_GPIO_WritePin(CHARGE_OUT_GPIO_PORT, CHARGE_OUT_PIN,GPIO_PIN_SET); - HAL_Delay(1); - - - if(battery_charger_counter < 120) - { - if(cycleTimeBase == 1) - battery_charger_counter++; - else - { - battery_charger_counter += 30; - if(battery_charger_counter >= 127) - battery_charger_counter = 126; - } - } - else - if(battery_charger_counter < 127) - { - battery_charger_counter = 127; - if(battery_i_charge_status < 2) - { - battery_i_charge_status = 2; - scheduleUpdateDeviceDataChargerCharging(); - } - } - - if(battery_charger_counter >= 127) - { - if(HAL_GPIO_ReadPin(CHARGE_IN_GPIO_PORT,CHARGE_IN_PIN) || (get_voltage() >= 4.1f)) - { - battery_charger_counter++; - if(((cycleTimeBase > 1) && (battery_charger_counter > 127+5)) || (battery_charger_counter > 127+20)) - { - battery_charger_counter = 127; - if(get_voltage() >= 4.1f) - { - battery_i_charge_status = 255; - battery_gas_gauge_set_charge_full(); - scheduleUpdateDeviceDataChargerFull(); - } - } - } - else - battery_charger_counter = 127; - } - - GPIO_InitStructure.Pin = CHARGE_OUT_PIN; - GPIO_InitStructure.Mode = GPIO_MODE_ANALOG; - GPIO_InitStructure.Pull = GPIO_NOPULL; - GPIO_InitStructure.Speed = GPIO_SPEED_LOW; - HAL_GPIO_Init(CHARGE_OUT_GPIO_PORT, &GPIO_InitStructure); -#endif } /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/
