Hanna
Sourcecode Batteriemanagementsystem |
Header für ADC AD7997, Definition der Register und Commands. Mehr ...
gehe zum Quellcode dieser Datei
Makrodefinitionen | |
TWI (I2C) Konfiguration | |
#define | TWI_BAUDRATE 100000 |
100 KHz Taktrate im I2C-Bus | |
#define | TWI_BAUDSETTING TWI_BAUD(F_CPU, TWI_BAUDRATE) |
#define | TWI_AD7997_MASTER_PORT PORTC |
#define | AD7997_ADC2_I 0x22 |
Adresse für ADC2 zur Strommessung. | |
#define | AD7997_ADC1_V 0x21 |
Adresse für ADC1 zur Spannungsmessung. | |
Configuration Register | |
#define | AD7997_CONFIG_REG 0x02 |
Registeradresse. | |
#define | AD7997_CONFIG_MSB 0x0F |
0FF0: Alle 8 Kanäle enabled (Bit 11 - Bit 4 = 1) | |
#define | AD7997_CONFIG_LSB 0xFB |
D3 FLTR (SDA/SDC = 1 an, default), D2 ALERT EN = 0, D1 BUSY/ALERT = 0, D0 BUSY/ALERT POLARITY = 0 (active low) | |
Result Register | |
#define | AD7997_RESULT_REG 0x00 |
Registeradresse. | |
#define | AD7997_CHANNEL_FLT 0x70 |
01110000, filtert den aktiven Kanal aus dem Result Register | |
#define | AD7997_RESULT_FLT 0x3FF |
10bit ADC => 2 LSB sind immer 0. RESULT_REG >> 2, dann 10bit - Filter (0x3FF) | |
#define | AD7997_READ_SEQUENCE 0x70 |
Sequence of channels selected in the configuration register, Bits D11 to D4. | |
#define | AD7997_SEQUENCE_RESULT (AD7997_RESULT_REG | AD7997_READ_SEQUENCE) |
#define | AD7997_READ_SINGLE 0x80 |
#define | AD7997_READ_SINGLE_V1 0x80 |
#define | AD7997_READ_SINGLE_V2 0x90 |
#define | AD7997_READ_SINGLE_V3 0xA0 |
#define | AD7997_READ_SINGLE_V4 0xB0 |
#define | AD7997_READ_SINGLE_V5 0xC0 |
#define | AD7997_READ_SINGLE_V6 0xD0 |
#define | AD7997_READ_SINGLE_V7 0xE0 |
#define | AD7997_READ_SINGLE_V8 0xF0 |
Cycle Time Register | |
#define | AD7997_CTIMER_REG 0x03 |
#define | AD7997_CTIMER_bm 0x00 |
Cycle Timer = 0x00 für Mode 1 (CONVST-PIN) und Mode 2. | |
#define | AD7997_CONVST_CMD 0x00 |
Command Bits bei Konversion via CONVST. | |
PIN für das Stromrichtungssignal, HIGH beim Entladen (negativ), LOW beim Laden (positiv) | |
#define | I_SGN_1_1 PIN0_bm |
#define | I_SGN_1_2 PIN1_bm |
#define | I_SGN_1_3 PIN2_bm |
#define | I_SGN_1_4 PIN3_bm |
#define | I_SGN_2_1 PIN4_bm |
#define | I_SGN_2_2 PIN5_bm |
#define | I_SGN_2_3 PIN6_bm |
#define | I_SGN_2_4 PIN7_bm |
CONVST PIN und Port | |
#define | AD7997_ADC1_CONVST_PIN_bm PIN4_bm |
#define | AD7997_ADC1_CONVST_PIN_CTRL PIN4CTRL |
#define | AD7997_ADC1_CONVST_PORT PORTE |
Batterienummer und ADC Index stimmen nicht überein => Übersetzungsarray | |
#define | BAT_NUMMER2CHANNEL_1_1 0 |
#define | BAT_NUMMER2CHANNEL_1_2 2 |
#define | BAT_NUMMER2CHANNEL_1_3 4 |
#define | BAT_NUMMER2CHANNEL_1_4 6 |
#define | BAT_NUMMER2CHANNEL_2_1 1 |
#define | BAT_NUMMER2CHANNEL_2_2 3 |
#define | BAT_NUMMER2CHANNEL_2_3 5 |
#define | BAT_NUMMER2CHANNEL_2_4 7 |
Konstanten zur Spannungsberechnung | |
#define | REF_VOLTAGE 3.213 |
Referenzspannung für die ADC; In V7.1 5V, in V7.2 3,3V ! | |
#define | ADC_RES 1024.0 |
10bit Auflösung des ADC | |
#define | R_MESS 0.015 |
Messwiderstand, 15mOhm. | |
#define | SPANNUNGSTELER_1 2.613 |
Faktor zur Umrechnung der Batteriespannung in Säule 1. | |
#define | SPANNUNGSTELER_2 1.3 |
Faktor zur Umrechnung der Batteriespannung in Säule 2. | |
Funktionen | |
void | AD7997_CONVST_voltage_get_data (void) |
float | AD7997_current_calculate_value (uint16_t bit_code, uint8_t sensor_nummer) |
void | AD7997_current_get_data (void) |
Ermittelt die Stromstärke in den Batteriestromkreisen. Mehr ... | |
int | AD7997_current_vorzeichen (uint8_t sensor_nummer) |
Ermittelt die Stromrichtung der abgefragten Batterie. Mehr ... | |
void | AD7997_init (void) |
TWI (I2C) und ADC 1/2 werden initialisiert. Mehr ... | |
void | AD7997_voltage_get_data (void) |
Ermittelt die Spannungen der Batterien. Mehr ... | |
void | leerlauf_voltage_get_data (void) |
Variablen | |
uint8_t | bat_nummer2channel [8] |
int16_t | current [] |
TWI_Master_t | twiAD7997 |
float | voltage [] |
Header für ADC AD7997, Definition der Register und Commands.
$Revision: 404 $ $Date: 2016-03-29 13:03:35 +0200 (Tue, 29 Mar 2016) $
Definiert in Datei ad7997.h.
void AD7997_current_get_data | ( | void | ) |
Ermittelt die Stromstärke in den Batteriestromkreisen.
Die TS1101 Bausteine geben die am Shunt-Widerstand gemessene Spannung um den Faktor 100 verstärkt als analoges Signal aus, das über den ADC2 gemessen wird.
Der ADC misst die Spannung in Bezug zu einer Referenzspannung und gibt einen 10bit digitalen Wert aus.
\[ U_I = \frac{ U_{REF} }{ 1024 } * n_U * \frac{ 1 }{ 100 } \]
\[ I = \frac{ U_I }{ 0,015\, \Omega } * 1000 \frac{ mA }{ A } \]
Definiert in Zeile 128 der Datei ad7997.c.
int AD7997_current_vorzeichen | ( | uint8_t | sensor_nummer | ) |
Ermittelt die Stromrichtung der abgefragten Batterie.
sensor_nummer | Nummer des Sensors bzw. der abgefragten Batterie. |
Die Strommesssensoren TS1101 geben die Stromrichtung über ein 0/1 Signal an. HIGH beim Entladen (negatives Vorzeichen), LOW beim Laden (positives Vorzeichen)
Definiert in Zeile 168 der Datei ad7997.c.
void AD7997_init | ( | void | ) |
TWI (I2C) und ADC 1/2 werden initialisiert.
Der TWI-Bus auf Port C wird initialisiert.
Die Strommessung erfolgt über den ADC2 AD7997 für jeden Batteriestromkreis einzeln.
Die Stromstärke wird über einen Widerstand in ein analoges Spannungssignal umgewandelt und am ADC gemessen. Bei einer Stromstärke von 2A werden 3V als Messsignal weitergeleitet, bei 100mA sind es 150 mV.
Der ADC2 wird auf Mode2 konfiguriert (Datenblatt AD7997 S. 29). Alle acht Messeingänge sind aktiviert. Die Messeingänge werden seriell abgefragt (halbautomatisch), bei jeder Abfrage wird um einen Messkanal weitergeschaltet.
Zusätzlich übermittelt der TS1101 auch die Stromrichtung über ein 0/1 Signal. HIGH beim Entladen (negatives Vorzeichen), LOW beim Laden (positives Vorzeichen). Die acht Signale werden über den Port A gemessen.
Die Spannungsmessung erfolgt über den ADC1 AD7997 für jeden Batteriestromkreis einzeln.
Die Ausgangsspannungen der einzelnen Batterien werden über einen Spannungsteiler reduziert und an das Niveau der Referenzspannung angepasst.
Umrechnungsfaktor: \( \frac{ R_1 + R_2 }{ R_2 }\)
Der ADC1 wird auf Mode2 konfiguriert (Datenblatt AD7997 S. 29). Alle acht Messeingänge sind aktiviert. Die Messeingänge werden seriell abgefragt (halbautomatisch), bei jeder Abfrage wird um einen Messkanal weitergeschaltet.
Definiert in Zeile 75 der Datei ad7997.c.
void AD7997_voltage_get_data | ( | void | ) |
Ermittelt die Spannungen der Batterien.
Die Batteriespannung wird über einen Spannungsteiler \( \frac{ R_2 }{ R_1 + R_2 }\) auf ein für die Referenzspannung geeignetes Maß reduziert. Die reduzierte Spannung wird als analoges Signal über den ADC1 gemessen.
Der ADC misst die Spannung in Bezug zu einer Referenzspannung und gibt einen 10bit digitalen Wert aus.
\[ U_{Bat} = \frac{ U_{REF} }{ 1024 } * n_U * \frac{ R_1 + R_2 }{ R_2 } \]
Definiert in Zeile 211 der Datei ad7997.c.