Hanna
Sourcecode Batteriemanagementsystem
bms_mosfet.c
gehe zur Dokumentation dieser Datei
1 
13 #include <avr/io.h>
14 #include <stdio.h>
15 #include <stdbool.h>
16 #include <util/delay.h>
17 
18 #include "bms_mosfet.h"
19 #include "com74HC595.h"
20 #include "board_init.h"
21 
37 void mosfet_safeschaltung ( void )
38 {
39 
40  for ( int i = 0; i <= 3; i++ ) // Ausschalten Akkus von P1
41  {
42  com74hc595_Bit ( i, AKKU_1_AUS ); // Setzt P-Kanal Mosfets auf 1, da inventiert muss basis dennoch auf 0
43  com74hc595_Bit ( i + LED_OFFSET, AKKU_1_AUS ); // LEDs müssen trotzdem auf 1
44  akku_an[i] = false;
45  }
46 
47  for ( int i = 4; i <= 7; i++ ) // Ausschalten Akkus von P2
48  {
49  com74hc595_Bit ( i, AKKU_2_AUS ); // Setzt P-Kanal Mosfets auf 1
50  com74hc595_Bit ( i + LED_OFFSET, AKKU_2_AUS ); // LEDs müssen trotzdem auf 1
51  akku_an[i] = false;
52  }
53 
54  com74hc595_Bit ( MOSFET_CHARGE_VCC, CHARGE_VCC_AUS ); // VCC - Chrg+ Mosfet ausschalten (P - Kanal Mosfet)
55  com74hc595_Bit ( MOSFET_CHARGE_VCC + LED_OFFSET, CHARGE_VCC_AUS ); // VCC - Chrg+ Mosfet ausschalten (P - Kanal Mosfet)
56  com74hc595_Bit ( MOSFET_GND_BATCOM, GND_BATCOM_AUS ); // GND - Batcom Mosfet ausschalten (0, da N - Kanal Mosfet)
57  com74hc595_Bit ( MOSFET_GND_BATCOM + LED_OFFSET, GND_BATCOM_AUS ); // GND - Batcom Mosfet ausschalten (0, da N - Kanal Mosfet)
58 
59  com74hc595_Bit ( MOSFET_VENT1, VENT_AUS ); // VENT1 ausschalten (P - Kanal Mosfet)
60  com74hc595_Bit ( MOSFET_VENT1 + LED_OFFSET, VENT_LED_AUS ); // VENT1 ausschalten (P - Kanal Mosfet)
61  com74hc595_Bit ( MOSFET_VENT2, VENT_AUS ); // VENT2 ausschalten (P - Kanal Mosfet)
62  com74hc595_Bit ( MOSFET_VENT2 + LED_OFFSET, VENT_LED_AUS ); // VENT2 ausschalten (P - Kanal Mosfet)
63 
64  com74hc595_out ();
65 
66  betriebsart = LEERLAUF;
67 }
68 
75 void mosfet_charge_on ( void )
76 {
77 
78  for ( int i = 0; i <= 3; i++ ) // Ausschalten Akkus von P1
79  {
80  com74hc595_Bit ( i, AKKU_1_AUS ); // Setzt P-Kanal Mosfets auf 1, da inventiert muss basis dennoch auf 0
81  com74hc595_Bit ( i + LED_OFFSET, AKKU_1_AUS ); // LEDs müssen trotzdem auf 1
82  akku_an[i] = false;
83  }
84 
85  for ( int i = 4; i <= 7; i++ ) // Ausschalten Akkus von P2
86  {
87  com74hc595_Bit ( i, AKKU_2_AUS ); // Setzt P-Kanal Mosfets auf 1
88  com74hc595_Bit ( i + LED_OFFSET, AKKU_2_AUS ); // LEDs müssen trotzdem auf 1
89  akku_an[i] = false;
90  }
91 
92  com74hc595_Bit ( MOSFET_CHARGE_VCC, CHARGE_VCC_AN ); // VCC - Chrg+ Mosfet einsschalten (P - Kanal Mosfet)
93  com74hc595_Bit ( MOSFET_CHARGE_VCC + LED_OFFSET, CHARGE_VCC_AN );
94  com74hc595_Bit ( MOSFET_GND_BATCOM, GND_BATCOM_AN ); // GND - Batcom Mosfet einschalten (1, da N - Kanal Mosfet)
95  com74hc595_Bit ( MOSFET_GND_BATCOM + LED_OFFSET, GND_BATCOM_AN );
96  com74hc595_out ();
97 
98  betriebsart = LADEN;
99 }
100 
107 void mosfet_charge_off ( void )
108 {
109 
110  for ( int i = 0; i <= 3; i++ ) // Ausschalten Akkus von Säule 1
111  {
112  com74hc595_Bit ( i, AKKU_1_AUS ); // Setzt P-Kanal Mosfets Gate auf 1, da durch npn-Transistor invertiert muss basis dennoch auf 0
113  com74hc595_Bit ( i + LED_OFFSET, AKKU_1_AUS ); // LEDs analog
114  akku_an[i] = false;
115  }
116 
117  for ( int i = 4; i <= 7; i++ ) // Ausschalten Akkus von Säule 2
118  {
119  com74hc595_Bit ( i, AKKU_2_AUS ); // Setzt P-Kanal Mosfets auf 1
120  com74hc595_Bit ( i + LED_OFFSET, AKKU_2_AUS ); // LEDs analog
121  akku_an[i] = false;
122  }
123 
124  com74hc595_Bit ( MOSFET_CHARGE_VCC, CHARGE_VCC_AUS ); // VCC - Chrg+ Mosfet ausschalten (P - Kanal Mosfet)
125  com74hc595_Bit ( MOSFET_CHARGE_VCC + LED_OFFSET, CHARGE_VCC_AUS );
126  com74hc595_Bit ( MOSFET_GND_BATCOM, GND_BATCOM_AUS ); // GND - Batcom Mosfet ausschalten (0, da N - Kanal Mosfet)
127  com74hc595_Bit ( MOSFET_GND_BATCOM + LED_OFFSET, GND_BATCOM_AUS );
128  com74hc595_out ();
129 }
130 
141 void mosfet_battery ( uint8_t batteryNumber, bool set )
142 {
143  com74hc595_Bit ( MOSFET_CHARGE_VCC, CHARGE_VCC_AUS ); // VCC - Chrg+ Mosfet ausschalten (P - Kanal Mosfet)
144  com74hc595_Bit ( MOSFET_CHARGE_VCC + LED_OFFSET, CHARGE_VCC_AUS );
145  com74hc595_Bit ( MOSFET_GND_BATCOM, GND_BATCOM_AUS ); // GND - Batcom Mosfet ausschalten (0, da N - Kanal Mosfet)
146  com74hc595_Bit ( MOSFET_GND_BATCOM + LED_OFFSET, GND_BATCOM_AUS );
147  com74hc595_Bit ( batteryNumber, set ); // Akku Mosfet ausschalten (P - Kanal Mosfet, Reihe 1 über npn-Transistor)
148  com74hc595_Bit ( batteryNumber + LED_OFFSET, set );
149 
150  if ( batteryNumber == 0 || batteryNumber == 1 || batteryNumber == 2 || batteryNumber == 3 )
151  {
152  akku_an[batteryNumber] = set;
153  }
154  else if ( batteryNumber == 4 || batteryNumber == 5 || batteryNumber == 6 || batteryNumber == 7 )
155  {
156  akku_an[batteryNumber] = !set;
157  }
158 
159  com74hc595_out ();
160 }
161 
162 void mosfet_notstrom ( uint8_t schaltung )
163 {
164  if ( schaltung )
165  PORTB.OUTCLR = PIN1_bm;
166  else
167  PORTB.OUTSET = PIN1_bm;
168 }
Standard board header file. Diese Datei enthält die Standardparameter und Pinbelegungen für das BMS B...
Standardheader.
void mosfet_charge_on(void)
Die Ladefunktion wird aktiviert.
Definition: bms_mosfet.c:75
void com74hc595_Bit(unsigned char BitNumber, bool set)
Setzt die ausgewählte Bitnummer auf set, 0 oder 1.
Definition: com74HC595.c:65
Definition der Schalterstellungen für die einzelnen MOSFETs.
void mosfet_safeschaltung(void)
Sicherheitsschaltung der BMS-Platine, alle Funktionen sind aus.
Definition: bms_mosfet.c:37
void com74hc595_out()
Übertragung des Bitmuster in die Schieberegister und anschließende Aktivierung.
Definition: com74HC595.c:153
void mosfet_charge_off(void)
Die Ladefunktion wird ausgeschaltet.
Definition: bms_mosfet.c:107
void mosfet_battery(uint8_t batteryNumber, bool set)
Einzelne Akkus werden in den Stromkreis zu- oder abgeschaltet.
Definition: bms_mosfet.c:141