Inhaltsverzeichnis:

Arduino LTC6804 BMS - Teil 2: Balance Board - Gunook
Arduino LTC6804 BMS - Teil 2: Balance Board - Gunook

Video: Arduino LTC6804 BMS - Teil 2: Balance Board - Gunook

Video: Arduino LTC6804 BMS - Teil 2: Balance Board - Gunook
Video: PSDtv - Lion demonstrates their open-source automotive battery management system 2024, November
Anonim
Arduino LTC6804 BMS - Teil 2: Balance Board
Arduino LTC6804 BMS - Teil 2: Balance Board

Teil 1 ist da

Ein Batteriemanagementsystem (BMS) umfasst Funktionen zum Erfassen wichtiger Batteriepackparameter, einschließlich Zellspannungen, Batteriestrom, Zelltemperaturen usw. Wenn eine dieser Parameter außerhalb eines vordefinierten Bereichs liegt, kann der Pack von seiner Last oder seinem Ladegerät getrennt werden, oder es können andere geeignete Maßnahmen ergriffen werden. In einem früheren Projekt (https://www.instructables.com/id/Arduino-LTC6804-Battery-Management-System/) habe ich mein BMS-Design besprochen, das auf dem Linear Technology LTC6804 Multicell Battery Monitor-Chip und einem Arduino-Mikrocontroller basiert. Dieses Projekt erweitert das BMS-Projekt, indem es das Batteriepack-Balancing hinzufügt.

Batteriepacks werden aus einzelnen Zellen in Parallel- und/oder Reihenkonfiguration aufgebaut. Zum Beispiel würde ein 8p12s-Pack unter Verwendung von 12 in Reihe geschalteten Sätzen von 8 parallel geschalteten Zellen aufgebaut. Es wären insgesamt 96 Zellen in der Packung. Für die beste Leistung sollten alle 96 Zellen eng aufeinander abgestimmte Eigenschaften aufweisen, es wird jedoch immer eine gewisse Variation zwischen den Zellen geben. Zum Beispiel können einige Zellen eine geringere Kapazität aufweisen als andere Zellen. Wenn das Pack geladen wird, erreichen die Zellen mit geringerer Kapazität ihre maximale sichere Spannung vor dem Rest des Packs. Das BMS erkennt diese Hochspannung und unterbricht den weiteren Ladevorgang. Das Ergebnis ist, dass ein Großteil des Akkus nicht vollständig geladen ist, wenn das BMS den Ladevorgang aufgrund der höheren Spannung der schwächsten Zelle unterbricht. Eine ähnliche Dynamik kann während der Entladung auftreten, wenn Zellen mit höherer Kapazität nicht vollständig entladen werden können, weil das BMS die Last trennt, wenn die schwächste Batterie ihre Unterspannungsgrenze erreicht. Das Rudel ist daher nur so gut wie seine schwächsten Batterien, wie eine Kette nur so stark wie ihr schwächstes Glied.

Eine Lösung für dieses Problem ist die Verwendung eines Balance Boards. Während es viele Strategien gibt, das Pack auszubalancieren, sind die einfachsten "passiven" Balance Boards so konzipiert, dass sie einen Teil der Ladung der Zellen mit der höchsten Spannung ablassen, wenn sich das Pack der vollen Ladung nähert. Während etwas Energie verschwendet wird, kann die Packung als Ganzes mehr Energie speichern. Das Entlüften erfolgt, indem ein Teil der Leistung über eine von einem Mikrocontroller gesteuerte Widerstand/Schalter-Kombination abgeleitet wird. Dieses anweisbare beschreibt ein passives Ausgleichssystem, das mit dem Arduino / LTC6804 BMS aus einem früheren Projekt kompatibel ist.

Lieferungen

Hier können Sie das Balance Board PCB von PCBWays bestellen:

www.pcbway.com/project/shareproject/Balance_board_for_Arduino_BMS.html

Schritt 1: Betriebstheorie

Theorie der Arbeitsweise
Theorie der Arbeitsweise

Auf Seite 62 des LTC6804-Datenblatts wird der Zellenausgleich erläutert. Es gibt zwei Möglichkeiten: 1) Verwenden der internen N-Kanal-MOSFETS zum Ableiten von Strom von den High-Zellen oder 2) Verwenden der internen MOSFETS zum Steuern externer Schalter, die den Ableitungsstrom führen. Ich verwende die zweite Option, weil ich meine eigene Ableitungsschaltung entwerfen kann, um einen höheren Strom zu verarbeiten, als dies mit den internen Schaltern möglich wäre.

Die internen MOSFETS sind über die Pins S1-S12 verfügbar, während auf die Zellen selbst über die Pins C0-C12 zugegriffen wird. Das obige Bild zeigt einen der 12 identischen Entlüftungskreise. Wenn Q1 eingeschaltet ist, fließt Strom von C1 über R5 nach Masse, wodurch ein Teil der Ladung in Zelle 1 abgeleitet wird. Ich habe einen 6 Ohm, 1 Watt Widerstand ausgewählt, der mehrere Milliampere Ableitungsstrom verarbeiten kann eine LED hinzugefügt, damit der Benutzer jederzeit sehen kann, welche Zellen balancieren.

Die Pins S1-S12 werden vom CFGR4 und den ersten 4 Bits der CFGR5-Registergruppen gesteuert (siehe Seiten 51 und 53 des LTC6804-Datenblatts). Diese Registergruppen werden im Arduino-Code (siehe unten) in der Funktion balance_cfg gesetzt.

Schritt 2: Schema

Schaltplan
Schaltplan

Der Schaltplan für das BMS Balance Board wurde mit Eagle CAD entworfen. Es ist ziemlich einfach. Es gibt einen Entlüftungskreis für jedes Batteriepack-Reihensegment. Die Schalter werden durch Signale vom LTC6804 über den JP2-Header gesteuert. Der Bleed-Strom fließt vom Akkupack durch den Header JP1. Beachten Sie, dass der Bleed-Strom zum nächstniedrigeren Akkusegment fließt, so dass beispielsweise C9 in C8 blutet usw. Das Arduino Uno-Shield-Symbol wird auf dem Schaltplan für das in Schritt 3 beschriebene PCB-Layout platziert. Ein Bild mit höherer Auflösung wird bereitgestellt in der Zip-Datei. Das Folgende ist die Teileliste (Aus irgendeinem Grund funktioniert die Datei-Upload-Funktion von Instructables nicht für mich ….)

Menge Wert Gerätepaket Teilebeschreibung

12 LEDCHIPLED_0805 CHIPLED_0805 LED1, LED2, LED3, LED4, LED5, LED6, LED7, LED8, LED9, LED10, LED11, LED12 LED 12 BSS308PEH6327XTSA1 MOSFET-P SOT23-R Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12 P-Kanal Mosfet 2 PINHD-1X13_BIG 1X13-BIG JP1, JP2 PIN HEADER 12 16 R-US_R2512 R2512 R5, R7, R9, R11, R13, R15, R17, R19, R21, R23, R25, R27 WIDERSTAND, amerikanisches Symbol 12 1K R-US_R0805 R0805 R4, R6, R8, R10, R12, R14, R16, R18, R20, R22, R24, R26 WIDERSTAND, amerikanisches Symbol 12 200 R-US_R0805 R0805 R1, R2, R3, R28, R29, R30, R31, R32, R33, R34, R35, R36 WIDERSTAND, amerikanisches Symbol

Schritt 3: PCB-Layout

PCB-Layout
PCB-Layout

Das Layout wird hauptsächlich durch das Design des Haupt-BMS-Systems bestimmt, das in einer separaten Anleitung besprochen wird (https://www.instructables.com/id/Arduino-LTC6804-Battery-Management-System/). Die Header JP1 und JP2 müssen mit den passenden Headern im BMS übereinstimmen. Die Mosfets, Bleed-Widerstände und LEDs sind logisch auf dem Arduino Uno-Schild angeordnet. Gerber-Dateien wurden mit Eagle CAD erstellt und die Leiterplatten wurden zur Herstellung an Sierra Circuits gesendet.

Die angehängte Datei "Gerbers Balance Board.zip.txt" ist eigentlich eine Zip-Datei mit den Gerbers. Sie können einfach den.txt-Teil des Dateinamens löschen und dann wie eine normale Zip-Datei entpacken.

Senden Sie mir eine Nachricht, wenn Sie eine Platine haben möchten, ich habe vielleicht noch welche übrig.

Schritt 4: Leiterplattenbestückung

Balance-Board-Leiterplatten wurden von Hand unter Verwendung einer temperaturgesteuerten Lötstation WESD51 von Weller mit einer 0,093 "Schraubendreher"-Spitze der ETB ET-Serie und 0,3 mm Lötzinn gelötet. Obwohl kleinere Spitzen für komplizierte Arbeiten besser erscheinen, speichern sie die Wärme nicht und erschweren die Arbeit tatsächlich. Verwenden Sie einen Flussmittelstift, um die PCB-Pads vor dem Löten zu reinigen. 0,3 mm Lot eignet sich gut zum Handlöten von SMD-Teilen. Geben Sie ein wenig Lötzinn auf ein Pad und platzieren Sie das Teil dann mit einer Pinzette oder einem X-Acto-Messer und heften Sie dieses Pad fest. Das verbleibende Pad kann dann gelötet werden, ohne dass sich das Teil bewegt. Achten Sie darauf, das Teil oder die PCB-Pads nicht zu überhitzen. Da die meisten Komponenten für SMD-Standards ziemlich groß sind, ist die Leiterplatte relativ einfach zu montieren.

Schritt 5: Code

Code
Code

Der vollständige Arduino-Code ist in der vorherigen Anleitung enthalten, die mit oben verlinkt ist. Hier werde ich Ihre Aufmerksamkeit auf den Abschnitt lenken, der den Zellausgleich steuert. Wie oben erwähnt, werden S1-S12 vom CFGR4 und den ersten 4 Bits der CFGR5-Registergruppen des LTC6804 gesteuert (siehe Seiten 51 und 53 des LTC6804-Datenblatts). Die Schleifenfunktion des Arduino-Codes erkennt das Segment des Akkupacks mit der höchsten Spannung und legt seine Nummer in die Variable cellMax_i. Wenn die Spannung von cellMax_i größer als CELL_BALANCE_THRESHOLD_V ist, ruft der Code die Funktion balance_cfg() auf und übergibt die Nummer des hohen Segments cellMax_i. Die Funktion balance_cfg setzt die Werte des entsprechenden LTC6804-Registers. Ein Aufruf von LTC6804_wrcfg schreibt dann diese Werte in den IC und schaltet den S-Pin ein, der cellMax_i zugeordnet ist.

Empfohlen: