@@ -181,6 +181,38 @@ float nicla::getRegulatedBatteryVoltage(){
181
181
182
182
}
183
183
184
+ void nicla::setRegulatedBatteryVoltage (float voltage){
185
+ if (voltage < 3 .6f ){
186
+ voltage = 3 .6f ;
187
+ } else if (voltage > 4 .2f ) {
188
+ voltage = 4 .2f ;
189
+ }
190
+
191
+ // The formula is: VBATREG = 3.6 V + Sum(VBREG[Bit 7:1])
192
+
193
+ /*
194
+ +---------+--------------------+
195
+ | Bit | Regulation Voltage |
196
+ +---------+--------------------+
197
+ | 7 (MSB) | 640 mV |
198
+ | 6 | 320 mV |
199
+ | 5 | 160 mV |
200
+ | 4 | 80 mV |
201
+ | 3 | 40 mV |
202
+ | 2 | 20 mV |
203
+ | 1 | 10 mV |
204
+ | 0 (LSB) | – |
205
+ +---------+--------------------+
206
+ */
207
+
208
+ // Shift one bit to the left because the LSB is not used.
209
+ uint16_t additionalMilliVolts = (voltage - 3 .6f ) * 100 ;
210
+ uint8_t value = additionalMilliVolts << 1 ;
211
+ // e.g. 4.2V - 3.6V = 0.6V * 100 = 60. 60 << 1 = 120 = 01111000
212
+
213
+ _pmic.writeByte (BQ25120A_ADDRESS, BQ25120A_BATTERY_CTRL, value);
214
+ }
215
+
184
216
float nicla::getCurrentBatteryVoltage (){
185
217
return getRegulatedBatteryVoltage () / 100 * getBatteryPercentage ();
186
218
}
@@ -284,12 +316,9 @@ BatteryChargeLevel nicla::getBatteryChargeLevel() {
284
316
}
285
317
}
286
318
287
- uint8_t nicla::getBatteryTemperature () {
288
- if (!_ntcEnabled) return BATTERY_TEMPERATURE_NORMAL ;
319
+ BatteryTemperature nicla::getBatteryTemperature () {
320
+ if (!_ntcEnabled) return BatteryTemperature::Normal ;
289
321
290
- // Extract bits 5 and 6 (TS_FAULT0 and TS_FAULT1)
291
- uint8_t temperatureSenseFault = _pmic.readByte (BQ25120A_ADDRESS, BQ25120A_TS_CONTROL) >> 5 & 0b11 ;
292
-
293
322
/*
294
323
+------+-------------------------------------------------------------+
295
324
| Bits | Description |
@@ -300,18 +329,9 @@ uint8_t nicla::getBatteryTemperature() {
300
329
| 11 | TWARM < TS temp < THOT (Charging voltage reduced by 140 mV) |
301
330
+------+-------------------------------------------------------------+
302
331
*/
303
-
304
- if (temperatureSenseFault == 0 ){
305
- return BATTERY_TEMPERATURE_NORMAL;
306
- } else if (temperatureSenseFault == 1 ) {
307
- return BATTERY_TEMPERATURE_EXTREME;
308
- } else if (temperatureSenseFault == 2 ) {
309
- return BATTERY_TEMPERTURE_COOL;
310
- } else if (temperatureSenseFault == 3 ) {
311
- return BATTERY_TEMPERTURE_WARM;
312
- }
313
-
314
- return BATTERY_TEMPERATURE_NORMAL;
332
+ // Extract bits 5 and 6 (TS_FAULT0 and TS_FAULT1)
333
+ uint8_t temperatureSenseFault = _pmic.readByte (BQ25120A_ADDRESS, BQ25120A_TS_CONTROL) >> 5 & 0b11 ;
334
+ return static_cast <BatteryTemperature>(temperatureSenseFault);
315
335
}
316
336
317
337
0 commit comments