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****/