Hanna
Sourcecode Batteriemanagementsystem
Funktionen | Variablen
ad7997.c-Dateireferenz

Initialisiert den ADC-Baustein AD7997 und liest Daten aus und berechnet die korrekten Werte. Mehr ...

#include <stdio.h>
#include <stdint.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdbool.h>
#include "twi_master_driver.h"
#include "temp_mcp9843.h"
#include "ds1388_rtc.h"
#include "ad7997.h"
#include "general.h"
#include "bms_mosfet.h"
#include "BMS-Basic.h"
Include-Abhängigkeitsdiagramm für ad7997.c:

gehe zum Quellcode dieser Datei

Funktionen

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 ...
 
 ISR (TWIC_TWIM_vect)
 
void leerlauf_voltage_get_data (void)
 

Variablen

uint8_t bat_nummer2channel [8]
 
int16_t current [8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
 
TWI_Master_t twiAD7997
 
float voltage [8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
 

Ausführliche Beschreibung

Initialisiert den ADC-Baustein AD7997 und liest Daten aus und berechnet die korrekten Werte.

Autor
Hanna Burggraf
Datum
15.01.2016
    $Revision: 465 $
    $Date: 2016-04-02 12:42:42 +0200 (Sat, 02 Apr 2016) $

Definiert in Datei ad7997.c.

Dokumentation der Funktionen

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.

Achtung
Die Referenzspannung beträgt bei BMS V7.1 5V, bei BMS V7.2 3,3V !
  • Die Referenzspannung (5V oder 3,3V) wird durch die Auflösung 1024 geteilt.
  • Die eingelesenen Daten \( n_U\) werden mit diesem Wert multipliziert.
  • Das Ergebnis wird durch 100 geteilt, da der TS1101 die Spannung um den Faktor 100 verstärkt ausgibt.
  • \( I = \frac{ U }{ R }\) => zur Ermittlung der Stromstärke muss noch durch \( R = 0,015\, \Omega \) geteilt werden.
  • Umrechnung in mA *1000

    \[ U_I = \frac{ U_{REF} }{ 1024 } * n_U * \frac{ 1 }{ 100 } \]



    \[ I = \frac{ U_I }{ 0,015\, \Omega } * 1000 \frac{ mA }{ A } \]



    Achtung
    Batterienummer und ADC Kanal stimmen nicht überein => Übersetzungsarray bat_nummer2channel[8].

Definiert in Zeile 128 der Datei ad7997.c.

Hier ist ein Graph, der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

int AD7997_current_vorzeichen ( uint8_t  sensor_nummer)

Ermittelt die Stromrichtung der abgefragten Batterie.

Parameter
sensor_nummerNummer des Sensors bzw. der abgefragten Batterie.
Rückgabe
Stromrichtung als +1 oder -1

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.

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

void AD7997_init ( void  )

TWI (I2C) und ADC 1/2 werden initialisiert.

TWI

Der TWI-Bus auf Port C wird initialisiert.

Strommessung

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.

Spannungsmessung

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.

V7.1

  • Referenzspannung 5V.
  • Spannungsteiler Säule 1: \( R_1 = 100K\Omega;\:\: R_2 = 100K\Omega; \)
  • Umrechnungsfaktor Säule 1: \( \frac{ R_1 + R_2 }{ R_2 } = \frac{ 100K + 100K }{ 100K } = 2\)
  • Spannungsteiler Säule 2: -
  • Umrechnungsfaktor Säule 2: 1

V7.1

  • Referenzspannung 3,3V.
  • Spannungsteiler Säule 1: \( R_1 = 100K\Omega;\:\: R_2 = 62K\Omega; \)
  • Umrechnungsfaktor Säule 1: \( \frac{ R_1 + R_2 }{ R_2 } = \frac{ 100K + 62K }{ 62K } = 2,613\)
  • Spannungsteiler Säule 2: \( R_1 = 30K\Omega;\:\: R_2 = 100K\Omega; \)
  • Umrechnungsfaktor Säule 2: \( \frac{ R_1 + R_2 }{ R_2 } = \frac{ 30K + 100K }{ 100K } = 1,3\)

Definiert in Zeile 75 der Datei ad7997.c.

Hier ist ein Graph, der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

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.

Achtung
Die Referenzspannung beträgt bei BMS V7.1 5V, bei BMS V7.2 3,3V !
  • Die Referenzspannung (5V oder 3,3V) wird durch die Auflösung 1024 geteilt.
  • Die eingelesenen Daten \( n_U\) werden mit diesem Wert multipliziert.
  • Das Ergebnis wird mit dem Faktor \( \frac{ R_1 + R_2 }{ R_2 }\) des Spannungsteilers multipliziert, um die Ausgangsspannung zu ermitteln.
    Achtung
    Die Spannungsteiler unterscheiden sich zwischen Säule 1 und Säule 2 sowie zwischen V7.1 und V7.2 !


    \[ U_{Bat} = \frac{ U_{REF} }{ 1024 } * n_U * \frac{ R_1 + R_2 }{ R_2 } \]



    BMS V7.1

  • Referenzspannung 5V.
  • Umrechnungsfaktor Säule 1: \( \frac{ R_1 + R_2 }{ R_2 } = \frac{ 100K + 100K }{ 100K } = 2\)
  • Umrechnungsfaktor Säule 2: 1

    BMS V7.2

  • Referenzspannung 3,3V.
  • Umrechnungsfaktor Säule 1: \( \frac{ R_1 + R_2 }{ R_2 } = \frac{ 100K + 62K }{ 62K } = 2,613\)
  • Umrechnungsfaktor Säule 2: \( \frac{ R_1 + R_2 }{ R_2 } = \frac{ 30K + 100K }{ 100K } = 1,3\)

    Achtung
    Batterienummer und ADC Kanal stimmen nicht überein => Übersetzungsarray bat_nummer2channel[8].

Definiert in Zeile 211 der Datei ad7997.c.

Hier ist ein Graph, der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

Variablen-Dokumentation

uint8_t bat_nummer2channel[8]
Initialisierung:
= { BAT_NUMMER2CHANNEL_1_1, BAT_NUMMER2CHANNEL_1_2, BAT_NUMMER2CHANNEL_1_3, BAT_NUMMER2CHANNEL_1_4, BAT_NUMMER2CHANNEL_2_1, BAT_NUMMER2CHANNEL_2_2,
BAT_NUMMER2CHANNEL_2_3, BAT_NUMMER2CHANNEL_2_4 }

Definiert in Zeile 34 der Datei ad7997.c.