Ich hänge parallel zum Bluetooth-Adapter. Egal, ob ich die Ausgaben des BMS lese oder die Befehle vom Adapter zum BMS, alle Nachrichten fangen statt mit A5 mit D2 an.
Wenn ich bspw. den SOC per App auf 100% setze, empfange ich "D2 06 00 A7 03 E8 2B 34" und der SoC wird tatsächlich auf 100% gesetzt. Heißt, die Kommunikation mit dem BMS funktioniert, ich lese aber einen falschen Befehl, da alle mit "A5" beginnen sollten.
Gleiches passiert auch beim Auslesen des BMS mittels App, alle Werte korrekt, aber alle Daten in HTerm fangen mit D2 statt A5 an.
EDIT: Ich verwende einen Seriell2USB-Adapter, welchen ich schon überprüft habe.
Echo fördert die gesendet werden Daten 1:1 zu Tage, "Hallo123" vom Mikrokontroller zum Computer ergibt "Hallo123", also das funktioniert ohne Probleme.
Habe ein BMS 250A Fan, auf dem BT-Modul finde ich keine Bezeichnung.
Ich denke aber, dass zB. die SoC-Nachricht, die ich in HTerm empfange falsch ist, denn wenn ich diese vom Mikrokontroller zum BMS sende, passiert nichts, also SoC wird nicht geändert.
Das ist ja u.a. eins meiner Ziele, das BMS vom Mikrokontroller zu konfigurieren, anstatt mittels App oder PC.
ok muss ich noch genauer fragen um welches Model handelt es sich GENAU ( Aufkleber auf der Seite oder unten? )
Was für einen USB zu zu Seriell Adapter nutzt du GENAU ? die meisten sind mit 5 Volt NICHT geeignet für 3,3 Volt BMS von Daly.
Hast du schon einen Test Code?
Wenn ja Wo genau liegt da das Problem ?
Welcher Controller solls den mal final werden ?
Vorzugsweise einer mit mehr als 2 Seriellen Ports da Software Serial nur bedingt geht.
Und auch hier wieder achte auf die 3,3 Volt.
Ich habe den 3,3 Volt Pegel UND die galvanische Trennung mit ADUM1201 + PH 2.0MM 6 Pin Stecker Gemächt.
Hier mal ein Auszug von github.
#include <Arduino.h>
#include <daly-bms-uart.h>
#define BMS_SERIAL Serial1
Daly_BMS_UART bms(BMS_SERIAL);
void setup()
{
Serial.begin(9600);
Serial.begin1(115200);
bms.Init();
}
void loop()
{
Serial.println("Press any key and hit enter to query data from the BMS...");
while (Serial.available() == 0)
{
}
Serial.read(); // Discard the character sent
Serial.read(); // Discard the new line
bms.update();
Serial.println("Basic BMS Data: " + (String)bms.get.packVoltage + "V " + (String)bms.get.packCurrent + "I " + (String)bms.get.packSOC + "\% ");
Serial.println("Package Temperature (C): " + (String)bms.get.tempAverage);
Serial.println("Highest Cell Voltage: #" + (String)bms.get.maxCellVNum + " with voltage " + (String)(bms.get.maxCellmV / 1000));
Serial.println("Lowest Cell Voltage: #" + (String)bms.get.minCellVNum + " with voltage " + (String)(bms.get.minCellmV / 1000));
Serial.println("Number of Cells: " + (String)bms.get.numberOfCells);
Serial.println("Number of Temp Sensors: " + (String)bms.get.numOfTempSensors);
Serial.println("BMS Chrg / Dischrg Cycles: " + (String)bms.get.bmsCycles);
Serial.println("BMS Heartbeat: " + (String)bms.get.bmsHeartBeat); // cycle 0-255
Serial.println("Discharge MOSFet Status: " + (String)bms.get.disChargeFetState);
Serial.println("Charge MOSFet Status: " + (String)bms.get.chargeFetState);
Serial.println("Remaining Capacity mAh: " + (String)bms.get.resCapacitymAh);
//... any many many more data
for (size_t i = 0; i < size_t(bms.get.numberOfCells); i++)
{
Serial.println("Remaining Capacity mAh: " + (String)bms.get.cellVmV[i]);
}
Serial.println("Level one Cell V to High: " + (String)bms.alarm.levelOneCellVoltageTooHigh);
}
-Zum BMS: 16S 48V 250A; einen Aufkleber gibt es nicht, die Angaben sind direkt auf das Gehäuse "gedruckt"
-Der USB2Seriell-Adapter hat keine Bezeichnung, läuft mit 3,3V; einziger Aufdruck: USB->TTL
-Aktuell kann ich das BMS komplett mit einem D1 Mini auslesen, verwende dazu auch die daly-bms-uart.h
Ich möchte aber das BMS nicht nur auslesen, sondern auch zB. den nicht langzeitstabilen SoC per D1 Mini "anpassen".
Daher dachte ich mir, lese ich doch die Nachrichten vom BT-Modul zum BMS aus, wenn ich den SoC per App ändere. Ich bekomme daraufhin auch die Nachrichten im HTerm angezeigt, aber eben nicht mit A5 beginnend sondern mit D2.
Sende ich vom D1 Mini dieselbe Nachricht, die ich vom BT-Modul "auslese", passiert aber nichts am BMS, der SoC bleibt unverändert.
Da das Auslesen des BMS mit dem D1 Mini problemlos funktioniert, gehe ich davon aus, dass die Kommunikation zws. D1 Mini und BMS über Nachrichten funktioniert, die mit dem dokumentierten Befehlssatz, beginnend mit A5, erfolgt. Ansonsten, so meine Annahme, würde die Kommunikation nicht mit der Daly-bms-uart.h funktionieren.
Mir würde es ersteinmal reichen, wenn mir jemand die Nachricht zukommen lässt, welche das BT-Modul zum BMS sendet, um den SoC auf 100% zu ändern.
Ok hab mal versucht es bei mir auszulesen aber leider war es mir nicht möglich.
In der neuen Version DalyBmsMonitorV2.3 ist ein ändern sämtlicher werte nur noch mit admin Passwort möglich das steht aber nirgends. ( Support email ist raus).
In einer alten Version die ich erst auf einen Notebook suchen musste war mir das setzten zwar möglich wurde aber nicht gesendet.*
*Ich kann nur ohne BMS Testen da es sehr verbaut ist und ich mir erst was basteln muss um die daten wieder abzugreifen.
An meinen Balancier komme ich zwar ran dem ist der SOC wert aber egal.
Das SOC abfragen wird aber vermutlich mit A5 40 90 08 00 00 00 00 00 00 00 00 7D gemacht jedenfalls ist es das was kommt wenn ich bei SOC einen beliebigen werte setzte.
Kann dir also leider NICHT weiter helfen.
Aber nur mal so aus Neugier wenn du den wert für 100 % hast, was kommt bei sagen wir 50% oder 0 % Raus ?
Das KÖNNTE schon stimmen gibt wie gesagt viele Versionen die nicht zu einander kompatibel sind.
J/T/A/U/W/ND + H/K/M/S series dachte auch eine blaue Version gesehen zu haben.
Gesendet wird ja kein DEC oder HEX, sondern nur Bits/Bytes. Es ist doch Sache der Software des Empfängers, ob er die dann in Hex Dec oder sonstwas umwandelt?!
Dan sendest du zu PC nicht zu BMS! wo ist der Sin des Ganzes?
Wen man Serial1 für BMS gemacht hat dann musst du den ach nutzen, um mit dem BMS "Sprechen"