Forum

Unterstützte das Deye Forum

 Deye Hybrid Angebote   Deye Zubehör Produkte

Custom Batterie und...
 
Notifications
Clear all

Custom Batterie und BMS an DEYE SUN 50K anschließen

1 Posts
1 Users
0 Reactions
16 Views
(@lucaten)
Neues Mitglied Neues Mitglied
Mitglied seit: 7 Stunden ago
Posts: 1
Topic starter  

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


   
Quote