Mercurial > public > ostc4
annotate Small_CPU/Src/batteryCharger.c @ 650:5f0d3dce5ef4
Automatik setpoint change:
In previous versions a better set point was suggested by the OSTC but had to be confirmed using the quick menu functionality. To improve usability an option has been added to the setpoint menu which allows the selection of automatically setpoint changes. If activated the OSTC will automatically switch to the setpoint in case the matching depth is passed.
author | Ideenmodellierer |
---|---|
date | Mon, 19 Apr 2021 20:19:32 +0200 |
parents | e58f81cb25a7 |
children | 1b995079c045 |
rev | line source |
---|---|
38 | 1 /** |
2 ****************************************************************************** | |
3 * @file batteryCharger.c | |
4 * @author heinrichs weikamp gmbh | |
5 * @date 09-Dec-2014 | |
6 * @version V0.0.1 | |
7 * @since 09-Dec-2014 | |
8 * @brief LTC4054 Battery Charger | |
9 * | |
10 @verbatim | |
11 ============================================================================== | |
12 ##### How to use ##### | |
13 ============================================================================== | |
14 | |
15 The bq5105x provides one status output, CHG. This output is an open-drain NMOS device that is rated to 20 V. | |
16 The open-drain FET connected to the CHG pin will be turned on whenever the output (BAT) of the charger is | |
17 enabled. As a note, the output of the charger supply will not be enabled if the VRECT-REG does not converge to the | |
18 no-load target voltage. | |
19 | |
644 | 20 CHG F4 7 O Open-drain output � active when BAT is enabled. Float if not used. |
38 | 21 |
22 @endverbatim | |
23 ****************************************************************************** | |
24 * @attention | |
25 * | |
26 * <h2><center>© COPYRIGHT(c) 2015 heinrichs weikamp</center></h2> | |
27 * | |
28 ****************************************************************************** | |
29 */ | |
30 /* Includes ------------------------------------------------------------------*/ | |
31 #include "batteryCharger.h" | |
32 #include "batteryGasGauge.h" | |
33 #include "stm32f4xx_hal.h" | |
34 #include "scheduler.h" | |
35 | |
36 | |
643
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
37 /* Use This compile switch to select the new charger status control implementation */ |
644 | 38 #define ENABLE_CHARGER_STATUS_V2 |
643
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
39 |
38 | 40 #define CHARGE_IN_PIN GPIO_PIN_2 |
41 #define CHARGE_IN_GPIO_PORT GPIOC | |
42 #define CHARGE_IN_GPIO_ENABLE() __GPIOC_CLK_ENABLE() | |
43 | |
44 #define CHARGE_OUT_PIN GPIO_PIN_1 | |
45 #define CHARGE_OUT_GPIO_PORT GPIOC | |
46 #define CHARGE_OUT_GPIO_ENABLE() __GPIOC_CLK_ENABLE() | |
47 | |
645 | 48 #define CHARGER_DEBOUNCE_SECONDS (5u) /* 5 seconds used to avoid problems with charger interrupts / disconnections */ |
38 | 49 |
50 uint8_t battery_i_charge_status = 0; | |
643
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
51 uint16_t battery_charger_counter = 0; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
52 |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
53 #ifdef ENABLE_CHARGER_STATUS_V2 |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
54 typedef enum |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
55 { |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
56 Charger_NotConnected = 0, /* This is identified reading CHARGE_IN_PIN == HIGH */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
57 Charger_WarmUp, /* Charging started but counter did not yet reach a certain limit (used to debounce connect / disconnect events to avoid multiple increases of statistic charging cycle counter) */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
58 Charger_Active, /* Charging identified by CHARGE_IN_PIN == LOW for a certain time */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
59 Charger_Finished, |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
60 Charger_LostConnection /* Intermediate state to debounce disconnecting events (including charging error state like over temperature) */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
61 } chargerState_t; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
62 |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
63 static chargerState_t batteryChargerState = Charger_NotConnected; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
64 #endif |
38 | 65 |
66 /* can be 0, 1 or 255 | |
67 * 0 is disconnected | |
68 * 1 is charging | |
69 * 255 is full | |
70 */ | |
71 uint8_t get_charge_status(void) | |
72 { | |
73 return battery_i_charge_status; | |
74 } | |
75 | |
76 void init_battery_charger_status(void) | |
77 { | |
78 #ifdef OSTC_ON_DISCOVERY_HARDWARE | |
79 return; | |
80 #endif | |
81 | |
82 CHARGE_IN_GPIO_ENABLE(); | |
83 CHARGE_OUT_GPIO_ENABLE(); | |
84 | |
85 ReInit_battery_charger_status_pins(); | |
86 } | |
87 | |
88 void ReInit_battery_charger_status_pins(void) | |
89 { | |
90 #ifdef OSTC_ON_DISCOVERY_HARDWARE | |
91 return; | |
92 #endif | |
93 | |
94 GPIO_InitTypeDef GPIO_InitStructure; | |
95 | |
96 GPIO_InitStructure.Pin = CHARGE_IN_PIN; | |
97 GPIO_InitStructure.Mode = GPIO_MODE_INPUT; | |
98 GPIO_InitStructure.Pull = GPIO_NOPULL; | |
99 GPIO_InitStructure.Speed = GPIO_SPEED_LOW; | |
100 HAL_GPIO_Init(CHARGE_IN_GPIO_PORT, &GPIO_InitStructure); | |
101 | |
102 GPIO_InitStructure.Pin = CHARGE_OUT_PIN; | |
103 GPIO_InitStructure.Mode = GPIO_MODE_ANALOG; | |
104 GPIO_InitStructure.Pull = GPIO_NOPULL; | |
105 GPIO_InitStructure.Speed = GPIO_SPEED_LOW; | |
106 HAL_GPIO_Init(CHARGE_OUT_GPIO_PORT, &GPIO_InitStructure); | |
107 } | |
108 | |
109 | |
110 void DeInit_battery_charger_status_pins(void) | |
111 { | |
112 #ifdef OSTC_ON_DISCOVERY_HARDWARE | |
113 return; | |
114 #endif | |
115 GPIO_InitTypeDef GPIO_InitStructure; | |
116 | |
117 | |
118 GPIO_InitStructure.Mode = GPIO_MODE_ANALOG; | |
119 GPIO_InitStructure.Speed = GPIO_SPEED_LOW; | |
120 GPIO_InitStructure.Pull = GPIO_NOPULL; | |
121 | |
122 GPIO_InitStructure.Pin = CHARGE_IN_PIN; | |
123 HAL_GPIO_Init(CHARGE_IN_GPIO_PORT, &GPIO_InitStructure); | |
124 | |
125 GPIO_InitStructure.Pin = CHARGE_OUT_PIN; | |
126 HAL_GPIO_Init(CHARGE_OUT_GPIO_PORT, &GPIO_InitStructure); | |
127 } | |
128 | |
129 /* static counter is used to avoid multiple counts of charge startings | |
130 and after that it is used, starting at 127 to count for the charge full signal | |
131 | |
132 there a short disconnections with the QI charger | |
133 therefore the battery_charger_counter has a countdown instead of = 0. | |
134 | |
135 battery_gas_gauge_set_charge_full and scheduleUpdateDeviceDataChargerFull are | |
136 set after disconnection as the charging process continues as long as not disconnected | |
137 to prevent the short disconnections the battery_charger_counter is used too including | |
138 upcounting again while battery_i_charge_status == 255 and the connection is established | |
139 | |
140 */ | |
141 | |
643
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
142 void battery_charger_get_status_and_contral_battery_gas_gauge(uint8_t cycleTimeBase) |
38 | 143 { |
643
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
144 #ifdef ENABLE_CHARGER_STATUS_V2 |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
145 static uint8_t notifyChargeComplete = 0; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
146 #endif |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
147 |
38 | 148 #ifdef OSTC_ON_DISCOVERY_HARDWARE |
149 return; | |
150 #endif | |
151 | |
643
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
152 #ifdef ENABLE_CHARGER_STATUS_V2 |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
153 /* on disconnection or while disconnected */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
154 if(HAL_GPIO_ReadPin(CHARGE_IN_GPIO_PORT,CHARGE_IN_PIN)) |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
155 { |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
156 switch(batteryChargerState) |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
157 { |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
158 case Charger_Active: global.dataSendToMaster.chargeStatus = CHARGER_lostConnection; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
159 global.deviceDataSendToMaster.chargeStatus = CHARGER_lostConnection; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
160 batteryChargerState = Charger_LostConnection; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
161 battery_charger_counter = CHARGER_DEBOUNCE_SECONDS; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
162 |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
163 if(get_voltage() >= 4.1f) /* the charger stops charging when charge current is 1/10. */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
164 { /* Basically it is OK to rate a charging as complete if a defined voltage is reached */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
165 batteryChargerState = Charger_Finished; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
166 global.dataSendToMaster.chargeStatus = CHARGER_complete; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
167 global.deviceDataSendToMaster.chargeStatus = CHARGER_complete; |
645 | 168 battery_charger_counter = 15; |
643
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
169 notifyChargeComplete = 1; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
170 } |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
171 break; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
172 case Charger_WarmUp: |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
173 case Charger_Finished: |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
174 case Charger_LostConnection: if(battery_charger_counter >= cycleTimeBase) |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
175 { |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
176 battery_charger_counter -= cycleTimeBase; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
177 global.dataSendToMaster.chargeStatus = CHARGER_lostConnection; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
178 global.deviceDataSendToMaster.chargeStatus = CHARGER_lostConnection; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
179 batteryChargerState = Charger_LostConnection; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
180 } |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
181 else |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
182 { |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
183 battery_charger_counter = 0; |
645 | 184 battery_i_charge_status = 0; |
643
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
185 global.dataSendToMaster.chargeStatus = CHARGER_off; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
186 global.deviceDataSendToMaster.chargeStatus = CHARGER_off; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
187 |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
188 if(notifyChargeComplete) |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
189 { |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
190 battery_gas_gauge_set_charge_full(); |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
191 scheduleUpdateDeviceDataChargerFull(); |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
192 notifyChargeComplete = 0; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
193 } |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
194 batteryChargerState = Charger_NotConnected; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
195 } |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
196 break; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
197 default: break; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
198 } |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
199 } |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
200 else |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
201 { |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
202 /* connected */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
203 /* wait for disconnection to write and reset */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
204 switch(batteryChargerState) |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
205 { |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
206 case Charger_NotConnected: battery_i_charge_status = 1; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
207 battery_charger_counter = 0; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
208 batteryChargerState = Charger_WarmUp; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
209 break; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
210 case Charger_LostConnection: batteryChargerState = Charger_Active; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
211 break; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
212 case Charger_WarmUp: battery_charger_counter += cycleTimeBase; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
213 if(battery_charger_counter >= CHARGER_DEBOUNCE_SECONDS ) |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
214 { |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
215 battery_i_charge_status = 2; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
216 scheduleUpdateDeviceDataChargerCharging(); |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
217 batteryChargerState = Charger_Active; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
218 } |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
219 /* no break */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
220 case Charger_Finished: |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
221 case Charger_Active: global.dataSendToMaster.chargeStatus = CHARGER_running; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
222 global.deviceDataSendToMaster.chargeStatus = CHARGER_running; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
223 |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
224 /* drive the output pin high to determine the state of the charger */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
225 GPIO_InitTypeDef GPIO_InitStructure; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
226 GPIO_InitStructure.Pin = CHARGE_OUT_PIN; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
227 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
228 GPIO_InitStructure.Pull = GPIO_NOPULL; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
229 GPIO_InitStructure.Speed = GPIO_SPEED_LOW; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
230 HAL_GPIO_Init(CHARGE_OUT_GPIO_PORT, &GPIO_InitStructure); |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
231 HAL_GPIO_WritePin(CHARGE_OUT_GPIO_PORT, CHARGE_OUT_PIN,GPIO_PIN_SET); |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
232 HAL_Delay(1); |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
233 |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
234 if(HAL_GPIO_ReadPin(CHARGE_IN_GPIO_PORT,CHARGE_IN_PIN)) /* high => charger stopped charging */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
235 { |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
236 batteryChargerState = Charger_Finished; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
237 global.dataSendToMaster.chargeStatus = CHARGER_complete; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
238 global.deviceDataSendToMaster.chargeStatus = CHARGER_complete; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
239 battery_charger_counter = 30; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
240 notifyChargeComplete = 1; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
241 } |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
242 else |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
243 { |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
244 if(batteryChargerState == Charger_Finished) /* voltage dropped below the hysteresis again => charging restarted */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
245 { |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
246 batteryChargerState = Charger_Active; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
247 notifyChargeComplete = 0; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
248 } |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
249 } |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
250 |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
251 /* restore high impedance to be able to detect disconnection */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
252 GPIO_InitStructure.Pin = CHARGE_OUT_PIN; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
253 GPIO_InitStructure.Mode = GPIO_MODE_ANALOG; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
254 GPIO_InitStructure.Pull = GPIO_NOPULL; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
255 GPIO_InitStructure.Speed = GPIO_SPEED_LOW; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
256 HAL_GPIO_Init(CHARGE_OUT_GPIO_PORT, &GPIO_InitStructure); |
645 | 257 HAL_Delay(1); |
643
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
258 break; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
259 |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
260 default: /* wait for disconnection */ |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
261 break; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
262 } |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
263 } |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
264 #else |
38 | 265 /* on disconnection or while disconnected */ |
266 if(HAL_GPIO_ReadPin(CHARGE_IN_GPIO_PORT,CHARGE_IN_PIN)) | |
267 { | |
268 if(battery_charger_counter) | |
269 { | |
270 battery_charger_counter--; | |
271 global.dataSendToMaster.chargeStatus = CHARGER_lostConnection; | |
272 global.deviceDataSendToMaster.chargeStatus = CHARGER_lostConnection; | |
273 } | |
274 /* max count down to 127+5 or 127+20 */ | |
275 if((battery_i_charge_status == 255) && battery_charger_counter < 127) | |
276 { | |
277 // battery_gas_gauge_set_charge_full(); | |
278 // scheduleUpdateDeviceDataChargerFull(); | |
279 battery_charger_counter = 0; | |
280 } | |
281 | |
282 if(battery_charger_counter == 0) | |
283 { | |
284 battery_i_charge_status = 0; | |
285 global.dataSendToMaster.chargeStatus = CHARGER_off; | |
286 global.deviceDataSendToMaster.chargeStatus = CHARGER_off; | |
287 | |
288 } | |
289 return; | |
290 } | |
291 | |
292 /* connected */ | |
293 | |
294 /* wait for disconnection to write and reset */ | |
295 if(battery_i_charge_status == 255) | |
296 { | |
297 global.dataSendToMaster.chargeStatus = CHARGER_complete; | |
298 global.deviceDataSendToMaster.chargeStatus = CHARGER_complete; | |
299 | |
643
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
300 if(((cycleTimeBase > 1) && (battery_charger_counter < 127+5)) || (battery_charger_counter < 127+20)) |
38 | 301 battery_charger_counter++; |
302 return; | |
303 } | |
304 | |
305 if(battery_charger_counter == 0) | |
306 battery_i_charge_status = 1; | |
307 | |
308 /* charger is connected and didn't signal full yet */ | |
309 global.dataSendToMaster.chargeStatus = CHARGER_running; | |
310 global.deviceDataSendToMaster.chargeStatus = CHARGER_running; | |
311 | |
312 GPIO_InitTypeDef GPIO_InitStructure; | |
643
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
313 GPIO_InitStructure.Pin = CHARGE_OUT_PIN; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
314 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
315 GPIO_InitStructure.Pull = GPIO_NOPULL; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
316 GPIO_InitStructure.Speed = GPIO_SPEED_LOW; |
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
317 HAL_GPIO_Init(CHARGE_OUT_GPIO_PORT, &GPIO_InitStructure); |
38 | 318 HAL_GPIO_WritePin(CHARGE_OUT_GPIO_PORT, CHARGE_OUT_PIN,GPIO_PIN_SET); |
319 HAL_Delay(1); | |
320 | |
321 | |
322 if(battery_charger_counter < 120) | |
323 { | |
643
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
324 if(cycleTimeBase == 1) |
38 | 325 battery_charger_counter++; |
326 else | |
327 { | |
328 battery_charger_counter += 30; | |
329 if(battery_charger_counter >= 127) | |
330 battery_charger_counter = 126; | |
331 } | |
332 } | |
333 else | |
334 if(battery_charger_counter < 127) | |
335 { | |
336 battery_charger_counter = 127; | |
337 if(battery_i_charge_status < 2) | |
338 { | |
339 battery_i_charge_status = 2; | |
340 scheduleUpdateDeviceDataChargerCharging(); | |
341 } | |
342 } | |
343 | |
344 if(battery_charger_counter >= 127) | |
345 { | |
346 if(HAL_GPIO_ReadPin(CHARGE_IN_GPIO_PORT,CHARGE_IN_PIN) || (get_voltage() >= 4.1f)) | |
347 { | |
348 battery_charger_counter++; | |
643
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
349 if(((cycleTimeBase > 1) && (battery_charger_counter > 127+5)) || (battery_charger_counter > 127+20)) |
38 | 350 { |
351 battery_charger_counter = 127; | |
352 if(get_voltage() >= 4.1f) | |
353 { | |
354 battery_i_charge_status = 255; | |
355 battery_gas_gauge_set_charge_full(); | |
356 scheduleUpdateDeviceDataChargerFull(); | |
357 } | |
358 } | |
359 } | |
360 else | |
361 battery_charger_counter = 127; | |
362 } | |
363 | |
364 GPIO_InitStructure.Pin = CHARGE_OUT_PIN; | |
365 GPIO_InitStructure.Mode = GPIO_MODE_ANALOG; | |
366 GPIO_InitStructure.Pull = GPIO_NOPULL; | |
367 GPIO_InitStructure.Speed = GPIO_SPEED_LOW; | |
368 HAL_GPIO_Init(CHARGE_OUT_GPIO_PORT, &GPIO_InitStructure); | |
643
5149cd644fbc
Reimplemented charger status generation (deactivated):
Ideenmodellierer
parents:
38
diff
changeset
|
369 #endif |
38 | 370 } |
371 | |
372 /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/ |