Deye Hybrid Angebote Deye Zubehör Produkte
Hallo liebes Forum,
ich habe ein DIY Projekt gestartet, um einen eigenen Heimspeicher aus Tesla Batterien zu entwickeln. Dafür habe ich 8 Tesla Model S Module gekauft und deren Temperatur und Spannungswerte über einen Arduino ausgelesen ( https://github.com/collin80/TeslaBMS).
Die Module habe ich seriell verschaltet (175 V) und an den DEYE SUN 50K-SG01 HP3-EU-BM4 Hybrid-Wechselrichter (50KW) angeschlossen. Um das BMS an den Wechselrichter anzuschließen, habe ich einen CAN Tranceiver an den Arduino Due angeschlossen (SN65HVD230) und will dann über das CAN Protokoll am BMS1 die Kommunikation herstellen.
Hier ist der Code, den ich verwende:
#include <due_can.h> // For the Arduino Due built-in CAN controller
void setup() {
Serial.begin(9600);
// Initialize CAN0 at 500 kbps
if (!Can0.begin(CAN_BPS_500K)) {
Serial.println(„Starting CAN0 failed!“);
while (1);
}
// Configure CAN0 for sending
Can0.setNumTXBoxes(3); // Allocate 3 mailboxes for transmitting
Serial.println(„CAN0 initialized successfully!“);
}
void loop() {
// Example battery data (replace with actual values):
float voltage = 180.0; // Battery voltage in volts
int soc = 80; // State of Charge in %
float temperature = 25.0; // Temperature in Celsius
float chargeLimit = 50.0; // Max charge current in amps
float dischargeLimit = 60.0; // Max discharge current in amps
// Convert data to protocol resolution:
int16_t voltageData = voltage * 10; // 0.1 V resolution
uint8_t socByte = map(soc, 0, 100, 0, 255); // 1% resolution
int16_t temperatureData = (temperature + 100) * 10; // 0.1°C resolution with offset
int16_t chargeData = (chargeLimit + 3000) * 10; // 0.1 A resolution with offset
int16_t dischargeData = (dischargeLimit + 3000) * 10; // 0.1 A resolution with offset
// Send Battery Voltage, SOC, and Temperature
CAN_FRAME frame1;
frame1.id = 0x1801F456; // CAN ID for Battery Voltage, SOC, Temperature
frame1.length = 6; // 6 bytes of data
frame1.data[0] = (uint8_t)(voltageData >> 8); // Voltage high byte
frame1.data[1] = (uint8_t)(voltageData & 0xFF); // Voltage low byte
frame1.data[2] = socByte; // SOC byte
frame1.data[3] = (uint8_t)(temperatureData >> 8); // Temperature high byte
frame1.data[4] = (uint8_t)(temperatureData & 0xFF); // Temperature low byte
frame1.data[5] = 0x00; // Reserved
Can0.sendFrame(frame1);
Serial.println(„Battery Voltage, SOC, and Temperature sent.“);
delay(1000);
// Send Charge/Discharge Current Limits
CAN_FRAME frame2;
frame2.id = 0x1802F456; // CAN ID for Charge/Discharge Current Limits
frame2.length = 4; // 4 bytes of data
frame2.data[0] = (uint8_t)(chargeData >> 8); // Charge limit high byte
frame2.data[1] = (uint8_t)(chargeData & 0xFF); // Charge limit low byte
frame2.data[2] = (uint8_t)(dischargeData >> 8); // Discharge limit high byte
frame2.data[3] = (uint8_t)(dischargeData & 0xFF); // Discharge limit low byte
Can0.sendFrame(frame2);
Serial.println(„Charge/Discharge Current Limits sent.“);
delay(1000);
// Send Enable Communication Command
CAN_FRAME frame3;
frame3.id = 0x1803F456; // CAN ID for Enable Communication
frame3.length = 8; // 8 bytes of data
frame3.data[0] = 0xAA; // Enable communication byte
for (int i = 1; i < 8; i++) {
frame3.data[i] = 0x00; // Reserved bytes
}
Can0.sendFrame(frame3);
Serial.println(„Enable communication command sent.“);
delay(1000); // Wait 1 second before the next loop
}
Leider erscheint beim Verbinden des Arduino zum Wechselrichter leider der Fehler F58. Da dieser sehr allgemein ist, komme ich nicht so ganz weiter.
Hat jemand Erfahrung beim Verbinden eines Custom BMS/Arduino zum Wechselrichter über CAN und kann mir da etwas weiterhelfen?
Viele Grüße Luca
Das schöne an den Deye ist ja dass man die ohne BMD Koppelung betreiben kann sicher das deine 175 V wirklich ausreichen dass der WR sie akzeptiert? Leistungsmässig ist das natürlich jämmerlich was Du da rausholen kann
aber jeder wie er will.
Hi Plastiko,
danke dir für deine Antwort. Ich schaffe es auf jeden Fall, die Batterie über den BattV Modus zu laden und entladen. Also gehe ich davon aus, dass die Spannung ausreichend ist.
Die Leistung ist tatsächlich sehr überschaubar, aber das ganze ist als proof of concept gedacht und perspektivisch wollen wir in die MWh Richtungen gehen. Genau dafür benötigen wir die Software Kopplung und würden gerne unser eigenes BMS und Lastmanagement an den Wechselrichter anschließen. Kennst du dich damit aus?
Grüße Luca
sorry, keinen Plan...aber gibt es nicht schon Lösungen um einer Tesla Batterie unter den Rock zu schauen?
aber jeder wie er will.
Ja da kann man relativ gut reinschauen. Ich brauche letztendlich auch nur die Funktion, dem Wechselrichter SoC, Temperaturen, SoH, Spannungsgrenzen mitzugeben und aktiv den Ladestrom zu begrenzen bzw. zu regeln. Also das sind absolute Basis Funktionen, aber über CAN bekomme ich sie aktuell nicht angesteuert.
wozu begrenzen?
Hole Dir die ganzen 85 kWh denen wirst Du bei Raumtemperatur dem dem 50K kaum weh tun können.
aber jeder wie er will.
Dabei geht es hauptsächlich um Lebensdaueroptimierung der Zellen und austesten der Betriebsgrenzen.
Wie gesagt, soll ein Proof of Concept sein und deshalb kommen wir an einer aktiven Steuerung nicht vorbei.
Hey, eventuell wirst du hier fündig wenn du ein Tesla BMS verwendest: https://github.com/dalathegreat/Battery-Emulator/wiki/Tesla-Model-S-3-X-Y-battery
Ich persönlich verwende Batrium und bin damit sehr zufrieden. Ich habe ESS Zellen mit 305Ah verschalten und habe mit dem Batrium BMS keine Probleme.