38
|
1 /**
|
|
2 ******************************************************************************
|
|
3 * @file batteryGasGauge.c
|
|
4 * @author heinrichs weikamp gmbh
|
|
5 * @version V0.0.1
|
|
6 * @date 09-Dec-2014
|
|
7 * @brief LTC2942 Battery Gas Gauge
|
|
8 *
|
|
9 @verbatim
|
|
10 ==============================================================================
|
|
11 ##### stm32f4xx_hal_i2c.c modification #####
|
|
12 ==============================================================================
|
|
13 The LTC2942 requires an repeated start condition without stop condition
|
|
14 for data reception.
|
|
15
|
|
16 @endverbatim
|
|
17 ******************************************************************************
|
|
18 * @attention
|
|
19 *
|
|
20 * <h2><center>© COPYRIGHT(c) 2014 heinrichs weikamp</center></h2>
|
|
21 *
|
|
22 ******************************************************************************
|
|
23 */
|
|
24 /* Includes ------------------------------------------------------------------*/
|
|
25 #include "batteryGasGauge.h"
|
|
26 #include "baseCPU2.h"
|
|
27 #include "stm32f4xx_hal.h"
|
|
28 #include "i2c.h"
|
|
29
|
|
30 float battery_f_voltage = 0;
|
|
31 float battery_f_charge_percent = 0;
|
|
32
|
|
33 #define BGG_BATTERY_OFFSET (26123) //; 65536-(3,35Ah/0,085mAh)
|
|
34 #define BGG_BATTERY_DEVIDER (394) //; 3,35Ah/0,085mAh/100 [%]
|
|
35
|
|
36 float get_voltage(void)
|
|
37 {
|
|
38 #ifdef OSTC_ON_DISCOVERY_HARDWARE
|
|
39 return 3.0f;
|
|
40 #endif
|
|
41
|
|
42 return battery_f_voltage;
|
|
43 }
|
|
44
|
|
45
|
|
46 float get_charge(void)
|
|
47 {
|
|
48 #ifdef OSTC_ON_DISCOVERY_HARDWARE
|
|
49 return 100.0f;
|
|
50 #endif
|
|
51
|
|
52 return battery_f_charge_percent;
|
|
53 }
|
|
54
|
|
55
|
|
56 void init_battery_gas_gauge(void)
|
|
57 {
|
|
58 #ifdef OSTC_ON_DISCOVERY_HARDWARE
|
|
59 return;
|
|
60 #endif
|
|
61
|
|
62 uint8_t buffer[2];
|
|
63 buffer[0] = 0x01;
|
|
64 buffer[1] = 0xF8;// true: F8 = 11111000, wrong/old comment: 11101000
|
|
65 I2C_Master_Transmit( DEVICE_BATTERYGAUGE, buffer, 2);
|
|
66 }
|
|
67
|
|
68
|
|
69 void battery_gas_gauge_get_data(void)
|
|
70 {
|
|
71 #ifdef OSTC_ON_DISCOVERY_HARDWARE
|
|
72 return;
|
|
73 #endif
|
|
74
|
|
75 float battery_f_voltage_local;
|
|
76 float battery_f_charge_percent_local;
|
|
77
|
|
78 uint8_t bufferReceive[10];
|
|
79 I2C_Master_Receive( DEVICE_BATTERYGAUGE, bufferReceive, 10);
|
|
80
|
|
81 battery_f_voltage_local = (float)(bufferReceive[8] * 256);
|
|
82 battery_f_voltage_local += (float)(bufferReceive[9]);
|
|
83 battery_f_voltage_local *= (float)6 / (float)0xFFFF;
|
|
84
|
|
85 // max/full: 0.085 mAh * 1 * 65535 = 5570 mAh
|
|
86 battery_f_charge_percent_local = (float)(bufferReceive[2] * 256);
|
|
87 battery_f_charge_percent_local += (float)(bufferReceive[3]);
|
|
88 battery_f_charge_percent_local -= BGG_BATTERY_OFFSET;
|
|
89 battery_f_charge_percent_local /= BGG_BATTERY_DEVIDER;
|
|
90
|
|
91 if(battery_f_charge_percent_local < 0)
|
|
92 battery_f_charge_percent_local = 0;
|
|
93
|
|
94 battery_f_voltage = battery_f_voltage_local;
|
|
95 battery_f_charge_percent = battery_f_charge_percent_local;
|
|
96 }
|
|
97
|
|
98
|
|
99 void battery_gas_gauge_set_charge_full(void)
|
|
100 {
|
|
101 #ifdef OSTC_ON_DISCOVERY_HARDWARE
|
|
102 return;
|
|
103 #endif
|
|
104
|
|
105 uint8_t bufferSend[3];
|
|
106 bufferSend[0] = 0x02;
|
|
107 bufferSend[1] = 0xFF;
|
|
108 bufferSend[2] = 0xFF;
|
|
109 I2C_Master_Transmit( DEVICE_BATTERYGAUGE, bufferSend, 3);
|
|
110 }
|
|
111
|
|
112
|
|
113 void battery_gas_gauge_set(float percentage)
|
|
114 {
|
|
115 #ifdef OSTC_ON_DISCOVERY_HARDWARE
|
|
116 return;
|
|
117 #endif
|
|
118
|
|
119 uint16_t mAhSend;
|
|
120
|
|
121 if(percentage >= 100)
|
|
122 mAhSend = 0xFFFF;
|
|
123 else
|
|
124 mAhSend = (uint16_t)(percentage * 655.35f);
|
|
125
|
|
126 uint8_t bufferSend[3];
|
|
127 bufferSend[0] = 0x02;
|
|
128 bufferSend[1] = (uint8_t)(mAhSend / 256);
|
|
129 bufferSend[2] = (uint8_t)(mAhSend & 0xFF);
|
|
130 I2C_Master_Transmit( DEVICE_BATTERYGAUGE, bufferSend, 3);
|
|
131 }
|
|
132
|
|
133
|
|
134 /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/
|