Outlander VCU - Rear inverter, Charger and BMS

Mitsubishi hybrid drive unit hacking
arber333
Posts: 3795
Joined: Mon Dec 24, 2018 1:37 pm
Location: Slovenia
Has thanked: 166 times
Been thanked: 411 times
Contact:

Re: Outlander VCU - Rear inverter, Charger and BMS

Post by arber333 »

midway wrote: Fri Aug 08, 2025 9:36 am I also noticed a small difference from replacing inverters. Newer ones give more torque.
Today i went to replace the inverter to test if newer had more torque.
I removed the cables and inverter itself. I replaced my older inverter P/N 9410A081 with newer model P/N 9410A163 from 2020. After a short drive later this evening it really seems the takeoff is somewhat more powerful.
Megane is quite a bit heavier than Mazda, 1800kg vs 1200kg and 400kg more is showing no matter how i go at the throttle code. I will elaborate later...
arber333
Posts: 3795
Joined: Mon Dec 24, 2018 1:37 pm
Location: Slovenia
Has thanked: 166 times
Been thanked: 411 times
Contact:

Re: Outlander VCU - Rear inverter, Charger and BMS

Post by arber333 »

Another update... I just went to drive Mazda and Megane with temperature outside about 0degC! I noticed several details at that temperature...
1. DCDC module wouldnt give 14V but rather 13.5Vdc near 0degC
2. Inverter would give less power at start by feeling, although it would still spin wheels at start if i press it...
3. I couldnt get more than 100km/h at reasonable power and acceleration. After that i would have to beg it upwards of 130km/h
It seems Mitsu components are protecting the battery and aux battery...

@midway, aot93, did you notice anything similar with your setup?
arber333
Posts: 3795
Joined: Mon Dec 24, 2018 1:37 pm
Location: Slovenia
Has thanked: 166 times
Been thanked: 411 times
Contact:

Re: Outlander VCU - Rear inverter, Charger and BMS

Post by arber333 »

To further elaborate...
Today with Mazda and Megane at temperatures at 6degC both cars operated at full capacity. No firmware change.

I also compared heaters that i use on both cars...
on Mazda i use P/N 7807A021
This heater draws about 8.5A which is about 3kW of power with the same telegram from here... https://openinverter.org/forum/viewtopi ... 728#p33728

on Megane however i use P/N 7807A053
This heater draws about 12A with the same CAN command telegram. That is in the range of 4.5kW and is quite comfortable even at sub zero temp...
User avatar
aot93
Posts: 213
Joined: Mon Feb 15, 2021 5:45 pm
Location: UK, West Sussex
Has thanked: 8 times
Been thanked: 49 times

Re: Outlander VCU - Rear inverter, Charger and BMS

Post by aot93 »

Interesting but it rarely gets that cold here, so I can't add anything
User avatar
midway
Posts: 100
Joined: Mon Feb 15, 2021 3:52 pm
Location: Ural
Has thanked: 15 times
Been thanked: 16 times

Re: Outlander VCU - Rear inverter, Charger and BMS

Post by midway »

Here in Siberia it's also abnormally warm, until I noticed a change in the inverter's behavior.
arber333
Posts: 3795
Joined: Mon Dec 24, 2018 1:37 pm
Location: Slovenia
Has thanked: 166 times
Been thanked: 411 times
Contact:

Re: Outlander VCU - Rear inverter, Charger and BMS

Post by arber333 »

Hm...
We just hit -4°C here in Slovenia!!!
As we drive to work together by our Ampera hybrid this week both my other EVs batteries are frozen solid. I do have heaters wired into BMS charging logic, but i did not consider i would have to thaw them out first. I am not inclined to push 15A into frozen battery alongside heating no matter for how short a time because there could be permanent electrode damage...

I decided to change the VCU code a bit. I would like to rewire a CAN1 to ZEVA BMS which works at 250kbps to sense when cell temperatures would be above 10degC before applying charging power... or similar. That would really make BMS connected with charger in all aspects.

But sadly i need this quick and i decided to simply add a comparator to the charging status and a manual limiting switch (previously sport switch) which is already used to limit regen in freezing temperatures...
...in "charging mode" just before HeaterComms(); i enter....

Code: Select all

    if (active_map == 1 && VCUstatus == 6) //  in charge mode chargercurrent 'limited'
    {
    chargercurrent = 0;
    }
This will limit charging in conjunction with limit switch
____________________________________________________________________________

Even better if i use charger temperature sensors with "sport" switch to limit charging when outside temperature is about 1degC.

Code: Select all

    if (active_map == 1 && DCDCTemp <= 1) //  in charge mode chargercurrent 'limited'
    {
    chargercurrent = 0;
    }
I will let you know how this works out today...
For the future i will be working on joint CAN bus with ZEVA BMS
arber333
Posts: 3795
Joined: Mon Dec 24, 2018 1:37 pm
Location: Slovenia
Has thanked: 166 times
Been thanked: 411 times
Contact:

Re: Outlander VCU - Rear inverter, Charger and BMS

Post by arber333 »

From some posts back i developed new Teensy 4.1 VCU board here...
https://evmeganetech.wordpress.com/2025 ... velopment/

Part of design was curiousity and making the most out of the wiring. But i also wanted more options for controling CAN decvices such as ZEVA BMS.
My VCU allready operates on CAN2 channel and there are Inverter, Charger, Heater and AC compressor on that line.

Plan was to fully utilize ZEVA CAN reporting on channel CAN1 to gain actual Voltage, Current, Temperature and SOC reports from ZEVA.

End goal is VCU integrated BMS and CHADEMO charging which should be operating on its own CAN bus. That would be CAN3 then.

There was just ONE obstacle! And that would be my VCU couldnt read ZEVA CAN traffic. Could as well be a mile apart!!!
I tried to change CAN transciever, replacing 120R resistor, i even tested another ESP32 board connected to the same CAN.

To make long story short, i forgot that mailboxes for FlexCAN library specify which ID AND which type of message would be filtered in.
So i forgot to set them up to receive extended CAN messages....EXT.
I really needed to cleanup the code...

First i corrected some obvious mistakes.....

Code: Select all

FlexCAN_T4<CAN1, RX_SIZE_256, TX_SIZE_16> Can1;
FlexCAN_T4<CAN2, RX_SIZE_256, TX_SIZE_16> Can2;

#define NUM_TX_MAILBOXES 6
#define NUM_RX_MAILBOXES 10
There are only 16 possible mailboxes per CAN port. So i had to select between TX and RX. RX should be more important because there is true filtering going on.

Of course i forgot to setup mailbox filters to EXT so that they could sense extended IDs.
FlexCAN allows to declare two position IDs in EXT mailboxes and it will use them as EXT such as 0x28 should be automatically used as 0x00000028

Code: Select all

// setup mailbox
  Can1.setMaxMB(16);
  Can2.setMaxMB(16);


  Can1.setMaxMB(NUM_TX_MAILBOXES + NUM_RX_MAILBOXES);
  for (int i = 0; i < NUM_RX_MAILBOXES; i++)
  {
    Can1.setMB((FLEXCAN_MAILBOX)i, RX, EXT);  //CAN1 mailboxes set to receive STD and EXT messages
  }

  Can2.setMaxMB(NUM_TX_MAILBOXES + NUM_RX_MAILBOXES);
  for (int i = 0; i < NUM_RX_MAILBOXES; i++)
  {
    Can2.setMB((FLEXCAN_MAILBOX)i, RX, STD); // Only STD messages filtered
  }
  
  // open mailbox
  for (int i = NUM_RX_MAILBOXES; i < (NUM_TX_MAILBOXES + NUM_RX_MAILBOXES); i++)
  {
    Can1.setMB((FLEXCAN_MAILBOX)i, TX, EXT); //CAN1 mailboxes set to transmitt STD and EXT messages
    Can2.setMB((FLEXCAN_MAILBOX)i, TX, STD);
  }

// setup filters
  Can1.setMBFilter(REJECT_ALL);
  Can1.enableMBInterrupts();
  Can2.setMBFilter(REJECT_ALL);
  Can2.enableMBInterrupts();
 // Can3.setMBFilter(REJECT_ALL);
 // Can3.enableMBInterrupts();

  // prepare which IDs we will look for in mailbox on CAN1
  Can1.onReceive(MB0, canRX_28); // BMS Current sensor
  Can1.onReceive(MB1, canRX_1E); // BMS report
  Can2.onReceive(MB0, canRX_305); // Eltek Charger Stats
  Can2.onReceive(MB1, canRX_377); // Charger LV Stats
  Can2.onReceive(MB2, canRX_38A); // Charger LV Stats
  Can2.onReceive(MB3, canRX_389); // Charger HV Stats
  Can2.onReceive(MB4, canRX_398); // Heater Stats  
  Can2.onReceive(MB5, canRX_289); // Inverter RPM Battery and Torque
  Can2.onReceive(MB6, canRX_299); // Inverter Temps
  Can2.onReceive(MB7, canRX_732); // Inverter current
  Can2.onReceive(MB8, canRX_733); // Inverter Temps
  Can2.onReceive(MB9, canRX_388); // AC compressor HV Stats

  Can1.setMBFilter(MB0, 0x28); // message ID will be handled as extended because it is EXT mailbox
  Can1.setMBFilter(MB1, 0x1E);
  Can2.setMBFilter(MB0, 0x305);  
  Can2.setMBFilter(MB1, 0x377);
  Can2.setMBFilter(MB2, 0x38A);
  Can2.setMBFilter(MB3, 0x389);
  Can2.setMBFilter(MB4, 0x398);  
  Can2.setMBFilter(MB5, 0x289);
  Can2.setMBFilter(MB6, 0x299);
  Can2.setMBFilter(MB7, 0x732);
  Can2.setMBFilter(MB8, 0x733);
  Can2.setMBFilter(MB9, 0x388);  
Now that i received something i setup reading functions to gather data. Of course data was in form of 16bit and 24bit integers. Because there would be some aritmetic involved i decided to use float values

For the current sensor ther is an offset to allow positive and negative values. I prepared equasion to substract offset and divide by milliAmps.
The EVMS should receive battery current over CAN bus on ID 40. The packet contains a single 24-
bit value (big endian format) for instantaneous battery current, in milliamps. The value is unsigned
but with a 8388608 offset, i.e subtract this number from the received value to get a signed value
for current in milliamps.

Code: Select all

float BMS_24current = 0; // current value is 24bit value for milliamps
float BMS_voltage = 0; // voltage value is 16bit value for 0.1V
float BMS_SOC = 0; // value is 16bit value for 0.1Ah
uint8_t BMS_temp = 0; // Temperature of the BMS - 40
.....

void canRX_28(const CAN_message_t &msg) // receive telegram ID40 in 24bit value
{
BMS_24current = (((msg.buf[0] << 16) | (msg.buf[1] << 8) | msg.buf[2]) - 8388608) / 1000.0f; // 8388608 is sensor offset!
}

// We need to receive voltage as well
void canRX_1E(const CAN_message_t &msg) // receive telegram ID30 in 16bit value
{
BMS_error = msg.buf[0]; // We also receive the error status from byte 0
BMS_SOC = ((msg.buf[1] << 8) | msg.buf[2]) / 10.0f; // SOC status in AH value
BMS_voltage = ((msg.buf[3] << 8) | msg.buf[4]) / 10.0f; // Voltage
BMS_temp = (msg.buf[7]) - 40; // Voltage
}
Result is a good value in serial report. Evident from screenshots...
Works with heater on as well as in charging bome with negative value current report.

Now i can move to another step with CHADEMO signal programming.
Attachments
Screenshot 2026-01-31 205011.png
Screenshot 2026-01-31 204902.png
lumonic
Posts: 25
Joined: Fri Jan 30, 2026 10:44 pm
Been thanked: 9 times

Re: Outlander VCU - Rear inverter, Charger and BMS

Post by lumonic »

arber333 wrote: Mon Sep 29, 2025 8:49 am I made my own design now with the same form and signal pinout in mind. That way if i would replace first VCU with my board the thing would directly work with the teensy chip and cable harness. The only difference would be the new expanded input, output pins with two new analog pins.
Do you have a BOM for the PCBA? I didnt see anything in the folder with the gerbers.

-Jerry
arber333
Posts: 3795
Joined: Mon Dec 24, 2018 1:37 pm
Location: Slovenia
Has thanked: 166 times
Been thanked: 411 times
Contact:

Re: Outlander VCU - Rear inverter, Charger and BMS

Post by arber333 »

lumonic wrote: Mon Mar 16, 2026 7:10 am Do you have a BOM for the PCBA? I didnt see anything in the folder with the gerbers.

-Jerry
No its a prototype for now. To be made for hand assembly. There is perfectly enough data in pcb file for that.
When i get everything to how i want it i will publish schematic and BOM too.
lumonic
Posts: 25
Joined: Fri Jan 30, 2026 10:44 pm
Been thanked: 9 times

Re: Outlander VCU - Rear inverter, Charger and BMS

Post by lumonic »

OK, I need to download the software to read that file. I mostly use altium for work.
arber333
Posts: 3795
Joined: Mon Dec 24, 2018 1:37 pm
Location: Slovenia
Has thanked: 166 times
Been thanked: 411 times
Contact:

Re: Outlander VCU - Rear inverter, Charger and BMS

Post by arber333 »

lumonic wrote: Tue Mar 17, 2026 7:32 am OK, I need to download the software to read that file. I mostly use altium for work.
the hex file from my tests. For now this works with Outlander components on CAN2 and ZEVA BMS on CAN1
Attachments
firmware_general 31Jan26.hex
(196.98 KiB) Downloaded 2 times
Post Reply