ZombieVerter VCU
An open-source EV conversions VCU (vehicle control unit) for controlling salvaged EV components!
- Development thread
- latest stable software release
- github repo
- fully built VCU boards
- partially-built VCU boards
Introduction
There is a growing supply of OEM(original equipment manufacture) EV and hybrid parts; inverters, chargers, dc/dc converters, heaters, etc, requiring some control method in order to reuse them in a EV conversion.
After reverse engineering the communication signals for these devices, we need a control board to tell the device in question what todo. These devices often talk different "languages" some use CANBUS, LINBUS, sync serial, PWM, etc
Instead of making custom boards for every device that's been decoded, why not just make a general purpose VCU (vehicle control unit) with lots of different types of inputs and outputs?
hence the "zombieverter" VCU
The Zombieverter includes the following features:
hardware:
- on board WIFI
- 3x High side PWM drivers
- 5x low side outputs
- 3x input pins (pull to ground only)
- 3x CANbus interfaces
- Linbus
- sync serial interface
- OBD-II interface
- etc
Software:
- web based user interface
- contactor control
- charger control
- charge timer
- motor(inverter) control
- heater control
- water pump control
- coolant fan control
- throttle mapping
- motor regen
- cruise control(?)
- BMS limits
- IVT shunt initialization
- data logging and graphing
- etc
Currently supported OEM hardware:
*this list is always growing and changing, not everything is fully tested and verified
- Nissan Leaf Gen1/2/3 inverter/motor via CAN
- Nissan Leaf Gen2(and 3?) PDM (Charger and DCDC)
- CCS DC fast charge via BMW i3 LIM - type 2 + type 1
- Chademo dc fast charging
- Lexus GS450h inverter / gearbox via sync serial
- Lexus GS300h inverter/ gearbox via sync serial
- Toyota Prius/Yaris/Auris Gen 3 inverters via sync serial
- 1998-2005 BMW 3-series (E46) CAN support
- 1996-2003 BMW 5-series (E39) CAN support
- 2001-2008 BMW 7-series (E65) CAN Support
- BMW E9x CAN support
- Mid-2000s VAG CAN support
- subaru CAN support
- Opel Ampera / Chevy Volt 6.5kw cabin heater
- Mitsubishi outlander motors/inverter
- EVS-Charge Port Controller
- Foccci ccs faster charger controller
- VAG/VW PTC water heater via lin
- VAG/VW cabin heater via lin
- Mitsubishi outlander OBC (charger/dcdc)
Assembling the VCU
Looking to build a zombiverter VCU your self or your kit has missing hardware?
- Zombiverter hardware page for additional build instructions
the enclosure and header are required if you did not order a fully built board
The enclosure kit options:
The original connectors are from aptiv (delphi):
- aptive 56pin connector
- aptive 56pin header
- Removal tool for connector terminals: Manufacturer: Aptiv (formerly Delphi) Part Number: 210S048
videos on assembly, powering up, updating, etc:
https://www.youtube.com/watch?v=geZuIbGHh30&list=PLh-aHjjWGgLVCsAqaCL6_jmn_QqhVlRiG
https://www.youtube.com/watch?v=_JRa_uFyVkY&list=PLh-aHjjWGgLUWaetAmShkv6gmvk7vLaHd
https://www.youtube.com/watch?v=iu9ffpkcxkQ
Wiring
each device requires different wiring setups, settings and power requirements.
*cross referencing OEM wiring diagrams is highly recommended
Input/output pins:
The Zombieverter has a number of selectable input/output pins that can be used for a number of functions. These pins are:
Low side Outputs.
- GP Out 3
- GP Out 2
- Neg Contactor switch/GP Out 1
- Trans SL1- (If not using the GS450H)
- TransSL2- (If not using the GS450H)
*Low side output connect to ground when activated.
The low side outputs in Zombie are ideal for switching relays, such as for coolant pumps.
High side PWM.
- PWM 3
- PWM 2
- PWM 1
- Pump PWM - Limited to GS450 Oil pump pwm or tacho pwm output
These are high side 12v outputs, usually for controlling gauges or auxiliary items than need a pwm signals.
*not suitable for controlling relays.
Ground Input pins
These pins pull down to ground only. Do not connect any voltage to these pins.
PB1
PB2
PB3
Pin functions:
Note: While the web interface will allow you to select input pins or output pins, some will not actually work.
example: a input switch wired but set to negContactor
- ChaDemoAIw - OUTPUT - used as part of the Chademo charging protocol for the charge allow output to the charger.
- OBCEnable - OUTPUT: activates as part of the ExtCharger module
- HeaterEnable - OUTPUT: activates only in run mode and when coolant pump is on
- RunIndication - OUTPUT: activates when zombie is in run mode
- WarnIndication - OUTPUT
- CoolantPump - OUTPUT: activates during precharge, usually used for coolant pumps
- NegContactor - OUTPUT: activates during precharge for negative contactor
- BrakeLight - OUTPUT: activates when brake input is detected
- ReverseLight - OUTPUT: activates when direction is reverse
- CoolingFan - OUTPUT: activates when FanTemp setpoint is reached
- HVActive - OUTPUT: activates when contactors are closed and VCU is in run or charge mode
- BrakeVacPump DIGITAL OUTPUT: when BrakeVacSensor below threshold this is turned on.
- CpSpoof - PWM OUTPUT: used to spoof CP signal to OBC if also using a charging interface such as FOCCCI or I3LIM
- GS450Hpump - PWM OUTPUT: used to run GS450H oil pump
- HeatReq - DIGITAL INPUT
- HVRequest - DIGITAL INPUT - when used with ext charger setting will start precharge cycle and put VCU into charge mode.
- ProxPilot - ANALOGUE INPUT - detect a charging cable plug in, requires external resistors, values depend on type 1 or type 2
- BrakeVacSensor - ANALOGUE INPUT - read a vacuum sensor and turn on the BrakeVacPump DIGITAL OUTPUT
- PWMTim3 -
Proximity Pilot
This analogue input used to detect a charging cable is plugged in.
A resistor to the 5v needs to be connected to the analogue in pin, 330 ohms in the spec, and R5 needs to be another resistor between analogue in pin and ground. Type 1 connectors should be a 2.7k ohm resistor and type 2 should be 4.7k ohm. Note the charging port may already have this resistor installed.
Open up the Zombie UI and choose ProxPilot for the function of the analogue in pin. Then start plotting PPVal and then plug in, you can then use this to select your PPThreshold. Bare in mind the resistance will vary on the cable plugged in depending on the Amps it can supply.
https://www.youtube.com/watch?v=U3c4V8vMb6k Video here for the setup and demonstration.
List and Overview of Zombieverter Parameters and Spot Values
wiring the zombieverter:
Initial start-up and testing
Wifi Setup
The VCU is configured by connecting to its wifi access point. For existing units this is something like SSID: ESP-03xxxx, no password. For future units (shipped after 20/10/21) this will be SSID: inverter (or zom_vcu) PASSWORD: inverter123
NOTE: Recent units have a new wifi module that isn't automatically assigning an IP via DHCP. See this thread for details, and if you can help resolve the issue. Until then, you need to manually assign an IP of 192.168.4.2 (anything other than 192.168.4.1 on the 192.168.4.0/24 subnet) to your device.
Then navigate to 192.168.4.1 to see the huebner inverter dashboard.
Configuration Setup
Get familiar with the interface and check that all of the parameters make sense. If in doubt, make sure the default value is set. At each stage the current state of the system and any error can be seen on the interface, for example opmode and lasterr. Press refresh at the top of the screen to update the values.
You will need the HV supply connected, which can be a lower voltage (50-100V), current limited power supply for test purposes. Set udcmin to some value below that (e.g. 50V for a 100V supply) and udcsw to 10V lower than the supply.
- Apply the Ignition T15 in 12V signal. The relay supplying 12V to the inverter should now be on.
- Check the accelerator by applying it gradually and watching / refreshing the interface. You should see values at pot change as the pedal is pressed. potmin should be set just above where your off-throttle position is, and potmax just below the value seen at maximum travel [note this is the opposite for versions 1.06A to 1.11A ). Same for pot2min and pot2max, if they are electrically connected. The resulting value as a 0-100 value can be seen at potnom.
If it does not show up, check for errors and check that throtmax is not set to zero! Check that tmpm is less than tmpmmax, as it can derate the potnom value down as far as zero!
- Apply the Start 12V signal for a short time. The pre-charge relay should turn on, and the voltage available at the inverter and the U1 input of the ISA shunt should quickly rise. If the udc reading goes above udcsw within 5 seconds then the main contactor(s) should close. If all is well, invstat should now be "on", opmode should be "run".
If you do not see a good value at udc, it may be that your external shunt is not connected properly or is not initialised.
If you do not see a good value at Invudc, it may be that the inverter is not powered, or the communication signals are not correctly wired.
if the status stays at "PRECHARGE" then you possibly didn't hold the start signal on for long enough!
- Once the contactors are on, select forwards direction. For example if dirmode is set to "Switch" then a 12V signal applied to the Forward input will work.
- Carefully apply the accelerator and the motor should begin to turn. Do not spin the motor up to any speed if you are using a test power supply.
-
- Note: Leaf inverter requires minimum of 180v to operate, it is also sensible to test with rev limit set to 1000 RPM.
Software
VCU boards from the webshop, come pre-programed and do not require any additional septs taken to work.
for programming a blank board see: zombiverter programing
web interface:
Initializing an ISA Shunt:
- wire the ISA shunt to 12v+ and canbus input.
- under shunt can in the web interface, select the canbus the shunt is connected to
- hit save parameters to flash.
- Under Comms in the web interface, select ISAMode option. By default its set to "Normal" (Off)
- select "Init"
- hit save parameters to flash
- Power cycle the vcu and shunt at same time (they should be on same 12v feed anyway).
- The shunt will initialize.
- Select ISAMode "normal"
- save to flash again
- reboot the VCU
The shunt should now be up and running.
If the shunt doesn't initialize correctly, separate the shunt and VCU power supply, and power cycle the VCU two or three seconds after the shunt power is cycled. This has fixed an initialize issue for a number of ISA shunts.
Pin Input/Output and functions
Zombieverter has a number of selectable input/output pins that can be used for a number of functions. These pins are:
Low side Outputs.
- GP Out 3
- GP Out 2
- Neg Contactor switch/GP Out 1
- Trans SL1- (If not using the GS450H)
- TransSL2- (If not using the GS450H)
Low side output connect to ground when activated. The low side outputs in Zombie are ideal for switching relays, such as for coolant pumps.
High side PWM.
- PWM 3
- PWM 2
- PWM 1
- Pump PWM - Limited to GS450 Oil pump pwm or tacho pwm output
These are high side 12v outputs, usually for controlling gauges or auxiliary items than need a pwm signals. They are not suitable for controlling relays.
Ground Input pins
These pins pull down to ground only. Do not connect any voltage to these pins.
PB1
PB2
PB3
Pin functions:
Note: While the web interface will allow input pins to be set to output and vice versa this will not actually work.
- ChaDemoAIw - OUTPUT - used as part of the Chademo charging protocol for the charge allow output to the charger.
- OBCEnable - OUTPUT: activates as part of the ExtCharger module
- HeaterEnable - OUTPUT: activates only in run mode and when coolant pump is on
- RunIndication - OUTPUT: activates when zombie is in run mode
- WarnIndication - OUTPUT
- CoolantPump - OUTPUT: activates during precharge, usually used for coolant pumps
- NegContactor - OUTPUT: activates during precharge for negative contactor
- BrakeLight - OUTPUT: activates when brake input is detected
- ReverseLight - OUTPUT: activates when direction is reverse
- BrakeVacPump DIGITAL OUTPUT: when BrakeVacSensor below threshold this is turned on.
- HeatReq - DIGITAL INPUT
- HVRequest - DIGITAL INPUT - when used with ext charger setting will start precharge cycle and put VCU into charge mode.
- ProxPilot - ANALOGUE INPUT - detect a charging cable plug in, requires external resistors, values depend on type 1 or type 2
- BrakeVacSensor - ANALOGUE INPUT - read a vacuum sensor and turn on the BrakeVacPump DIGITAL OUTPUT
- CoolingFan - OUTPUT: activates when FanTemp setpoint is reached
- HVActive - OUTPUT: activates when contactors are closed and VCU is in run or charge mode
- PWMTim3 -
- CpSpoof - PWM OUTPUT: used to spoof CP signal to OBC if also using a charging interface such as FOCCCI or I3LIM
- GS450Hpump - PWM OUTPUT: used to run GS450H oil pump
Proximity Pilot
This analogue input used to detect a charging cable is plugged in.
A resistor to the 5v needs to be connected to the analogue in pin, 330 ohms in the spec, and R5 needs to be another resistor between analogue in pin and ground. Type 1 connectors should be a 2.7k ohm resistor and type 2 should be 4.7k ohm. Note the charging port may already have this resistor installed.
Open up the Zombie UI and choose ProxPilot for the function of the analogue in pin. Then start plotting PPVal and then plug in, you can then use this to select your PPThreshold. Bare in mind the resistance will vary on the cable plugged in depending on the Amps it can supply.
https://www.youtube.com/watch?v=U3c4V8vMb6k Video here for the setup and demonstration.
List and Overview of Zombieverter Parameters and Spot Values
Firmware
[Note: This is just an attempt to document what Damien verbally mentions in the VCU Firmware v2.20A video. Please flesh this out, (including the things I skip that he says aren't new), verify it, explain it better, etc, then delete this editor note. Anyone reading this note, it means no one has put further effort into it, don't trust it yet.]
Parameters
page with zombieverter parameters and their value ranges, ZV pinmap etc.
Source: https://www.youtube.com/watch?v=wjlucUWX_lc
Troubleshooting
Serial Connection
If you're having trouble connecting using the serial interface, note that the parameters are 115200 8-N-2, which is different from the conventional 115200 8-N-1.
Recovering the Zombieverter from a failed update
If your ZV fails on the update and the Web User Interface is reporting "firmware: null" it's possibleyou'll need to reflash the firmware, bootloader via an STLink and/or delete any existing .bin and .Json files from the files section.
- Firstly, download the bootloader and latest zombieverter firmware from here [4] and here [5] as .hex files, this ensures you don't need to know the address of the file and avoids user error when flashing via STLink (I used a cheap STLink v2 clone without issue but it seems there is a mix of experiences with them).
- Download STMCubeProgrammer (other STM flashing softwares are available but the following instructions are based on what has worked for me).
- Upgrade the firmware on your STLink dongle using STMCubeProgrammer (I'm not sure if this is 100% necessary but seems prudent).
- Connect the Clock (SWclk), Gnd and Data (SWDio) of your STLink to the Zombieverter test points (near to the STM32 chip, they are labelled C, G, D) as well as 12V and Gnd to the Zombieverter main power pins and ensure your STMCubeprogrammer is able to connect to it, I also disconnected the wifi board just incase.
- Perform a "full chip erase", then reflash the latest bootloader and firmware hex files.
- Remove your STLink from the zombieverter, connect the wifi board and check connectivity.
- Begin Zombieverter-ing.
References
- ↑ https://www.aliexpress.com/item/32857771975.html?spm=a2g0s.9042311.0.0.39f24c4dWOmGPE (Backup: Web Archive)
- ↑ https://de.aliexpress.com/item/32822692950.html (Backup: Web Archive)
- ↑ https://www.aliexpress.com/item/1005003512474442.html (Backup: Web Archive)
- ↑ https://github.com/damienmaguire/Stm32-vcu/releases/
- ↑ https://github.com/jsphuebner/tumanako-inverter-fw-bootloader/releases