Update BullTron README details

This commit is contained in:
2026-07-11 17:23:04 +02:00
parent c22b2cf995
commit 017d0a8b73
+16 -7
View File
@@ -150,8 +150,8 @@ The GUI shows:
charge/discharge current and watts, and computed time-to-empty/time-to-full
- alarm/status words decoded into readable alarm names where known
- system/settings values such as the control PIN, firmware/version text,
product info, battery code/SN, production-date raw value, and inferred battery
Ah when the settings block contains a plausible capacity
product info, battery code/SN, parsed production date where possible, and
inferred battery Ah when the settings block contains a plausible capacity
- raw TX/RX frames for debugging and protocol confirmation
The settings tab has MOS on/off controls, but writes are deliberately guarded:
@@ -160,6 +160,11 @@ The default write registers mirror the BullTron system screen: `0x00A5` for
charge MOS and `0x00A6` for discharge MOS. The live MOS status still comes from
read-only telemetry registers `0x0035` and `0x0036`.
The MOS status can lag the requested control state until that MOSFET path is
actually used. For example, disabling charging may still display as ON while
the pack is idle or discharging; it only reports OFF once charging is attempted
and the BMS applies the charge MOS state.
Scan results are sorted so likely BullTron devices appear first. The Android app
accepts scanned devices whose BLE name contains `DL` or `B35`, or whose legacy
advertising payload contains marker bytes for `DL`, `PU`, or `JHB`. The desktop
@@ -241,14 +246,18 @@ Important fields:
| `0x003A`-`0x003D` | Alarm/status words | 16-bit bitmaps |
Time-to-empty/time-to-full is computed by the app instead of read as one live
BLE value:
BLE value. Current app logic uses the remaining-capacity register when present,
falling back to rated capacity times SOC fraction only if remaining Ah is not
available:
```text
if register 0x002F == 1:
time-to-full = rated_capacity_Ah * (100 - SOC_percent) / abs(current_A) * 60
remaining_Ah = register_0x0030_Ah if available else rated_capacity_Ah * SOC_percent / 100
if register 0x002F == 2:
time-to-empty = rated_capacity_Ah * SOC_percent / abs(current_A) * 60
if current_A > 0:
time-to-full = max(rated_capacity_Ah - remaining_Ah, 0) / abs(current_A) * 60
if current_A < 0:
time-to-empty = remaining_Ah / abs(current_A) * 60
```
## Repository Contents