Inhoudsopgave:

Arduino LTC6804 BMS - Deel 2: Balance Board - Ajarnpa
Arduino LTC6804 BMS - Deel 2: Balance Board - Ajarnpa

Video: Arduino LTC6804 BMS - Deel 2: Balance Board - Ajarnpa

Video: Arduino LTC6804 BMS - Deel 2: Balance Board - Ajarnpa
Video: New IC Technology Boosts Performance of Large Lithium Ion Battery Packs 2024, Juli-
Anonim
Arduino LTC6804 BMS - Deel 2: Balansbord
Arduino LTC6804 BMS - Deel 2: Balansbord

Deel 1 is hier

Een batterijbeheersysteem (BMS) bevat functionaliteit om belangrijke parameters van het batterijpakket te detecteren, waaronder celspanningen, batterijstroom, celtemperaturen, enz. Als een van deze buiten een vooraf gedefinieerd bereik valt, kan het pakket worden losgekoppeld van de belasting of oplader of andere passende maatregelen kunnen worden genomen. In een vorig project (https://www.instructables.com/id/Arduino-LTC6804-Battery-Management-System/) besprak ik mijn BMS-ontwerp, dat is gebaseerd op de Linear Technology LTC6804 Multicell Battery Monitor-chip en een Arduino-microcontroller. Dit project breidt het BMS-project uit door het balanceren van batterijpakketten.

Battery packs worden opgebouwd uit individuele cellen in een parallelle en/of serieconfiguratie. Een 8p12s-pakket zou bijvoorbeeld worden geconstrueerd met behulp van 12 in serie geschakelde sets van 8 parallel geschakelde cellen. Er zouden in totaal 96 cellen in het pakket zitten. Voor de beste prestaties moeten alle 96 cellen sterk overeenkomende eigenschappen hebben, maar er zal altijd enige variatie tussen cellen zijn. Sommige cellen kunnen bijvoorbeeld een lagere capaciteit hebben dan andere cellen. Naarmate het pakket wordt opgeladen, zullen de cellen met een lagere capaciteit hun maximale veilige spanning bereiken voordat de rest van het pakket. Het BMS detecteert deze hoge spanning en onderbreekt verder opladen. Het resultaat zal zijn dat een groot deel van het pakket niet volledig is opgeladen wanneer het BMS het opladen onderbreekt vanwege de hogere spanning van de zwakste cel. Een vergelijkbare dynamiek kan optreden tijdens het ontladen, wanneer cellen met een hogere capaciteit niet volledig kunnen ontladen omdat het BMS de belasting loskoppelt wanneer de zwakste batterij zijn laagspanningslimiet bereikt. Het pakket is daarom zo goed als zijn zwakste batterijen, zoals een ketting zo sterk is als zijn zwakste schakel.

Een oplossing voor dit probleem is het gebruik van een balansbord. Hoewel er veel strategieën zijn om het pakket in evenwicht te brengen, zijn de eenvoudigste 'passieve' balansborden ontworpen om een deel van de lading van de cellen met de hoogste spanning af te voeren wanneer het pakket bijna volledig is opgeladen. Hoewel er wat energie wordt verspild, kan het pakket als geheel meer energie opslaan. Bloeden wordt gedaan door wat vermogen te dissiperen via een weerstand/schakelaar-combinatie die wordt bestuurd door een microcontroller. Deze instructable beschrijft een passief balanceringssysteem dat compatibel is met de arduino/LTC6804 BMS van een vorig project.

Benodigdheden

U kunt de Balance Board PCB van PCBWays hier bestellen:

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

Stap 1: Theorie van de werking

Theorie van de werking
Theorie van de werking

Pagina 62 van de LTC6804-datasheet bespreekt celbalancering. Er zijn twee opties: 1) de interne N-kanaals MOSFETS gebruiken om de stroom uit de hoge cellen te laten lopen, of 2) de interne MOSFETS gebruiken om externe schakelaars te bedienen die de aftapstroom voeren. Ik gebruik de tweede optie omdat ik mijn eigen ontluchtingscircuit kan ontwerpen om een hogere stroom aan te kunnen dan mogelijk is met de interne schakelaars.

De interne MOSFETS zijn beschikbaar via pinnen S1-S12, terwijl de cellen zelf toegankelijk zijn via pinnen C0-C12. De afbeelding hierboven toont een van de 12 identieke ontluchtingscircuits. Wanneer Q1 is ingeschakeld, stroomt er stroom van C1 naar aarde via R5, waardoor een deel van de lading in cel 1 wordt afgevoerd. Ik heb een weerstand van 6 Ohm en 1 Watt gekozen, die enkele milliampères aftapstroom moet kunnen verwerken. Er is een LED toegevoegd zodat de gebruiker op elk moment kan zien welke cellen in evenwicht zijn.

De pinnen S1-S12 worden bestuurd door de CFGR4 en de eerste 4 bits van de CFGR5-registergroepen (zie pagina's 51 en 53 van het LTC6804-gegevensblad). Deze registergroepen worden ingesteld in de Arduino-code (hieronder besproken) in de functie balance_cfg.

Stap 2: Schema

Schematisch
Schematisch

Het schema voor het BMS-balansbord is ontworpen met Eagle CAD. Het is redelijk eenvoudig. Er is één ontluchtingscircuit voor elk segment van de batterijreeks. De schakelaars worden bestuurd door signalen van de LTC6804 via de JP2-header. De ontluchtingsstroom vloeit van het batterijpakket door header JP1. Merk op dat de ontluchtingsstroom naar het volgende lagere batterijpakketsegment stroomt, dus C9 loopt bijvoorbeeld over in C8, enz. Het Arduino Uno-schildsymbool wordt op het schema geplaatst voor de PCB-lay-out beschreven in stap 3. Er wordt een afbeelding met een hogere resolutie geleverd in het zip-bestand. Het volgende is de onderdelenlijst (om de een of andere reden werkt de uploadfunctie van Instructables niet voor mij …)

Aantal Waarde Apparaat Pakket Onderdelen Beschrijving:

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-kanaal 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 WEERSTAND, Amerikaans symbool 12 1K R-US_R0805 R0805 R4, R6, R8, R10, R12, R14, R16, R18, R20, R22, R24, R26 WEERSTAND, Amerikaans symbool 12 200 R-US_R0805 R0805 R1, R2, R3, R28, R29, R30, R31, R32, R33, R34, R35, R36 WEERSTAND, Amerikaans symbool

Stap 3: PCB-layout

PCB-indeling
PCB-indeling

De lay-out wordt meestal bepaald door het ontwerp van het belangrijkste BMS-systeem dat wordt besproken in een afzonderlijke instructable (https://www.instructables.com/id/Arduino-LTC6804-Battery-Management-System/). De headers JP1 en JP2 moeten overeenkomen met de bijpassende headers op het GBS. De Mosfets, bleed-weerstanden en LED's zijn op een logische manier gerangschikt op het Arduino Uno-schild. Gerber-bestanden zijn gemaakt met Eagle CAD en de PCB's zijn voor fabricage naar Sierra Circuits gestuurd.

Het bijgevoegde bestand "Gerbers Balance Board.zip.txt" is eigenlijk een zip-bestand met de Gerbers. U kunt gewoon het.txt-gedeelte van de bestandsnaam verwijderen en het vervolgens uitpakken als een normaal zipbestand.

Stuur me een berichtje als je een printje wilt hebben, misschien heb ik er nog wel wat over.

Stap 4: PCB-assemblage

Balance board PCB's werden met de hand gesoldeerd met behulp van een Weller WESD51 temperatuur gecontroleerd soldeerstation met een ETB ET serie 0,093 "schroevendraaier" punt en 0,3 mm soldeer. Hoewel kleinere tips misschien beter lijken voor ingewikkeld werk, houden ze de warmte niet vast en maken ze het werk zelfs moeilijker. Gebruik een fluxpen om de printplaten schoon te maken voordat u gaat solderen. 0.3 mm soldeer werkt goed voor het handmatig solderen van SMD-onderdelen. Plaats een beetje soldeer op een pad en plaats het onderdeel vervolgens met een pincet of x-acto-mes en plak dat pad vast. De resterende pad kan dan worden gesoldeerd zonder dat het onderdeel beweegt. Zorg ervoor dat u het onderdeel of de printplaten niet oververhit. Omdat de meeste componenten naar SMD-normen vrij groot zijn, is de print vrij eenvoudig te monteren.

Stap 5: Coderen

Code
Code

De volledige Arduino-code wordt gegeven in de vorige instructable waarnaar hierboven is gelinkt. Hier zal ik uw aandacht vestigen op het gedeelte dat de celbalancering regelt. Zoals hierboven vermeld, worden S1-S12 bestuurd door de CFGR4 en de eerste 4 bits van de CFGR5-registergroepen op de LTC6804 (zie pagina's 51 en 53 van de LTC6804-datasheet). De lusfunctie van de Arduino-code detecteert het segment van het batterijpakket met de hoogste spanning en plaatst het nummer in de variabele cellMax_i. Als de spanning van cellMax_i groter is dan de CELL_BALANCE_THRESHOLD_V, roept de code de functie balance_cfg() aan, waarbij het nummer van het hoge segment, cellMax_i, wordt doorgegeven. De functie balance_cfg stelt de waarden van het juiste LTC6804-register in. Een oproep naar LTC6804_wrcfg schrijft deze waarden vervolgens naar de IC, waarbij de S-pin wordt ingeschakeld die is gekoppeld aan cellMax_i.

Aanbevolen: