This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
lab:wip:bosch [2023-02-24 19:28] – old revision restored (2022/09/11 23:37) 217.113.194.56 | lab:wip:bosch [2024-04-21 12:58] (current) – [Links/Refs] orpatreanu | ||
---|---|---|---|
Line 5: | Line 5: | ||
==== Battery Management System (BMS) ==== | ==== Battery Management System (BMS) ==== | ||
- | Bosch Battery Packs come in different types and capacities but the current assumption is that they are all based on Component Type BBP250, running on an NXP Power Architecture MCU. | + | Bosch Battery Packs come in different types and capacities but the current assumption is that they are all based on Component Type BBP250. So far two similar |
- | https:// | + | * NXP [[https:// |
+ | * ST [[https:// | ||
Line 15: | Line 16: | ||
- | ^ Wh ^ Type ^ Code ^ | + | ^ Wh ^ Type ^ Code ^ MCU ^ BMC ^ |
- | | 400 | Frame | BBS265 | | + | | 400 | Frame | BBS265 |
- | | 400 | Rack | BBR265 | | + | | 400 | Rack | BBR265 |
- | | 500 | Frame | BBS275 | | + | | 500 | Frame | BBS275 |
- | | 500 | Rack | BBR275 | | + | | 500 | Rack | BBR275 |
+ | |||
=== PowerTube === | === PowerTube === | ||
- | {{: | + | {{: |
{{https:// | {{https:// | ||
Line 33: | Line 34: | ||
| 625 | Horizontal | BBP290 | | | 625 | Horizontal | BBP290 | | ||
| 625 | Vertical | BBP291 | | | 625 | Vertical | BBP291 | | ||
+ | |||
+ | === Battery Terminal === | ||
+ | |||
+ | |||
+ | {{: | ||
+ | |||
+ | === Charging === | ||
+ | |||
+ | The Batteries can be charged with non bosch chargers in the 36V LI-ION regime. A separate 5V supply (DC-DC step down) is needed to trick the BMS into charging mode. | ||
+ | |||
+ | {{: | ||
==== Drive Unit (DU) ==== | ==== Drive Unit (DU) ==== | ||
- | ^ Gen ^ Name ^ Code ^ | + | ^ Gen ^ Name ^ Code ^ MCU ^ |
| 2 | Active Line | BDU250C/ | | 2 | Active Line | BDU250C/ | ||
| 2 | Performance Line Cruise | BDU250P | | | 2 | Performance Line Cruise | BDU250P | | ||
Line 43: | Line 55: | ||
| 3 | Active Line Plus | BDU350 | | | 3 | Active Line Plus | BDU350 | | ||
| 3 | Performance Line | BDU365 | | | 3 | Performance Line | BDU365 | | ||
- | | 4 | Performance Line Speed | BDU490P | | + | | 4 | Performance Line Speed | BDU490P |
- | | 4 | Performance Line CX | BDU450CX | | + | | 4 | Performance Line CX | BDU450CX |
- | | 4 | Cargo Line Cruise | BDU450CX | | + | | 4 | Cargo Line Cruise | BDU450CX |
- | | 4 | Cargo Line Speed | BDU490P | | + | | 4 | Cargo Line Speed | BDU490P |
- | ==== Display/ | + | https:// |
+ | ==== Display/ | ||
+ | === Purion === | ||
+ | {{: | ||
+ | {{: | ||
===== Software ===== | ===== Software ===== | ||
Line 57: | Line 73: | ||
Bosch cff2 pull https:// | Bosch cff2 pull https:// | ||
+ | |||
+ | |||
+ | ==== CAN ==== | ||
+ | |||
+ | < | ||
+ | id len period src | ||
+ | data (big endian, i.e. MSB first) | ||
+ | 0x01c: 8, 1 s | ||
+ | D0-D3 uint: uptime [ms] (rising data with 1000 inc)? | ||
+ | D4-D7: const 00 00 00 00 | ||
+ | 0x037: 3, 100ms hmi | ||
+ | D0: const 00; | ||
+ | D1 bool: light: 0x80 on, 0x00 off | ||
+ | D2 bool: walk: 0x01: on, 0x00 off | ||
+ | 0x03b: 4, 500ms | ||
+ | D0 uchar: support 9: off, 1: eco, 2: tour, 3: sport, 4: turbo | ||
+ | D1 uchar: at boot ff, otherwise 00 | ||
+ | D2-D3: const 00 00 | ||
+ | 0x03c: 3, 500ms | ||
+ | D0 uchar: at boot 00, otherwise 01 | ||
+ | D1 uchar: at boot 00, otherwise light: 0x01 on, 0x02 off | ||
+ | D2 uchar: at boot 00, otherwise walk: 0x02 on, 0x01 off | ||
+ | 0x048: 6, 10ms du | ||
+ | D0-D1 short: torque [1/10 Nm] | ||
+ | D2-D3 ushort: time [1/10 ms] | ||
+ | 0x04a: 1, 10ms bat | ||
+ | D0: const 00 not fully cyclic: always sent for the first 4000 or 4096ms, then disappears; sometimes reapears ??? | ||
+ | 0x059: 8, 100ms | ||
+ | D0-D7 ???: const 01 01 00 1e 00 64 00 00 | ||
+ | 0x05a: 1, irreg hmi | ||
+ | D0: const 00 sent when resetting remaining range on intuvia | ||
+ | 0x08c: 1, 200ms bat | ||
+ | D0: const 00, 23 or 25 (alive from battery? value mostly 0, sometimes same as D0 from previous id 0x352 frame?) | ||
+ | 0x09a: 1, 200ms | ||
+ | D0: const 00 (alive from motor?) | ||
+ | 0x09b: 1, 200ms | ||
+ | D0: const 00 (alive from HMI?) | ||
+ | 0x0c5: 3, irreg, only when in intuvia base settings menu | ||
+ | D0 uchar: type; D1-D2 ushort: data; D0=01: const 00 00, D0=02: adjusted wheel circumference [mm] | ||
+ | 0x0c6: 8, irreg, only when in intuvia base settings menu | ||
+ | D0-D1 ushort: mininum; D2-D3 ushort: maxinum; D4-D5 ushort: default; D6-D7 ushort: adjusted wheel circumference [mm] | ||
+ | 0x0c7: 8, 100ms | ||
+ | D0: const 00 | ||
+ | D1 uchar ???: c8 = 200, less when battery runs low, same as 1/100 * 0x111 D2-D3 | ||
+ | D2-D3 ushort: remaining battery charge in Wh, correlating with 0x111 D6, at boot ff ff | ||
+ | D4: const 00 | ||
+ | D5 uchar: last full battery charge [Ah]; same as 0x111 D5 | ||
+ | D6-D7: const 00 00 | ||
+ | 0x0d0 (DU SW < 1.6.0.0): 4, 100ms | ||
+ | D0-D1 short: gforce z [1/100 m/s²]? values around 981 | ||
+ | D2-D3 short: gforce x [1/100 m/s²]? values around 0 | ||
+ | 0x0d0 (DU SW 1.6.0.0): not sent | ||
+ | 0x0d0 (DU SW 1.7.0.0): 8, 20ms; | ||
+ | D0-D1 short: gforce x [1/100 m/s²] values around 0 | ||
+ | D2-D3 short: gforce z [1/100 m/s²] values around 981 | ||
+ | 0x0d1: 2, 100ms du | ||
+ | D0-D1 ushort: speed [1/100 km/h] (0 when pushing bike backwards) | ||
+ | 0x0d2: 4, 100ms du | ||
+ | D0: const 00; D1 uchar: cadence [1/min] | ||
+ | D2-D3: const 00 00 | ||
+ | 0x0d3: 6, 100ms du | ||
+ | D0-D1 short: motor torque at chaindrive actual [1/100 Nm] | ||
+ | for torque sensor see http:// | ||
+ | D2-D3 ushort: motor torque nominal [1/100 Nm] | ||
+ | (max eco: 0x0602=1538=38.8Nm, | ||
+ | D4-D5 short: motor rpm [1/min], negative when pushing bike backwards | ||
+ | motor transmission to chaindrive is 16:47 * 19:77 = 304:3619 = 1:11.9 | ||
+ | pedal transmission to chaindrive is 33:14 * 31:29 = 1023:406 = 2.52:1 | ||
+ | motor rpm = (3*11*11*31*47)/ | ||
+ | see http:// | ||
+ | http:// | ||
+ | http:// | ||
+ | http:// | ||
+ | but: renderings in this video show 16:48 * 25:100 = 1:12, differing from actual version: https:// | ||
+ | 0x0d4: 4, 100ms du | ||
+ | D0-D1 ushort: motor power draw [1/10 W] correlating with 0x101 battery power draw (slightly less) | ||
+ | D2-D3 ushort: const, power draw for max. bar graph display [1/10 W]? OWL active: 0x0d7b = 3451, Gene performance (with Nuvinci?): 0x0dfc = 3580, performance cx: 0x1220 = 4640, at boot 0x0000 | ||
+ | 0x0f1: 7, 10ms bat | ||
+ | D0-D3 ???: const 00 00 01 01 | ||
+ | D4 uchar: battery depth of discharge in % (0: battery full, 100: empty), adds up with 0x111 D6 to 100, at boot fe and ff | ||
+ | D5: const 7f, OWL active 7f, but Gene performance ff ??? | ||
+ | D6 uchar: 98, d8 if battery at or below 20%, at boot 10; OWL active and Gene performance 9a ??? | ||
+ | 0x101: 8, 500ms bat | ||
+ | D0-D1 ushort: status, 0:run, 0xffff: charge | ||
+ | D2-D3 short: current [mA], neg. when charging | ||
+ | D4-D5 ushort: power [1/10 W] | ||
+ | D6-D7 ushort: voltage [mV] | ||
+ | 0x111: 7, 100ms bat | ||
+ | D0-D1: const 00 00 | ||
+ | D2-D3 ushort: battery discharge limit indicator: normally 4e 20 = 20000, less when battery runs low | ||
+ | D4: const 00 | ||
+ | D5 uchar: last full battery charge [Ah]; 8a, 89, 87, 86 changed after charging completely empty battery, OWL active and Gene performance 72 (400Wh battery) | ||
+ | D6 uchar: battery state of charge in % (0: battery empty, 100: full) | ||
+ | 0x131: 8, irreg hmi and bat | ||
+ | D0: const 00 | ||
+ | D1 uchar: 01, at boot 02, in settings when entering software versions 05 | ||
+ | D2-D6: const 00 00 00 00 00 | ||
+ | D7 uchar: 00, 01, 02, 03, 08, 09, 0a, 0b: button press/ | ||
+ | 0x170: 8, 5 s bat | ||
+ | D0-D1 ushort: motor temperature [1/100 K] | ||
+ | D2-D7: const 00 00 00 00 00 00 | ||
+ | 0x202: 8, 500ms | ||
+ | D0-D3 uint: total distance [m] | ||
+ | D4-D7 uint: remaining range [m] | ||
+ | 0x203: 8, 500ms | ||
+ | D0-D3 uint: total operation time [s] | ||
+ | D4 uchar: remaining battery charge in % (same as 0x111 D6), at boot 0x80 | ||
+ | D5-D6 short ???: related to speed and support; oversampled, | ||
+ | support off: 0 if speed 0, 0xf424 if speed > 0 | ||
+ | 0x0000, 0xf424, 0x0082, 0x01a6, 0x0092, 0x0135, 0x007e, 0x00e6, 0x0e43, 0x0091, 0x03f2, 0x010d, 0x023d, 0x0137, 0xf424, 0x007d, 0x0097, 0x00b9, 0x00bc, ... | ||
+ | D7 uchar: 80 if support is off due to empty battery, otherwise 00 | ||
+ | 0x205: 8, 100ms du | ||
+ | D0: const 00 | ||
+ | D1 uchar: gear shift recommendation? | ||
+ | D2-D7 ???: const 00 00 80 00 00 00 | ||
+ | 0x210: 6, 1 s hmi | ||
+ | D0 uchar: year | ||
+ | D1 uchar: month | ||
+ | D2 uchar: day | ||
+ | D3 uchar: hour | ||
+ | D4 uchar: minute | ||
+ | D5 uchar: second | ||
+ | 0x211: 8, 500ms | ||
+ | D0-D7: const 00 00 00 00 00 00 00 00 | ||
+ | 0x220: 8, 100ms | ||
+ | D0-D3 ???: const 00 00 03 00 | ||
+ | D4 uchar: related to speed sensor: 0x80 at some speed steps when decelerating, | ||
+ | D5-D7: const 00 00 00 | ||
+ | 0x221: 8, 100ms | ||
+ | D0-D3: const 00 00 00 00 | ||
+ | D4-D6: const 00 13 88; 0x1388 = 5000 | ||
+ | D7: const 00 | ||
+ | 0x2aa (PP SW 1.7.1.0): 8, 500ms bat | ||
+ | D0-D1 ushort: battery case temperature [1/100 K] | ||
+ | D2-D3 ushort: voltage [mV] (slightly higher than 0x101 D6-D7) | ||
+ | 0x351 (before eMTB): 8, irreg (not from bat) | ||
+ | D0-D7 ???: const 30 08 14 00 00 00 00 00 | ||
+ | 0x351 (after eMTB): not sent | ||
+ | 0x352 (PP SW 1.5.2.0): 8, irreg bat | ||
+ | battery statistics, head frames in 1 sec. timegrid, with optional data frames following in 30ms intervals | ||
+ | for data structure see code of CanState352 | ||
+ | 0x352 (PP SW 1.7.1.0): not sent | ||
+ | </ | ||
===== Links/Refs ===== | ===== Links/Refs ===== | ||
Line 66: | Line 225: | ||
* https:// | * https:// | ||
+ | [[https:// | ||
+ | ]] |