Modern EV conversion projects often look to reuse salvaged parts from OEM vehicles, such as the motors, batteries and chargers.
Modern EV conversion projects often look to reuse salvaged parts from wrecked vehicles, such as the motors, batteries and chargers.
The issue is that each part, and manufacture, use different methods of control and communication. Even when the methods of control are decoded, you are left with having to develop some sort of VCU to run the devices. 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?
The issue is that each of these components and manufacturers, use different methods of control and communication.
introducing: the "Zombieverter" VCU
Developing controllers for these devices is complex, and time consuming and often require very dedicated communication protocols. Instead of making custom boards for every part that's been decoded, why not just make a general purpose VCU (vehicle control unit) with a verity of different types of inputs and outputs?
'''''a general purpose EV conversion VCU.'''''
==== '''Introducing: the "ZombieVerter" VCU ''- a general purpose EV conversion VCU.''''' ====
With a large array of inputs/outputs, control logic, and a web interface for configuration and data logging. The ZombieVerter is a powerful, flexible and customizable VCU well suited for EV conversions.
With a large array of inputs/outputs, control logic, and a web interface for configuration and data logging. The zombieverter is a powerful, flexible and customizable VCU suited for EV conversions.
It's also an open source project!
==== The Zombieverter supports popular salvaged parts such as: ====
==== The ZombieVerter supports popular salvaged EV parts such as: ====
* Nissan leaf motor, PDM/OBC, and batteries
* Nissan Leaf components
* Mitsubishi outlander hybrid rear drive unit, and OBC (on board charger)
* Mitsubishi Outlander hybrid components
* Lexus gs450H and gs300H hybrid gearbox's
* Toyota and Lexus hybrid components
* tesla model S dcdc converter
* CHAdeMO and CCS DC fast charging
* chademo and ccs fast charging
* and more!
* etc
=== The Zombieverter includes the following features: ===
==== The ZombieVerter features the following: ====
==== hardware: ====
==== Hardware: ====
* on board WIFI
* On-board WiFi
* 3x High side PWM drivers
* 3x high side PWM drivers
* 5x low side outputs
* 5x low side outputs
* 3x input pins (pull to ground only)
* 3x input pins (pull to ground only)
* 3x CANbus interfaces
* 3x CANbus interfaces
* Linbus
* LIN bus
* sync serial interface
* sync serial interface
* OBD-II interface
* OBD-II interface
* etc
* etc.
==== Software: ====
==== Software: ====
* web based user interface
* Web based user interface
* contactor control
* Contactor control
* charger control
* Charger control
* charge timer
* Charge timer
* motor(inverter) control
* Motor (inverter) control
* heater control
* Heater control
* water pump control
* Water pump control
* coolant fan control
* Coolant fan control
* throttle mapping
* Throttle mapping
* motor regen
* Motor regen
* cruise control(?)
* Cruise control (?)
* BMS limits
* BMS limits
* IVT shunt initialization
* IVT shunt initialization
* data logging and graphing
* Data logging and graphing
* etc
* etc.
=== Currently supported OEM hardware: ===
=== Currently supported OEM hardware: ===
<nowiki>*</nowiki>this list is always growing and changing, not everything is fully tested and verified
<nowiki>*</nowiki>This list is always growing and changing, and not everything is verified working
==== Motors/Drive units: ====
* [[Nissan leaf motors|Nissan Leaf Gen1/2/3 inverter/motor via CAN]]
* [[Nissan leaf motors|Nissan Leaf Gen1/2/3 inverter/motor via CAN]]
*[https://citini.com/product/evs-charge-port-controller/ 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 ==
== Assembling the VCU ==
Looking to build a zombiverter VCU your self or your kit has missing hardware?
Looking to build a ZombieVerter VCU yourself or the kit is missing hardware?
* [[Zombiverter hardware]] page for additional build instructions
* [[Zombiverter hardware]] page for additional build instructions
* [https://github.com/damienmaguire/Stm32-vcu github with PCB, schematic, pinouts, etc]
* [https://github.com/damienmaguire/Stm32-vcu Github with PCB, schematic, pin-outs, etc]
''The enclosure and header are required if you did not order a [https://www.evbmw.com/index.php/evbmw-webshop/vcu-boards/zombieverter-vcu-built '''fully built board''']''
''the enclosure and header are required if you did not order a [https://www.evbmw.com/index.php/evbmw-webshop/vcu-boards/zombieverter-vcu-built '''fully built board''']''
VCU boards from the webshop, '''''come pre-programmed''''' and '''do not require any additional steps taken to work'''.
For programming a blank board see: [[zombieverter programing|ZombieVerter programming]]
===The enclosure kit options:===
===The enclosure kit options:===
# [https://www.aliexpress.com/item/32857771975.html?spm=a2g0s.9042311.0.0.39f24c4dWOmGPE Enclosure Kit with Header, connector and pins]<ref>https://www.aliexpress.com/item/32857771975.html?spm=a2g0s.9042311.0.0.39f24c4dWOmGPE (Backup: [https://web.archive.org/web/20220524004318/https://www.aliexpress.com/item/32857771975.html Web Archive])</ref>
# [https://www.aliexpress.com/item/32857771975.html?spm=a2g0s.9042311.0.0.39f24c4dWOmGPE Enclosure Kit with Header, connector and pins]<ref>https://www.aliexpress.com/item/32857771975.html?spm=a2g0s.9042311.0.0.39f24c4dWOmGPE (Backup: [https://web.archive.org/web/20220524004318/https://www.aliexpress.com/item/32857771975.html Web Archive])</ref>
#[https://www.aliexpress.com/item/32822692950.html Connector and pins]<ref>https://de.aliexpress.com/item/32822692950.html (Backup: [https://web.archive.org/web/20221119203700/https://www.aliexpress.us/item/2251832636378198.html?gatewayAdapt=glo2usa4itemAdapt&_randl_shipto=US Web Archive])</ref>
#[https://www.aliexpress.com/item/32822692950.html Connector and pins]<ref>https://de.aliexpress.com/item/32822692950.html (Backup: [https://web.archive.org/web/20221119203700/https://www.aliexpress.us/item/2251832636378198.html?gatewayAdapt=glo2usa4itemAdapt&_randl_shipto=US Web Archive])</ref>
#[https://www.aliexpress.com/item/1005003512474442.html Prewired connector] <ref>https://www.aliexpress.com/item/1005003512474442.html (Backup: [http://web.archive.org/web/20221120105651/https://www.aliexpress.us/item/3256803326159690.html?gatewayAdapt=glo2usa4itemAdapt&_randl_shipto=US Web Archive])</ref>
#[https://www.aliexpress.com/item/1005003512474442.html Pre-wired connector] <ref>https://www.aliexpress.com/item/1005003512474442.html (Backup: [http://web.archive.org/web/20221120105651/https://www.aliexpress.us/item/3256803326159690.html?gatewayAdapt=glo2usa4itemAdapt&_randl_shipto=US Web Archive])</ref>
[[File:ZombieVerter VCU V1 cable side pinout2.jpg|thumb|alt=|VCU pinout diagram |513x513px]]Each device requires different wiring setups, settings and power requirements.
<nowiki>*</nowiki>cross referencing OEM wiring diagrams is highly recommended
'''Wiring the ZombieVerter with:'''
* [[GS450H with zombieverter|GS450H with ZombieVerter]]
* [[Leaf stack with zombiverter|Leaf stack with ZombiVerter]]
* [[Tesla SDU with Zombieverter|Tesla SDU with ZombieVerter]]
* [[Chademo with Zombieverter]]
=== Power wiring ===
The ZombieVerter requires a permanent 12V supply. This is so it can manage charging, timers, and monitor systems when the car is at rest.
The average power draw, at idle, is 150 mA.
* Pin 55 to 12V- ground
* Pin 56 to 12V+ positive
The ZombieVerter controls power/"ignition" signals to other devices (inverters, chargers, and DCDC converters), powering those devices when required. This is done by triggering an external 12V relay. '''''ZombieVerter controls the external relay using low-side switching'', meaning that it pulls the ground pin of the relay to ground.'''
* [[File:Gernice-zombie.png|thumb|583x583px|general zombie and battery box wiring]]Pin 32 to ground pin on a 12V relay
* Relay positive pin to 12V+
* One of the relays switch pin to 12V+
This effectively provides a switched 12V supply, controlled by the ZombieVerter.
Used to switch "enable" mode to devices via:
* Leaf inverter enable pin
* Leaf PDM enable pin
* Mitsubisihi OBC enable pin
=== Contactor wiring ===
The Zombieveter manages the Negative, Positive and PreCharge contactors in an EV conversion.
This is done based off a series of voltage measurements (UDC), this voltage value (UDC) can be supplied from a variety of sources:
* ISA IVT shunt
* Nissan leaf inverter
* BMW S-BOX
* etc.
''Without a proper UDC measurement, the ZombieVerter '''will fail precharge and never go into run mode.'''''
'''The contactor control pins on the ZombieVerter are ''low-side switching'', meaning that they pull to ground.'''
The positive leads from the contactors need to be connected to 12V+ and the ground leads to:
* Pin 31 for the negative contactor
* Pin 33 for the positive contactor
* Pin 34 for the pre-charge contactor
=== Throttle pedal wiring ===
The ZombieVerter supports dual-channel throttle. This redundancy is for safety in case one channel fails or drops out. It's highly recommended to use dual-channel throttle. Single-channel is an option.
Connect the following to the ZombieVerter pins:
https://www.youtube.com/watch?v=iu9ffpkcxkQ
* Pin 45 to throttle grounds
* Pin 46 to throttle channel 2
* Pin 47 to throttle channel 1
* Pin 48 to throttle positives
== Wiring ==
=== Start, Run, and Direction wiring ===
[[File:ZombieVerter VCU V1 cable side pinout2.jpg|thumb|alt=|VCU pinout diagram |452x452px]][[File:Zombie 56 connector.jpg|thumb|448x448px|zombieverter pinout from https://github.com/damienmaguire/Stm32-vcu/blob/master/Hardware/Zombie/ZombieVerter_V1%20-%20Schematic.pdf]]
The ZombieVerter requires 2 inputs to get into "drive" mode. '''These pins need to be ''pulled high'' (connected to 12V +)'''
each device requires different wiring setups, settings and power requirements.
* Pin 15 to "on" switched input (key switched to "on")
<nowiki>*</nowiki>cross referencing OEM wiring diagrams is highly recommended
==== Forward and Reverse ====
These pins need to be ''pulled high'' (connected to 12V +)
=== Input/output pins: ===
* Pin 53 reverse
The Zombieverter has a number of selectable input/output pins that can be used for a number of functions. These pins are:
* Pin 54 forward
=== 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:
<u>Low side Outputs.</u>
<u>Low side Outputs.</u>
Line 128:
Line 217:
* Neg Contactor switch/GP Out 1
* Neg Contactor switch/GP Out 1
*Trans SL1- (If not using the GS450H)
*Trans SL1- (If not using the GS450H)
*TransSL2- (If not using the GS450H)
*Trans SL2- (If not using the GS450H)
'''*Low side output connect to ground when activated.'''
'''*Low side output connect to ground when activated.'''
The low side outputs in Zombie are ideal for switching relays, such as for coolant pumps.
The low side outputs in Zombie are ideal for switching relays, such as for coolant pumps.
<u>High side PWM.</u>
<u>High side PWM.</u>
Line 143:
Line 230:
*Pump PWM - Limited to GS450 Oil pump pwm or tacho pwm output
*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.
These are high side 12V outputs, usually for controlling gauges or auxiliary items than need a pwm signals.
'''*not suitable for controlling relays.'''
'''*not suitable for controlling relays.'''
<u>Ground Input pins</u>
<u>Ground Input pins</u>
Line 162:
Line 247:
''Note: While the web interface will allow you to select input pins or output pins, some will not actually work.''
''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''
''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.
{| class="wikitable"
*OBCEnable - OUTPUT: activates as part of the ExtCharger module
|+
*HeaterEnable - OUTPUT: activates only in run mode and when coolant pump is on
!Pin
*RunIndication - OUTPUT: activates when zombie is in run mode
!IN/OUT/PWM
* WarnIndication - OUTPUT
!Function
*CoolantPump - OUTPUT: activates during precharge, usually used for coolant pumps
|-
*NegContactor - OUTPUT: activates during precharge for negative contactor
|ChaDemoAIw
*BrakeLight - OUTPUT: activates when brake input is detected
|'''OUTPUT'''
*ReverseLight - OUTPUT: activates when direction is reverse
|activates when Chademo charger handshake initiates
*CoolingFan - OUTPUT: activates when FanTemp setpoint is reached
|-
*HVActive - OUTPUT: activates when contactors are closed and VCU is in run or charge mode
|OBCEnable
*BrakeVacPump DIGITAL OUTPUT: when BrakeVacSensor below threshold this is turned on.
|'''OUTPUT'''
*CpSpoof - PWM OUTPUT: used to spoof CP signal to OBC if also using a charging interface such as FOCCCI or I3LIM
|activates as part of the ExtCharger module
*GS450Hpump - PWM OUTPUT: used to run GS450H oil pump
|-
*HeatReq - DIGITAL INPUT
|HeaterEnable
*HVRequest - DIGITAL INPUT - when used with ext charger setting will start precharge cycle and put VCU into charge mode.
|'''OUTPUT'''
*ProxPilot - ANALOGUE INPUT - detect a charging cable plug in, requires external resistors, values depend on type 1 or type 2
|activates only in run mode and when coolant pump is on*
*BrakeVacSensor - ANALOGUE INPUT - read a vacuum sensor and turn on the BrakeVacPump DIGITAL OUTPUT
|-
*PWMTim3 -
|RunIndication
|'''OUTPUT'''
|activates when zombie is in run mode
|-
|WarnIndication
|'''OUTPUT'''
|activates when a error occurs with the ZombieVerter
|-
|CoolantPump
|'''OUTPUT'''
|activates during precharge, usually used for coolant pumps
|-
|NegContactor
|'''OUTPUT'''
|activates when the negative contactor needs to be closed. ie precharge, run, charge mode, etc
|-
|BrakeLight
|'''OUTPUT'''
|activates when a set brake light on threshold value is met
|-
|ReverseLight
|'''OUTPUT'''
|activates when reverse direction is selected
|-
|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'''
|activates when BrakeVacSensor threshold value is met
|-
|CpSpoof
|'''PWM OUTPUT'''
|used to spoof CP signal to OBC when using a charging interface such as FOCCCI or I3LIM
|-
|GS450Hpump
|'''PWM OUTPUT'''
|used to run GS450H oil pump
|-
|HeatReq
|'''DIGITAL INPUT'''
|
|-
|HVRequest
|'''DIGITAL INPUT'''
|NOT FUNCTIONING
|-
|DCFCRequest
|'''DIGITAL INPUT'''
|Chademo Charge Interface enable contactors to charge
|-
|ProxPilot
|'''ANALOGUE INPUT'''
|detects when charge cable is plugged in
|-
|BrakeVacSensor
|'''ANALOGUE INPUT'''
|vacuum sensor input, use for triggering BrakeVacPump '''DIGITAL OUTPUT'''
|-
|PWMTim3
|
|
|}
==== Proximity Pilot====
==== Proximity Pilot====
Line 190:
Line 342:
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.
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://youtu.be/U3c4V8vMb6k?t=351 <br />Video explaining the setup and demonstration.]
== Initial start-up and testing ==
=== Powering up and connecting to the web interface ===
https://www.youtube.com/watch?v=U3c4V8vMb6k Video here for the setup and demonstration.
==== '''The following is required''' ====
# A fully built ZombieVerter VCU
# Two wires for power
# 12V power supply
# Computer/tablet for accessing the web interface
List and Overview of [[Zombieverter Parameters and Spot Values]]
'''How to access the web interface'''
=== '''wiring the zombieverter:''' ===
# Provide stable 12V power to pins 55, 56 on the ZombieVerter
# The on-board LED light "acty" should be now flashing
# Using your computer, connect to the ZombieVerters WIFI access point. '''SSID: "inverter" or "zom_vcu"'''
# '''Password is: inverter123'''
# In a web browser navigate to: '''192.168.4.1'''
# The openinverter web interface should now load!
* [[GS450H with zombieverter]]
* [[Leaf stack with zombiverter]]
* [[Tesla SDU with Zombieverter]]
== Initial start-up and testing ==
===Wifi Setup===
'''NOTE:''' Recent units have a new WiFi module that isn't automatically assigning an IP via DHCP. See [https://openinverter.org/forum/viewtopic.php?f=5&t=2001 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.
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
===Configuration===
<nowiki>*</nowiki>work in progress*
[[Zombieverter Parameters and Spot Values|full list and overview of ZombieVerter Parameters and Spot Values]]
==== Basic parameters and spot values ====
==== Throttle ====
You should see values '''pot''' change as the pedal is pressed.
* '''potmin''' should be set just above where your off-throttle position is
* '''potmax''' just below the value seen at maximum travel
* Same for '''pot2min''' and '''pot2max'''
The resulting in a 0-100 '''potnom''' value.
* '''throtmin''' is the minimum (most negative) allowed '''''potnom''''' at all times
* '''throtmax''' is the maximum (most positive) allowed '''''potnom''''' request in forward
* '''throtramp''' is how much '''potnom''' ramps up with the pedal pushed ('''potnom''' change per %/10ms)
* '''throtramprpm''' stops applying '''throtramp''' above a set motor rpm
* '''revlim''' is a rev limiter
==== Contactors ====
A set HV battery voltage value is required to run the precharge and main contactors.
The voltage is measured using the UDC value. which is supplied from the '''shuntType:'''
* '''ISA'''
* '''SBOX'''
* '''VAG'''
* '''LEAF'''
these voltage(UDC) levels are set with the following parameters:
'''NOTE:''' Recent units have a new wifi module that isn't automatically assigning an IP via DHCP. See [https://openinverter.org/forum/viewtopic.php?f=5&t=2001 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.
* '''udcmin''' is the minimum battery voltage derate
* '''udclim''' is maximum battery voltage derate
* '''udcsw''' is Voltage point at which precharge is considered finished, and the main contactor will close.
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.
'''Forward/Reverse'''
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.
input options:
*Apply the '''Ignition T15 in''' 12V signal. The relay supplying 12V to the inverter should now be on.
* '''switch'''
* '''button'''
* '''switchReversed'''
* '''buttomReversed'''
*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'''.
==== Inverter ====
''work in progress''
''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!''
==== Charger ====
''work in progress''
*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".
==== Input Values ====
Check that din_break does not show "on", it must be off to allow potnom to be shown.
----
* 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 udc, it may be that your external shunt is not connected properly or is not initialised.''
Line 231:
Line 433:
''if the status stays at "PRECHARGE" then you possibly didn't hold the start signal on for long enough!''
''if the status stays at "PRECHARGE" then you possibly didn't hold the start signal on for long enough!''
== Errors, Common issues ==
*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.
==== Input Values: ====
* 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.
* "din_break" does not show "on", it must be off to allow potnom to be shown.
*
** check wiring setup
**''Note'': Leaf inverter requires minimum of 180v to operate, it is also sensible to test with rev limit set to 1000 RPM.
* UDC value updates during precharge.
[[leaf stack with zombiverter]]
** check that your UDC value source is configured correctly (shunt type, proper can bus, ect)
** check your contactor wiring.
*** some contactors are polarity sensitive
*** are they wired to be low side switched?
* check can H/ can L wiring
* is there too many devices sharing one can bus? (possible can id collision)
* check inverter power relay wiring
** is the inverter/charger/bms "ignition"/ "enable" pin driven via a zombie controlled relay?
** is the relay firing during preacharge?
==Software==
==Software==
Line 243:
Line 454:
VCU boards from the webshop, '''''come pre-programed''''' and '''do not require any additional septs taken to work'''.
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]]
For programming a blank board see: [[zombiverter programing|ZombiVerter programing]]
=== web interface: ===
For re-flashing a bricked board refer to the Troubleshooting section below.
==== Initializing an ISA Shunt: ====
==== Initializing an ISA Shunt: ====
# wire the ISA shunt to 12v+ and canbus input.
# Wire the ISA shunt to 12V+ and canbus input.
# under shunt can in the web interface, select the canbus the shunt is connected to
# Under shunt can in the web interface, select the canbus the shunt is connected to
# hit save parameters to flash.
# Hit save parameters to flash.
# Under Comms in the web interface, select ISAMode option. By default its set to "Normal" (Off)
# Under Comms in the web interface, select ISAMode option. By default its set to "Normal" (Off)
# select "Init"
# Select "Init"
# hit save parameters to flash
# Hit save parameters to flash
# Power cycle the vcu and shunt at same time (they should be on same 12v feed anyway).
# Power cycle the vcu and shunt at same time (they should be on same 12V feed anyway).
# The shunt will initialize.
# The shunt will initialize.
# Select ISAMode "normal"
# Select ISAMode "normal"
# save to flash again
# Save to flash again
# reboot the VCU
# Reboot the VCU
The shunt should now be up and running.
The shunt should now be up and running.
Line 266:
Line 476:
== Parameters ==
== Parameters ==
[[Zombieverter Parameters and Spot Values|page with zombieverter parameters and their value ranges, ZV pinmap etc.]]
[[Zombieverter Parameters and Spot Values|page with ZombieVerter parameters and their value ranges, ZV pinmap etc.]]
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.
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 ===
=== Recovering the ZombieVerter from a failed update ===
if the zombieverter fails in the middle of a software update and the Web User Interface is reporting "firmware: null" it's possible you'll need to re-flash the firmware, and bootloader via an STLink.
If the ZombieVerter fails in the middle of a software update and the Web User Interface is reporting "firmware: null" it's possible you'll need to re-flash the firmware, and bootloader via an STLink.
# Firstly, download the bootloader and latest zombieverter firmware from here <ref>https://github.com/damienmaguire/Stm32-vcu/releases/</ref> and here <ref>https://github.com/jsphuebner/tumanako-inverter-fw-bootloader/releases</ref> 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).
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).
# Firstly, download the bootloader from [https://github.com/jsphuebner/tumanako-inverter-fw-bootloader/releases here] and latest ZombieVerter firmware from [https://github.com/damienmaguire/Stm32-vcu/releases/ here] as .hex files. This ensures you don't need to know the address of the file and avoids user error when flashing via STLink
# 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.
# Download STMCubeProgrammer from [https://www.st.com/en/development-tools/stm32cubeprog.html#get-software here] (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. On the ZombieVerter Board, they are labelled C, G, D.
# Connect 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.
# 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.
# Remove your STLink from the ZombieVerter, connect the wifi board and check connectivity.
# Begin Zombieverter-ing.
# Begin ZombieVerter-ing.
=== ESP32 CanBus Web Interface ===
If the CanBus Web Interface is used it must be noted that the Node ID is hard coded to 3 (note Foccci default is 22)
Modern EV conversion projects often look to reuse salvaged parts from wrecked vehicles, such as the motors, batteries and chargers.
The issue is that each of these components and manufacturers, use different methods of control and communication.
Developing controllers for these devices is complex, and time consuming and often require very dedicated communication protocols. Instead of making custom boards for every part that's been decoded, why not just make a general purpose VCU (vehicle control unit) with a verity of different types of inputs and outputs?
Introducing: the "ZombieVerter" VCU - a general purpose EV conversion VCU.
With a large array of inputs/outputs, control logic, and a web interface for configuration and data logging. The ZombieVerter is a powerful, flexible and customizable VCU well suited for EV conversions.
It's also an open source project!
The ZombieVerter supports popular salvaged EV parts such as:
Nissan Leaf components
Mitsubishi Outlander hybrid components
Toyota and Lexus hybrid components
CHAdeMO and CCS DC fast charging
and more!
The ZombieVerter features the following:
Hardware:
On-board WiFi
3x high side PWM drivers
5x low side outputs
3x input pins (pull to ground only)
3x CANbus interfaces
LIN bus
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, and not everything is verified working
The ZombieVerter requires a permanent 12V supply. This is so it can manage charging, timers, and monitor systems when the car is at rest.
The average power draw, at idle, is 150 mA.
Pin 55 to 12V- ground
Pin 56 to 12V+ positive
The ZombieVerter controls power/"ignition" signals to other devices (inverters, chargers, and DCDC converters), powering those devices when required. This is done by triggering an external 12V relay. ZombieVerter controls the external relay using low-side switching, meaning that it pulls the ground pin of the relay to ground.
general zombie and battery box wiringPin 32 to ground pin on a 12V relay
Relay positive pin to 12V+
One of the relays switch pin to 12V+
This effectively provides a switched 12V supply, controlled by the ZombieVerter.
Used to switch "enable" mode to devices via:
Leaf inverter enable pin
Leaf PDM enable pin
Mitsubisihi OBC enable pin
Contactor wiring
The Zombieveter manages the Negative, Positive and PreCharge contactors in an EV conversion.
This is done based off a series of voltage measurements (UDC), this voltage value (UDC) can be supplied from a variety of sources:
ISA IVT shunt
Nissan leaf inverter
BMW S-BOX
etc.
Without a proper UDC measurement, the ZombieVerter will fail precharge and never go into run mode.
The contactor control pins on the ZombieVerter are low-side switching, meaning that they pull to ground.
The positive leads from the contactors need to be connected to 12V+ and the ground leads to:
Pin 31 for the negative contactor
Pin 33 for the positive contactor
Pin 34 for the pre-charge contactor
Throttle pedal wiring
The ZombieVerter supports dual-channel throttle. This redundancy is for safety in case one channel fails or drops out. It's highly recommended to use dual-channel throttle. Single-channel is an option.
Connect the following to the ZombieVerter pins:
Pin 45 to throttle grounds
Pin 46 to throttle channel 2
Pin 47 to throttle channel 1
Pin 48 to throttle positives
Start, Run, and Direction wiring
The ZombieVerter requires 2 inputs to get into "drive" mode. These pins need to be pulled high (connected to 12V +)
Pin 15 to "on" switched input (key switched to "on")
Pin 52 to "start" momentary input (momentary key switched "ignition")
Forward and Reverse
These pins need to be pulled high (connected to 12V +)
Pin 53 reverse
Pin 54 forward
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)
Trans SL2- (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
Pin
IN/OUT/PWM
Function
ChaDemoAIw
OUTPUT
activates when Chademo charger handshake initiates
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
activates when a error occurs with the ZombieVerter
CoolantPump
OUTPUT
activates during precharge, usually used for coolant pumps
NegContactor
OUTPUT
activates when the negative contactor needs to be closed. ie precharge, run, charge mode, etc
BrakeLight
OUTPUT
activates when a set brake light on threshold value is met
ReverseLight
OUTPUT
activates when reverse direction is selected
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
activates when BrakeVacSensor threshold value is met
CpSpoof
PWM OUTPUT
used to spoof CP signal to OBC when using a charging interface such as FOCCCI or I3LIM
GS450Hpump
PWM OUTPUT
used to run GS450H oil pump
HeatReq
DIGITAL INPUT
HVRequest
DIGITAL INPUT
NOT FUNCTIONING
DCFCRequest
DIGITAL INPUT
Chademo Charge Interface enable contactors to charge
ProxPilot
ANALOGUE INPUT
detects when charge cable is plugged in
BrakeVacSensor
ANALOGUE INPUT
vacuum sensor input, use for triggering 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.
Provide stable 12V power to pins 55, 56 on the ZombieVerter
The on-board LED light "acty" should be now flashing
Using your computer, connect to the ZombieVerters WIFI access point. SSID: "inverter" or "zom_vcu"
Password is: inverter123
In a web browser navigate to: 192.168.4.1
The openinverter web interface should now load!
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.
You should see values pot change as the pedal is pressed.
potmin should be set just above where your off-throttle position is
potmax just below the value seen at maximum travel
Same for pot2min and pot2max
The resulting in a 0-100 potnom value.
throtmin is the minimum (most negative) allowed potnom at all times
throtmax is the maximum (most positive) allowed potnom request in forward
throtramp is how much potnom ramps up with the pedal pushed (potnom change per %/10ms)
throtramprpm stops applying throtramp above a set motor rpm
revlim is a rev limiter
Contactors
A set HV battery voltage value is required to run the precharge and main contactors.
The voltage is measured using the UDC value. which is supplied from the shuntType:
ISA
SBOX
VAG
LEAF
these voltage(UDC) levels are set with the following parameters:
udcmin is the minimum battery voltage derate
udclim is maximum battery voltage derate
udcsw is Voltage point at which precharge is considered finished, and the main contactor will close.
Forward/Reverse
input options:
switch
button
switchReversed
buttomReversed
Inverter
work in progress
Charger
work in progress
Input Values
Check that din_break does not show "on", it must be off to allow potnom to be shown.
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!
Errors, Common issues
Input Values:
"din_break" does not show "on", it must be off to allow potnom to be shown.
check wiring setup
UDC value updates during precharge.
check that your UDC value source is configured correctly (shunt type, proper can bus, ect)
check your contactor wiring.
some contactors are polarity sensitive
are they wired to be low side switched?
check can H/ can L wiring
is there too many devices sharing one can bus? (possible can id collision)
check inverter power relay wiring
is the inverter/charger/bms "ignition"/ "enable" pin driven via a zombie controlled relay?
is the relay firing during preacharge?
Software
VCU boards from the webshop, come pre-programed and do not require any additional septs taken to work.
For re-flashing a bricked board refer to the Troubleshooting section below.
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.
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 the ZombieVerter fails in the middle of a software update and the Web User Interface is reporting "firmware: null" it's possible you'll need to re-flash the firmware, and bootloader via an STLink.
I used a cheap STLink v2 clone without issue but it seems there is a mix of experiences with them.
Firstly, download the bootloader from here and latest ZombieVerter firmware from here as .hex files. This ensures you don't need to know the address of the file and avoids user error when flashing via STLink
Download STMCubeProgrammer from here (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. On the ZombieVerter Board, they are labelled C, G, D.
Connect 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.
ESP32 CanBus Web Interface
If the CanBus Web Interface is used it must be noted that the Node ID is hard coded to 3 (note Foccci default is 22)