<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://openinverter.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Johu</id>
	<title>openinverter.org wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://openinverter.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Johu"/>
	<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/Special:Contributions/Johu"/>
	<updated>2026-05-01T12:54:33Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=16-cell_BMS&amp;diff=6127</id>
		<title>16-cell BMS</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=16-cell_BMS&amp;diff=6127"/>
		<updated>2026-04-11T11:30:28Z</updated>

		<summary type="html">&lt;p&gt;Johu: /* Communication */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:BMS]]&lt;br /&gt;
[[Category:Battery]]&lt;br /&gt;
[[File:16-cell BMS.jpg|thumb|16-cell BMS]]&lt;br /&gt;
The goal of this BMS is to use mostly decade old components to create a 16 channel cell voltage meter. It uses a very accurate sigma/delta ADC for superb resolution. It can drain about 100mA from a cell or charge it with 50 mA via the DC/DC converter. The ability to both charge and discharge cells speeds up balancing despite the low balancing current.&lt;br /&gt;
&lt;br /&gt;
When turned off it drains no current from the connected cells at all.&lt;br /&gt;
&lt;br /&gt;
On the low voltage side it features two inputs for temperature sensors and one input for a 5V current sensor, differential or single ended.&lt;br /&gt;
&lt;br /&gt;
It can be cascaded to be used with more than 16 cells and has an automatic addressing scheme to forgo the use of jumpers or DIP switches. All communication is done via CAN. Supply voltage is 12V with about 20 mA draw when not balancing.&lt;br /&gt;
&lt;br /&gt;
The software is not yet finished, see forum for progress &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=2338&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The boards can be bought in the [https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=74 shop].&lt;br /&gt;
&lt;br /&gt;
== Pinout ==&lt;br /&gt;
The pinout is also written to the bottom silkscreen.&lt;br /&gt;
&lt;br /&gt;
On the left side you see 17 inputs. The first one is connected to the negative pole (GND) of your (sub)pack, the subsequent ones to the positive poles of up to 16 cells. At least the lower two cell inputs must be connected. When cascading modules the positive-most input of module n is also the GND of module n+1, so must be spliced to connect to both.&lt;br /&gt;
&lt;br /&gt;
On the top right is the vehicle interfacing or low voltage connector. From top to bottom it is low voltage GND, 12V, enable_in, enable_out, CANH, CANL. GND, 12V, CANH, CANL are connected to all modules in parallel whereas enable_out is chained to enable_in of the next module. The first enable_in must be connected to 12V whenever the BMS should become active, e.g. when charging or driving. The module with 12V on the enable_in auto-detects as &amp;quot;main&amp;quot; module, collects data from the subsequent modules and sends more high level CAN messages&lt;br /&gt;
&lt;br /&gt;
On the bottom right is the temperature sensor and current sensor input. Top to bottom it is tsensor1+, tsensor1- (not silkscreened), tsensor2+ , tsensor2-(not silkscreened), 5V, CUR+, CUR-, GND. A single ended current sensor is just connected to CUR+.&lt;br /&gt;
&lt;br /&gt;
Right now the current sensor is only supported on the main module.&lt;br /&gt;
&lt;br /&gt;
=== Connector part numbers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Header&lt;br /&gt;
!Counterpart&lt;br /&gt;
!Pins&lt;br /&gt;
|-&lt;br /&gt;
|LV connector (supply, CAN, enable)&lt;br /&gt;
|Phoenix Contact&lt;br /&gt;
|1803468&lt;br /&gt;
|1803617&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Temperature and current sensors&lt;br /&gt;
|Molex&lt;br /&gt;
|640454-8&lt;br /&gt;
|1375820-8&lt;br /&gt;
|1445336-1&lt;br /&gt;
|-&lt;br /&gt;
|Cell taps&lt;br /&gt;
|Molex&lt;br /&gt;
|1-640456-7&lt;br /&gt;
|1-1375820-7&lt;br /&gt;
|1445336-1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Power supply ===&lt;br /&gt;
The pins GND and 12V must be connected to a permanent 12V source in order to ensure correct operation. In other words, don&#039;t connect 12V for example to your cars ignition 12V that is interrupted whenever you stop the car. The BMS uses the STM32 NVRAM to store some long term process values, most importantly SoH. If you don&#039;t care about the latter you might as well interrupt the supply completely.&lt;br /&gt;
&lt;br /&gt;
The enable input of the first (main) module is connected to an interruptable 12V source. This input starts up the BMS. Enable can stay high but even a 1s pulse is enough to start the BMS, as it will then keep itself running as long as needed.&lt;br /&gt;
&lt;br /&gt;
The BMS will then keep running as long as current flows through the battery. 2 hours after it has measured the last current flow it will shut down. It will use these 2 hours to let the cells settle to their open circuit voltage and will do balancing and [[16-cell BMS#State of Health calculation|SoH calculation]]. Afterwards it will shut itself down and consume only a few uA from your 12V source.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
All configuration, queries and firmware updates are done via the CAN bus. There is no independent web interface like known from e.g. the inverter. However there is a solution to connect an ESP32 via CAN and then have the known web interface &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?p=56913#p56913&amp;lt;/ref&amp;gt; or you can use Dave Fiddes &amp;quot;oic&amp;quot; tool for the command line&amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=2907&amp;lt;/ref&amp;gt;. It is important to know that the main module has node-id 10 and the subsequent ones 10+i (i index of submodule, so 1st submodule has node-id 11). The base node id can be configured to start at something else than 10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;All info given here is preliminary and will likely change!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Apart from that the modules output periodic CAN messages depending on their role. The base address for cyclic messages defaults to 0x1F4 and can be changed by modifying pdobase on the main module. pdobase is ignored on the sub modules.&lt;br /&gt;
&lt;br /&gt;
All modules output on ID 501 (0x1F5) + i&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!start&lt;br /&gt;
!length&lt;br /&gt;
!item&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|13&lt;br /&gt;
|umin&lt;br /&gt;
|minimum cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|13&lt;br /&gt;
|umax&lt;br /&gt;
|maximum cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|2&lt;br /&gt;
|counter&lt;br /&gt;
|counts from 0-3 (anti-freeze)&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|13&lt;br /&gt;
|uavg&lt;br /&gt;
|average cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|48&lt;br /&gt;
|8&lt;br /&gt;
|tempmin&lt;br /&gt;
|Minimum temp on module i - signed&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|8&lt;br /&gt;
|tempmax&lt;br /&gt;
|Maximum temp on module i - signed&lt;br /&gt;
|}&lt;br /&gt;
The main module does not output its local accumulated values but accumulated values over all modules.&lt;br /&gt;
&lt;br /&gt;
In addition the main module outputs on id 500 (0x1F4)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!start&lt;br /&gt;
!length&lt;br /&gt;
!item&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|11&lt;br /&gt;
|chargelim&lt;br /&gt;
|maximum charge current in A&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|11&lt;br /&gt;
|dischargelim&lt;br /&gt;
|maximum discharge current in A&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|10&lt;br /&gt;
|soc&lt;br /&gt;
|Pack soc in 0.1%&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|16&lt;br /&gt;
|idcavg&lt;br /&gt;
|Averaged current reading of last 1s in 0.1A - signed!&lt;br /&gt;
|-&lt;br /&gt;
|48&lt;br /&gt;
|10&lt;br /&gt;
|utotal&lt;br /&gt;
|Total pack voltage in V&lt;br /&gt;
|-&lt;br /&gt;
|62&lt;br /&gt;
|2&lt;br /&gt;
|counter&lt;br /&gt;
|counts from 0-3 (anti-freeze)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reading individual cell voltages ===&lt;br /&gt;
Cell voltages are only available via CAN SDO from the module that measures them. So voltages 1-16 must be queried from the first (main) module, 17-32 from the 2nd (1st submodule) and so on. With Dave Fiddes tool this translates to:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
oic -n 10 dumpall #dumps all values including cell voltages from 1st module&lt;br /&gt;
oic -n 11 dumpall #same for second module&lt;br /&gt;
oic -n 11 read u0 #Read first cell voltage of second module&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For querying voltages say in your arduino sketch you&#039;ll need to acquire every voltage separately by sending and receiving SDO messages&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x60A#0x40 idhigh 0x21 idlow 0 0 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
idhigh and low are the bytes of the internal ID. The id of the first cell voltage is 2006 (0x7D6) so for querying the 1st cell voltage of the first module you send&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x60A#0x40 0x07 0x21 0xD6 0 0 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And you will receive the reply&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x58A#0x43 0x07 0x21 0xD6 0xD0 0xED 0x01 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x0001EDD0 is the voltage value which decodes to mV x 32. So 0x1EDD0/32 = 3950.5 mV.&lt;br /&gt;
&lt;br /&gt;
The next cell would be on 0x7D7 and the last on 0x7E5. The next 16 voltages are then queried from node id 0x60B.&lt;br /&gt;
&lt;br /&gt;
=== Configuration Parameters ===&lt;br /&gt;
There is currently a limited set of parameters which will be extended as the software grows. This table always reflects the latest git commit. Check the page history for previous versions.&lt;br /&gt;
&lt;br /&gt;
These are the parameters of v0.20.B&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Min&lt;br /&gt;
!Max&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;BMS&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|gain&lt;br /&gt;
|uV/dig&lt;br /&gt;
|1&lt;br /&gt;
|1000&lt;br /&gt;
|586&lt;br /&gt;
|Scaling factor from ADC digits to mV&lt;br /&gt;
|-&lt;br /&gt;
|correction0&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
| -1250&lt;br /&gt;
|The first two and the last channel have slightly different topology and need their own correction factor&lt;br /&gt;
|-&lt;br /&gt;
|correction1&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
|1500&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|correction15&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
|1000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|numchan&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|16&lt;br /&gt;
|16&lt;br /&gt;
|Number of cells connected to the module, power cycle required following saving parameters to update.&lt;br /&gt;
|-&lt;br /&gt;
|balmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Balancing mode&lt;br /&gt;
0=No balancing&lt;br /&gt;
1=Only bump up low cells&lt;br /&gt;
2=Only dissipate high cells&lt;br /&gt;
3=Do both&lt;br /&gt;
&lt;br /&gt;
By default balancing starts 60s after power up or in fact 60s after idcavg settled below 1A. You will see opmode changing to RunBalance&lt;br /&gt;
|-&lt;br /&gt;
|ubalance&lt;br /&gt;
|mV&lt;br /&gt;
|0&lt;br /&gt;
|4500&lt;br /&gt;
|4500&lt;br /&gt;
|Voltage above which top balancing is started&lt;br /&gt;
|-&lt;br /&gt;
|idlewait&lt;br /&gt;
|s&lt;br /&gt;
|0&lt;br /&gt;
|100000&lt;br /&gt;
|60&lt;br /&gt;
|Number of seconds to wait after stop of current flow to measure unloaded cell voltage und start balancing&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Battery Characteristics&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|dischargemax&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2047&lt;br /&gt;
|200&lt;br /&gt;
|Maximum discharge current&lt;br /&gt;
|-&lt;br /&gt;
|nomcap&lt;br /&gt;
|Ah&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|100&lt;br /&gt;
|Nominal capacity&lt;br /&gt;
|-&lt;br /&gt;
|icc1&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|50&lt;br /&gt;
|Maximum charge current of empty battery&lt;br /&gt;
|-&lt;br /&gt;
|icc2&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|30&lt;br /&gt;
|Maximum charge current of roughly half-charged battery&lt;br /&gt;
|-&lt;br /&gt;
|icc3&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|20&lt;br /&gt;
|Maximum charge current of rather full battery&lt;br /&gt;
|-&lt;br /&gt;
|ucv1&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|3900&lt;br /&gt;
|First constant voltage set point. Transition to next one when dropping below icc2&lt;br /&gt;
|-&lt;br /&gt;
|ucv2&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|4000&lt;br /&gt;
|Second constant voltage set point. Transition to next one when dropping below icc3&lt;br /&gt;
|-&lt;br /&gt;
|ucellmax&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|4200&lt;br /&gt;
|Third constant voltage set point and maximum cell voltage&lt;br /&gt;
|-&lt;br /&gt;
|ucellmin&lt;br /&gt;
|mV&lt;br /&gt;
|1000&lt;br /&gt;
|4500&lt;br /&gt;
|3300&lt;br /&gt;
|Minimum loaded cell voltage. Discharge limit is dropped to stay above this value&lt;br /&gt;
|-&lt;br /&gt;
|chargeXsoc&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|Percentage of charge current at soc X. In between two points charge current is interpolated&lt;br /&gt;
|-&lt;br /&gt;
|sohpreset&lt;br /&gt;
|%&lt;br /&gt;
|10&lt;br /&gt;
|100&lt;br /&gt;
|100&lt;br /&gt;
|This is the starting value for the state of health (SoH) calculation. The value is continuously updated by the BMS as SoH is estimated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Sensor Setup&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|idcgain&lt;br /&gt;
|dig/A&lt;br /&gt;
| -1000&lt;br /&gt;
|1000&lt;br /&gt;
|10&lt;br /&gt;
|Gain (or actually division factor) of current sensor&lt;br /&gt;
|-&lt;br /&gt;
|idcofs&lt;br /&gt;
|dig&lt;br /&gt;
| -4095&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
|0A offset&lt;br /&gt;
|-&lt;br /&gt;
|idcmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Current sensor mode 0=Off, 1=Single Ended ADC, 2=Differential ADC, 3=ISA current shunt&lt;br /&gt;
|-&lt;br /&gt;
|tempsns&lt;br /&gt;
|&lt;br /&gt;
| 0&lt;br /&gt;
|3&lt;br /&gt;
| 0&lt;br /&gt;
|Temperature sensor 0=None, 1=Channel1, 2=Channel3, 3=Both (set tempsns 0 in dashboard if dropdown not availble and value set as -1)&lt;br /&gt;
|-&lt;br /&gt;
|tempres&lt;br /&gt;
|Ohm&lt;br /&gt;
|10&lt;br /&gt;
|500000&lt;br /&gt;
|10000&lt;br /&gt;
|Nominal sensor resistance at 25°C&lt;br /&gt;
|-&lt;br /&gt;
|tempbeta&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|100000&lt;br /&gt;
|3900&lt;br /&gt;
|beta factor of Steinhart equation (see data sheet)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Communication&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|pdobase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2047&lt;br /&gt;
|500&lt;br /&gt;
|base COB Id for cyclic messages. Main module uses pdobase and pdobase+1, 1st submodule uses pdobase+2 and so on&lt;br /&gt;
|-&lt;br /&gt;
|sdobase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|63&lt;br /&gt;
|10&lt;br /&gt;
|base node ID for SDO queries. Main module uses sdobase, 1st submodule sdobase+1 and so on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Spot values ===&lt;br /&gt;
All values that the BMS either measures or calculates are called spot values. While all modules show all spot values, some only make sense on the main module. The column &amp;quot;scope&amp;quot; denotes that. &amp;quot;M&amp;quot; means the value is only relevant on the main module, &amp;quot;S&amp;quot; means it&#039;s relevant on main and sub modules.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Scope&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Firmware version&lt;br /&gt;
|-&lt;br /&gt;
|opmode&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|State of operation&lt;br /&gt;
&lt;br /&gt;
* BOOT - System starting&lt;br /&gt;
* GETADDR - Waiting for address assignment&lt;br /&gt;
* SETADDR - Setting address of next node&lt;br /&gt;
* REQINFO - Requesting info from sub modules&lt;br /&gt;
* RECVINFO - Receiving info&lt;br /&gt;
* INIT - Initialize BMS hardware&lt;br /&gt;
* SELFTEST - Running hardware self tests&lt;br /&gt;
* RUN - normal operation when current flows through battery&lt;br /&gt;
* IDLE - battery is idle, i.e. no current through it for a given time&lt;br /&gt;
* ERROR - selftests detected a critical error, operation halted&lt;br /&gt;
|-&lt;br /&gt;
|lasterr&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Last detected error, see Errors&lt;br /&gt;
|-&lt;br /&gt;
|errchan&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Cell tap channel causing the error, if applicable&lt;br /&gt;
|-&lt;br /&gt;
|modaddr&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Address of module&lt;br /&gt;
|-&lt;br /&gt;
|modnum&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Total number of modules&lt;br /&gt;
|-&lt;br /&gt;
|totalcells&lt;br /&gt;
|&lt;br /&gt;
|M&lt;br /&gt;
|Total number of cells&lt;br /&gt;
|-&lt;br /&gt;
|counter&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Revolving counter 0-15 100 ms clock rate&lt;br /&gt;
|-&lt;br /&gt;
|uptime&lt;br /&gt;
|s&lt;br /&gt;
|S&lt;br /&gt;
|Time in s since power was applied to 12V pin&lt;br /&gt;
|-&lt;br /&gt;
|chargein&lt;br /&gt;
|As&lt;br /&gt;
|M&lt;br /&gt;
|Charge into the battery &lt;br /&gt;
|-&lt;br /&gt;
|chargeout&lt;br /&gt;
|As&lt;br /&gt;
|M&lt;br /&gt;
|Charge from the battery to load&lt;br /&gt;
|-&lt;br /&gt;
|soc&lt;br /&gt;
|%&lt;br /&gt;
|M&lt;br /&gt;
|State of charge, i.e. available charge in percent of fully charged battery&lt;br /&gt;
|-&lt;br /&gt;
|soh&lt;br /&gt;
|%&lt;br /&gt;
|M&lt;br /&gt;
|State of health, i.e. available total charge in percent of data sheet value when new&lt;br /&gt;
|-&lt;br /&gt;
|chargelim&lt;br /&gt;
|A&lt;br /&gt;
|M&lt;br /&gt;
|Current limit for charging the battery, see [[16-cell BMS#Charge Curve|Charge Curve]]&lt;br /&gt;
|-&lt;br /&gt;
|dischargelim&lt;br /&gt;
|A&lt;br /&gt;
|M&lt;br /&gt;
|Current limit for discharging, see [[16-cell BMS#Calculating current limits|Calculating current limits]]&lt;br /&gt;
|-&lt;br /&gt;
|idc&lt;br /&gt;
|A&lt;br /&gt;
|M&lt;br /&gt;
|Present current through battery, negative for current out of the battery, positive for current into the battery&lt;br /&gt;
|-&lt;br /&gt;
|idcavg&lt;br /&gt;
|A&lt;br /&gt;
|M&lt;br /&gt;
|Average current of the last second&lt;br /&gt;
|-&lt;br /&gt;
|power&lt;br /&gt;
|W&lt;br /&gt;
|M&lt;br /&gt;
|Average battery power of the last second&lt;br /&gt;
|-&lt;br /&gt;
|tempmin&lt;br /&gt;
|°C&lt;br /&gt;
|M&lt;br /&gt;
|Minimum temperature of all modules&lt;br /&gt;
|-&lt;br /&gt;
|tempmax&lt;br /&gt;
|°C&lt;br /&gt;
|M&lt;br /&gt;
|Maximum temperature of all modules&lt;br /&gt;
|-&lt;br /&gt;
|uavg&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|average cell voltage over entire pack&lt;br /&gt;
|-&lt;br /&gt;
|umin&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|Minimum cell voltage of entire pack&lt;br /&gt;
|-&lt;br /&gt;
|umax&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|Maximum cell voltage of entire pack&lt;br /&gt;
|-&lt;br /&gt;
|udelta&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|Difference between minimum and maximum cell voltage of entire pack&lt;br /&gt;
|-&lt;br /&gt;
|utotal&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|Sum of all cell voltages, i.e. pack voltage&lt;br /&gt;
|-&lt;br /&gt;
|uX&lt;br /&gt;
|mV&lt;br /&gt;
|S&lt;br /&gt;
|Present voltage of cell X of current module, see also [[16-cell BMS#Reading individual cell voltages|Reading individual cell voltages]]&lt;br /&gt;
|-&lt;br /&gt;
|uavgX, uminX, umaxX, tempminX, tempmaxX&lt;br /&gt;
|mV, °C&lt;br /&gt;
|M&lt;br /&gt;
|Average/Minimum/Maximum cell voltage and temperature of sub module X&lt;br /&gt;
|-&lt;br /&gt;
|uXcmd&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|State of balancer&lt;br /&gt;
|-&lt;br /&gt;
|cpuload&lt;br /&gt;
|%&lt;br /&gt;
|S&lt;br /&gt;
|Time the CPU spends actually doing something&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Operation ==&lt;br /&gt;
&lt;br /&gt;
=== State of Charge calculation ===&lt;br /&gt;
The State of Charge (SoC) lets you know how many percent of charge you battery still holds, in percent of a fully charged battery.&lt;br /&gt;
&lt;br /&gt;
Determining SoC is split into two methods: determining the SoC from cell voltage and then tracking it as current flows in or out of the pack.&lt;br /&gt;
&lt;br /&gt;
To estimate the SoC a 10-point lookup table is implemented that maps from cell voltage to SoC. The accuracy of this table is directly related to the accuracy of the estimation. You can edit the lookup table by changing the &#039;&#039;&#039;chargeXsoc&#039;&#039;&#039; parameters. The voltages you enter are open circuit voltages. These can only be obtained when there was no current flow through the battery for a certain amount of time, typically 10-30 minutes. This time is configured via the &#039;&#039;&#039;idlewait&#039;&#039;&#039; parameter.&lt;br /&gt;
&lt;br /&gt;
So whenever the BMS has the chance to estimate the SoC it will do so. You can adjust &#039;&#039;&#039;idlewait&#039;&#039;&#039; to a low value to start estimating quickly. It means the first estimates will be off but it will become more accurate if the pack remains unloaded for longer time.&lt;br /&gt;
&lt;br /&gt;
The subsequent tracking of SoC requires the BMS to know the current through the battery. Right now it supports analog current sensors (e.g. hall effect) with an operating voltage of 5V. Within this class it supports differential and single ended sensors, configurable via &#039;&#039;&#039;idcmode&#039;&#039;&#039;. The parameters &#039;&#039;&#039;idcofs&#039;&#039;&#039; and &#039;&#039;&#039;idcgain&#039;&#039;&#039; are used for calibration. When no current is flowing adjust &#039;&#039;&#039;idcofs&#039;&#039;&#039; until &#039;&#039;&#039;idcavg&#039;&#039;&#039; shows 0A. Then put a known current through the sensor and adjust &#039;&#039;&#039;idcgain&#039;&#039;&#039; until &#039;&#039;&#039;idcavg&#039;&#039;&#039; shows the correct current.&lt;br /&gt;
&lt;br /&gt;
Lastly the BMS needs to know the energy or charge content of your battery in Ah. This is configured with the &#039;&#039;&#039;nomcap&#039;&#039;&#039; parameter and can be found in the data sheet.&lt;br /&gt;
&lt;br /&gt;
=== State of Health calculation ===&lt;br /&gt;
The State of Health (SoH) lets you know how the remaining fully charged capacity, in percent of the data sheet value, i.e. when the battery was new. Batteries slowly degrade over time and usage cycles.&lt;br /&gt;
&lt;br /&gt;
Whenever we do a SoC estimation as described above, we also update the SoH. If the estimated SoC has changed by more than 20% we compare the energy that we have taken out of the battery to the difference in SoC. If the two match, the SoH is 100%. If we have taken more energy from the battery then the difference in SoC suggests, SoH is above 100% (and you likely configured a wrong &#039;&#039;&#039;nomcap&#039;&#039;&#039;). Otherwise SoH is &amp;lt; 100%.&lt;br /&gt;
&lt;br /&gt;
As this method comes with certain inaccuracies we only change the long term SoH slowly, i.e. every estimate is slowly averaged onto the long term SoH. This should balance out inaccuracies.&lt;br /&gt;
&lt;br /&gt;
The spot value &#039;&#039;&#039;soh&#039;&#039;&#039; shows the current long term SoH. The value is also reflected onto &#039;&#039;&#039;sohpreset&#039;&#039;&#039;, a saveable parameter. Whenever you need to interrupt the BMSes power supply you should go should save parameters so that next time it starts up with the correct long term SoH.&lt;br /&gt;
&lt;br /&gt;
=== Calculating current limits ===&lt;br /&gt;
Limiting charge and discharge current are the only means of this BMS to protect the battery. It has no means to turn off the current flow by itself but instead relies on the connected components to obey the calculated current limits that are sent out via CAN. The current limits are calculated in a number of steps.&lt;br /&gt;
&lt;br /&gt;
==== Charge Curve ====&lt;br /&gt;
The initial approach was to assign a certain charge current to points in the SoC curve. This method can be skewed if the SoC calculation is off for some reason. The new method deploys 3 CC/CV regulators. This was copied from oberving VWs charge curve of the MEB cars. The first regulator has the highest charge current and aims for a voltage typically around 3.9V for many NMC chemistries. When current drops below the CC value of the second regulator then that one is used, aiming for a higher voltage of typically 4V. And finally the 3rd regulator takes over aiming for the charge end voltage of typically 4.2V. When setting all 3 to the same values a simple CC/CV curve is generated.&lt;br /&gt;
&lt;br /&gt;
==== Voltage limits ====&lt;br /&gt;
Voltage limits are enforced via a P-regulator. I.e. as we approach the upper or lower voltage limit current is cut back to stay away from the limits until it reaches 0A. The upper and lower limit is configurable&lt;br /&gt;
&lt;br /&gt;
==== Temperature limits ====&lt;br /&gt;
High temperature will cut back both charge and discharge current whereas low temperature will only cut back charge current. These limits only work when you&#039;ve set up your temperature sensors correctly. Please check the readings against a reference before relying on it.&lt;br /&gt;
&lt;br /&gt;
Charge current has a proportional, multi-step temperature derating, i.e. the charge curve defined by iccX and ucvX is scaled with a derating factor the lower the temperature or when the maximum temperature is approached&lt;br /&gt;
&lt;br /&gt;
* Below &#039;&#039;&#039;-20°C&#039;&#039;&#039; no charging is possible&lt;br /&gt;
* Between &#039;&#039;&#039;-20°C and 0°C&#039;&#039;&#039; charging with 0-30% of the charge curve is allowed&lt;br /&gt;
* Between &#039;&#039;&#039;0°C and 25°C&#039;&#039;&#039; charging with 30% to 100% of the charge curve is allowed&lt;br /&gt;
* Between &#039;&#039;&#039;43°C and 50°C&#039;&#039;&#039; charging with 100% to 0% of the charge curve is allowed, i.e. &#039;&#039;&#039;above 50°C&#039;&#039;&#039; charging is no longer allowed.&lt;br /&gt;
&lt;br /&gt;
Discharging is not limited at low temperatures as high discharge currents at low temperatures are not known to cause damage. As the battery heats up discharge current is limited, starting at &#039;&#039;&#039;46°C&#039;&#039;&#039; until discharging is no longer allowed when reaching &#039;&#039;&#039;53°C&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Energy limits ====&lt;br /&gt;
Not enforced yet. Some OEM BMSes cut back charge current after a certain amount of energy has been put into the battery. E.g. When starting charge at 50% charge rate will end up higher at 70% than if we start charging at 10%.&lt;br /&gt;
&lt;br /&gt;
== Calibration ==&lt;br /&gt;
As every instrument the voltage measurement needs to be calibrated to cancel out tolerances in the involved components. There are 4 parameters for calibration.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gain:&#039;&#039;&#039; The translation ration between the ADC digits and mV. This applies to all channels&lt;br /&gt;
* &#039;&#039;&#039;correction0, 1 and 15&#039;&#039;&#039;: This allows special tuning of said 3 channels because they use a slightly different current path and thus need a small gain correction&lt;br /&gt;
&lt;br /&gt;
=== Calibration procedure ===&lt;br /&gt;
First we determine the general gain. Pick any of the voltages between u2 and u14 which share a common gain factor. Use a good multimeter to measure the physical voltage of your reference channel. Now tune the &#039;&#039;&#039;gain&#039;&#039;&#039; parameter until your multimeter and the BMS voltage read the same value +-0.5mV. Now all channels from 2-14 should read correctly.&lt;br /&gt;
&lt;br /&gt;
Then for channels 0, 1 and 15 also measure the physical voltage input and tune the respective &#039;&#039;&#039;correctionX&#039;&#039;&#039; parameter until multimeter and BMS report the same voltage. The correction factors can be negative if a channels reads too high.&lt;br /&gt;
&lt;br /&gt;
Save your parameters to flash to make the calibration permanent.&lt;br /&gt;
&lt;br /&gt;
== Flashing firmware ==&lt;br /&gt;
If you have sourced the BMS boards from an alternative source then you will need to flash the bootloader and firmware onto the BMS. This is a relatively straightforward process once understood but took me a while to get it to work.&lt;br /&gt;
&lt;br /&gt;
Firstly you will need an STLink dongle, I used this one &amp;lt;ref&amp;gt;https://www.amazon.co.uk/dp/B07QBLNDPM?psc=1&amp;lt;/ref&amp;gt; but I believe any will do.&lt;br /&gt;
&lt;br /&gt;
I used STM32CubeProgrammer &amp;lt;ref&amp;gt;https://www.st.com/en/development-tools/stm32cubeprog.html&amp;lt;/ref&amp;gt; on Linux to flash my board and also (prior to flashing) upgrade the STLinkdongle to the latest firmware (might not be necessary but felt it was wise to do so).&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve got STM32Cubeprogrammer installed you&#039;re probably best erasing the STM32 Chip to ensure you&#039;re starting from a clean board. Navigate to the &amp;quot;Erasing &amp;amp; Programming&amp;quot; tab on the left and connect to your STlink dongle (if you havent already). Once connected, (you can also update the firmware on the dongle at this point on the &amp;quot;Memory &amp;amp; File Editing&amp;quot; tab), connect the dongle to the BMS board via the VDCG pins... &lt;br /&gt;
&lt;br /&gt;
(V = Voltage 3.3V, D = SWDIO, C = SWCLK, G = Gnd)&lt;br /&gt;
&lt;br /&gt;
and perform a &amp;quot;full chip erase&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Once thats complete head over to Github to download the Bootloader &amp;lt;ref&amp;gt;https://github.com/jsphuebner/stm32-CANBootloader/releases&amp;lt;/ref&amp;gt; and download the hex file (you may need to be logged in to download the files).&lt;br /&gt;
&lt;br /&gt;
Once downloaded, in STM32CubeProgrammer, navigate to the &amp;quot;Memory &amp;amp; File Editing&amp;quot; tab and open the hex file you just downloaded, once opened you can use the &amp;quot;Download&amp;quot; button to flash the bootloader to your BMS board.&lt;br /&gt;
&lt;br /&gt;
You can now repeat the above process of opening the hex file and &amp;quot;downloading&amp;quot; to the BMS board for the main BMS firmware which is available from the BMS Github repository &amp;lt;ref&amp;gt;https://github.com/jsphuebner/FlyingAdcBms/actions&amp;lt;/ref&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Once all that is done, you can move onto the Web interface. You&#039;ll need the &amp;quot;Can Backend&amp;quot; version of the ESP32 Web Interface available here &amp;lt;ref&amp;gt;https://github.com/jsphuebner/esp32-web-interface/tree/can-backend&amp;lt;/ref&amp;gt; (click the green code button and download zip)&lt;br /&gt;
&lt;br /&gt;
Once downloaded download Arduino IDE 1.8.19 (you&#039;ll need this version, nothing beyond version 2 as this does not support SPIFFS flashing as far as I&#039;m aware) and set it up for flashing to ESP32 boards &amp;lt;ref&amp;gt;https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html&amp;lt;/ref&amp;gt; and also flashing ESP32 Spiffs &amp;lt;ref&amp;gt;https://randomnerdtutorials.com/install-esp32-filesystem-uploader-arduino-ide/&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
To setup the Web interface Arduino sketch, you&#039;ll want to unzip and (IMPORTANT) RENAME the folder to &amp;quot;esp32-web-interface&amp;quot; to match the ino file within the folder, if you don&#039;t do this you&#039;ll have problems further down the line. Once unzipped and renamed, open the esp32-web-interface.ino sketch file and upload it to your ESP32 dev board. when this completed you&#039;ll also need to upload the SPIFFS image, you can do this by going to Tools and &amp;quot;ESP32 Sketch Data Upload&amp;quot; and choosing SPIFFS. once this is complete, you can connect your ESP32 to your BMS board via CAN and power them and they shuld work (note you&#039;ll need the 12V enable in line connected also).&lt;br /&gt;
&lt;br /&gt;
Once on the Web interface, select Node ID 10 and a speed of 500kbps and you&#039;ll have all your wonderful BMS spot values and params ready to go.&lt;br /&gt;
&lt;br /&gt;
== Operating Limits==&lt;br /&gt;
&lt;br /&gt;
* Max voltage for the board is 70v&lt;br /&gt;
* Max number of cells is 16&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Bidirectional_Charging&amp;diff=6075</id>
		<title>Bidirectional Charging</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Bidirectional_Charging&amp;diff=6075"/>
		<updated>2026-03-01T17:09:30Z</updated>

		<summary type="html">&lt;p&gt;Johu: /* Practical implementation with parts list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bidirectional charging means, that the car is able to provide power to the outside world, via the charge port.&lt;br /&gt;
&lt;br /&gt;
Tags: bidi, inverse charging, vehicle-to-load, V2L, vehicle-to-home, V2H, vehicle-to-grid, V2G&lt;br /&gt;
&lt;br /&gt;
=== Forum discussions related to bidirectional charging: ===&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=5090 Bidirectional charger with PV Hybrid inverter and pyPLC&lt;br /&gt;
&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=3551 Drawing power out of CCS port (V2x, inverse charging, bidirectional CCS) - Collection of experiences with different cars&lt;br /&gt;
&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=6745 Energy Controller including CCS interface, FoccciCape, BeagleBone&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via AC ===&lt;br /&gt;
Some OEM on-board-chargers are able to create AC voltage. Todo: any reverse-engineering ongoing for such chargers? E.g. for Hyundai/Kia E-GMP?&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via CHAdeMO ===&lt;br /&gt;
The CHAdeMO standard was planned for supporting bidirectional power transfer from the beginning. Todo: Any open-source projects in this direction?&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via CCS ===&lt;br /&gt;
The CCS standard did not plan bidirectional power transfer. This means, depending on the implementation details of the cars charge controller, the car may or may not allow to draw energy out of the CCS port. Later versions of the CCS standard, ISO15118 (2020?), are defining special communication procedures for bidirectional power transfer. But it will take some time until this standard is widely adapted.&lt;br /&gt;
&lt;br /&gt;
In the open-source world, however, we do not need to wait until OEMs and charger manufacturers implement the latest ISO15118. We can support bidirectional charging even with the &amp;quot;old&amp;quot; DIN spec. The strategy is: Even if the car is requesting to be charged, it also accepts discharging, without terminating the charging session. It may terminate if the SOC falls below a certain, configurable level, to prevent an empty battery. The car announces the allowed charge current, and the same value, just in opposite direction, can be used as a discharge current limit, too.&lt;br /&gt;
&lt;br /&gt;
== Practical implementation with parts list ==&lt;br /&gt;
[[File:CCS bidirectional charger.jpg|thumb|First prototype]]&lt;br /&gt;
One way to DIY a bidirectional charger is the use of a hybrid PV inverter with high voltage battery input. The advantage is that these are mass-produced (thus cheap) and conform to the various legal requirements. The inverter then handles power transfer and optionally smart functions such as zero grid import/export and we only need to supply the surrounding logic and electrics.&lt;br /&gt;
[[File:CCS bidirectional charger 2.jpg|thumb|Second version]]&lt;br /&gt;
This component list is just an example that has proven to work. It is preliminary and has not been tested with OEM cars yet, so it will likely be extended. As always, you are working with high voltage and especially grid voltage. Make sure you are qualified otherwise ask for help.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Item&lt;br /&gt;
!Approximate cost&lt;br /&gt;
!Link/Source&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|Sungrow SH5.0RT (or more powerful variant)&lt;br /&gt;
|850€&lt;br /&gt;
|[https://ger.sungrowpower.com/productDetail/905 Sungrow]&lt;br /&gt;
|Pick an inverter that is supported by [https://github.com/dalathegreat/Battery-Emulator/wiki#supported-inverters-list Battery Emulator]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Connector&lt;br /&gt;
|90€&lt;br /&gt;
|AliExpress&lt;br /&gt;
|Plain connector without cable&lt;br /&gt;
|-&lt;br /&gt;
|BeagleBone Green&lt;br /&gt;
|45€&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Seeed-Studio/102010027?qs=Hlcjo%2FO3pQ5AxSET1oW%252B%252Bg%3D%3D Mouser]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[FoccciCape]]&lt;br /&gt;
|250€&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=81 OI shop]&lt;br /&gt;
|RS485, CAN comm, 2x relay driver, CCS&lt;br /&gt;
|-&lt;br /&gt;
|Flexible cable, 4 or 5 pole&lt;br /&gt;
|4€/m&lt;br /&gt;
|Local hardware store&lt;br /&gt;
|Size according to charging current. 5x2.5mm² used for the 5 kW inverter&lt;br /&gt;
For DC+, DC-, PE, CP and PP. &lt;br /&gt;
PP can optionally be terminated in the plug, then you just need 4 poles&lt;br /&gt;
|-&lt;br /&gt;
|2 Fuse blocks&lt;br /&gt;
|6€ each&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Altech/002540101?qs=rrS6PyfT74edEoVfbnqxvg%3D%3D Mouser]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2 25A fuses&lt;br /&gt;
|8€ each&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Eaton-Electronics/EKM10-25-1P?qs=sGAEpiMZZMsIz3CjQ1xegZx2pdJYlyprSptsITKY%2FrCWMtgS7UD2BQ%3D%3D Mouser]&lt;br /&gt;
|400V AC rated from your local hardware store suffices as it&#039;s 2 in series&lt;br /&gt;
|-&lt;br /&gt;
|12V 2A DIN rail supply&lt;br /&gt;
|18€&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/MEAN-WELL/HDR-30-12?qs=pHY8AWQbqIN66yYHZne39A%3D%3D Mouser]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DIN rail cabinet&lt;br /&gt;
|20€&lt;br /&gt;
|Local hardware store&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MC4 connector set&lt;br /&gt;
|5€&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5V to 400V step up converter&lt;br /&gt;
|10€&lt;br /&gt;
|[https://www.ebay.de/itm/357155751299 ebay]&lt;br /&gt;
|Only needed for OEM cars&lt;br /&gt;
|}&lt;br /&gt;
The CCS connectors + and - is connected to the inverter input via the fuse blocks. I did not deploy additional contactors but rely on the ones that are already in the car and the inverter. The PLC modems output transformer is connected to PE and CP via a capacitor and a resistor, more details in [https://github.com/uhi22/pyPLC/blob/master/doc/hardware.md uhis github].&lt;br /&gt;
&lt;br /&gt;
The BeagleBone is connected to the PLC modem and the inverter Ethernet port, so you will need a small network switch, also for the uplink to your home network. In addition the CAN outputs of the COMPCE cape connects to the inverters battery CAN (pins 3 and 4 on the Sungrow).&lt;br /&gt;
&lt;br /&gt;
More info on the software setup in the development threads linked above, uhis github and [https://github.com/jsphuebner/esp-egycounter Johannes&#039; github].&lt;br /&gt;
&lt;br /&gt;
This setup can also be used with CHAdeMO cars in which case the powerline modem can be omitted.&lt;br /&gt;
&lt;br /&gt;
== Compatible cars ==&lt;br /&gt;
This table lists cars where we successfully pulled power OUT of the cars battery via its quick charge port.&lt;br /&gt;
&lt;br /&gt;
More details on [https://github.com/jsphuebner/esp-egycounter forum thread].&lt;br /&gt;
&lt;br /&gt;
First column: Y - works flawlessly with no timeout, P - works partially with long timeout, N - works not at all or quick timeout&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
!Make&lt;br /&gt;
!Model&lt;br /&gt;
!Requirements&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|P&lt;br /&gt;
|Hyundai&lt;br /&gt;
|Ioniq Classic 28 kWh&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|Timeout after 10 minutes&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|MG&lt;br /&gt;
|MG4&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|No timeout&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Tesla&lt;br /&gt;
|Model Y&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|5 kW tested&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Tesla&lt;br /&gt;
|Model 3&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|BMS aborts charging session if more than 15Ah discharge have been detected&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|BYD&lt;br /&gt;
|Atto 3&lt;br /&gt;
|&lt;br /&gt;
|5 kW tested&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Polestar&lt;br /&gt;
|2&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Polestar&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|Tested with physical precharge voltage (johu in Sweden 2026-02-19)&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|VW&lt;br /&gt;
|ID.4&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 1 minute&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|BMW&lt;br /&gt;
|i3&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|model year 2022, https://openinverter.org/forum/viewtopic.php?p=89894#p89894&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|BMW&lt;br /&gt;
|IX4&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 5 minutes&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|Chevrolet&lt;br /&gt;
|Bolt&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 50 s&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|Kia&lt;br /&gt;
|EV6&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 10 s&lt;br /&gt;
|}&lt;br /&gt;
Some other car models have been tested by the guys of the Everest project, the results are available on github https://github.com/EVerest/logfiles&lt;br /&gt;
&lt;br /&gt;
== Collection of documents related to bidirectional charging ==&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
[[Category:CCS]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Bidirectional_Charging&amp;diff=6074</id>
		<title>Bidirectional Charging</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Bidirectional_Charging&amp;diff=6074"/>
		<updated>2026-03-01T17:08:04Z</updated>

		<summary type="html">&lt;p&gt;Johu: /* Practical implementation with parts list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bidirectional charging means, that the car is able to provide power to the outside world, via the charge port.&lt;br /&gt;
&lt;br /&gt;
Tags: bidi, inverse charging, vehicle-to-load, V2L, vehicle-to-home, V2H, vehicle-to-grid, V2G&lt;br /&gt;
&lt;br /&gt;
=== Forum discussions related to bidirectional charging: ===&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=5090 Bidirectional charger with PV Hybrid inverter and pyPLC&lt;br /&gt;
&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=3551 Drawing power out of CCS port (V2x, inverse charging, bidirectional CCS) - Collection of experiences with different cars&lt;br /&gt;
&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=6745 Energy Controller including CCS interface, FoccciCape, BeagleBone&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via AC ===&lt;br /&gt;
Some OEM on-board-chargers are able to create AC voltage. Todo: any reverse-engineering ongoing for such chargers? E.g. for Hyundai/Kia E-GMP?&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via CHAdeMO ===&lt;br /&gt;
The CHAdeMO standard was planned for supporting bidirectional power transfer from the beginning. Todo: Any open-source projects in this direction?&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via CCS ===&lt;br /&gt;
The CCS standard did not plan bidirectional power transfer. This means, depending on the implementation details of the cars charge controller, the car may or may not allow to draw energy out of the CCS port. Later versions of the CCS standard, ISO15118 (2020?), are defining special communication procedures for bidirectional power transfer. But it will take some time until this standard is widely adapted.&lt;br /&gt;
&lt;br /&gt;
In the open-source world, however, we do not need to wait until OEMs and charger manufacturers implement the latest ISO15118. We can support bidirectional charging even with the &amp;quot;old&amp;quot; DIN spec. The strategy is: Even if the car is requesting to be charged, it also accepts discharging, without terminating the charging session. It may terminate if the SOC falls below a certain, configurable level, to prevent an empty battery. The car announces the allowed charge current, and the same value, just in opposite direction, can be used as a discharge current limit, too.&lt;br /&gt;
&lt;br /&gt;
== Practical implementation with parts list ==&lt;br /&gt;
[[File:CCS bidirectional charger.jpg|thumb|First prototype]]&lt;br /&gt;
One way to DIY a bidirectional charger is the use of a hybrid PV inverter with high voltage battery input. The advantage is that these are mass-produced (thus cheap) and conform to the various legal requirements. The inverter then handles power transfer and optionally smart functions such as zero grid import/export and we only need to supply the surrounding logic and electrics.&lt;br /&gt;
[[File:CCS bidirectional charger 2.jpg|thumb|Second version]]&lt;br /&gt;
This component list is just an example that has proven to work. It is preliminary and has not been tested with OEM cars yet, so it will likely be extended. As always, you are working with high voltage and especially grid voltage. Make sure you are qualified otherwise ask for help.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Item&lt;br /&gt;
!Approximate cost&lt;br /&gt;
!Link/Source&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|Sungrow SH5.0RT (or more powerful variant)&lt;br /&gt;
|850€&lt;br /&gt;
|[https://ger.sungrowpower.com/productDetail/905 Sungrow]&lt;br /&gt;
|Pick an inverter that is supported by [https://github.com/dalathegreat/Battery-Emulator/wiki#supported-inverters-list Battery Emulator]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Connector&lt;br /&gt;
|90€&lt;br /&gt;
|AliExpress&lt;br /&gt;
|Plain connector without cable&lt;br /&gt;
|-&lt;br /&gt;
|BeagleBone Green&lt;br /&gt;
|45€&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Seeed-Studio/102010027?qs=Hlcjo%2FO3pQ5AxSET1oW%252B%252Bg%3D%3D Mouser]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[FoccciCape]]&lt;br /&gt;
|250€&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=81 OI shop]&lt;br /&gt;
|RS485, CAN comm, 2x relay driver, CCS&lt;br /&gt;
|-&lt;br /&gt;
|Flexible cable, 4 or 5 pole&lt;br /&gt;
|4€/m&lt;br /&gt;
|Local hardware store&lt;br /&gt;
|Size according to charging current. 5x2.5mm² used for the 5 kW inverter&lt;br /&gt;
For DC+, DC-, PE, CP and PP. &lt;br /&gt;
PP can optionally be terminated in the plug, then you just need 4 poles&lt;br /&gt;
|-&lt;br /&gt;
|2 Fuse blocks&lt;br /&gt;
|6€ each&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Altech/002540101?qs=rrS6PyfT74edEoVfbnqxvg%3D%3D Mouser]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2 25A fuses&lt;br /&gt;
|8€ each&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Eaton-Electronics/EKM10-25-1P?qs=sGAEpiMZZMsIz3CjQ1xegZx2pdJYlyprSptsITKY%2FrCWMtgS7UD2BQ%3D%3D Mouser]&lt;br /&gt;
|400V AC rated from your local hardware store suffices as it&#039;s 2 in series&lt;br /&gt;
|-&lt;br /&gt;
|12V 2A DIN rail supply&lt;br /&gt;
|18€&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/MEAN-WELL/HDR-30-12?qs=pHY8AWQbqIN66yYHZne39A%3D%3D Mouser]&lt;br /&gt;
|In case relays are needed later on, otherwise 5V model makes things easier&lt;br /&gt;
|-&lt;br /&gt;
|12V to 5V step-down converter&lt;br /&gt;
|5€&lt;br /&gt;
|ebay or ali&lt;br /&gt;
|Needed if you chose 12V supply&lt;br /&gt;
|-&lt;br /&gt;
|DIN rail cabinet&lt;br /&gt;
|20€&lt;br /&gt;
|Local hardware store&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MC4 connector set&lt;br /&gt;
|5€&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5V to 400V step up converter&lt;br /&gt;
|10€&lt;br /&gt;
|[https://www.ebay.de/itm/357155751299 ebay]&lt;br /&gt;
|Only needed for OEM cars&lt;br /&gt;
|}&lt;br /&gt;
The CCS connectors + and - is connected to the inverter input via the fuse blocks. I did not deploy additional contactors but rely on the ones that are already in the car and the inverter. The PLC modems output transformer is connected to PE and CP via a capacitor and a resistor, more details in [https://github.com/uhi22/pyPLC/blob/master/doc/hardware.md uhis github].&lt;br /&gt;
&lt;br /&gt;
The BeagleBone is connected to the PLC modem and the inverter Ethernet port, so you will need a small network switch, also for the uplink to your home network. In addition the CAN outputs of the COMPCE cape connects to the inverters battery CAN (pins 3 and 4 on the Sungrow).&lt;br /&gt;
&lt;br /&gt;
More info on the software setup in the development threads linked above, uhis github and [https://github.com/jsphuebner/esp-egycounter Johannes&#039; github].&lt;br /&gt;
&lt;br /&gt;
This setup can also be used with CHAdeMO cars in which case the powerline modem can be omitted.&lt;br /&gt;
&lt;br /&gt;
== Compatible cars ==&lt;br /&gt;
This table lists cars where we successfully pulled power OUT of the cars battery via its quick charge port.&lt;br /&gt;
&lt;br /&gt;
More details on [https://github.com/jsphuebner/esp-egycounter forum thread].&lt;br /&gt;
&lt;br /&gt;
First column: Y - works flawlessly with no timeout, P - works partially with long timeout, N - works not at all or quick timeout&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
!Make&lt;br /&gt;
!Model&lt;br /&gt;
!Requirements&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|P&lt;br /&gt;
|Hyundai&lt;br /&gt;
|Ioniq Classic 28 kWh&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|Timeout after 10 minutes&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|MG&lt;br /&gt;
|MG4&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|No timeout&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Tesla&lt;br /&gt;
|Model Y&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|5 kW tested&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Tesla&lt;br /&gt;
|Model 3&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|BMS aborts charging session if more than 15Ah discharge have been detected&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|BYD&lt;br /&gt;
|Atto 3&lt;br /&gt;
|&lt;br /&gt;
|5 kW tested&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Polestar&lt;br /&gt;
|2&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Polestar&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|Tested with physical precharge voltage (johu in Sweden 2026-02-19)&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|VW&lt;br /&gt;
|ID.4&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 1 minute&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|BMW&lt;br /&gt;
|i3&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|model year 2022, https://openinverter.org/forum/viewtopic.php?p=89894#p89894&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|BMW&lt;br /&gt;
|IX4&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 5 minutes&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|Chevrolet&lt;br /&gt;
|Bolt&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 50 s&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|Kia&lt;br /&gt;
|EV6&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 10 s&lt;br /&gt;
|}&lt;br /&gt;
Some other car models have been tested by the guys of the Everest project, the results are available on github https://github.com/EVerest/logfiles&lt;br /&gt;
&lt;br /&gt;
== Collection of documents related to bidirectional charging ==&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
[[Category:CCS]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Bidirectional_Charging&amp;diff=6073</id>
		<title>Bidirectional Charging</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Bidirectional_Charging&amp;diff=6073"/>
		<updated>2026-03-01T17:07:38Z</updated>

		<summary type="html">&lt;p&gt;Johu: /* Practical implementation with parts list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bidirectional charging means, that the car is able to provide power to the outside world, via the charge port.&lt;br /&gt;
&lt;br /&gt;
Tags: bidi, inverse charging, vehicle-to-load, V2L, vehicle-to-home, V2H, vehicle-to-grid, V2G&lt;br /&gt;
&lt;br /&gt;
=== Forum discussions related to bidirectional charging: ===&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=5090 Bidirectional charger with PV Hybrid inverter and pyPLC&lt;br /&gt;
&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=3551 Drawing power out of CCS port (V2x, inverse charging, bidirectional CCS) - Collection of experiences with different cars&lt;br /&gt;
&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=6745 Energy Controller including CCS interface, FoccciCape, BeagleBone&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via AC ===&lt;br /&gt;
Some OEM on-board-chargers are able to create AC voltage. Todo: any reverse-engineering ongoing for such chargers? E.g. for Hyundai/Kia E-GMP?&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via CHAdeMO ===&lt;br /&gt;
The CHAdeMO standard was planned for supporting bidirectional power transfer from the beginning. Todo: Any open-source projects in this direction?&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via CCS ===&lt;br /&gt;
The CCS standard did not plan bidirectional power transfer. This means, depending on the implementation details of the cars charge controller, the car may or may not allow to draw energy out of the CCS port. Later versions of the CCS standard, ISO15118 (2020?), are defining special communication procedures for bidirectional power transfer. But it will take some time until this standard is widely adapted.&lt;br /&gt;
&lt;br /&gt;
In the open-source world, however, we do not need to wait until OEMs and charger manufacturers implement the latest ISO15118. We can support bidirectional charging even with the &amp;quot;old&amp;quot; DIN spec. The strategy is: Even if the car is requesting to be charged, it also accepts discharging, without terminating the charging session. It may terminate if the SOC falls below a certain, configurable level, to prevent an empty battery. The car announces the allowed charge current, and the same value, just in opposite direction, can be used as a discharge current limit, too.&lt;br /&gt;
&lt;br /&gt;
== Practical implementation with parts list ==&lt;br /&gt;
[[File:CCS bidirectional charger.jpg|thumb|First prototype]]&lt;br /&gt;
One way to DIY a bidirectional charger is the use of a hybrid PV inverter with high voltage battery input. The advantage is that these are mass-produced (thus cheap) and conform to the various legal requirements. The inverter then handles power transfer and optionally smart functions such as zero grid import/export and we only need to supply the surrounding logic and electrics.&lt;br /&gt;
[[File:CCS bidirectional charger 2.jpg|thumb|Second version]]&lt;br /&gt;
This component list is just an example that has proven to work. It is preliminary and has not been tested with OEM cars yet, so it will likely be extended. As always, you are working with high voltage and especially grid voltage. Make sure you are qualified otherwise ask for help.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Item&lt;br /&gt;
!Approximate cost&lt;br /&gt;
!Link/Source&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|Sungrow SH5.0RT (or more powerful variant)&lt;br /&gt;
|850€&lt;br /&gt;
|[https://ger.sungrowpower.com/productDetail/905 Sungrow]&lt;br /&gt;
|Pick an inverter that is supported by [https://github.com/dalathegreat/Battery-Emulator/wiki#supported-inverters-list Battery Emulator]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Connector&lt;br /&gt;
|90€&lt;br /&gt;
|AliExpress&lt;br /&gt;
|Plain connector without cable&lt;br /&gt;
|-&lt;br /&gt;
|BeagleBone Green&lt;br /&gt;
|45€&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Seeed-Studio/102010027?qs=Hlcjo%2FO3pQ5AxSET1oW%252B%252Bg%3D%3D Mouser]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[FoccciCape]]&lt;br /&gt;
|t.b.d.&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=81 OI shop]&lt;br /&gt;
|RS485, CAN comm, 2x relay driver, CCS&lt;br /&gt;
|-&lt;br /&gt;
|Flexible cable, 4 or 5 pole&lt;br /&gt;
|4€/m&lt;br /&gt;
|Local hardware store&lt;br /&gt;
|Size according to charging current. 5x2.5mm² used for the 5 kW inverter&lt;br /&gt;
For DC+, DC-, PE, CP and PP. &lt;br /&gt;
PP can optionally be terminated in the plug, then you just need 4 poles&lt;br /&gt;
|-&lt;br /&gt;
|2 Fuse blocks&lt;br /&gt;
|6€ each&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Altech/002540101?qs=rrS6PyfT74edEoVfbnqxvg%3D%3D Mouser]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2 25A fuses&lt;br /&gt;
|8€ each&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Eaton-Electronics/EKM10-25-1P?qs=sGAEpiMZZMsIz3CjQ1xegZx2pdJYlyprSptsITKY%2FrCWMtgS7UD2BQ%3D%3D Mouser]&lt;br /&gt;
|400V AC rated from your local hardware store suffices as it&#039;s 2 in series&lt;br /&gt;
|-&lt;br /&gt;
|12V 2A DIN rail supply&lt;br /&gt;
|18€&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/MEAN-WELL/HDR-30-12?qs=pHY8AWQbqIN66yYHZne39A%3D%3D Mouser]&lt;br /&gt;
|In case relays are needed later on, otherwise 5V model makes things easier&lt;br /&gt;
|-&lt;br /&gt;
|12V to 5V step-down converter&lt;br /&gt;
|5€&lt;br /&gt;
|ebay or ali&lt;br /&gt;
|Needed if you chose 12V supply&lt;br /&gt;
|-&lt;br /&gt;
|DIN rail cabinet&lt;br /&gt;
|20€&lt;br /&gt;
|Local hardware store&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MC4 connector set&lt;br /&gt;
|5€&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5V to 400V step up converter&lt;br /&gt;
|10€&lt;br /&gt;
|[https://www.ebay.de/itm/357155751299 ebay]&lt;br /&gt;
|Only needed for OEM cars&lt;br /&gt;
|}&lt;br /&gt;
The CCS connectors + and - is connected to the inverter input via the fuse blocks. I did not deploy additional contactors but rely on the ones that are already in the car and the inverter. The PLC modems output transformer is connected to PE and CP via a capacitor and a resistor, more details in [https://github.com/uhi22/pyPLC/blob/master/doc/hardware.md uhis github].&lt;br /&gt;
&lt;br /&gt;
The BeagleBone is connected to the PLC modem and the inverter Ethernet port, so you will need a small network switch, also for the uplink to your home network. In addition the CAN outputs of the COMPCE cape connects to the inverters battery CAN (pins 3 and 4 on the Sungrow).&lt;br /&gt;
&lt;br /&gt;
More info on the software setup in the development threads linked above, uhis github and [https://github.com/jsphuebner/esp-egycounter Johannes&#039; github].&lt;br /&gt;
&lt;br /&gt;
This setup can also be used with CHAdeMO cars in which case the powerline modem can be omitted.&lt;br /&gt;
&lt;br /&gt;
== Compatible cars ==&lt;br /&gt;
This table lists cars where we successfully pulled power OUT of the cars battery via its quick charge port.&lt;br /&gt;
&lt;br /&gt;
More details on [https://github.com/jsphuebner/esp-egycounter forum thread].&lt;br /&gt;
&lt;br /&gt;
First column: Y - works flawlessly with no timeout, P - works partially with long timeout, N - works not at all or quick timeout&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
!Make&lt;br /&gt;
!Model&lt;br /&gt;
!Requirements&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|P&lt;br /&gt;
|Hyundai&lt;br /&gt;
|Ioniq Classic 28 kWh&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|Timeout after 10 minutes&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|MG&lt;br /&gt;
|MG4&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|No timeout&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Tesla&lt;br /&gt;
|Model Y&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|5 kW tested&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Tesla&lt;br /&gt;
|Model 3&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|BMS aborts charging session if more than 15Ah discharge have been detected&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|BYD&lt;br /&gt;
|Atto 3&lt;br /&gt;
|&lt;br /&gt;
|5 kW tested&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Polestar&lt;br /&gt;
|2&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Polestar&lt;br /&gt;
|4&lt;br /&gt;
|&lt;br /&gt;
|Tested with physical precharge voltage (johu in Sweden 2026-02-19)&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|VW&lt;br /&gt;
|ID.4&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 1 minute&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|BMW&lt;br /&gt;
|i3&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|model year 2022, https://openinverter.org/forum/viewtopic.php?p=89894#p89894&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|BMW&lt;br /&gt;
|IX4&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 5 minutes&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|Chevrolet&lt;br /&gt;
|Bolt&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 50 s&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|Kia&lt;br /&gt;
|EV6&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 10 s&lt;br /&gt;
|}&lt;br /&gt;
Some other car models have been tested by the guys of the Everest project, the results are available on github https://github.com/EVerest/logfiles&lt;br /&gt;
&lt;br /&gt;
== Collection of documents related to bidirectional charging ==&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
[[Category:CCS]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=FoccciCape&amp;diff=6041</id>
		<title>FoccciCape</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=FoccciCape&amp;diff=6041"/>
		<updated>2026-02-01T09:51:34Z</updated>

		<summary type="html">&lt;p&gt;Johu: LED usage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:CCS]] [[Category:Rapid Charging]]&lt;br /&gt;
[[Category:Charger]]&lt;br /&gt;
[[Category:OpenInverter]]&lt;br /&gt;
[[File:FoccciCape.jpg|thumb|FoccciCape]]&lt;br /&gt;
This is an add-on board for the popular BeagleBone single board computer. It is mainly a communication breakout board but features a very special form of communication: CCS! So with it you can get your EV to close its charge port contactors. At the very least you can then charge your EV with your hybrid PV inverter and if the manufacturer doesn&#039;t actively inhibit it you can also draw energy from your vehicles battery to supply your house or even selling it back to the grid.&lt;br /&gt;
&lt;br /&gt;
In addition it has enough communication power to talk to all sorts of PV inverters, BMSes etc. to tie it all together an fully control the flow of energy from a single point.&lt;br /&gt;
&lt;br /&gt;
== Connections ==&lt;br /&gt;
The board has a 12-way Phoenix connector or can be equipped with any other 3.81 mm pin pitch terminal. Together with the BeagleBone it offers the following interfaces:&lt;br /&gt;
&lt;br /&gt;
* 1x RS485&lt;br /&gt;
* 2x CAN&lt;br /&gt;
* 1x CCS PowerLine communication and PWM signalling&lt;br /&gt;
* 2x open drain relay outputs&lt;br /&gt;
* 1x status LED output combined with button input&lt;br /&gt;
* 1x Ethernet (on BeagleBone)&lt;br /&gt;
* 1x USB (on BeagleBone)&lt;br /&gt;
* 1x HDMI (only BeagleBone Black)&lt;br /&gt;
* 1x Grove I2C (only BeagleBone Green)&lt;br /&gt;
* 1x Grove UART (only BeagleBone Green)&lt;br /&gt;
&lt;br /&gt;
=== Part numbers and links ===&lt;br /&gt;
&lt;br /&gt;
* Phoenix 12-way connector [https://www.mouser.de/ProductDetail/Phoenix-Contact/1803523?qs=CXo1rOUe%2FWsOGk2v2GZlUQ%3D%3D 1803523]&lt;br /&gt;
* Phoenix 12-way screw terminal [https://www.mouser.de/ProductDetail/Phoenix-Contact/1803675?qs=WWq3Ki8dym4RD77JGGq8bA%3D%3D 1803675]&lt;br /&gt;
* BeagleBone Green [https://www.mouser.de/ProductDetail/Seeed-Studio/102010027?qs=Hlcjo%2FO3pQ5AxSET1oW%252B%252Bg%3D%3D 102010027]&lt;br /&gt;
* DIN rail [https://www.reichelt.de/de/de/shop/produkt/gehaeuse_fuer_beaglbone_black_stahl_schwarz-315121 enclosure] and [https://www.reichelt.de/de/de/shop/produkt/gehaeuse_fuer_beaglbone_black_stahl_schwarz-315121 clip]&lt;br /&gt;
&lt;br /&gt;
=== Pin Mapping ===&lt;br /&gt;
The cape uses only pins on P9 as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Pin&lt;br /&gt;
!Function&lt;br /&gt;
|-&lt;br /&gt;
|P9.3/4&lt;br /&gt;
|3.3V&lt;br /&gt;
|-&lt;br /&gt;
|P9.5/6&lt;br /&gt;
|5V&lt;br /&gt;
|-&lt;br /&gt;
|P9.11&lt;br /&gt;
|UART4_RX&lt;br /&gt;
|-&lt;br /&gt;
|P9.13&lt;br /&gt;
|UART4_TX&lt;br /&gt;
|-&lt;br /&gt;
|P9.14&lt;br /&gt;
|RELAY1&lt;br /&gt;
|-&lt;br /&gt;
|P9.15&lt;br /&gt;
|QCA Interrupt&lt;br /&gt;
|-&lt;br /&gt;
|P9.16&lt;br /&gt;
|RELAY2&lt;br /&gt;
|-&lt;br /&gt;
|P9.17&lt;br /&gt;
|QCA_SPI_CS&lt;br /&gt;
|-&lt;br /&gt;
|P9.18&lt;br /&gt;
|QCA_SPI_MOSI&lt;br /&gt;
|-&lt;br /&gt;
|P9.19&lt;br /&gt;
|CAN0_RX&lt;br /&gt;
|-&lt;br /&gt;
|P9.20&lt;br /&gt;
|CAN0_TX&lt;br /&gt;
|-&lt;br /&gt;
|P9.21&lt;br /&gt;
|QCA_SPI_MISO&lt;br /&gt;
|-&lt;br /&gt;
|P9.22&lt;br /&gt;
|QCA_SPI_CLK&lt;br /&gt;
|-&lt;br /&gt;
|P9.24&lt;br /&gt;
|CAN1_RX&lt;br /&gt;
|-&lt;br /&gt;
|P9.26&lt;br /&gt;
|CAN1_TX&lt;br /&gt;
|-&lt;br /&gt;
|P9.28&lt;br /&gt;
|LED_OUT&lt;br /&gt;
|-&lt;br /&gt;
|P9.30&lt;br /&gt;
|BUTTON_IN&lt;br /&gt;
|-&lt;br /&gt;
|P9.39&lt;br /&gt;
|CP_SENSE&lt;br /&gt;
|-&lt;br /&gt;
|P9.42&lt;br /&gt;
|CP_PWM&lt;br /&gt;
|-&lt;br /&gt;
|P9.43-46&lt;br /&gt;
|GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Using the LED/Button pin ===&lt;br /&gt;
The script ccscontrol.py uses this pin to indicate status and also reads it back so that the user can stop the CCS session using a button. The pin outputs 3.3V via a 270 Ohm resistor that can be used directly to drive an LED. When the LED is shorted via a button this can be read back and is used as a stop request.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
[[File:StorageSystemConfigurationScreen.png|thumb|Storage System Configuration Screen]]&lt;br /&gt;
The software is comprised of a bunch of [https://github.com/jsphuebner/esp-egycounter/tree/main/battery-control python scripts] that exchange information via MQTT. The following modules are available:&lt;br /&gt;
&lt;br /&gt;
* Communication via Modbus using [https://github.com/tjhowse/modbus4mqtt Modbus4Mqtt] &lt;br /&gt;
* Communication with SoyoSource inverters&lt;br /&gt;
* Simulation of BYD battery via CAN&lt;br /&gt;
* Communication with Eltek Flatpack chargers&lt;br /&gt;
* Reading status from Keba P20 EVSE&lt;br /&gt;
* Communication with Manson switch mode power supply&lt;br /&gt;
* Communication with openinverter [[16-cell BMS]]&lt;br /&gt;
* Retrieval of spot market prices via awattar or Tibber API&lt;br /&gt;
* Data logger&lt;br /&gt;
* Submission of raw meter data to Tibber&lt;br /&gt;
* CCS communication via [[PyPLC]]&lt;br /&gt;
* Energy flow controller (Zero Grid Exchange, charge on low spot market price, discharge only on high spot market price)&lt;br /&gt;
* Web Interface for configuration and monitoring&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
This section is only relevant if you&#039;re setting up the BeagleBone yourself. If you buy a preprogrammed one from the shop (not yet available) this has already been done for you. We are also working on an image file that is already set up.&lt;br /&gt;
&lt;br /&gt;
The howto for compiling the QCA kernel module and setting it up can be found on the [https://openinverter.org/forum/viewtopic.php?p=87295#p87295 forum].&lt;br /&gt;
&lt;br /&gt;
Next you need to flash the SPI flash on the cape with QCA firmware, this is also described on the [https://openinverter.org/forum/viewtopic.php?p=87710#p87710 forum].&lt;br /&gt;
&lt;br /&gt;
Finally you enable all relevant peripherals in /boot/uEnv.txt:&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
uboot_overlay_addr0=/lib/firmware/BB-CAN0-00A0.dtbo&lt;br /&gt;
uboot_overlay_addr1=/lib/firmware/BB-CAN1-00A0.dtbo&lt;br /&gt;
uboot_overlay_addr2=/lib/firmware/BB-SPI0-QCASPI-00A0.dtbo&lt;br /&gt;
uboot_overlay_addr3=/lib/firmware/BB-UART4-00A0.dtbo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To enable both CAN interfaces at boot you configure systemd-networkd by creating one file per interface, /etc/systemd/network/80-can0.network&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Match]&lt;br /&gt;
Name=can0&lt;br /&gt;
&lt;br /&gt;
[CAN]&lt;br /&gt;
BitRate=500K&lt;br /&gt;
RestartSec=100ms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;And likewise 81-can1.network (Name=can1). Of course you need to pick the baud rate that matches the devices you connect to the port, but 500k is usually your best bet.&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=FoccciCape&amp;diff=6040</id>
		<title>FoccciCape</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=FoccciCape&amp;diff=6040"/>
		<updated>2026-02-01T09:46:23Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added pin mapping&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:CCS]] [[Category:Rapid Charging]]&lt;br /&gt;
[[Category:Charger]]&lt;br /&gt;
[[Category:OpenInverter]]&lt;br /&gt;
[[File:FoccciCape.jpg|thumb|FoccciCape]]&lt;br /&gt;
This is an add-on board for the popular BeagleBone single board computer. It is mainly a communication breakout board but features a very special form of communication: CCS! So with it you can get your EV to close its charge port contactors. At the very least you can then charge your EV with your hybrid PV inverter and if the manufacturer doesn&#039;t actively inhibit it you can also draw energy from your vehicles battery to supply your house or even selling it back to the grid.&lt;br /&gt;
&lt;br /&gt;
In addition it has enough communication power to talk to all sorts of PV inverters, BMSes etc. to tie it all together an fully control the flow of energy from a single point.&lt;br /&gt;
&lt;br /&gt;
== Connections ==&lt;br /&gt;
The board has a 12-way Phoenix connector or can be equipped with any other 3.81 mm pin pitch terminal. Together with the BeagleBone it offers the following interfaces:&lt;br /&gt;
&lt;br /&gt;
* 1x RS485&lt;br /&gt;
* 2x CAN&lt;br /&gt;
* 1x CCS PowerLine communication and PWM signalling&lt;br /&gt;
* 2x open drain relay outputs&lt;br /&gt;
* 1x status LED output combined with button input&lt;br /&gt;
* 1x Ethernet (on BeagleBone)&lt;br /&gt;
* 1x USB (on BeagleBone)&lt;br /&gt;
* 1x HDMI (only BeagleBone Black)&lt;br /&gt;
* 1x Grove I2C (only BeagleBone Green)&lt;br /&gt;
* 1x Grove UART (only BeagleBone Green)&lt;br /&gt;
&lt;br /&gt;
=== Part numbers and links ===&lt;br /&gt;
&lt;br /&gt;
* Phoenix 12-way connector [https://www.mouser.de/ProductDetail/Phoenix-Contact/1803523?qs=CXo1rOUe%2FWsOGk2v2GZlUQ%3D%3D 1803523]&lt;br /&gt;
* Phoenix 12-way screw terminal [https://www.mouser.de/ProductDetail/Phoenix-Contact/1803675?qs=WWq3Ki8dym4RD77JGGq8bA%3D%3D 1803675]&lt;br /&gt;
* BeagleBone Green [https://www.mouser.de/ProductDetail/Seeed-Studio/102010027?qs=Hlcjo%2FO3pQ5AxSET1oW%252B%252Bg%3D%3D 102010027]&lt;br /&gt;
* DIN rail [https://www.reichelt.de/de/de/shop/produkt/gehaeuse_fuer_beaglbone_black_stahl_schwarz-315121 enclosure] and [https://www.reichelt.de/de/de/shop/produkt/gehaeuse_fuer_beaglbone_black_stahl_schwarz-315121 clip]&lt;br /&gt;
&lt;br /&gt;
=== Pin Mapping ===&lt;br /&gt;
The cape uses only pins on P9 as follows&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Pin&lt;br /&gt;
!Function&lt;br /&gt;
|-&lt;br /&gt;
|P9.3/4&lt;br /&gt;
|3.3V&lt;br /&gt;
|-&lt;br /&gt;
|P9.5/6&lt;br /&gt;
|5V&lt;br /&gt;
|-&lt;br /&gt;
|P9.11&lt;br /&gt;
|UART4_RX&lt;br /&gt;
|-&lt;br /&gt;
|P9.13&lt;br /&gt;
|UART4_TX&lt;br /&gt;
|-&lt;br /&gt;
|P9.14&lt;br /&gt;
|RELAY1&lt;br /&gt;
|-&lt;br /&gt;
|P9.15&lt;br /&gt;
|QCA Interrupt&lt;br /&gt;
|-&lt;br /&gt;
|P9.16&lt;br /&gt;
|RELAY2&lt;br /&gt;
|-&lt;br /&gt;
|P9.17&lt;br /&gt;
|QCA_SPI_CS&lt;br /&gt;
|-&lt;br /&gt;
|P9.18&lt;br /&gt;
|QCA_SPI_MOSI&lt;br /&gt;
|-&lt;br /&gt;
|P9.19&lt;br /&gt;
|CAN0_RX&lt;br /&gt;
|-&lt;br /&gt;
|P9.20&lt;br /&gt;
|CAN0_TX&lt;br /&gt;
|-&lt;br /&gt;
|P9.21&lt;br /&gt;
|QCA_SPI_MISO&lt;br /&gt;
|-&lt;br /&gt;
|P9.22&lt;br /&gt;
|QCA_SPI_CLK&lt;br /&gt;
|-&lt;br /&gt;
|P9.24&lt;br /&gt;
|CAN1_RX&lt;br /&gt;
|-&lt;br /&gt;
|P9.26&lt;br /&gt;
|CAN1_TX&lt;br /&gt;
|-&lt;br /&gt;
|P9.28&lt;br /&gt;
|LED_OUT&lt;br /&gt;
|-&lt;br /&gt;
|P9.30&lt;br /&gt;
|BUTTON_IN&lt;br /&gt;
|-&lt;br /&gt;
|P9.39&lt;br /&gt;
|CP_SENSE&lt;br /&gt;
|-&lt;br /&gt;
|P9.42&lt;br /&gt;
|CP_PWM&lt;br /&gt;
|-&lt;br /&gt;
|P9.43-46&lt;br /&gt;
|GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
[[File:StorageSystemConfigurationScreen.png|thumb|Storage System Configuration Screen]]&lt;br /&gt;
The software is comprised of a bunch of [https://github.com/jsphuebner/esp-egycounter/tree/main/battery-control python scripts] that exchange information via MQTT. The following modules are available:&lt;br /&gt;
&lt;br /&gt;
* Communication via Modbus using [https://github.com/tjhowse/modbus4mqtt Modbus4Mqtt] &lt;br /&gt;
* Communication with SoyoSource inverters&lt;br /&gt;
* Simulation of BYD battery via CAN&lt;br /&gt;
* Communication with Eltek Flatpack chargers&lt;br /&gt;
* Reading status from Keba P20 EVSE&lt;br /&gt;
* Communication with Manson switch mode power supply&lt;br /&gt;
* Communication with openinverter [[16-cell BMS]]&lt;br /&gt;
* Retrieval of spot market prices via awattar or Tibber API&lt;br /&gt;
* Data logger&lt;br /&gt;
* Submission of raw meter data to Tibber&lt;br /&gt;
* CCS communication via [[PyPLC]]&lt;br /&gt;
* Energy flow controller (Zero Grid Exchange, charge on low spot market price, discharge only on high spot market price)&lt;br /&gt;
* Web Interface for configuration and monitoring&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
This section is only relevant if you&#039;re setting up the BeagleBone yourself. If you buy a preprogrammed one from the shop (not yet available) this has already been done for you. We are also working on an image file that is already set up.&lt;br /&gt;
&lt;br /&gt;
The howto for compiling the QCA kernel module and setting it up can be found on the [https://openinverter.org/forum/viewtopic.php?p=87295#p87295 forum].&lt;br /&gt;
&lt;br /&gt;
Next you need to flash the SPI flash on the cape with QCA firmware, this is also described on the [https://openinverter.org/forum/viewtopic.php?p=87710#p87710 forum].&lt;br /&gt;
&lt;br /&gt;
Finally you enable all relevant peripherals in /boot/uEnv.txt:&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
uboot_overlay_addr0=/lib/firmware/BB-CAN0-00A0.dtbo&lt;br /&gt;
uboot_overlay_addr1=/lib/firmware/BB-CAN1-00A0.dtbo&lt;br /&gt;
uboot_overlay_addr2=/lib/firmware/BB-SPI0-QCASPI-00A0.dtbo&lt;br /&gt;
uboot_overlay_addr3=/lib/firmware/BB-UART4-00A0.dtbo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To enable both CAN interfaces at boot you configure systemd-networkd by creating one file per interface, /etc/systemd/network/80-can0.network&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Match]&lt;br /&gt;
Name=can0&lt;br /&gt;
&lt;br /&gt;
[CAN]&lt;br /&gt;
BitRate=500K&lt;br /&gt;
RestartSec=100ms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;And likewise 81-can1.network (Name=can1). Of course you need to pick the baud rate that matches the devices you connect to the port, but 500k is usually your best bet.&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=CAN_communication&amp;diff=6037</id>
		<title>CAN communication</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=CAN_communication&amp;diff=6037"/>
		<updated>2026-01-19T22:25:08Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added start/stop commands&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Revision 2 main board supports CAN communication. The CAN bus can be used for configuration and for obtaining values like voltages, input states etc. The CAN messages are configurable and can be adjusted to be compatible with existing equipment.&lt;br /&gt;
&lt;br /&gt;
Since firmware 3.75 throttle and digital inputs can be controlled via CAN.&lt;br /&gt;
&lt;br /&gt;
After firmware 5.27.R throttle, digital inputs, cruise speed and regen preset &#039;&#039;&#039;are no longer freely mappable due to safety concerns,&#039;&#039;&#039; see below.&lt;br /&gt;
&lt;br /&gt;
Be aware that all CAN mapping uses decimal numbers. So COB ID 0x123 must be entered as &#039;&#039;&#039;291&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Inverter control via CAN - new! ==&lt;br /&gt;
As discussed here&amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=3743&amp;amp;start=50&amp;lt;/ref&amp;gt; the CAN communication was redesigned to improve operational safety. This will become effective with the first official release after 5.27.R&lt;br /&gt;
&lt;br /&gt;
Now there is a fixed mapping for pot, pot2, canio, cruisespeed and regenpreset along with some alive counters and a CRC.&lt;br /&gt;
&lt;br /&gt;
The COB Id is still freely configurable and defaults to 0x3F. It is advised to use a low ID value as low IDs have priority on the bus over high Ids.&lt;br /&gt;
&lt;br /&gt;
The mapping is as follows [startbit, endbit]:&lt;br /&gt;
&lt;br /&gt;
* pot[0:11]&lt;br /&gt;
* pot2[12:23]&lt;br /&gt;
* canio[24:29]&lt;br /&gt;
** cruise[24]&lt;br /&gt;
** start[25]&lt;br /&gt;
** brake[26]&lt;br /&gt;
** forward[27]&lt;br /&gt;
** reverse[28]&lt;br /&gt;
** bms[29]&lt;br /&gt;
* canrun1[30:31]&lt;br /&gt;
* cruisespeed[32:45]&lt;br /&gt;
* canrun2[46:47]&lt;br /&gt;
* regenpreset[48:55]&lt;br /&gt;
* cancrc[56:63]&lt;br /&gt;
&lt;br /&gt;
pot is the value of the first throttle channel and its range is configured with potmin/potmax as before. pot2 is the value of the second throttle channel, its range configured via pot2min/pot2max &#039;&#039;&#039;and we strongly recommend to use dual channel throttle pedals&#039;&#039;&#039; and setting potmode to CanDual (or DualChannel if you choose to connect the throttle directly to the inverter). We also recommand to set up your throttle in a way that doesn&#039;t use the full range from 0-4095 but leaves at least 500 digit at either end (so 500-3600) to be able to detect cable issues between throttle and VCU (short to Vcc, loss of GND and other wire breaks)&lt;br /&gt;
&lt;br /&gt;
cruisespeed is the setpoint for the speed control loop in rpm with a maximum value of 16383 rpm. Only applied if the cruise and forward bit is also set and the brake bit is reset.&lt;br /&gt;
&lt;br /&gt;
regenpreset is a value from 0-100% that controls how much of your configured regen (offthrotregen or brakeregen) is actually applied&lt;br /&gt;
&lt;br /&gt;
canrun1/2 are simple message counters that count from 0-3 and indicate that the message producer doesn&#039;t just send the same, stale, content over and over again.&lt;br /&gt;
&lt;br /&gt;
cancrc is an 8-bit CRC, the lowest byte of the STM32 integrated CRC32 generator. It spans over all 8 bytes where the crc byte is set to 0. If you&#039;re on a non-STM32 platform you can use this C-implementation&amp;lt;ref&amp;gt;https://github.com/jsphuebner/esp32-web-interface/blob/can-backend/src/oi_can.cpp#L191&amp;lt;/ref&amp;gt;. CRC checking is optional to remain compatible with &amp;quot;dumb&amp;quot; CAN converters. It can be disabled with parameter controlcheck=CounterOnly.&lt;br /&gt;
&lt;br /&gt;
== Controlling throttle via CAN - deprecated! ==&lt;br /&gt;
&#039;&#039;&#039;This no longer works starting v5.32.R! See above!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you want to send the throttle and regen magnitude commands via CAN rather then via analog inputs you have to set &amp;quot;potmode&amp;quot; to &amp;quot;CAN&amp;quot; (=2). Next you have to map a CAN message to pot and optionally pot2. So say you have a digital throttle that sends values from 0 to 1000 for 0 to 100% travel on CAN-Id 100 in the first two bytes.&lt;br /&gt;
* Configure potmin=0 and potmax=1000&lt;br /&gt;
* Map CAN message to pot: can rx pot 100 0 16 1&lt;br /&gt;
CAN messages must be received every 500ms, otherwise throttle times out and is set to 0.&lt;br /&gt;
&lt;br /&gt;
== Controlling Digital IO via CAN - deprecated ==&lt;br /&gt;
&#039;&#039;&#039;This no longer works starting v5.32.R! See above!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
6 signals, namely cruise, start, brake, forward, backward and bms can be controlled via CAN. The CAN message is ORed to the physical inputs so you can have mixed signals also. Digital CAN IO doesn&#039;t need to be explicitely configured, it works as soon as you map a CAN message to &amp;quot;canio&amp;quot;. &amp;quot;canio&amp;quot; is bit-encoded:&lt;br /&gt;
* Bit 0: cruise&lt;br /&gt;
* Bit 1: start&lt;br /&gt;
* Bit 2: brake&lt;br /&gt;
* Bit 3: forward&lt;br /&gt;
* Bit 4: reverse&lt;br /&gt;
* Bit 5: bms&lt;br /&gt;
So say you have a BMS that transmits an over/under voltage bit on CAN Id 200, 2nd data bit&lt;br /&gt;
 can rx canio 200 2 1 1024&lt;br /&gt;
Note the 1024x gain that shifts the bit into the correct position (5 fraction bits plus 5th data bit). In this case all other IOs remain traditional, only BMS is controlled via CAN. Note that you cannot map multiple CAN messages onto &amp;quot;canio&amp;quot; as they would overwrite each other.&lt;br /&gt;
&lt;br /&gt;
If you have a managed to mangle all 6 bits into one message, say CAN Id 300, first 6 bits the mapping is done like so&lt;br /&gt;
 can rx canio 300 0 6 32&lt;br /&gt;
The same timeout mechanism is used as for throttle control, so after 500ms with no message the CAN-mapped inputs are assumed off. Traditional inputs remain unaffected.&lt;br /&gt;
&lt;br /&gt;
== Setting and reading parameters via SDO ==&lt;br /&gt;
The abbreviation SDO is taken from the CANOpen protocol. It assigns a certain meaning to the 8 data bits of a CAN frame.&lt;br /&gt;
&lt;br /&gt;
Note that SDO semantics (cmd) were changed since version 5.20.R of the inverter firmware. Old cmd value is in ()&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Purpose&lt;br /&gt;
!CAN-Id&lt;br /&gt;
!Byte 1 (Cmd)&lt;br /&gt;
!Bytes 2-3 (Index)&lt;br /&gt;
!Byte 4 (Subindex)&lt;br /&gt;
!Bytes 5-8 (Data)&lt;br /&gt;
|-&lt;br /&gt;
|Set Value&lt;br /&gt;
|0x601&lt;br /&gt;
|0x23 (0x40)&lt;br /&gt;
|0x2000&lt;br /&gt;
|Value Index&lt;br /&gt;
|Value x 32&lt;br /&gt;
|-&lt;br /&gt;
|Set Value Reply&lt;br /&gt;
|0x581&lt;br /&gt;
|0x60 (0x23)&lt;br /&gt;
|0x2000&lt;br /&gt;
|Value Index&lt;br /&gt;
|Value x 32&lt;br /&gt;
|-&lt;br /&gt;
|Get Value&lt;br /&gt;
|0x601&lt;br /&gt;
|0x40 (0x22)&lt;br /&gt;
|0x2000&lt;br /&gt;
|Value Index&lt;br /&gt;
|don&#039;t care&lt;br /&gt;
|-&lt;br /&gt;
|Get Value Reply&lt;br /&gt;
|0x581&lt;br /&gt;
|0x43&lt;br /&gt;
|0x2000&lt;br /&gt;
|Value Index&lt;br /&gt;
|Value x 32&lt;br /&gt;
|-&lt;br /&gt;
|Abort - invalid index&lt;br /&gt;
|0x581&lt;br /&gt;
|0x80&lt;br /&gt;
|Index of request&lt;br /&gt;
|Value Index&lt;br /&gt;
|Abort Code = 0x06020000&lt;br /&gt;
|-&lt;br /&gt;
|Abort - value out of range&lt;br /&gt;
|0x581&lt;br /&gt;
|0x80&lt;br /&gt;
|Index of request&lt;br /&gt;
|Value Index&lt;br /&gt;
|Abort Code = 0x06090030&lt;br /&gt;
|-&lt;br /&gt;
|Set Param&lt;br /&gt;
|0x601&lt;br /&gt;
|0x23 (0x40)&lt;br /&gt;
|0x21xx xx=MSB UID&lt;br /&gt;
|Param UID LSB&lt;br /&gt;
|Value x 32&lt;br /&gt;
|-&lt;br /&gt;
|Set Param Reply&lt;br /&gt;
|0x581&lt;br /&gt;
|0x60 (0x23)&lt;br /&gt;
|0x21xx xx=MSB UID&lt;br /&gt;
|Param UID LSB&lt;br /&gt;
|Value x 32&lt;br /&gt;
|-&lt;br /&gt;
|Get Param&lt;br /&gt;
|0x601&lt;br /&gt;
|0x40 (0x22)&lt;br /&gt;
|0x21xx xx=MSB UID&lt;br /&gt;
|Param UID LSB&lt;br /&gt;
|don&#039;t care&lt;br /&gt;
|-&lt;br /&gt;
|Get Param Reply&lt;br /&gt;
|0x581&lt;br /&gt;
|0x43&lt;br /&gt;
|0x21xx xx=MSB UID&lt;br /&gt;
|Param UID LSB&lt;br /&gt;
|Value x 32&lt;br /&gt;
|}&lt;br /&gt;
The value index must be determined by counting the output of the list command. E.g. &amp;quot;boost&amp;quot; at the very top has index 0, potnom has index 77. The indexes can change over firmware versions as new parameters are added somewhere in between.&lt;br /&gt;
&lt;br /&gt;
The Get/Set Param commands use the unique parameter identifier assigned to each savable parameter. These do not vary between firmware versions. Only savable parameters not spot values can be read and written by these commands.&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&amp;lt;code&amp;gt;0x601 # 0x40 0x00 0x20 0x00 0 0 0 0&amp;lt;/code&amp;gt;   Get value of &amp;quot;boost&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x601 # 0x23 0x00 0x20 0x01 0x80 0x0C 0 0&amp;lt;/code&amp;gt; Set &amp;quot;fweak&amp;quot; to 100Hz (0xC80=3200 because scaled by 32)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x601 # 0x23 0xAA 0x31 0x01 0x08 0x10 1 0&amp;lt;/code&amp;gt; Map value of fweak to COB ID 0x1AA, starting at bit 8, stretching 16 bits, scaled by 1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x601 # 0x40 0x10 0x20 0x0D 0 0 0 0&amp;lt;/code&amp;gt;   Get value of &amp;quot;pwmfrq&amp;quot; on any firmware version or build (0x0D = 13 from the PARAM_ENTRY() for &amp;quot;pwmfrq&amp;quot; in param_prj.h)&lt;br /&gt;
&lt;br /&gt;
== Mapping values to arbitrary CAN messages ==&lt;br /&gt;
Values can be mapped into a certain bit range of the 64 payload bits of a CAN message. They can either be read from the message or sent via a message. To do so enter&lt;br /&gt;
 can tx udc 123 0 16 10&lt;br /&gt;
This maps the value of udc to a CAN message with id 123 bits 0..15 (start at bit 0, span over 16 bits) with a gain of 10.&lt;br /&gt;
 can tx din_forward 123 24 1 1&lt;br /&gt;
would map the pin state of the forward input to bit 24 of CAN message with id 123.&lt;br /&gt;
&lt;br /&gt;
If you want to clear all messages, type&lt;br /&gt;
 can clear&lt;br /&gt;
If you want to remove only a specific signal (starting version 4.18.R) type&lt;br /&gt;
 can del &amp;lt;name&amp;gt;&lt;br /&gt;
To save your can map simply type &amp;quot;save&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[https://openinverter.org/forum/viewtopic.php?t=1468 idcmin, idcmax example]&lt;br /&gt;
&lt;br /&gt;
=== Mapping Values through the web interface ===&lt;br /&gt;
Value can also be mapped through the web interface.&lt;br /&gt;
&lt;br /&gt;
[[File:Spot values.png|alt=Spot values|thumb|Spot values]]&lt;br /&gt;
&lt;br /&gt;
* CAN Id&lt;br /&gt;
** This is the Can Id assigned to the message.  Remember, all CAN mapping uses decimal numbers. So ID 0x123 must be entered as &#039;&#039;&#039;291.&#039;&#039;&#039;  Here is a converter to help: https://www.rapidtables.com/convert/number/hex-to-decimal.html&lt;br /&gt;
* Position&lt;br /&gt;
** This is where in the 64 bit length of the CAN message the data should start.&lt;br /&gt;
* Bits&lt;br /&gt;
** How many bits are assigned to send the data. Negative numbers will yield big endian mapping&lt;br /&gt;
* Gain&lt;br /&gt;
** This applies the internal scaling.  Pre FW v5.27 this is fixed point (integers only).  FW v5.27 and later is floating point (decimals allowed).&lt;br /&gt;
** Your gain needs to be opposite of the receiving end&#039;s scaling.  For example, the Speedhut EV gauges list a scaling of 0.1, meaning they apply that to incoming messages, so you need to transmit with a gain of 10.&lt;br /&gt;
* Map to CAN&lt;br /&gt;
** TX to tell the control board to transmit the data onto the CANBUS&lt;br /&gt;
** RX to tell the control board to expect to receive this data from the CANBUS&lt;br /&gt;
&lt;br /&gt;
=== Mapping values via SDO ===&lt;br /&gt;
Special SDO objects also allow editing the CAN map. See [[CAN communication#Examples|examples]] above on how to send an SDO request.&lt;br /&gt;
&lt;br /&gt;
Adding a mapping requires a sequence of 3 SDO requests:&lt;br /&gt;
&lt;br /&gt;
* Index 0x3000 - Add transmit (TX) mapping&lt;br /&gt;
** Subindex 0: CAN Id, data contains 11 or 29-bit CAN Id&lt;br /&gt;
** Subindex 1: Parameter Id in bytes 0 and 1, bit position in byte 2, bit length in byte 3&lt;br /&gt;
** Subindex 2: Gain * 1000 in bytes 0-2, offset in byte 3&lt;br /&gt;
* Index 0x3001 - Add receive (RX) mapping&lt;br /&gt;
** Same subindexes as above&lt;br /&gt;
&lt;br /&gt;
For reading the entire CAN map subsequent reads to indexes 0x3100 (TX) or 0x3180 (RX) must be performed. The indexes and subindexes must be incremented between the reads until an SDO abort is received. Each CAN message maps to its own SDO index and the data items within the message map to sub indexes like so&lt;br /&gt;
&lt;br /&gt;
* Index 0x3100 - first transmit (TX) message&lt;br /&gt;
** Subindex 0: CAN Id&lt;br /&gt;
** Subindex 1: First parameter Id, position and length (see add)&lt;br /&gt;
** Subindex 2: First gain and offset (see add)&lt;br /&gt;
** Subindex 3: Second parameter Id, position and length&lt;br /&gt;
** Subindex 4: Second gain and offset&lt;br /&gt;
** Subindex 5: third...&lt;br /&gt;
* Index 0x3101 - second TX message&lt;br /&gt;
** as first&lt;br /&gt;
* Index 0x3180 - First receive (RX) message&lt;br /&gt;
** as above&lt;br /&gt;
* Index 0x3181 - Second RX message&lt;br /&gt;
&lt;br /&gt;
Once you know the index an sub index of a specific mapping you can also delete it by sending a write request. E.g. writing to Index 0x3181, sub index 3 would delete the second item of the second RX message.&lt;br /&gt;
&lt;br /&gt;
Because the mappings are stored in a dynamic memory structure their order will change when deleting items. So before deleting the next item you have to re-download the entire mapping table to obtain the correct index.&lt;br /&gt;
&lt;br /&gt;
After changing the map you have to send a flash save command to make your changes permanent. See commands below&lt;br /&gt;
&lt;br /&gt;
== SDO commands ==&lt;br /&gt;
Write requests to SDO Index 0x5002 trigger various commands&lt;br /&gt;
&lt;br /&gt;
* Subindex 0 - save parameters and CAN mappings to flash&lt;br /&gt;
* Subindex 1 - loads parameters from flash&lt;br /&gt;
* Subindex 2 - MCU reset&lt;br /&gt;
* Subindex 3 - Load parameter defaults&lt;br /&gt;
* Subindex 4 - Manuel start (sine firmware only)&lt;br /&gt;
* Subindex 5 - Manual stop (inverter firmware only)&lt;br /&gt;
&lt;br /&gt;
== Limits ==&lt;br /&gt;
* A maximum of 10 messages can be defined&lt;br /&gt;
* Per message a maximum of 8 values can be mapped (50 total over all messages in FW v5.27 and later)&lt;br /&gt;
* a value can not span across the 32-bit boundary, i.e. it must be fully contained in the first or second 32 bits of the message. E.g. &amp;quot;can tx udc 123 16 32 10&amp;quot; is not allowed (will change in later versions)&lt;br /&gt;
* A value can span maximum 32 bits&lt;br /&gt;
&lt;br /&gt;
== [[wikipedia:Endianness|Endianness]] ==&lt;br /&gt;
CAN messages sent to, or received from the inverter are Little-endian.&lt;br /&gt;
&lt;br /&gt;
If you are sending or receiving messages containing multi-byte values then the byte order must be taken into account. Upcoming versions of the CAN module will allow receiving big endian data.&lt;br /&gt;
&lt;br /&gt;
== PC Tool ==&lt;br /&gt;
A PC based tool called [https://pypi.org/project/openinverter-can-tool/ openinverter_can_tool] exists to query and control openinverter systems over CAN bus with a supported CAN interface adapter.&lt;br /&gt;
&lt;br /&gt;
[[Category:CAN]] [[Category:OpenInverter]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Chevrolet_Volt_Water_Heater&amp;diff=6017</id>
		<title>Chevrolet Volt Water Heater</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Chevrolet_Volt_Water_Heater&amp;diff=6017"/>
		<updated>2026-01-11T13:41:54Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added connector table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It is 5kW Eberspächer coolant heater that works on 400Vdc. It is found in Chevrolet Volt gen1 and Opel Ampera cars as well as others.&lt;br /&gt;
This model is SW CAN controlled. https://leafdriveblog.wordpress.com/2018/12/05/5kw-electric-heater/  &lt;br /&gt;
&lt;br /&gt;
3 pin LV connector has GND, SW CAN and ENABLE pins in that order.&lt;br /&gt;
&lt;br /&gt;
Temperature sensor is 3.2Kohm at 21degC. It is NTC type.&lt;br /&gt;
&lt;br /&gt;
This info from EVTV Forum:&lt;br /&gt;
The Eberspacher CAN version of their PTC liquid heater used in the Chevrolet Volt will work when used with a 33.33Kb SWCAN.&lt;br /&gt;
The data below is what we have found to be the minimum required to turn on and operate this heater.&lt;br /&gt;
This capture will operate the heater at approximately 33% of full power.&lt;br /&gt;
To command higher power, increase the value of message 0x10720099 byte 1 (it begins with byte 0) which is 3E below.&lt;br /&gt;
We saw full power heat when 85 was used as the value for byte 1 and that value will vary based upon inlet temperature. The data below contains an entry for “Bus” and that refers to which CAN Bus of the 2 Buses on the CANDue recorded the original event.&lt;br /&gt;
&lt;br /&gt;
== Temperature sensor ==&lt;br /&gt;
Here is code to convert the ADC reading to °C. The pull-up resistor is 3k3 to 3V3 and the ADC has 12 digits.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
float AmperaHeater::GetTemperature()&lt;br /&gt;
{&lt;br /&gt;
   const uint16_t lut[] = { 2950, 2600, 2330, 2070, 1850, 1650, 1470, 1280, 1120, 960, 830, 710, 615, 520, 440, 370, 300 };&lt;br /&gt;
   const uint16_t tabSize = sizeof(lut) / sizeof(lut[0]);&lt;br /&gt;
   const uint16_t minTemp = 0;&lt;br /&gt;
   const uint16_t maxTemp = 80;&lt;br /&gt;
   const uint16_t step = 5;&lt;br /&gt;
   const uint16_t digit = AnaIn::temp.Get();&lt;br /&gt;
   uint16_t last;&lt;br /&gt;
&lt;br /&gt;
   for (uint32_t i = 0; i &amp;lt; tabSize; i++)&lt;br /&gt;
   {&lt;br /&gt;
      uint16_t cur = lut[i];&lt;br /&gt;
&lt;br /&gt;
      if (cur &amp;lt;= digit)&lt;br /&gt;
      {&lt;br /&gt;
         //if we are outside the lookup table range, return minimum&lt;br /&gt;
         if (0 == i) return minTemp;&lt;br /&gt;
         float a = cur - digit;&lt;br /&gt;
         float b = cur - last;&lt;br /&gt;
         float c = step * a / b;&lt;br /&gt;
         float d = (step * i) + minTemp;&lt;br /&gt;
         return d - c;&lt;br /&gt;
      }&lt;br /&gt;
      last = cur;&lt;br /&gt;
   }&lt;br /&gt;
   return maxTemp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connectors ==&lt;br /&gt;
There are 3 connectors on the heater: HV, NTC temperature probe and control&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Purpose&lt;br /&gt;
!Pin mapping&lt;br /&gt;
!P/N&lt;br /&gt;
!Link&lt;br /&gt;
|-&lt;br /&gt;
|HV&lt;br /&gt;
|A: HV+, B: HV-&lt;br /&gt;
|13737728 (old, Delphi) 13861584 (new Aptive) 13572764-L (Pins)&lt;br /&gt;
|[https://eu.mouser.com/ProductDetail/Aptiv-formerly-Delphi/13861584?qs=JFNnAd7rNk4SXrWmFFOo3Q%3D%3D Housing] [https://eu.mouser.com/ProductDetail/Aptiv-formerly-Delphi/13572764-L?qs=l4Gc20tDgJK4Niw57Y7mGg%3D%3D Pins]&lt;br /&gt;
|-&lt;br /&gt;
|NTC&lt;br /&gt;
|&lt;br /&gt;
|1-967644-1 (housing) 5-965906-6 (pins)&lt;br /&gt;
|[https://eu.mouser.com/ProductDetail/TE-Connectivity-AMP/1-967644-1?qs=HGBP0O8H0vqNC4k5xF4hWw%3D%3D Housing] [https://eu.mouser.com/ProductDetail/TE-Connectivity-AMP/5-965906-6?qs=QWBbna5I2bYsBVTO46El0Q%3D%3D Pins]&lt;br /&gt;
|-&lt;br /&gt;
|Control&lt;br /&gt;
|A (BLK): GND, B: SWCAN, C: 12V&lt;br /&gt;
|13519047 (housing) 12191812-L (pins)&lt;br /&gt;
|[https://eu.mouser.com/ProductDetail/Aptiv/13519047?qs=xyz6lfZ1ktIhqycYgOC3Xg%3D%3D Housing] [https://eu.mouser.com/ProductDetail/Aptiv/12191812-L?qs=DlE0rdXB%2FL2cB%252BzgPD8oLg%3D%3D Pins]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CAN messaging ==&lt;br /&gt;
There seem to be a number of variants of the protocol out there.&lt;br /&gt;
&lt;br /&gt;
==== Variant 1 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!ID&lt;br /&gt;
! Extended&lt;br /&gt;
! LEN&lt;br /&gt;
!Byte 0&lt;br /&gt;
!Byte 1&lt;br /&gt;
!Byte 2&lt;br /&gt;
!Byte 3&lt;br /&gt;
!Byte 4&lt;br /&gt;
!Byte 5&lt;br /&gt;
!Byte 6&lt;br /&gt;
!Byte 7&lt;br /&gt;
|-&lt;br /&gt;
|0x100&lt;br /&gt;
|False&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|0x621&lt;br /&gt;
|False&lt;br /&gt;
|8&lt;br /&gt;
|0&lt;br /&gt;
|40&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|0x10720099&lt;br /&gt;
|True&lt;br /&gt;
|5&lt;br /&gt;
|02&lt;br /&gt;
|Watts/48&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x13FFE060&lt;br /&gt;
|True&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x102CC040&lt;br /&gt;
|True&lt;br /&gt;
|8&lt;br /&gt;
|01&lt;br /&gt;
|01&lt;br /&gt;
|CF&lt;br /&gt;
|0F&lt;br /&gt;
|0&lt;br /&gt;
|51&lt;br /&gt;
|46&lt;br /&gt;
|60&lt;br /&gt;
|-&lt;br /&gt;
|0x10242040&lt;br /&gt;
|True&lt;br /&gt;
|1&lt;br /&gt;
|01&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x102740CB&lt;br /&gt;
|True&lt;br /&gt;
|3&lt;br /&gt;
|2D&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x102740CB&lt;br /&gt;
|True&lt;br /&gt;
|3&lt;br /&gt;
|19&lt;br /&gt;
|9&lt;br /&gt;
|9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Variant 2 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID&lt;br /&gt;
! Extended&lt;br /&gt;
! LEN&lt;br /&gt;
!Byte 0&lt;br /&gt;
!Byte 1&lt;br /&gt;
!Byte 2&lt;br /&gt;
!Byte 3&lt;br /&gt;
!Byte 4&lt;br /&gt;
!Byte 5&lt;br /&gt;
!Byte 6&lt;br /&gt;
!Byte 7&lt;br /&gt;
|-&lt;br /&gt;
|0x100&lt;br /&gt;
|False&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|0x621&lt;br /&gt;
|False&lt;br /&gt;
|8&lt;br /&gt;
|0&lt;br /&gt;
|52&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|0x10720099&lt;br /&gt;
|True&lt;br /&gt;
|5&lt;br /&gt;
|02&lt;br /&gt;
|Watts/48&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x13FFE060&lt;br /&gt;
|True&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x102CC040&lt;br /&gt;
|True&lt;br /&gt;
|8&lt;br /&gt;
|01&lt;br /&gt;
|01&lt;br /&gt;
|CF&lt;br /&gt;
|18&lt;br /&gt;
|0&lt;br /&gt;
|51&lt;br /&gt;
|06&lt;br /&gt;
|6D&lt;br /&gt;
|-&lt;br /&gt;
|0x102740CB&lt;br /&gt;
|True&lt;br /&gt;
|3&lt;br /&gt;
|41&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10242040&lt;br /&gt;
|True&lt;br /&gt;
|1&lt;br /&gt;
|02&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Michael Neuweiler has published this wiring on his blog. http://s80ev.blogspot.com/2016/12/the-heat-is-on.html&lt;br /&gt;
&lt;br /&gt;
https://1.bp.blogspot.com/-osB952BjJFM/V1HAdFRBpfI/AAAAAAAAAlE/3OND1f6nJLMi1ZS8arpRwGWIKpLRF65GwCPcB/s1600/gevcu_ext_layout.gif&lt;br /&gt;
&lt;br /&gt;
Connecting using CAN board and Canalyst II does nothing since it is not normal CAN interface. This heater is supposed to work only with SW CAN transciever. Transciever should output a wake up signal for everything to work. &lt;br /&gt;
One such SW transciever is NCV7356.&lt;br /&gt;
[[Category:Chevrolet]] &lt;br /&gt;
[[Category:Opel]]&lt;br /&gt;
[[Category:Heater Coolant]]&lt;br /&gt;
[[Category:HVAC]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Chevrolet_Volt_Water_Heater&amp;diff=6016</id>
		<title>Chevrolet Volt Water Heater</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Chevrolet_Volt_Water_Heater&amp;diff=6016"/>
		<updated>2026-01-11T13:03:14Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added info about temp sensor and other CAN variant&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It is 5kW Eberspächer coolant heater that works on 400Vdc. It is found in Chevrolet Volt gen1 and Opel Ampera cars as well as others.&lt;br /&gt;
This model is SW CAN controlled. https://leafdriveblog.wordpress.com/2018/12/05/5kw-electric-heater/  &lt;br /&gt;
&lt;br /&gt;
3 pin LV connector has GND, SW CAN and ENABLE pins in that order.&lt;br /&gt;
&lt;br /&gt;
Temperature sensor is 3.2Kohm at 21degC. It is NTC type.&lt;br /&gt;
&lt;br /&gt;
This info from EVTV Forum:&lt;br /&gt;
The Eberspacher CAN version of their PTC liquid heater used in the Chevrolet Volt will work when used with a 33.33Kb SWCAN.&lt;br /&gt;
The data below is what we have found to be the minimum required to turn on and operate this heater.&lt;br /&gt;
This capture will operate the heater at approximately 33% of full power.&lt;br /&gt;
To command higher power, increase the value of message 0x10720099 byte 1 (it begins with byte 0) which is 3E below.&lt;br /&gt;
We saw full power heat when 85 was used as the value for byte 1 and that value will vary based upon inlet temperature. The data below contains an entry for “Bus” and that refers to which CAN Bus of the 2 Buses on the CANDue recorded the original event.&lt;br /&gt;
&lt;br /&gt;
== Temperature sensor ==&lt;br /&gt;
Here is code to convert the ADC reading to °C. The pull-up resistor is 3k3 to 3V3 and the ADC has 12 digits.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
float AmperaHeater::GetTemperature()&lt;br /&gt;
{&lt;br /&gt;
   const uint16_t lut[] = { 2950, 2600, 2330, 2070, 1850, 1650, 1470, 1280, 1120, 960, 830, 710, 615, 520, 440, 370, 300 };&lt;br /&gt;
   const uint16_t tabSize = sizeof(lut) / sizeof(lut[0]);&lt;br /&gt;
   const uint16_t minTemp = 0;&lt;br /&gt;
   const uint16_t maxTemp = 80;&lt;br /&gt;
   const uint16_t step = 5;&lt;br /&gt;
   const uint16_t digit = AnaIn::temp.Get();&lt;br /&gt;
   uint16_t last;&lt;br /&gt;
&lt;br /&gt;
   for (uint32_t i = 0; i &amp;lt; tabSize; i++)&lt;br /&gt;
   {&lt;br /&gt;
      uint16_t cur = lut[i];&lt;br /&gt;
&lt;br /&gt;
      if (cur &amp;lt;= digit)&lt;br /&gt;
      {&lt;br /&gt;
         //if we are outside the lookup table range, return minimum&lt;br /&gt;
         if (0 == i) return minTemp;&lt;br /&gt;
         float a = cur - digit;&lt;br /&gt;
         float b = cur - last;&lt;br /&gt;
         float c = step * a / b;&lt;br /&gt;
         float d = (step * i) + minTemp;&lt;br /&gt;
         return d - c;&lt;br /&gt;
      }&lt;br /&gt;
      last = cur;&lt;br /&gt;
   }&lt;br /&gt;
   return maxTemp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CAN messaging ==&lt;br /&gt;
There seem to be a number of variants of the protocol out there.&lt;br /&gt;
&lt;br /&gt;
==== Variant 1 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!ID&lt;br /&gt;
! Extended&lt;br /&gt;
! LEN&lt;br /&gt;
!Byte 0&lt;br /&gt;
!Byte 1&lt;br /&gt;
!Byte 2&lt;br /&gt;
!Byte 3&lt;br /&gt;
!Byte 4&lt;br /&gt;
!Byte 5&lt;br /&gt;
!Byte 6&lt;br /&gt;
!Byte 7&lt;br /&gt;
|-&lt;br /&gt;
|0x100&lt;br /&gt;
|False&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|0x621&lt;br /&gt;
|False&lt;br /&gt;
|8&lt;br /&gt;
|0&lt;br /&gt;
|40&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|0x10720099&lt;br /&gt;
|True&lt;br /&gt;
|5&lt;br /&gt;
|02&lt;br /&gt;
|Watts/48&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x13FFE060&lt;br /&gt;
|True&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x102CC040&lt;br /&gt;
|True&lt;br /&gt;
|8&lt;br /&gt;
|01&lt;br /&gt;
|01&lt;br /&gt;
|CF&lt;br /&gt;
|0F&lt;br /&gt;
|0&lt;br /&gt;
|51&lt;br /&gt;
|46&lt;br /&gt;
|60&lt;br /&gt;
|-&lt;br /&gt;
|0x10242040&lt;br /&gt;
|True&lt;br /&gt;
|1&lt;br /&gt;
|01&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x102740CB&lt;br /&gt;
|True&lt;br /&gt;
|3&lt;br /&gt;
|2D&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x102740CB&lt;br /&gt;
|True&lt;br /&gt;
|3&lt;br /&gt;
|19&lt;br /&gt;
|9&lt;br /&gt;
|9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Variant 2 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID&lt;br /&gt;
! Extended&lt;br /&gt;
! LEN&lt;br /&gt;
!Byte 0&lt;br /&gt;
!Byte 1&lt;br /&gt;
!Byte 2&lt;br /&gt;
!Byte 3&lt;br /&gt;
!Byte 4&lt;br /&gt;
!Byte 5&lt;br /&gt;
!Byte 6&lt;br /&gt;
!Byte 7&lt;br /&gt;
|-&lt;br /&gt;
|0x100&lt;br /&gt;
|False&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|0x621&lt;br /&gt;
|False&lt;br /&gt;
|8&lt;br /&gt;
|0&lt;br /&gt;
|52&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|0x10720099&lt;br /&gt;
|True&lt;br /&gt;
|5&lt;br /&gt;
|02&lt;br /&gt;
|Watts/48&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x13FFE060&lt;br /&gt;
|True&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x102CC040&lt;br /&gt;
|True&lt;br /&gt;
|8&lt;br /&gt;
|01&lt;br /&gt;
|01&lt;br /&gt;
|CF&lt;br /&gt;
|18&lt;br /&gt;
|0&lt;br /&gt;
|51&lt;br /&gt;
|06&lt;br /&gt;
|6D&lt;br /&gt;
|-&lt;br /&gt;
|0x102740CB&lt;br /&gt;
|True&lt;br /&gt;
|3&lt;br /&gt;
|41&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x10242040&lt;br /&gt;
|True&lt;br /&gt;
|1&lt;br /&gt;
|02&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Michael Neuweiler has published this wiring on his blog. http://s80ev.blogspot.com/2016/12/the-heat-is-on.html&lt;br /&gt;
&lt;br /&gt;
https://1.bp.blogspot.com/-osB952BjJFM/V1HAdFRBpfI/AAAAAAAAAlE/3OND1f6nJLMi1ZS8arpRwGWIKpLRF65GwCPcB/s1600/gevcu_ext_layout.gif&lt;br /&gt;
&lt;br /&gt;
Connecting using CAN board and Canalyst II does nothing since it is not normal CAN interface. This heater is supposed to work only with SW CAN transciever. Transciever should output a wake up signal for everything to work. &lt;br /&gt;
One such SW transciever is NCV7356.&lt;br /&gt;
[[Category:Chevrolet]] &lt;br /&gt;
[[Category:Opel]]&lt;br /&gt;
[[Category:Heater Coolant]]&lt;br /&gt;
[[Category:HVAC]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Chevrolet_Volt_Water_Heater&amp;diff=6015</id>
		<title>Chevrolet Volt Water Heater</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Chevrolet_Volt_Water_Heater&amp;diff=6015"/>
		<updated>2026-01-08T20:24:00Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added to HVAC category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It is 5kW Eberspächer coolant heater that works on 400Vdc. It is found in Chevrolet Volt gen1 and Opel Ampera cars as well as others.&lt;br /&gt;
This model is SW CAN controlled. https://leafdriveblog.wordpress.com/2018/12/05/5kw-electric-heater/  &lt;br /&gt;
&lt;br /&gt;
3 pin LV connector has GND, SW CAN and ENABLE pins in that order.&lt;br /&gt;
&lt;br /&gt;
Temperature sensor is 3.2Kohm at 21degC. It is NTC type.&lt;br /&gt;
&lt;br /&gt;
This info from EVTV Forum:&lt;br /&gt;
The Eberspacher CAN version of their PTC liquid heater used in the Chevrolet Volt will work when used with a 33.33Kb SWCAN.&lt;br /&gt;
The data below is what we have found to be the minimum required to turn on and operate this heater.&lt;br /&gt;
This capture will operate the heater at approximately 33% of full power.&lt;br /&gt;
To command higher power, increase the value of message 0x10720099 byte 1 (it begins with byte 0) which is 3E below.&lt;br /&gt;
We saw full power heat when 85 was used as the value for byte 1 and that value will vary based upon inlet temperature.&lt;br /&gt;
The data below contains an entry for “Bus” and that refers to which CAN Bus of the 2 Buses on the CANDue recorded the original event.&lt;br /&gt;
&lt;br /&gt;
ID,Extended,Bus,LEN,D0,D1,D2,D3,D4,D5,D6,D7&lt;br /&gt;
&lt;br /&gt;
0x100,False,1,0,0,0,0,0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
0x621,False,1,8,0,40,0,0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
0x10720099,True,1,5,2,3E,0,0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
0x13FFE060,True,1,0,0,0,0,0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
0x10720099,True,1,5,2,3E,0,0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
0x102CC040,True,1,8,1,1,CF,0F,0,51,46,60&lt;br /&gt;
&lt;br /&gt;
0x10242040,True,1,1,0,0,0,0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
0x102CC040,True,1,8,1,1,CF,0F,0,51,46,60&lt;br /&gt;
&lt;br /&gt;
0x102CC040,True,1,8,1,1,CF,0F,0,51,46,60&lt;br /&gt;
&lt;br /&gt;
0x102CC040,True,1,8,1,1,CF,0F,0,51,46,60&lt;br /&gt;
&lt;br /&gt;
0x102740CB,True,1,3,2D,0,0,0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
0x102740CB,True,1,3,19,0,0,0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!ID&lt;br /&gt;
! Extended&lt;br /&gt;
!Bus&lt;br /&gt;
! LEN&lt;br /&gt;
!Byte 0&lt;br /&gt;
!Byte 1&lt;br /&gt;
!Byte 2&lt;br /&gt;
!Byte 3&lt;br /&gt;
!Byte 4&lt;br /&gt;
!Byte 5&lt;br /&gt;
!Byte 6&lt;br /&gt;
!Byte 7&lt;br /&gt;
|-&lt;br /&gt;
|0x100&lt;br /&gt;
|False&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|0x621&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Michael Neuweiler has published this wiring on his blog. http://s80ev.blogspot.com/2016/12/the-heat-is-on.html&lt;br /&gt;
https://1.bp.blogspot.com/-osB952BjJFM/V1HAdFRBpfI/AAAAAAAAAlE/3OND1f6nJLMi1ZS8arpRwGWIKpLRF65GwCPcB/s1600/gevcu_ext_layout.gif&lt;br /&gt;
&lt;br /&gt;
Connecting using CAN board and Canalyst II does nothing since it is not normal CAN interface. This heater is supposed to work only with SW CAN transciever. Transciever should output a wake up signal for everything to work. &lt;br /&gt;
One such SW transciever is NCV7356.&lt;br /&gt;
[[Category:Chevrolet]] &lt;br /&gt;
[[Category:Opel]]&lt;br /&gt;
[[Category:Heater Coolant]]&lt;br /&gt;
[[Category:HVAC]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Bidirectional_Charging&amp;diff=6004</id>
		<title>Bidirectional Charging</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Bidirectional_Charging&amp;diff=6004"/>
		<updated>2025-12-17T16:45:33Z</updated>

		<summary type="html">&lt;p&gt;Johu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bidirectional charging means, that the car is able to provide power to the outside world, via the charge port.&lt;br /&gt;
&lt;br /&gt;
Tags: bidi, inverse charging, vehicle-to-load, V2L, vehicle-to-home, V2H, vehicle-to-grid, V2G&lt;br /&gt;
&lt;br /&gt;
=== Forum discussions related to bidirectional charging: ===&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=5090&lt;br /&gt;
&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=3551&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via AC ===&lt;br /&gt;
Some OEM on-board-chargers are able to create AC voltage. Todo: any reverse-engineering ongoing for such chargers? E.g. for Hyundai/Kia E-GMP?&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via CHAdeMO ===&lt;br /&gt;
The CHAdeMO standard was planned for supporting bidirectional power transfer from the beginning. Todo: Any open-source projects in this direction?&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via CCS ===&lt;br /&gt;
The CCS standard did not plan bidirectional power transfer. This means, depending on the implementation details of the cars charge controller, the car may or may not allow to draw energy out of the CCS port. Later versions of the CCS standard, ISO15118 (2020?), are defining special communication procedures for bidirectional power transfer. But it will take some time until this standard is widely adapted.&lt;br /&gt;
&lt;br /&gt;
In the open-source world, however, we do not need to wait until OEMs and charger manufacturers implement the latest ISO15118. We can support bidirectional charging even with the &amp;quot;old&amp;quot; DIN spec. The strategy is: Even if the car is requesting to be charged, it also accepts discharging, without terminating the charging session. It may terminate if the SOC falls below a certain, configurable level, to prevent an empty battery. The car announces the allowed charge current, and the same value, just in opposite direction, can be used as a discharge current limit, too.&lt;br /&gt;
&lt;br /&gt;
== Practical implementation with parts list ==&lt;br /&gt;
[[File:CCS bidirectional charger.jpg|thumb|First prototype]]&lt;br /&gt;
One way to DIY a bidirectional charger is the use of a hybrid PV inverter with high voltage battery input. The advantage is that these are mass-produced (thus cheap) and conform to the various legal requirements. The inverter then handles power transfer and optionally smart functions such as zero grid import/export and we only need to supply the surrounding logic and electrics.&lt;br /&gt;
[[File:CCS bidirectional charger 2.jpg|thumb|Second version]]&lt;br /&gt;
This component list is just an example that has proven to work. It is preliminary and has not been tested with OEM cars yet, so it will likely be extended. As always, you are working with high voltage and especially grid voltage. Make sure you are qualified otherwise ask for help.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Item&lt;br /&gt;
!Approximate cost&lt;br /&gt;
!Link/Source&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|Sungrow SH5.0RT (or more powerful variant)&lt;br /&gt;
|850€&lt;br /&gt;
|[https://ger.sungrowpower.com/productDetail/905 Sungrow]&lt;br /&gt;
|Pick an inverter that is supported by [https://github.com/dalathegreat/Battery-Emulator/wiki#supported-inverters-list Battery Emulator]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Connector&lt;br /&gt;
|90€&lt;br /&gt;
|AliExpress&lt;br /&gt;
|Plain connector without cable&lt;br /&gt;
|-&lt;br /&gt;
|BeagleBone Green&lt;br /&gt;
|45€&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Seeed-Studio/102010027?qs=Hlcjo%2FO3pQ5AxSET1oW%252B%252Bg%3D%3D Mouser]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[FoccciCape]]&lt;br /&gt;
|t.b.d.&lt;br /&gt;
|t.b.d&lt;br /&gt;
|RS485, CAN comm, 2x relay driver, CCS&lt;br /&gt;
|-&lt;br /&gt;
|Flexible cable, 4 or 5 pole&lt;br /&gt;
|4€/m&lt;br /&gt;
|Local hardware store&lt;br /&gt;
|Size according to charging current. 5x2.5mm² used for the 5 kW inverter&lt;br /&gt;
For DC+, DC-, PE, CP and PP. &lt;br /&gt;
PP can optionally be terminated in the plug, then you just need 4 poles&lt;br /&gt;
|-&lt;br /&gt;
|2 Fuse blocks&lt;br /&gt;
|6€ each&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Altech/002540101?qs=rrS6PyfT74edEoVfbnqxvg%3D%3D Mouser]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2 25A fuses&lt;br /&gt;
|8€ each&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Eaton-Electronics/EKM10-25-1P?qs=sGAEpiMZZMsIz3CjQ1xegZx2pdJYlyprSptsITKY%2FrCWMtgS7UD2BQ%3D%3D Mouser]&lt;br /&gt;
|400V AC rated from your local hardware store suffices as it&#039;s 2 in series&lt;br /&gt;
|-&lt;br /&gt;
|12V 2A DIN rail supply&lt;br /&gt;
|18€&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/MEAN-WELL/HDR-30-12?qs=pHY8AWQbqIN66yYHZne39A%3D%3D Mouser]&lt;br /&gt;
|In case relays are needed later on, otherwise 5V model makes things easier&lt;br /&gt;
|-&lt;br /&gt;
|12V to 5V step-down converter&lt;br /&gt;
|5€&lt;br /&gt;
|ebay or ali&lt;br /&gt;
|Needed if you chose 12V supply&lt;br /&gt;
|-&lt;br /&gt;
|DIN rail cabinet&lt;br /&gt;
|20€&lt;br /&gt;
|Local hardware store&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MC4 connector set&lt;br /&gt;
|5€&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5V to 400V step up converter&lt;br /&gt;
|10€&lt;br /&gt;
|[https://www.ebay.de/itm/357155751299 ebay]&lt;br /&gt;
|Only needed for OEM cars&lt;br /&gt;
|}&lt;br /&gt;
The CCS connectors + and - is connected to the inverter input via the fuse blocks. I did not deploy additional contactors but rely on the ones that are already in the car and the inverter. The PLC modems output transformer is connected to PE and CP via a capacitor and a resistor, more details in [https://github.com/uhi22/pyPLC/blob/master/doc/hardware.md uhis github].&lt;br /&gt;
&lt;br /&gt;
The BeagleBone is connected to the PLC modem and the inverter Ethernet port, so you will need a small network switch, also for the uplink to your home network. In addition the CAN outputs of the COMPCE cape connects to the inverters battery CAN (pins 3 and 4 on the Sungrow).&lt;br /&gt;
&lt;br /&gt;
More info on the software setup in the development threads linked above, uhis github and [https://github.com/jsphuebner/esp-egycounter Johannes&#039; github].&lt;br /&gt;
&lt;br /&gt;
This setup can also be used with CHAdeMO cars in which case the powerline modem can be omitted.&lt;br /&gt;
&lt;br /&gt;
== Compatible cars ==&lt;br /&gt;
This table lists cars where we successfully pulled power OUT of the cars battery via its quick charge port.&lt;br /&gt;
&lt;br /&gt;
More details on [https://github.com/jsphuebner/esp-egycounter forum thread].&lt;br /&gt;
&lt;br /&gt;
First column: Y - works flawlessly with no timeout, P - works partially with long timeout, N - works not at all or quick timeout&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
!Make&lt;br /&gt;
!Model&lt;br /&gt;
!Requirements&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|P&lt;br /&gt;
|Hyundai&lt;br /&gt;
|Ioniq Classic 28 kWh&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|Timeout after 10 minutes&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|MG&lt;br /&gt;
|MG4&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|No timeout&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Tesla&lt;br /&gt;
|Model Y&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|5 kW tested&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Tesla&lt;br /&gt;
|Model 3&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|BMS aborts charging session if more than 15Ah discharge have been detected&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|BYD&lt;br /&gt;
|Atto 3&lt;br /&gt;
|&lt;br /&gt;
|5 kW tested&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Polestar&lt;br /&gt;
|2&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|VW&lt;br /&gt;
|ID.4&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 1 minute&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|BMW&lt;br /&gt;
|IX4&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 5 minutes&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|Chevrolet&lt;br /&gt;
|Bolt&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 50 s&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|Kia&lt;br /&gt;
|EV6&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 10 s&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Collection of documents related to bidirectional charging ==&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
[[Category:CCS]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Parameters&amp;diff=6003</id>
		<title>Parameters</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Parameters&amp;diff=6003"/>
		<updated>2025-12-13T19:08:04Z</updated>

		<summary type="html">&lt;p&gt;Johu: Description of maxregentravelhz&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The inverter can be adapted to many kinds of motors, battery packs and driver preferences by changing parameters. A video on parameters is here: https://youtu.be/GQNQbBUsqf0&lt;br /&gt;
&lt;br /&gt;
A Parameter Database with common usage scenarios is here: https://openinverter.org/parameters/&lt;br /&gt;
&lt;br /&gt;
A synchronous motor tuning guide is here: [[Using FOC Software]]&lt;br /&gt;
&lt;br /&gt;
== Motor Parameters ==&lt;br /&gt;
The parameters to adjust the inverter to the motor are boost, fweak, fslipmin, fslipmax, polepairs, fmin, fmax and numimp.&lt;br /&gt;
&lt;br /&gt;
They can be deduced from the motors nameplate or by trying which feels best. For illustration we will assume a bus voltage of 500V and a 4-pole (p=2) motor with a nominal speed of n=1450rpm@f=50Hz and 230V. With 500V DC an AC voltage of 500/1.41=355V can be generated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;boost&#039;&#039;&#039; is the digital amplitude of the sine wave at motor startup. It is needed to overcome the motors ohmic resistance. Digital amplitude is an internal quantity. 0 means no voltage is generated at all, 37813 means the full possible voltage is generated.&lt;br /&gt;
&lt;br /&gt;
Example: boost=1700&lt;br /&gt;
&lt;br /&gt;
At full throttle an effective voltage of 1700/37813*355=16V is generated. The best way to find a feasible value is to optimize it in the finished car. Start with the default value and increase until you get a good startup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fweak&#039;&#039;&#039; is the frequency at which the full possible voltage is generated. It is also the point of the highest motor power. Beyond fweak torque will decrease to the square of frequency and thus power will decrease linear with frequency.&lt;br /&gt;
&lt;br /&gt;
A starting point for fweak is the motors nameplate:&lt;br /&gt;
&lt;br /&gt;
[[File:Fweak.png|210x210px]]&lt;br /&gt;
&lt;br /&gt;
With our illustration motor fweak=(355 V/230 V) * 50 Hz = 77 Hz. fweak can be configured lower than that resulting in more torque at the low end.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fslipmin&#039;&#039;&#039;/&#039;&#039;&#039;fslipmax&#039;&#039;&#039; is the slip frequency at which the motor is run at minimum/maximum throttle. fslipmin is set to the motors optimal slip frequency which can be deduced from the nameplate. fslipmin=f-p*n/60. With our illustration motor fslipmin=50-2*1450/60=1.66Hz. fslipmax can be set as high as breakdown torque which is not found on the nameplate. So its best found experimental starting with 2*fslipmin. If set too high the motor will start to rock violently on startup, possibly tripping the over current limit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;polepairs&#039;&#039;&#039; is set to p, 2 in our example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fmin&#039;&#039;&#039; should be set just below fslipmin.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fmax&#039;&#039;&#039; is used to limit the speed of the motor. The default 200Hz would result in a maximum speed of about 6000rpm.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ampmin&#039;&#039;&#039; Is the minimum relative amplitude fed to the motor. At very low amplitudes the motor does not generate any noticable torque and throttle travel is wasted that does nothing. Find out a good value by experimenting. &lt;br /&gt;
&lt;br /&gt;
== Inverter Parameters ==&lt;br /&gt;
&#039;&#039;&#039;pwmfrq&#039;&#039;&#039; Sets the frequency at which the IGBTs are switched on and off. The faster the switching the higher the losses in the inverter and the lower the losses in the motor. The maximum frequency is also limited by the driver boards as explained here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;pwmpol&#039;&#039;&#039; Sets the polarity of the PWM signals, active high or active low. Do not touch this parameter if you don&#039;t know what you&#039;re doing. When configured inversely it will blow up your power stage immediatly if connected to a potent power source like batteries.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;deadtime&#039;&#039;&#039; The time between switching off one IGBT and switching on the other. 28=800ns, 63=1.5µs. More values can be found in the STM32 data sheet. Make sure to test the deadtime at low power levels. Setting the deadtime too low while operating of a potent power source can blow up your power stage! &lt;br /&gt;
&lt;br /&gt;
== Parameter Reference ==&lt;br /&gt;
The following parameters currently exist to customize the controller software. Type&lt;br /&gt;
 set param &amp;lt;value&amp;gt;&lt;br /&gt;
to change it. Type&lt;br /&gt;
 get param&lt;br /&gt;
to get the current value.&lt;br /&gt;
&lt;br /&gt;
Parameters are internally stored with 5 binary fraction digits. That means there are 32 possible values after the decimal point. So when you set a value of 0.35 you might end up with 0.33. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Unit&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Min&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Max&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Default&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Motor (FOC)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|iqkp&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|20000&lt;br /&gt;
|64&lt;br /&gt;
|Current controller proportional gain. Low inductance/resistance motors need less, high inductance/resistance motors more&lt;br /&gt;
|-&lt;br /&gt;
|idkp&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|20000&lt;br /&gt;
|64&lt;br /&gt;
|Same as above but often a little higher then iqkp&lt;br /&gt;
|-&lt;br /&gt;
|curki&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|100000&lt;br /&gt;
|20000&lt;br /&gt;
|Current controller integral gain (id and iq)&lt;br /&gt;
|-&lt;br /&gt;
|exckp&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|20000&lt;br /&gt;
|3000&lt;br /&gt;
|Exciter controller gain (Renault Zoe variant only)&lt;br /&gt;
|-&lt;br /&gt;
|cogkp&lt;br /&gt;
|&lt;br /&gt;
| -1000&lt;br /&gt;
|1000&lt;br /&gt;
|0&lt;br /&gt;
|[https://openinverter.org/forum/viewtopic.php?t=5660 Anti-cogging modulator] gain. This generates a trapezoidal wave form to counter the cogging current of IPM motors.&lt;br /&gt;
|-&lt;br /&gt;
|cogph&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|65535&lt;br /&gt;
|0&lt;br /&gt;
|Anti-cogging modulator phase angle between cogging current and electrical rotor angle&lt;br /&gt;
|-&lt;br /&gt;
|cogmax&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|30000&lt;br /&gt;
|0&lt;br /&gt;
|Maximum amplitude of the anti-cogging current&lt;br /&gt;
|-&lt;br /&gt;
|vlimflt&lt;br /&gt;
|&lt;br /&gt;
| 0&lt;br /&gt;
|16&lt;br /&gt;
| 10&lt;br /&gt;
|Amplitude limiting field weakening filter&lt;br /&gt;
|-&lt;br /&gt;
|vlimmargin&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|10000&lt;br /&gt;
|2500&lt;br /&gt;
|Field weakening is brought in at modmax-vlimmargin. Increase if you get short bursts of unwanted regen at speed&lt;br /&gt;
|-&lt;br /&gt;
|fwcurmax&lt;br /&gt;
|A&lt;br /&gt;
| -1000 &lt;br /&gt;
|0&lt;br /&gt;
| -100&lt;br /&gt;
|Maximum field weakening current. Must be set to critical current of motor (TODO: link forum). Set to 0 for disabling field weakening&lt;br /&gt;
|-&lt;br /&gt;
|excurmax&lt;br /&gt;
|A&lt;br /&gt;
|0&lt;br /&gt;
|10&lt;br /&gt;
|0&lt;br /&gt;
|Exciter current maximum (Renault Zoe variant only)&lt;br /&gt;
|-&lt;br /&gt;
|lqminusld&lt;br /&gt;
|mH&lt;br /&gt;
| 0&lt;br /&gt;
|1000&lt;br /&gt;
| 0&lt;br /&gt;
|Difference between d and q axis inductance. The higher, the more d-current is brought in for additional reluctance torque&lt;br /&gt;
|-&lt;br /&gt;
|fluxlinkage&lt;br /&gt;
|mWeber&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|90&lt;br /&gt;
|Magnetic link between rotor and stator, shapes MTPA curve&lt;br /&gt;
|-&lt;br /&gt;
|syncadv&lt;br /&gt;
|dig/Hz&lt;br /&gt;
|  0&lt;br /&gt;
|65535&lt;br /&gt;
|10&lt;br /&gt;
|Shifts &amp;quot;syncofs&amp;quot; downwards/upwards with frequency. Must be set so that ud remains at 0 when coasting below field weakening speed. &#039;&#039;&#039;SUPER DANGEROUS!&#039;&#039;&#039; Setting it wrong can cause unwanted acceleration.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;curkifrqgain&#039;&#039;&lt;br /&gt;
|dig/Hz&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|50&lt;br /&gt;
|Current controllers integral gain frequency coefficient (deprecated, removed)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;ffwstart&#039;&#039;&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|200&lt;br /&gt;
|Starting point of field weakening controller. Below that frequency it is disabled, above it its gain is increased proportional to frequency and hits &#039;&#039;fwkp&#039;&#039; at &#039;&#039;fmax&#039;&#039;. (deprecated, removed in latest release)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Motor (sine)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|boost&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|37813&lt;br /&gt;
|1700&lt;br /&gt;
|0 Hz Boost in digit. 1000 digit ~ 2.5%&lt;br /&gt;
|-&lt;br /&gt;
|fweakstrt&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|400&lt;br /&gt;
|Fweak value at potnom &amp;lt; 35%. Can improve low speed stability and reduce oscillation when set higher than fweak.  Set equal to fweak to disable. &lt;br /&gt;
|-&lt;br /&gt;
|fweak&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|400&lt;br /&gt;
|67&lt;br /&gt;
|Frequency where V/Hz reaches its peak&lt;br /&gt;
|-&lt;br /&gt;
|fconst&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|400&lt;br /&gt;
|400&lt;br /&gt;
|Maximum slip is increased from fslipmax to fslipconstmax as frequency approaches this value. Only effective when greater than fweak.&lt;br /&gt;
|-&lt;br /&gt;
|udcnom&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|0&lt;br /&gt;
|Nominal voltage for fweak and boost. fweak and boost are scaled to the actual dc voltage. 0=don&#039;t scale&lt;br /&gt;
|-&lt;br /&gt;
|fslipmin&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|1&lt;br /&gt;
|Slip frequency at minimum throttle&lt;br /&gt;
|-&lt;br /&gt;
|fslipmax&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|3&lt;br /&gt;
|Slip frequency at maximum throttle&lt;br /&gt;
|-&lt;br /&gt;
|fslipconstmax&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|10&lt;br /&gt;
|5&lt;br /&gt;
|Slip frequency at maximum throttle and fconst. Set equal to fslipmax to disable.&lt;br /&gt;
|-&lt;br /&gt;
|fmin&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|400&lt;br /&gt;
|1&lt;br /&gt;
|Below this frequency no voltage is generated&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Motor (common)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|polepairs&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|16&lt;br /&gt;
|2&lt;br /&gt;
|Pole pairs of motor (e.g. 4-pole motor: 2 pole pairs)&lt;br /&gt;
|-&lt;br /&gt;
|respolepairs&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|16&lt;br /&gt;
|1&lt;br /&gt;
|Pole pairs of resolver (normally same as polepairs of motor, but sometimes 1)&lt;br /&gt;
|-&lt;br /&gt;
|sincosofs&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|4096&lt;br /&gt;
|2048&lt;br /&gt;
|Mid point of sin/cos chip&lt;br /&gt;
|-&lt;br /&gt;
|encflt&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|Filter constant between pulse encoder and speed calculation. Makes up for slightly uneven pulse distribution&lt;br /&gt;
|-&lt;br /&gt;
|encmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|5&lt;br /&gt;
|0&lt;br /&gt;
|0=single channel encoder, 1=quadrature encoder,&lt;br /&gt;
2=quadrature /w index pulse, &lt;br /&gt;
3=SPI (deprecated),&lt;br /&gt;
4=Resolver,&lt;br /&gt;
5=sin/cos chip&lt;br /&gt;
|-&lt;br /&gt;
|fmax&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|400&lt;br /&gt;
|200&lt;br /&gt;
|At this frequency rev limiting kicks in&lt;br /&gt;
|-&lt;br /&gt;
|numimp&lt;br /&gt;
|Imp/rev&lt;br /&gt;
|8&lt;br /&gt;
|8192&lt;br /&gt;
|60&lt;br /&gt;
|Pulse encoder pulses per turn&lt;br /&gt;
|-&lt;br /&gt;
|dirchrpm&lt;br /&gt;
|rpm&lt;br /&gt;
|0&lt;br /&gt;
|2000&lt;br /&gt;
|100&lt;br /&gt;
|Motor speed at which direction change is allowed&lt;br /&gt;
|-&lt;br /&gt;
|dirmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0=button (momentary pulse selects forward/reverse), 1=switch (forward or reverse signal must be constantly high)&lt;br /&gt;
|-&lt;br /&gt;
|syncofs&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|65535&lt;br /&gt;
|0&lt;br /&gt;
|Phase shift of sine wave after receiving index pulse&lt;br /&gt;
|-&lt;br /&gt;
|snsm&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|Motor temperature sensor. 12=KTY83, 13=KTY84, 14=Leaf, 15=KTY81&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Inverter&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|pwmfrq&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|PWM frequency. 0=17.6kHz, 1=8.8kHz, 2=4.4kHz, 3=2.2kHz. Needs PWM restart&lt;br /&gt;
|-&lt;br /&gt;
|pwmpol&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|PWM polarity. 0=active high, 1=active low. DO NOT PLAY WITH THIS!&lt;br /&gt;
Needs PWM restart&lt;br /&gt;
|-&lt;br /&gt;
|deadtime&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|255&lt;br /&gt;
|28&lt;br /&gt;
|Deadtime between highside and lowside pulse. 28=800ns, 56=1.5µs. Not always linear, consult STM32 manual. Needs PWM restart&lt;br /&gt;
|-&lt;br /&gt;
|ocurlim&lt;br /&gt;
|A&lt;br /&gt;
| -65535&lt;br /&gt;
|65535&lt;br /&gt;
|100&lt;br /&gt;
|Hardware over current limit. RMS-current times sqrt(2) + some slack. Set negative if il1gain and il2gain are negative.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;minpulse&#039;&#039;&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|1000&lt;br /&gt;
|Narrowest or widest pulse, all other mapped to full off or full on, respectively (Obsolete)&lt;br /&gt;
|-&lt;br /&gt;
|il1gain&lt;br /&gt;
|dig/A&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|4.7&lt;br /&gt;
|Digits per A of current sensor L1&lt;br /&gt;
|-&lt;br /&gt;
|il2gain&lt;br /&gt;
|dig/A&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|4.7&lt;br /&gt;
|Digits per A of current sensor L2&lt;br /&gt;
|-&lt;br /&gt;
|udcgain&lt;br /&gt;
|dig/V&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|6.15&lt;br /&gt;
|Digits per V of DC link&lt;br /&gt;
|-&lt;br /&gt;
|udcofs&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
|DC link 0V offset&lt;br /&gt;
|-&lt;br /&gt;
|udclim&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|540&lt;br /&gt;
|High voltage at which the PWM is shut down&lt;br /&gt;
|-&lt;br /&gt;
|snshs&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|Heatsink temperature sensor. 0=JCurve, 1=Semikron, 2=MBB600, 3=KTY81, 4=PT1000, 5=NTCK45+2k2, 6=Leaf&lt;br /&gt;
|-&lt;br /&gt;
|pinswap&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|7&lt;br /&gt;
|0&lt;br /&gt;
|Swap pins (only &amp;quot;FOC&amp;quot; software). Multiple bits can be set. 1=Swap Current Inputs, 2=Swap Resolver sin/cos, 4=Swap PWM output 1/3&lt;br /&gt;
0001 = 1 Swap Currents ony&lt;br /&gt;
&lt;br /&gt;
0010 = 2 Swap Resolver only&lt;br /&gt;
&lt;br /&gt;
0011 = 3 Swap Resolver and Currents&lt;br /&gt;
&lt;br /&gt;
0100 = 4 Swap PWM 1 and 3 only&lt;br /&gt;
&lt;br /&gt;
0101 = 5 Swap PWM 1 and 3 and Currents&lt;br /&gt;
&lt;br /&gt;
0110 = 6 Swap PWM 1 and 3 and Resolver&lt;br /&gt;
&lt;br /&gt;
0111 = 7 Swap PWM 1 and 3 and Resolver and Currents&lt;br /&gt;
&lt;br /&gt;
1xxx likewise with PWM 2 and 3&lt;br /&gt;
|-&lt;br /&gt;
|modmax&lt;br /&gt;
|dig&lt;br /&gt;
|37000&lt;br /&gt;
|45000&lt;br /&gt;
|37836&lt;br /&gt;
|Values over 37836 over-modulate the PWM sine wave. This can achieve a slightly higher AC voltage at the expense of greater motor losses. (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Derating&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bmslimhigh&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|50&lt;br /&gt;
|Positive throttle limit on BMS under voltage&lt;br /&gt;
|-&lt;br /&gt;
|bmslimlow&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
|0&lt;br /&gt;
| -1&lt;br /&gt;
|Regen limit on BMS over voltage&lt;br /&gt;
|-&lt;br /&gt;
|udcmin&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|450&lt;br /&gt;
|Minimum battery voltage&lt;br /&gt;
|-&lt;br /&gt;
|udcmax&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|520&lt;br /&gt;
|Maximum battery voltage&lt;br /&gt;
|-&lt;br /&gt;
|iacmax&lt;br /&gt;
|A&lt;br /&gt;
|0&lt;br /&gt;
|5000&lt;br /&gt;
|5000&lt;br /&gt;
|Maximum peak AC current&lt;br /&gt;
|-&lt;br /&gt;
|idcmax&lt;br /&gt;
|A&lt;br /&gt;
|0&lt;br /&gt;
|5000&lt;br /&gt;
|5000&lt;br /&gt;
|Maximum DC input current&lt;br /&gt;
|-&lt;br /&gt;
|idcmin&lt;br /&gt;
|A&lt;br /&gt;
| -5000&lt;br /&gt;
|0&lt;br /&gt;
| -5000&lt;br /&gt;
|Maximum DC output current (regen)&lt;br /&gt;
|-&lt;br /&gt;
|idckp&lt;br /&gt;
|dig&lt;br /&gt;
|0.1&lt;br /&gt;
|20&lt;br /&gt;
|2&lt;br /&gt;
|Proportional rate of DC current derating&lt;br /&gt;
|-&lt;br /&gt;
|idcflt&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|11&lt;br /&gt;
|9&lt;br /&gt;
|Filter co-efficient applied to idc prior to derating. Increasing this makes the DC current derating smoother.&lt;br /&gt;
|-&lt;br /&gt;
|tmphsmax&lt;br /&gt;
|°C&lt;br /&gt;
|50&lt;br /&gt;
|150&lt;br /&gt;
|85&lt;br /&gt;
|Maximum permitted temperature of the inverter heatsink. As the temperature gets within 10°C of this limit the throttle will be scaled back by 10% for every degree until it hits the limit.&lt;br /&gt;
|-&lt;br /&gt;
|tmpmmax&lt;br /&gt;
|°C&lt;br /&gt;
|70&lt;br /&gt;
|300&lt;br /&gt;
|300&lt;br /&gt;
|Maximum permitted temperature of the motor. As the temperature gets within 10°C of this limit the throttle will be scaled back by 10% for every degree until it hits the limit.&lt;br /&gt;
|-&lt;br /&gt;
|throtmax&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|100&lt;br /&gt;
|Throttle limit&lt;br /&gt;
|-&lt;br /&gt;
|throtmin&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
|0&lt;br /&gt;
| -100&lt;br /&gt;
|Throttle regen limit&lt;br /&gt;
|-&lt;br /&gt;
|accelmax&lt;br /&gt;
|rpm/10ms&lt;br /&gt;
|1&lt;br /&gt;
|1000&lt;br /&gt;
|1000&lt;br /&gt;
|Maximum permitted acceleration increase (traction control)&lt;br /&gt;
|-&lt;br /&gt;
|accelflt&lt;br /&gt;
|dig&lt;br /&gt;
|1&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|Filter between the motor speed and the acceleration rate limiter. Higher values will smooth the input but will make the acceleration rate limiter react more slowly.&lt;br /&gt;
|-&lt;br /&gt;
|ifltrise&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|32&lt;br /&gt;
|10&lt;br /&gt;
|Controls how quickly slip and amplitude recover. The greater the value, the slower&lt;br /&gt;
|-&lt;br /&gt;
|ifltfall&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|32&lt;br /&gt;
|3&lt;br /&gt;
|Controls how quickly slip and amplitude are reduced on over current. The greater the value, the slower&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Charger&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|chargemode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|4&lt;br /&gt;
|0&lt;br /&gt;
|0=Off, 3=Boost, 4=Buck&lt;br /&gt;
|-&lt;br /&gt;
|chargecur&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|50&lt;br /&gt;
|0&lt;br /&gt;
|Charge current setpoint. Boost mode: charger INPUT current. Buck mode: charger output current&lt;br /&gt;
|-&lt;br /&gt;
|chargekp&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|80&lt;br /&gt;
|Charge controller proportional gain. Lower if you have oscillation, raise to get best power factor.&lt;br /&gt;
|-&lt;br /&gt;
|chargeki&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|10&lt;br /&gt;
|Charge controller integral gain.&lt;br /&gt;
|-&lt;br /&gt;
|chargeflt&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|10&lt;br /&gt;
|8&lt;br /&gt;
|Charge current filtering. Raise if you have oscillations&lt;br /&gt;
|-&lt;br /&gt;
|chargepwmin&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|99&lt;br /&gt;
|0&lt;br /&gt;
|Lowest charge mode duty cycle. This is needed for synchronous converters like in the Prius Gen2 where the lower IGBT is also active in buck mode and actually boosts the battery voltage into the bus capacitor when duty cycle is low.&lt;br /&gt;
|-&lt;br /&gt;
|chargepwmax&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|99&lt;br /&gt;
|90&lt;br /&gt;
|Charge mode duty cycle limit. Especially in boost mode this makes sure you don&#039;t overvolt you IGBTs if there is no battery connected.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Throttle&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|potmin&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
|Value of &amp;quot;pot&amp;quot; when pot isn&#039;t pressed at all&lt;br /&gt;
|-&lt;br /&gt;
|potmax&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|4095&lt;br /&gt;
|Value of &amp;quot;pot&amp;quot; when pot is pushed all the way in&lt;br /&gt;
|-&lt;br /&gt;
|pot2min&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|4095&lt;br /&gt;
|Value of &amp;quot;pot2&amp;quot; when regen pot is in 0 position&lt;br /&gt;
|-&lt;br /&gt;
|pot2max&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|4095&lt;br /&gt;
|Value of &amp;quot;pot2&amp;quot; when regen pot is in full on position&lt;br /&gt;
|-&lt;br /&gt;
|potmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|6&lt;br /&gt;
|0&lt;br /&gt;
|0=Pot 1 is throttle and pot 2 is regen strength preset&lt;br /&gt;
1=Pot 2 is proportional to pot 1 (redundancy)&lt;br /&gt;
&lt;br /&gt;
2=Throttle/regen controlled via CAN (like 0)&lt;br /&gt;
&lt;br /&gt;
3=Throttle via CAN with redundancy (like 1)&lt;br /&gt;
&lt;br /&gt;
4=Bidirectional throttle sets torque and direction (e.g. for boats)&lt;br /&gt;
&lt;br /&gt;
6=Bidirectional throttle controlled via CAN (like 4)&lt;br /&gt;
|-&lt;br /&gt;
|potlinearity&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|100&lt;br /&gt;
|Blend between a fully linear pedal (100%) and fully quadratic (0%). The throttle output is defined as potnom²*(1-potlinearity) + potnom * potlinearity. Regen is always linear.&lt;br /&gt;
|-&lt;br /&gt;
|throtramp&lt;br /&gt;
|%/10ms&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|100&lt;br /&gt;
|Max positive throttle slew rate&lt;br /&gt;
|-&lt;br /&gt;
|throtramprpm&lt;br /&gt;
|rpm&lt;br /&gt;
|0&lt;br /&gt;
|20000&lt;br /&gt;
|20000&lt;br /&gt;
|No throttle ramping above this speed&lt;br /&gt;
|-&lt;br /&gt;
|ampmin&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|10&lt;br /&gt;
|Minimum relative sine amplitude (only &amp;quot;sine&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|slipstart&lt;br /&gt;
|%&lt;br /&gt;
|10&lt;br /&gt;
|100&lt;br /&gt;
|50&lt;br /&gt;
|% positive throttle travel at which slip is increased (only &amp;quot;sine&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|sinecurve&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0=VoltageSlip - The first half of the throttle increases voltage but keeps slip at fslipin. Then the second half of the throttle increases slip up to fslipmax.&lt;br /&gt;
&lt;br /&gt;
1=Simultaneous - Increases slip and voltage at the same time across the whole range of the throttle. Can provide smoother throttle response.&lt;br /&gt;
(only &amp;quot;sine&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|throtfilter&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|10&lt;br /&gt;
|4&lt;br /&gt;
|How heavily the throttle is filtered. Lowering will increase throttle response at the expense of stability.(only &amp;quot;sine&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|throtcur&lt;br /&gt;
|A/%&lt;br /&gt;
| -10&lt;br /&gt;
|10&lt;br /&gt;
|1&lt;br /&gt;
|Motor current per % of throttle travel (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Regen&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|brknompedal / brakeregen&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
|0&lt;br /&gt;
| -50&lt;br /&gt;
|Foot on brake pedal regen torque&lt;br /&gt;
|-&lt;br /&gt;
|regenramp&lt;br /&gt;
|%/10ms&lt;br /&gt;
|0.1&lt;br /&gt;
|100&lt;br /&gt;
|100&lt;br /&gt;
|Ramp speed when entering regen. E.g. when you set brkmax to -30% and regenramp to 1, it will take 300ms to arrive at brake force of -60%&lt;br /&gt;
|-&lt;br /&gt;
|brknom / regentravel&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|30&lt;br /&gt;
|Range of throttle pedal travel allocated to regen&lt;br /&gt;
|-&lt;br /&gt;
|brkmax / offthrotregen&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
| 0&lt;br /&gt;
| -30&lt;br /&gt;
|Foot-off throttle regen torque&lt;br /&gt;
|-&lt;br /&gt;
|brkcruise / cruiseregen&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
|0&lt;br /&gt;
| -30&lt;br /&gt;
|Maximum regen of cruise control&lt;br /&gt;
|-&lt;br /&gt;
|brkrampstr / regenrampstr&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|400&lt;br /&gt;
|10&lt;br /&gt;
|Below this frequency the regen torque is reduced linearly with the frequency&lt;br /&gt;
|-&lt;br /&gt;
|maxregentravelhz &lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|0&lt;br /&gt;
|Frequency at which full regentravel is used. Below this frequency regentravel is linearly scaled down with frequency. Allows deadzone-free throttle reaction at standstill and low speed&lt;br /&gt;
|-&lt;br /&gt;
|brkout / brklightout&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
| -1&lt;br /&gt;
| -50&lt;br /&gt;
|Activate brake light output at this amount of braking force&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Automation&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|idlespeed&lt;br /&gt;
|rpm&lt;br /&gt;
| -100&lt;br /&gt;
|1000&lt;br /&gt;
| -100&lt;br /&gt;
|Motor idle speed. Set to -100 to disable idle function. When idle speed controller is enabled, brake pedal must be pressed on start.&lt;br /&gt;
|-&lt;br /&gt;
|idlethrotlim&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|50&lt;br /&gt;
|Throttle limit of idle speed controller&lt;br /&gt;
|-&lt;br /&gt;
|idlemode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|Motor idle speed mode. 0=always run idle speed controller, 1=only run it when brake pedal is released, 2=like 1 but only when cruise switch is on, 3=off, 4=Hill Hold&lt;br /&gt;
|-&lt;br /&gt;
|holdkp&lt;br /&gt;
|&lt;br /&gt;
| -100&lt;br /&gt;
|0&lt;br /&gt;
| -0.25&lt;br /&gt;
|How hard the throttle should be applied to counteract rollback in hill hold. Higher values reduce rollback at the risk of introducing oscillation due to sensor noise.&lt;br /&gt;
|-&lt;br /&gt;
|speedkp&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|1&lt;br /&gt;
|Speed controller gain (Cruise and idle speed). Decrease if speed oscillates. Increase for faster load regulation&lt;br /&gt;
|-&lt;br /&gt;
|speedflt&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|16&lt;br /&gt;
|1&lt;br /&gt;
|Filter before cruise controller&lt;br /&gt;
|-&lt;br /&gt;
|cruisemode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0=button (set when button pressed, reset with brake pedal), 1=switch (set when switched on, reset when switched off or brake pedal)&lt;br /&gt;
|-&lt;br /&gt;
|cruisethrotlim&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|50&lt;br /&gt;
|Amount of throttle cruise control is allowed to command&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Contactor Control&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|udcsw&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|330&lt;br /&gt;
|Voltage at which the DC contactor is allowed to close&lt;br /&gt;
|-&lt;br /&gt;
|udcswbuck&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|540&lt;br /&gt;
|Voltage at which the DC contactor is allowed to close in buck charge mode&lt;br /&gt;
|-&lt;br /&gt;
|tripmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|What to do with relays at a shutdown event. 0=All off, 1=Keep DC switch closed, 2=close precharge relay&lt;br /&gt;
|-&lt;br /&gt;
|bootprec&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|Engage precharge relay in boot loader. Introduced for enabling Prius Gen3 DC/DC converter when precharge relay is released. Use together with tripmode=2&lt;br /&gt;
|-&lt;br /&gt;
|outmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|0=DC switch output, 1=Motor temp controls the fan output, 2=Heatsink temp controls fan output&lt;br /&gt;
|-&lt;br /&gt;
|fanthresh&lt;br /&gt;
|°C&lt;br /&gt;
|20&lt;br /&gt;
|300&lt;br /&gt;
|50&lt;br /&gt;
|Temperature at which the fan output is turned on when outmode is 1 or 2&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Auxillary PWM&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|pwmfunc&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|Quantity that controls the PWM output. 0=tmpm, 1=tmphs, 2=speed&lt;br /&gt;
|-&lt;br /&gt;
|pwmgain&lt;br /&gt;
|dig/C&lt;br /&gt;
|0&lt;br /&gt;
|65535&lt;br /&gt;
|100&lt;br /&gt;
|Gain of PWM output&lt;br /&gt;
|-&lt;br /&gt;
|pwmofs&lt;br /&gt;
|dig&lt;br /&gt;
| -65535&lt;br /&gt;
|65535&lt;br /&gt;
|0&lt;br /&gt;
|Offset of PWM output, 4096=full on&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Communication&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|canspeed&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Baud rate of CAN interface 0=250k, 1=500k, 2=800k, 3=1M&lt;br /&gt;
|-&lt;br /&gt;
|canperiod&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0=send configured CAN messages every 100ms, 1=every 10ms&lt;br /&gt;
|-&lt;br /&gt;
|nodeid&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|63&lt;br /&gt;
|1&lt;br /&gt;
|Node ID for CAN SDO messages and for selective enabling of UART when sharing one ESP8266 module between multiple processors.&lt;br /&gt;
|-&lt;br /&gt;
|controlid&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|2047&lt;br /&gt;
|63&lt;br /&gt;
|The CAN ID used for controlling the [[CAN communication#Inverter_control_via_CAN_-_new!|controlling the inverter via CAN]]&lt;br /&gt;
|-&lt;br /&gt;
|controlcheck&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0=Check the counter field in canio CAN frames &#039;&#039;&#039;for legacy VCUs only&#039;&#039;&#039;, 1=Validate the 8-bit truncated STM32 CRC in the canio frame&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Testing&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|fslipspnt&lt;br /&gt;
|Hz&lt;br /&gt;
| -100&lt;br /&gt;
|100&lt;br /&gt;
|0&lt;br /&gt;
|Slip setpoint in mode 2. Written by software in mode 1&lt;br /&gt;
|-&lt;br /&gt;
|ampnom&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|0&lt;br /&gt;
|Nominal amplitude in mode 2. Written by software in mode 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Spot values ==&lt;br /&gt;
The following values are available for diagnostic purposes. Type&lt;br /&gt;
 get &lt;br /&gt;
to get the current value. To read more then one you can provide a list like&lt;br /&gt;
 get il1,il2,udc&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Unit&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|&lt;br /&gt;
|Firmware version&lt;br /&gt;
|-&lt;br /&gt;
|hwver&lt;br /&gt;
|&lt;br /&gt;
|Hardware version&lt;br /&gt;
|-&lt;br /&gt;
|opmode&lt;br /&gt;
|&lt;br /&gt;
|Operating mode. 0=Off, 1=Run, 2=Manual_run, 3=Boost, 4=Buck, 5=Sine, 6=2 Phase sine&lt;br /&gt;
|-&lt;br /&gt;
|lasterr&lt;br /&gt;
|&lt;br /&gt;
|Last error message&lt;br /&gt;
|-&lt;br /&gt;
|udc&lt;br /&gt;
|V&lt;br /&gt;
|DC link voltage&lt;br /&gt;
|-&lt;br /&gt;
|uac&lt;br /&gt;
|V&lt;br /&gt;
|Calculated AC voltage (only &amp;quot;sine&amp;quot; software) &lt;br /&gt;
|-&lt;br /&gt;
|idc&lt;br /&gt;
|A&lt;br /&gt;
|Calculated DC current&lt;br /&gt;
|-&lt;br /&gt;
|il1&lt;br /&gt;
|A&lt;br /&gt;
|AC current L1&lt;br /&gt;
|-&lt;br /&gt;
|il2&lt;br /&gt;
|A&lt;br /&gt;
|AC current L2&lt;br /&gt;
|-&lt;br /&gt;
|il1rms&lt;br /&gt;
|A&lt;br /&gt;
|RMS current L1 (only &amp;quot;sine&amp;quot; software) &lt;br /&gt;
|-&lt;br /&gt;
|il2rms&lt;br /&gt;
|A&lt;br /&gt;
|RMS current L2 (only &amp;quot;sine&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|ilmax&lt;br /&gt;
|A&lt;br /&gt;
|Calculated max of il1, il2, il3 (only &amp;quot;sine&amp;quot; software) &lt;br /&gt;
|-&lt;br /&gt;
|boostcalc&lt;br /&gt;
|A&lt;br /&gt;
|DC link adjusted boost setting (only &amp;quot;sine&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|fweakcalc&lt;br /&gt;
|A&lt;br /&gt;
|DC link adjusted fweak setting (only &amp;quot;sine&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|id&lt;br /&gt;
|A&lt;br /&gt;
|Current in the direct(d) axis (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|iq&lt;br /&gt;
|A&lt;br /&gt;
|Current in the quadrature(q) axis (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|ifw&lt;br /&gt;
|A&lt;br /&gt;
|Field weakening current (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|ud&lt;br /&gt;
|dig&lt;br /&gt;
|Computed voltage in the direct(d) axis (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|uq&lt;br /&gt;
|dig&lt;br /&gt;
|Computed voltage in the quadrature(q) axis (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|uexc&lt;br /&gt;
|dig&lt;br /&gt;
|Computed exciter voltage (only &amp;quot;FOC&amp;quot; software for the Renault Zoe variant)&lt;br /&gt;
|-&lt;br /&gt;
|anticog&lt;br /&gt;
|dig&lt;br /&gt;
|Amplitude of the anti-cogging modulation waveform (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|fstat&lt;br /&gt;
|Hz&lt;br /&gt;
|Stator frequency&lt;br /&gt;
|-&lt;br /&gt;
|speed&lt;br /&gt;
|rpm&lt;br /&gt;
|Motor speed&lt;br /&gt;
|-&lt;br /&gt;
|cruisespeed&lt;br /&gt;
|rpm&lt;br /&gt;
|Motor RPM set point for cruise control if cruisemode=CAN&lt;br /&gt;
|-&lt;br /&gt;
|turns&lt;br /&gt;
|&lt;br /&gt;
|Number of turns the motor completed since power up&lt;br /&gt;
|-&lt;br /&gt;
|amp&lt;br /&gt;
|dig&lt;br /&gt;
|Sine amplitude, 37813=max&lt;br /&gt;
|-&lt;br /&gt;
|angle&lt;br /&gt;
|°&lt;br /&gt;
|Motor rotor angle, 0-360°. When using the SINE software, the slip is added to the rotor position.&lt;br /&gt;
This is not the physical angle, but a &amp;quot;virtual&amp;quot; angle. E.g. if your motor has four pole pairs (motor and resolver), then per one physical revolution the &amp;quot;angle&amp;quot; will change four times between 0 and 360°. Discussed here: https://openinverter.org/forum/viewtopic.php?p=71253#p71253&lt;br /&gt;
|-&lt;br /&gt;
|pot&lt;br /&gt;
|dig&lt;br /&gt;
|Pot value, 4095=max&lt;br /&gt;
|-&lt;br /&gt;
|pot2&lt;br /&gt;
|dig&lt;br /&gt;
|Regen Pot value, 4095=max&lt;br /&gt;
|-&lt;br /&gt;
|regenpreset&lt;br /&gt;
|%&lt;br /&gt;
|Regen preset value which can come from pot2 in potmode=0 or received via CAN&lt;br /&gt;
|-&lt;br /&gt;
|potnom&lt;br /&gt;
|%&lt;br /&gt;
|Scaled pot value, 0 accel.&lt;br /&gt;
potnom also includes the deratings. So say you have programmed udcmin=300V and you are tuning without HV, so udc=0, potnom will never be positive because it thinks the battery voltage is low. Discussed here: https://openinverter.org/forum/viewtopic.php?p=62930#p62930&lt;br /&gt;
&lt;br /&gt;
range:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; negative means regeneration (e.g. -30%, according to [[Schematics and Instructions|Schematics and Instructions - openinverter.org wiki]])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; zero means &amp;quot;zero torque request&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; 100% means full acceleraton.&lt;br /&gt;
|-&lt;br /&gt;
|dir / seldir&lt;br /&gt;
|&lt;br /&gt;
|Selected rotation direction. -1=REV, 0=Neutral, 1=FWD&lt;br /&gt;
|-&lt;br /&gt;
|rotordir&lt;br /&gt;
|&lt;br /&gt;
|Actual rotor direction&lt;br /&gt;
|-&lt;br /&gt;
|tmphs&lt;br /&gt;
|°C&lt;br /&gt;
|Heatsink temperature&lt;br /&gt;
|-&lt;br /&gt;
|tmpm&lt;br /&gt;
|°C&lt;br /&gt;
|Motor temperature&lt;br /&gt;
|-&lt;br /&gt;
|uaux&lt;br /&gt;
|V&lt;br /&gt;
|Auxiliary voltage (i.e. 12V system). Measured on pin 11 (mprot)&lt;br /&gt;
|-&lt;br /&gt;
|pwmio&lt;br /&gt;
|&lt;br /&gt;
|raw state of PWM outputs at power up&lt;br /&gt;
|-&lt;br /&gt;
|canio&lt;br /&gt;
|&lt;br /&gt;
|Digital IO bits received via [[CAN communication#Controlling Digital IO via CAN|CAN]]&lt;br /&gt;
|-&lt;br /&gt;
|din_cruise&lt;br /&gt;
|&lt;br /&gt;
|Cruise Control. This pin activates the cruise control with the current speed. Pressing again updates the speed set point.&lt;br /&gt;
|-&lt;br /&gt;
|din_start&lt;br /&gt;
|&lt;br /&gt;
|State of digital input &amp;quot;start&amp;quot;. This pin starts inverter operation&lt;br /&gt;
|-&lt;br /&gt;
|din_brake&lt;br /&gt;
|&lt;br /&gt;
|State of digital input &amp;quot;brake&amp;quot;. This pin sets maximum regen torque (brknompedal). Cruise control is disabled.&lt;br /&gt;
|-&lt;br /&gt;
|din_mprot&lt;br /&gt;
|&lt;br /&gt;
|State of digital input &amp;quot;motor protection switch&amp;quot;. Shuts down the inverter when =0&lt;br /&gt;
|-&lt;br /&gt;
|din_forward&lt;br /&gt;
|&lt;br /&gt;
|Direction forward&lt;br /&gt;
|-&lt;br /&gt;
|din_reverse&lt;br /&gt;
|&lt;br /&gt;
|Direction backward&lt;br /&gt;
|-&lt;br /&gt;
|din_emcystop&lt;br /&gt;
|&lt;br /&gt;
|State of digital input &amp;quot;emergency stop&amp;quot;. Shuts down the inverter when =0&lt;br /&gt;
|-&lt;br /&gt;
|din_ocur&lt;br /&gt;
|&lt;br /&gt;
|Over current detected&lt;br /&gt;
|-&lt;br /&gt;
|din_desat&lt;br /&gt;
|&lt;br /&gt;
|Gate driver desaturation event&lt;br /&gt;
|-&lt;br /&gt;
|din_bms&lt;br /&gt;
|&lt;br /&gt;
|BMS over voltage/under voltage&lt;br /&gt;
|-&lt;br /&gt;
|uptime&lt;br /&gt;
|&lt;br /&gt;
|The number of 10ms ticks since power was applied to the inverter&lt;br /&gt;
|-&lt;br /&gt;
|cpuload&lt;br /&gt;
|%&lt;br /&gt;
|CPU load for everything except communication&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tuning Guide ==&lt;br /&gt;
First you want to find a flat surface - a parking lot etc. so you can drive and stop without checking traffic. Change only one parameter at a time and save settings that work! &lt;br /&gt;
&lt;br /&gt;
1. set fslipmin so that you feel car taking off smoothly and try to change it by +/-0,1Hz and check differences in starting. Save when satisfied.&lt;br /&gt;
&lt;br /&gt;
2. lower boost value in 100 point until motor jitters at start. Then return it to last good value.&lt;br /&gt;
&lt;br /&gt;
3. try lowering ampmin in 0,1 increments and observe throttle travel. When throttle is not just smooth but becomes sluggish return some previous increments until throttle reaction is acceptable.&lt;br /&gt;
&lt;br /&gt;
4. change fweak value in +/-10Hz increments from starting point and observe torque in starting. This value is very dependent on battery voltage and is very subjective.&lt;br /&gt;
&lt;br /&gt;
Now you find a hill or ramp and set car on it. You want to hold car in position on slope just using throttle pedal. If there parameters are not good motor will jump or will feel sluggish&lt;br /&gt;
&lt;br /&gt;
1. add boost if motor is oscillating if it is smooth reduce it in 100 point increments until you get oscillation. Then return to last good value&lt;br /&gt;
&lt;br /&gt;
2. reduce/increase ampmin in 0,25 increments untill you get oscilation in motor and return last good value&lt;br /&gt;
&lt;br /&gt;
Now set the car into a hill to set fslipmax. Warning full throttle will be used. Be sure there is no other traffic!&lt;br /&gt;
&lt;br /&gt;
Set fslipmax to chosen value (guess it at 2xfslipmin if you have no other way) and try to take off with full throttle.&lt;br /&gt;
&lt;br /&gt;
If car feels sluggish with full throttle you have to add more slip.&lt;br /&gt;
&lt;br /&gt;
If motor starts to jitter there is too much slip. Try to reduce it in 0.1Hz increments.&lt;br /&gt;
&lt;br /&gt;
When you feel satisfied with settings save them and go on setting regen and braking effect.&lt;br /&gt;
&lt;br /&gt;
[[Category:OpenInverter]] [[Category:Inverter]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Parameters&amp;diff=6002</id>
		<title>Parameters</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Parameters&amp;diff=6002"/>
		<updated>2025-12-13T19:06:06Z</updated>

		<summary type="html">&lt;p&gt;Johu: description of cruisethrotlim&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The inverter can be adapted to many kinds of motors, battery packs and driver preferences by changing parameters. A video on parameters is here: https://youtu.be/GQNQbBUsqf0&lt;br /&gt;
&lt;br /&gt;
A Parameter Database with common usage scenarios is here: https://openinverter.org/parameters/&lt;br /&gt;
&lt;br /&gt;
A synchronous motor tuning guide is here: [[Using FOC Software]]&lt;br /&gt;
&lt;br /&gt;
== Motor Parameters ==&lt;br /&gt;
The parameters to adjust the inverter to the motor are boost, fweak, fslipmin, fslipmax, polepairs, fmin, fmax and numimp.&lt;br /&gt;
&lt;br /&gt;
They can be deduced from the motors nameplate or by trying which feels best. For illustration we will assume a bus voltage of 500V and a 4-pole (p=2) motor with a nominal speed of n=1450rpm@f=50Hz and 230V. With 500V DC an AC voltage of 500/1.41=355V can be generated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;boost&#039;&#039;&#039; is the digital amplitude of the sine wave at motor startup. It is needed to overcome the motors ohmic resistance. Digital amplitude is an internal quantity. 0 means no voltage is generated at all, 37813 means the full possible voltage is generated.&lt;br /&gt;
&lt;br /&gt;
Example: boost=1700&lt;br /&gt;
&lt;br /&gt;
At full throttle an effective voltage of 1700/37813*355=16V is generated. The best way to find a feasible value is to optimize it in the finished car. Start with the default value and increase until you get a good startup.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fweak&#039;&#039;&#039; is the frequency at which the full possible voltage is generated. It is also the point of the highest motor power. Beyond fweak torque will decrease to the square of frequency and thus power will decrease linear with frequency.&lt;br /&gt;
&lt;br /&gt;
A starting point for fweak is the motors nameplate:&lt;br /&gt;
&lt;br /&gt;
[[File:Fweak.png|210x210px]]&lt;br /&gt;
&lt;br /&gt;
With our illustration motor fweak=(355 V/230 V) * 50 Hz = 77 Hz. fweak can be configured lower than that resulting in more torque at the low end.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fslipmin&#039;&#039;&#039;/&#039;&#039;&#039;fslipmax&#039;&#039;&#039; is the slip frequency at which the motor is run at minimum/maximum throttle. fslipmin is set to the motors optimal slip frequency which can be deduced from the nameplate. fslipmin=f-p*n/60. With our illustration motor fslipmin=50-2*1450/60=1.66Hz. fslipmax can be set as high as breakdown torque which is not found on the nameplate. So its best found experimental starting with 2*fslipmin. If set too high the motor will start to rock violently on startup, possibly tripping the over current limit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;polepairs&#039;&#039;&#039; is set to p, 2 in our example.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fmin&#039;&#039;&#039; should be set just below fslipmin.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fmax&#039;&#039;&#039; is used to limit the speed of the motor. The default 200Hz would result in a maximum speed of about 6000rpm.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ampmin&#039;&#039;&#039; Is the minimum relative amplitude fed to the motor. At very low amplitudes the motor does not generate any noticable torque and throttle travel is wasted that does nothing. Find out a good value by experimenting. &lt;br /&gt;
&lt;br /&gt;
== Inverter Parameters ==&lt;br /&gt;
&#039;&#039;&#039;pwmfrq&#039;&#039;&#039; Sets the frequency at which the IGBTs are switched on and off. The faster the switching the higher the losses in the inverter and the lower the losses in the motor. The maximum frequency is also limited by the driver boards as explained here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;pwmpol&#039;&#039;&#039; Sets the polarity of the PWM signals, active high or active low. Do not touch this parameter if you don&#039;t know what you&#039;re doing. When configured inversely it will blow up your power stage immediatly if connected to a potent power source like batteries.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;deadtime&#039;&#039;&#039; The time between switching off one IGBT and switching on the other. 28=800ns, 63=1.5µs. More values can be found in the STM32 data sheet. Make sure to test the deadtime at low power levels. Setting the deadtime too low while operating of a potent power source can blow up your power stage! &lt;br /&gt;
&lt;br /&gt;
== Parameter Reference ==&lt;br /&gt;
The following parameters currently exist to customize the controller software. Type&lt;br /&gt;
 set param &amp;lt;value&amp;gt;&lt;br /&gt;
to change it. Type&lt;br /&gt;
 get param&lt;br /&gt;
to get the current value.&lt;br /&gt;
&lt;br /&gt;
Parameters are internally stored with 5 binary fraction digits. That means there are 32 possible values after the decimal point. So when you set a value of 0.35 you might end up with 0.33. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Unit&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Min&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Max&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Default&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Motor (FOC)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|iqkp&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|20000&lt;br /&gt;
|64&lt;br /&gt;
|Current controller proportional gain. Low inductance/resistance motors need less, high inductance/resistance motors more&lt;br /&gt;
|-&lt;br /&gt;
|idkp&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|20000&lt;br /&gt;
|64&lt;br /&gt;
|Same as above but often a little higher then iqkp&lt;br /&gt;
|-&lt;br /&gt;
|curki&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|100000&lt;br /&gt;
|20000&lt;br /&gt;
|Current controller integral gain (id and iq)&lt;br /&gt;
|-&lt;br /&gt;
|exckp&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|20000&lt;br /&gt;
|3000&lt;br /&gt;
|Exciter controller gain (Renault Zoe variant only)&lt;br /&gt;
|-&lt;br /&gt;
|cogkp&lt;br /&gt;
|&lt;br /&gt;
| -1000&lt;br /&gt;
|1000&lt;br /&gt;
|0&lt;br /&gt;
|[https://openinverter.org/forum/viewtopic.php?t=5660 Anti-cogging modulator] gain. This generates a trapezoidal wave form to counter the cogging current of IPM motors.&lt;br /&gt;
|-&lt;br /&gt;
|cogph&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|65535&lt;br /&gt;
|0&lt;br /&gt;
|Anti-cogging modulator phase angle between cogging current and electrical rotor angle&lt;br /&gt;
|-&lt;br /&gt;
|cogmax&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|30000&lt;br /&gt;
|0&lt;br /&gt;
|Maximum amplitude of the anti-cogging current&lt;br /&gt;
|-&lt;br /&gt;
|vlimflt&lt;br /&gt;
|&lt;br /&gt;
| 0&lt;br /&gt;
|16&lt;br /&gt;
| 10&lt;br /&gt;
|Amplitude limiting field weakening filter&lt;br /&gt;
|-&lt;br /&gt;
|vlimmargin&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|10000&lt;br /&gt;
|2500&lt;br /&gt;
|Field weakening is brought in at modmax-vlimmargin. Increase if you get short bursts of unwanted regen at speed&lt;br /&gt;
|-&lt;br /&gt;
|fwcurmax&lt;br /&gt;
|A&lt;br /&gt;
| -1000 &lt;br /&gt;
|0&lt;br /&gt;
| -100&lt;br /&gt;
|Maximum field weakening current. Must be set to critical current of motor (TODO: link forum). Set to 0 for disabling field weakening&lt;br /&gt;
|-&lt;br /&gt;
|excurmax&lt;br /&gt;
|A&lt;br /&gt;
|0&lt;br /&gt;
|10&lt;br /&gt;
|0&lt;br /&gt;
|Exciter current maximum (Renault Zoe variant only)&lt;br /&gt;
|-&lt;br /&gt;
|lqminusld&lt;br /&gt;
|mH&lt;br /&gt;
| 0&lt;br /&gt;
|1000&lt;br /&gt;
| 0&lt;br /&gt;
|Difference between d and q axis inductance. The higher, the more d-current is brought in for additional reluctance torque&lt;br /&gt;
|-&lt;br /&gt;
|fluxlinkage&lt;br /&gt;
|mWeber&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|90&lt;br /&gt;
|Magnetic link between rotor and stator, shapes MTPA curve&lt;br /&gt;
|-&lt;br /&gt;
|syncadv&lt;br /&gt;
|dig/Hz&lt;br /&gt;
|  0&lt;br /&gt;
|65535&lt;br /&gt;
|10&lt;br /&gt;
|Shifts &amp;quot;syncofs&amp;quot; downwards/upwards with frequency. Must be set so that ud remains at 0 when coasting below field weakening speed. &#039;&#039;&#039;SUPER DANGEROUS!&#039;&#039;&#039; Setting it wrong can cause unwanted acceleration.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;curkifrqgain&#039;&#039;&lt;br /&gt;
|dig/Hz&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|50&lt;br /&gt;
|Current controllers integral gain frequency coefficient (deprecated, removed)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;ffwstart&#039;&#039;&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|200&lt;br /&gt;
|Starting point of field weakening controller. Below that frequency it is disabled, above it its gain is increased proportional to frequency and hits &#039;&#039;fwkp&#039;&#039; at &#039;&#039;fmax&#039;&#039;. (deprecated, removed in latest release)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Motor (sine)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|boost&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|37813&lt;br /&gt;
|1700&lt;br /&gt;
|0 Hz Boost in digit. 1000 digit ~ 2.5%&lt;br /&gt;
|-&lt;br /&gt;
|fweakstrt&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|400&lt;br /&gt;
|Fweak value at potnom &amp;lt; 35%. Can improve low speed stability and reduce oscillation when set higher than fweak.  Set equal to fweak to disable. &lt;br /&gt;
|-&lt;br /&gt;
|fweak&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|400&lt;br /&gt;
|67&lt;br /&gt;
|Frequency where V/Hz reaches its peak&lt;br /&gt;
|-&lt;br /&gt;
|fconst&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|400&lt;br /&gt;
|400&lt;br /&gt;
|Maximum slip is increased from fslipmax to fslipconstmax as frequency approaches this value. Only effective when greater than fweak.&lt;br /&gt;
|-&lt;br /&gt;
|udcnom&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|0&lt;br /&gt;
|Nominal voltage for fweak and boost. fweak and boost are scaled to the actual dc voltage. 0=don&#039;t scale&lt;br /&gt;
|-&lt;br /&gt;
|fslipmin&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|1&lt;br /&gt;
|Slip frequency at minimum throttle&lt;br /&gt;
|-&lt;br /&gt;
|fslipmax&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|3&lt;br /&gt;
|Slip frequency at maximum throttle&lt;br /&gt;
|-&lt;br /&gt;
|fslipconstmax&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|10&lt;br /&gt;
|5&lt;br /&gt;
|Slip frequency at maximum throttle and fconst. Set equal to fslipmax to disable.&lt;br /&gt;
|-&lt;br /&gt;
|fmin&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|400&lt;br /&gt;
|1&lt;br /&gt;
|Below this frequency no voltage is generated&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Motor (common)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|polepairs&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|16&lt;br /&gt;
|2&lt;br /&gt;
|Pole pairs of motor (e.g. 4-pole motor: 2 pole pairs)&lt;br /&gt;
|-&lt;br /&gt;
|respolepairs&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|16&lt;br /&gt;
|1&lt;br /&gt;
|Pole pairs of resolver (normally same as polepairs of motor, but sometimes 1)&lt;br /&gt;
|-&lt;br /&gt;
|sincosofs&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|4096&lt;br /&gt;
|2048&lt;br /&gt;
|Mid point of sin/cos chip&lt;br /&gt;
|-&lt;br /&gt;
|encflt&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|16&lt;br /&gt;
|4&lt;br /&gt;
|Filter constant between pulse encoder and speed calculation. Makes up for slightly uneven pulse distribution&lt;br /&gt;
|-&lt;br /&gt;
|encmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|5&lt;br /&gt;
|0&lt;br /&gt;
|0=single channel encoder, 1=quadrature encoder,&lt;br /&gt;
2=quadrature /w index pulse, &lt;br /&gt;
3=SPI (deprecated),&lt;br /&gt;
4=Resolver,&lt;br /&gt;
5=sin/cos chip&lt;br /&gt;
|-&lt;br /&gt;
|fmax&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|400&lt;br /&gt;
|200&lt;br /&gt;
|At this frequency rev limiting kicks in&lt;br /&gt;
|-&lt;br /&gt;
|numimp&lt;br /&gt;
|Imp/rev&lt;br /&gt;
|8&lt;br /&gt;
|8192&lt;br /&gt;
|60&lt;br /&gt;
|Pulse encoder pulses per turn&lt;br /&gt;
|-&lt;br /&gt;
|dirchrpm&lt;br /&gt;
|rpm&lt;br /&gt;
|0&lt;br /&gt;
|2000&lt;br /&gt;
|100&lt;br /&gt;
|Motor speed at which direction change is allowed&lt;br /&gt;
|-&lt;br /&gt;
|dirmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0=button (momentary pulse selects forward/reverse), 1=switch (forward or reverse signal must be constantly high)&lt;br /&gt;
|-&lt;br /&gt;
|syncofs&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|65535&lt;br /&gt;
|0&lt;br /&gt;
|Phase shift of sine wave after receiving index pulse&lt;br /&gt;
|-&lt;br /&gt;
|snsm&lt;br /&gt;
|&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|Motor temperature sensor. 12=KTY83, 13=KTY84, 14=Leaf, 15=KTY81&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Inverter&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|pwmfrq&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|PWM frequency. 0=17.6kHz, 1=8.8kHz, 2=4.4kHz, 3=2.2kHz. Needs PWM restart&lt;br /&gt;
|-&lt;br /&gt;
|pwmpol&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|PWM polarity. 0=active high, 1=active low. DO NOT PLAY WITH THIS!&lt;br /&gt;
Needs PWM restart&lt;br /&gt;
|-&lt;br /&gt;
|deadtime&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|255&lt;br /&gt;
|28&lt;br /&gt;
|Deadtime between highside and lowside pulse. 28=800ns, 56=1.5µs. Not always linear, consult STM32 manual. Needs PWM restart&lt;br /&gt;
|-&lt;br /&gt;
|ocurlim&lt;br /&gt;
|A&lt;br /&gt;
| -65535&lt;br /&gt;
|65535&lt;br /&gt;
|100&lt;br /&gt;
|Hardware over current limit. RMS-current times sqrt(2) + some slack. Set negative if il1gain and il2gain are negative.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;minpulse&#039;&#039;&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|1000&lt;br /&gt;
|Narrowest or widest pulse, all other mapped to full off or full on, respectively (Obsolete)&lt;br /&gt;
|-&lt;br /&gt;
|il1gain&lt;br /&gt;
|dig/A&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|4.7&lt;br /&gt;
|Digits per A of current sensor L1&lt;br /&gt;
|-&lt;br /&gt;
|il2gain&lt;br /&gt;
|dig/A&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|4.7&lt;br /&gt;
|Digits per A of current sensor L2&lt;br /&gt;
|-&lt;br /&gt;
|udcgain&lt;br /&gt;
|dig/V&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|6.15&lt;br /&gt;
|Digits per V of DC link&lt;br /&gt;
|-&lt;br /&gt;
|udcofs&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
|DC link 0V offset&lt;br /&gt;
|-&lt;br /&gt;
|udclim&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|540&lt;br /&gt;
|High voltage at which the PWM is shut down&lt;br /&gt;
|-&lt;br /&gt;
|snshs&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|Heatsink temperature sensor. 0=JCurve, 1=Semikron, 2=MBB600, 3=KTY81, 4=PT1000, 5=NTCK45+2k2, 6=Leaf&lt;br /&gt;
|-&lt;br /&gt;
|pinswap&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|7&lt;br /&gt;
|0&lt;br /&gt;
|Swap pins (only &amp;quot;FOC&amp;quot; software). Multiple bits can be set. 1=Swap Current Inputs, 2=Swap Resolver sin/cos, 4=Swap PWM output 1/3&lt;br /&gt;
0001 = 1 Swap Currents ony&lt;br /&gt;
&lt;br /&gt;
0010 = 2 Swap Resolver only&lt;br /&gt;
&lt;br /&gt;
0011 = 3 Swap Resolver and Currents&lt;br /&gt;
&lt;br /&gt;
0100 = 4 Swap PWM 1 and 3 only&lt;br /&gt;
&lt;br /&gt;
0101 = 5 Swap PWM 1 and 3 and Currents&lt;br /&gt;
&lt;br /&gt;
0110 = 6 Swap PWM 1 and 3 and Resolver&lt;br /&gt;
&lt;br /&gt;
0111 = 7 Swap PWM 1 and 3 and Resolver and Currents&lt;br /&gt;
&lt;br /&gt;
1xxx likewise with PWM 2 and 3&lt;br /&gt;
|-&lt;br /&gt;
|modmax&lt;br /&gt;
|dig&lt;br /&gt;
|37000&lt;br /&gt;
|45000&lt;br /&gt;
|37836&lt;br /&gt;
|Values over 37836 over-modulate the PWM sine wave. This can achieve a slightly higher AC voltage at the expense of greater motor losses. (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Derating&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|bmslimhigh&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|50&lt;br /&gt;
|Positive throttle limit on BMS under voltage&lt;br /&gt;
|-&lt;br /&gt;
|bmslimlow&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
|0&lt;br /&gt;
| -1&lt;br /&gt;
|Regen limit on BMS over voltage&lt;br /&gt;
|-&lt;br /&gt;
|udcmin&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|450&lt;br /&gt;
|Minimum battery voltage&lt;br /&gt;
|-&lt;br /&gt;
|udcmax&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|520&lt;br /&gt;
|Maximum battery voltage&lt;br /&gt;
|-&lt;br /&gt;
|iacmax&lt;br /&gt;
|A&lt;br /&gt;
|0&lt;br /&gt;
|5000&lt;br /&gt;
|5000&lt;br /&gt;
|Maximum peak AC current&lt;br /&gt;
|-&lt;br /&gt;
|idcmax&lt;br /&gt;
|A&lt;br /&gt;
|0&lt;br /&gt;
|5000&lt;br /&gt;
|5000&lt;br /&gt;
|Maximum DC input current&lt;br /&gt;
|-&lt;br /&gt;
|idcmin&lt;br /&gt;
|A&lt;br /&gt;
| -5000&lt;br /&gt;
|0&lt;br /&gt;
| -5000&lt;br /&gt;
|Maximum DC output current (regen)&lt;br /&gt;
|-&lt;br /&gt;
|idckp&lt;br /&gt;
|dig&lt;br /&gt;
|0.1&lt;br /&gt;
|20&lt;br /&gt;
|2&lt;br /&gt;
|Proportional rate of DC current derating&lt;br /&gt;
|-&lt;br /&gt;
|idcflt&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|11&lt;br /&gt;
|9&lt;br /&gt;
|Filter co-efficient applied to idc prior to derating. Increasing this makes the DC current derating smoother.&lt;br /&gt;
|-&lt;br /&gt;
|tmphsmax&lt;br /&gt;
|°C&lt;br /&gt;
|50&lt;br /&gt;
|150&lt;br /&gt;
|85&lt;br /&gt;
|Maximum permitted temperature of the inverter heatsink. As the temperature gets within 10°C of this limit the throttle will be scaled back by 10% for every degree until it hits the limit.&lt;br /&gt;
|-&lt;br /&gt;
|tmpmmax&lt;br /&gt;
|°C&lt;br /&gt;
|70&lt;br /&gt;
|300&lt;br /&gt;
|300&lt;br /&gt;
|Maximum permitted temperature of the motor. As the temperature gets within 10°C of this limit the throttle will be scaled back by 10% for every degree until it hits the limit.&lt;br /&gt;
|-&lt;br /&gt;
|throtmax&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|100&lt;br /&gt;
|Throttle limit&lt;br /&gt;
|-&lt;br /&gt;
|throtmin&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
|0&lt;br /&gt;
| -100&lt;br /&gt;
|Throttle regen limit&lt;br /&gt;
|-&lt;br /&gt;
|accelmax&lt;br /&gt;
|rpm/10ms&lt;br /&gt;
|1&lt;br /&gt;
|1000&lt;br /&gt;
|1000&lt;br /&gt;
|Maximum permitted acceleration increase (traction control)&lt;br /&gt;
|-&lt;br /&gt;
|accelflt&lt;br /&gt;
|dig&lt;br /&gt;
|1&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|Filter between the motor speed and the acceleration rate limiter. Higher values will smooth the input but will make the acceleration rate limiter react more slowly.&lt;br /&gt;
|-&lt;br /&gt;
|ifltrise&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|32&lt;br /&gt;
|10&lt;br /&gt;
|Controls how quickly slip and amplitude recover. The greater the value, the slower&lt;br /&gt;
|-&lt;br /&gt;
|ifltfall&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|32&lt;br /&gt;
|3&lt;br /&gt;
|Controls how quickly slip and amplitude are reduced on over current. The greater the value, the slower&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Charger&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|chargemode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|4&lt;br /&gt;
|0&lt;br /&gt;
|0=Off, 3=Boost, 4=Buck&lt;br /&gt;
|-&lt;br /&gt;
|chargecur&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|50&lt;br /&gt;
|0&lt;br /&gt;
|Charge current setpoint. Boost mode: charger INPUT current. Buck mode: charger output current&lt;br /&gt;
|-&lt;br /&gt;
|chargekp&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|80&lt;br /&gt;
|Charge controller proportional gain. Lower if you have oscillation, raise to get best power factor.&lt;br /&gt;
|-&lt;br /&gt;
|chargeki&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|10&lt;br /&gt;
|Charge controller integral gain.&lt;br /&gt;
|-&lt;br /&gt;
|chargeflt&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|10&lt;br /&gt;
|8&lt;br /&gt;
|Charge current filtering. Raise if you have oscillations&lt;br /&gt;
|-&lt;br /&gt;
|chargepwmin&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|99&lt;br /&gt;
|0&lt;br /&gt;
|Lowest charge mode duty cycle. This is needed for synchronous converters like in the Prius Gen2 where the lower IGBT is also active in buck mode and actually boosts the battery voltage into the bus capacitor when duty cycle is low.&lt;br /&gt;
|-&lt;br /&gt;
|chargepwmax&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|99&lt;br /&gt;
|90&lt;br /&gt;
|Charge mode duty cycle limit. Especially in boost mode this makes sure you don&#039;t overvolt you IGBTs if there is no battery connected.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Throttle&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|potmin&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
|Value of &amp;quot;pot&amp;quot; when pot isn&#039;t pressed at all&lt;br /&gt;
|-&lt;br /&gt;
|potmax&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|4095&lt;br /&gt;
|Value of &amp;quot;pot&amp;quot; when pot is pushed all the way in&lt;br /&gt;
|-&lt;br /&gt;
|pot2min&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|4095&lt;br /&gt;
|Value of &amp;quot;pot2&amp;quot; when regen pot is in 0 position&lt;br /&gt;
|-&lt;br /&gt;
|pot2max&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|4095&lt;br /&gt;
|4095&lt;br /&gt;
|Value of &amp;quot;pot2&amp;quot; when regen pot is in full on position&lt;br /&gt;
|-&lt;br /&gt;
|potmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|6&lt;br /&gt;
|0&lt;br /&gt;
|0=Pot 1 is throttle and pot 2 is regen strength preset&lt;br /&gt;
1=Pot 2 is proportional to pot 1 (redundancy)&lt;br /&gt;
&lt;br /&gt;
2=Throttle/regen controlled via CAN (like 0)&lt;br /&gt;
&lt;br /&gt;
3=Throttle via CAN with redundancy (like 1)&lt;br /&gt;
&lt;br /&gt;
4=Bidirectional throttle sets torque and direction (e.g. for boats)&lt;br /&gt;
&lt;br /&gt;
6=Bidirectional throttle controlled via CAN (like 4)&lt;br /&gt;
|-&lt;br /&gt;
|potlinearity&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|100&lt;br /&gt;
|Blend between a fully linear pedal (100%) and fully quadratic (0%). The throttle output is defined as potnom²*(1-potlinearity) + potnom * potlinearity. Regen is always linear.&lt;br /&gt;
|-&lt;br /&gt;
|throtramp&lt;br /&gt;
|%/10ms&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|100&lt;br /&gt;
|Max positive throttle slew rate&lt;br /&gt;
|-&lt;br /&gt;
|throtramprpm&lt;br /&gt;
|rpm&lt;br /&gt;
|0&lt;br /&gt;
|20000&lt;br /&gt;
|20000&lt;br /&gt;
|No throttle ramping above this speed&lt;br /&gt;
|-&lt;br /&gt;
|ampmin&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|10&lt;br /&gt;
|Minimum relative sine amplitude (only &amp;quot;sine&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|slipstart&lt;br /&gt;
|%&lt;br /&gt;
|10&lt;br /&gt;
|100&lt;br /&gt;
|50&lt;br /&gt;
|% positive throttle travel at which slip is increased (only &amp;quot;sine&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|sinecurve&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0=VoltageSlip - The first half of the throttle increases voltage but keeps slip at fslipin. Then the second half of the throttle increases slip up to fslipmax.&lt;br /&gt;
&lt;br /&gt;
1=Simultaneous - Increases slip and voltage at the same time across the whole range of the throttle. Can provide smoother throttle response.&lt;br /&gt;
(only &amp;quot;sine&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|throtfilter&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|10&lt;br /&gt;
|4&lt;br /&gt;
|How heavily the throttle is filtered. Lowering will increase throttle response at the expense of stability.(only &amp;quot;sine&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|throtcur&lt;br /&gt;
|A/%&lt;br /&gt;
| -10&lt;br /&gt;
|10&lt;br /&gt;
|1&lt;br /&gt;
|Motor current per % of throttle travel (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Regen&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|brknompedal / brakeregen&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
|0&lt;br /&gt;
| -50&lt;br /&gt;
|Foot on brake pedal regen torque&lt;br /&gt;
|-&lt;br /&gt;
|regenramp&lt;br /&gt;
|%/10ms&lt;br /&gt;
|0.1&lt;br /&gt;
|100&lt;br /&gt;
|100&lt;br /&gt;
|Ramp speed when entering regen. E.g. when you set brkmax to -30% and regenramp to 1, it will take 300ms to arrive at brake force of -60%&lt;br /&gt;
|-&lt;br /&gt;
|brknom / regentravel&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|30&lt;br /&gt;
|Range of throttle pedal travel allocated to regen&lt;br /&gt;
|-&lt;br /&gt;
|brkmax / offthrotregen&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
| 0&lt;br /&gt;
| -30&lt;br /&gt;
|Foot-off throttle regen torque&lt;br /&gt;
|-&lt;br /&gt;
|brkcruise / cruiseregen&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
|0&lt;br /&gt;
| -30&lt;br /&gt;
|Maximum regen of cruise control&lt;br /&gt;
|-&lt;br /&gt;
|brkrampstr / regenrampstr&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|400&lt;br /&gt;
|10&lt;br /&gt;
|Below this frequency the regen torque is reduced linearly with the frequency&lt;br /&gt;
|-&lt;br /&gt;
|maxregentravelhz &lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|brkout / brklightout&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
| -1&lt;br /&gt;
| -50&lt;br /&gt;
|Activate brake light output at this amount of braking force&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Automation&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|idlespeed&lt;br /&gt;
|rpm&lt;br /&gt;
| -100&lt;br /&gt;
|1000&lt;br /&gt;
| -100&lt;br /&gt;
|Motor idle speed. Set to -100 to disable idle function. When idle speed controller is enabled, brake pedal must be pressed on start.&lt;br /&gt;
|-&lt;br /&gt;
|idlethrotlim&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|50&lt;br /&gt;
|Throttle limit of idle speed controller&lt;br /&gt;
|-&lt;br /&gt;
|idlemode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|Motor idle speed mode. 0=always run idle speed controller, 1=only run it when brake pedal is released, 2=like 1 but only when cruise switch is on, 3=off, 4=Hill Hold&lt;br /&gt;
|-&lt;br /&gt;
|holdkp&lt;br /&gt;
|&lt;br /&gt;
| -100&lt;br /&gt;
|0&lt;br /&gt;
| -0.25&lt;br /&gt;
|How hard the throttle should be applied to counteract rollback in hill hold. Higher values reduce rollback at the risk of introducing oscillation due to sensor noise.&lt;br /&gt;
|-&lt;br /&gt;
|speedkp&lt;br /&gt;
|Hz&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|1&lt;br /&gt;
|Speed controller gain (Cruise and idle speed). Decrease if speed oscillates. Increase for faster load regulation&lt;br /&gt;
|-&lt;br /&gt;
|speedflt&lt;br /&gt;
|dig&lt;br /&gt;
|0&lt;br /&gt;
|16&lt;br /&gt;
|1&lt;br /&gt;
|Filter before cruise controller&lt;br /&gt;
|-&lt;br /&gt;
|cruisemode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0=button (set when button pressed, reset with brake pedal), 1=switch (set when switched on, reset when switched off or brake pedal)&lt;br /&gt;
|-&lt;br /&gt;
|cruisethrotlim&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|50&lt;br /&gt;
|Amount of throttle cruise control is allowed to command&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Contactor Control&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|udcsw&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|330&lt;br /&gt;
|Voltage at which the DC contactor is allowed to close&lt;br /&gt;
|-&lt;br /&gt;
|udcswbuck&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|540&lt;br /&gt;
|Voltage at which the DC contactor is allowed to close in buck charge mode&lt;br /&gt;
|-&lt;br /&gt;
|tripmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|What to do with relays at a shutdown event. 0=All off, 1=Keep DC switch closed, 2=close precharge relay&lt;br /&gt;
|-&lt;br /&gt;
|bootprec&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|Engage precharge relay in boot loader. Introduced for enabling Prius Gen3 DC/DC converter when precharge relay is released. Use together with tripmode=2&lt;br /&gt;
|-&lt;br /&gt;
|outmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|0=DC switch output, 1=Motor temp controls the fan output, 2=Heatsink temp controls fan output&lt;br /&gt;
|-&lt;br /&gt;
|fanthresh&lt;br /&gt;
|°C&lt;br /&gt;
|20&lt;br /&gt;
|300&lt;br /&gt;
|50&lt;br /&gt;
|Temperature at which the fan output is turned on when outmode is 1 or 2&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Auxillary PWM&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|pwmfunc&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|Quantity that controls the PWM output. 0=tmpm, 1=tmphs, 2=speed&lt;br /&gt;
|-&lt;br /&gt;
|pwmgain&lt;br /&gt;
|dig/C&lt;br /&gt;
|0&lt;br /&gt;
|65535&lt;br /&gt;
|100&lt;br /&gt;
|Gain of PWM output&lt;br /&gt;
|-&lt;br /&gt;
|pwmofs&lt;br /&gt;
|dig&lt;br /&gt;
| -65535&lt;br /&gt;
|65535&lt;br /&gt;
|0&lt;br /&gt;
|Offset of PWM output, 4096=full on&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Communication&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|canspeed&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Baud rate of CAN interface 0=250k, 1=500k, 2=800k, 3=1M&lt;br /&gt;
|-&lt;br /&gt;
|canperiod&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0=send configured CAN messages every 100ms, 1=every 10ms&lt;br /&gt;
|-&lt;br /&gt;
|nodeid&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|63&lt;br /&gt;
|1&lt;br /&gt;
|Node ID for CAN SDO messages and for selective enabling of UART when sharing one ESP8266 module between multiple processors.&lt;br /&gt;
|-&lt;br /&gt;
|controlid&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|2047&lt;br /&gt;
|63&lt;br /&gt;
|The CAN ID used for controlling the [[CAN communication#Inverter_control_via_CAN_-_new!|controlling the inverter via CAN]]&lt;br /&gt;
|-&lt;br /&gt;
|controlcheck&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0=Check the counter field in canio CAN frames &#039;&#039;&#039;for legacy VCUs only&#039;&#039;&#039;, 1=Validate the 8-bit truncated STM32 CRC in the canio frame&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Testing&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|fslipspnt&lt;br /&gt;
|Hz&lt;br /&gt;
| -100&lt;br /&gt;
|100&lt;br /&gt;
|0&lt;br /&gt;
|Slip setpoint in mode 2. Written by software in mode 1&lt;br /&gt;
|-&lt;br /&gt;
|ampnom&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|0&lt;br /&gt;
|Nominal amplitude in mode 2. Written by software in mode 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Spot values ==&lt;br /&gt;
The following values are available for diagnostic purposes. Type&lt;br /&gt;
 get &lt;br /&gt;
to get the current value. To read more then one you can provide a list like&lt;br /&gt;
 get il1,il2,udc&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Unit&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|&lt;br /&gt;
|Firmware version&lt;br /&gt;
|-&lt;br /&gt;
|hwver&lt;br /&gt;
|&lt;br /&gt;
|Hardware version&lt;br /&gt;
|-&lt;br /&gt;
|opmode&lt;br /&gt;
|&lt;br /&gt;
|Operating mode. 0=Off, 1=Run, 2=Manual_run, 3=Boost, 4=Buck, 5=Sine, 6=2 Phase sine&lt;br /&gt;
|-&lt;br /&gt;
|lasterr&lt;br /&gt;
|&lt;br /&gt;
|Last error message&lt;br /&gt;
|-&lt;br /&gt;
|udc&lt;br /&gt;
|V&lt;br /&gt;
|DC link voltage&lt;br /&gt;
|-&lt;br /&gt;
|uac&lt;br /&gt;
|V&lt;br /&gt;
|Calculated AC voltage (only &amp;quot;sine&amp;quot; software) &lt;br /&gt;
|-&lt;br /&gt;
|idc&lt;br /&gt;
|A&lt;br /&gt;
|Calculated DC current&lt;br /&gt;
|-&lt;br /&gt;
|il1&lt;br /&gt;
|A&lt;br /&gt;
|AC current L1&lt;br /&gt;
|-&lt;br /&gt;
|il2&lt;br /&gt;
|A&lt;br /&gt;
|AC current L2&lt;br /&gt;
|-&lt;br /&gt;
|il1rms&lt;br /&gt;
|A&lt;br /&gt;
|RMS current L1 (only &amp;quot;sine&amp;quot; software) &lt;br /&gt;
|-&lt;br /&gt;
|il2rms&lt;br /&gt;
|A&lt;br /&gt;
|RMS current L2 (only &amp;quot;sine&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|ilmax&lt;br /&gt;
|A&lt;br /&gt;
|Calculated max of il1, il2, il3 (only &amp;quot;sine&amp;quot; software) &lt;br /&gt;
|-&lt;br /&gt;
|boostcalc&lt;br /&gt;
|A&lt;br /&gt;
|DC link adjusted boost setting (only &amp;quot;sine&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|fweakcalc&lt;br /&gt;
|A&lt;br /&gt;
|DC link adjusted fweak setting (only &amp;quot;sine&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|id&lt;br /&gt;
|A&lt;br /&gt;
|Current in the direct(d) axis (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|iq&lt;br /&gt;
|A&lt;br /&gt;
|Current in the quadrature(q) axis (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|ifw&lt;br /&gt;
|A&lt;br /&gt;
|Field weakening current (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|ud&lt;br /&gt;
|dig&lt;br /&gt;
|Computed voltage in the direct(d) axis (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|uq&lt;br /&gt;
|dig&lt;br /&gt;
|Computed voltage in the quadrature(q) axis (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|uexc&lt;br /&gt;
|dig&lt;br /&gt;
|Computed exciter voltage (only &amp;quot;FOC&amp;quot; software for the Renault Zoe variant)&lt;br /&gt;
|-&lt;br /&gt;
|anticog&lt;br /&gt;
|dig&lt;br /&gt;
|Amplitude of the anti-cogging modulation waveform (only &amp;quot;FOC&amp;quot; software)&lt;br /&gt;
|-&lt;br /&gt;
|fstat&lt;br /&gt;
|Hz&lt;br /&gt;
|Stator frequency&lt;br /&gt;
|-&lt;br /&gt;
|speed&lt;br /&gt;
|rpm&lt;br /&gt;
|Motor speed&lt;br /&gt;
|-&lt;br /&gt;
|cruisespeed&lt;br /&gt;
|rpm&lt;br /&gt;
|Motor RPM set point for cruise control if cruisemode=CAN&lt;br /&gt;
|-&lt;br /&gt;
|turns&lt;br /&gt;
|&lt;br /&gt;
|Number of turns the motor completed since power up&lt;br /&gt;
|-&lt;br /&gt;
|amp&lt;br /&gt;
|dig&lt;br /&gt;
|Sine amplitude, 37813=max&lt;br /&gt;
|-&lt;br /&gt;
|angle&lt;br /&gt;
|°&lt;br /&gt;
|Motor rotor angle, 0-360°. When using the SINE software, the slip is added to the rotor position.&lt;br /&gt;
This is not the physical angle, but a &amp;quot;virtual&amp;quot; angle. E.g. if your motor has four pole pairs (motor and resolver), then per one physical revolution the &amp;quot;angle&amp;quot; will change four times between 0 and 360°. Discussed here: https://openinverter.org/forum/viewtopic.php?p=71253#p71253&lt;br /&gt;
|-&lt;br /&gt;
|pot&lt;br /&gt;
|dig&lt;br /&gt;
|Pot value, 4095=max&lt;br /&gt;
|-&lt;br /&gt;
|pot2&lt;br /&gt;
|dig&lt;br /&gt;
|Regen Pot value, 4095=max&lt;br /&gt;
|-&lt;br /&gt;
|regenpreset&lt;br /&gt;
|%&lt;br /&gt;
|Regen preset value which can come from pot2 in potmode=0 or received via CAN&lt;br /&gt;
|-&lt;br /&gt;
|potnom&lt;br /&gt;
|%&lt;br /&gt;
|Scaled pot value, 0 accel.&lt;br /&gt;
potnom also includes the deratings. So say you have programmed udcmin=300V and you are tuning without HV, so udc=0, potnom will never be positive because it thinks the battery voltage is low. Discussed here: https://openinverter.org/forum/viewtopic.php?p=62930#p62930&lt;br /&gt;
&lt;br /&gt;
range:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; negative means regeneration (e.g. -30%, according to [[Schematics and Instructions|Schematics and Instructions - openinverter.org wiki]])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; zero means &amp;quot;zero torque request&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; 100% means full acceleraton.&lt;br /&gt;
|-&lt;br /&gt;
|dir / seldir&lt;br /&gt;
|&lt;br /&gt;
|Selected rotation direction. -1=REV, 0=Neutral, 1=FWD&lt;br /&gt;
|-&lt;br /&gt;
|rotordir&lt;br /&gt;
|&lt;br /&gt;
|Actual rotor direction&lt;br /&gt;
|-&lt;br /&gt;
|tmphs&lt;br /&gt;
|°C&lt;br /&gt;
|Heatsink temperature&lt;br /&gt;
|-&lt;br /&gt;
|tmpm&lt;br /&gt;
|°C&lt;br /&gt;
|Motor temperature&lt;br /&gt;
|-&lt;br /&gt;
|uaux&lt;br /&gt;
|V&lt;br /&gt;
|Auxiliary voltage (i.e. 12V system). Measured on pin 11 (mprot)&lt;br /&gt;
|-&lt;br /&gt;
|pwmio&lt;br /&gt;
|&lt;br /&gt;
|raw state of PWM outputs at power up&lt;br /&gt;
|-&lt;br /&gt;
|canio&lt;br /&gt;
|&lt;br /&gt;
|Digital IO bits received via [[CAN communication#Controlling Digital IO via CAN|CAN]]&lt;br /&gt;
|-&lt;br /&gt;
|din_cruise&lt;br /&gt;
|&lt;br /&gt;
|Cruise Control. This pin activates the cruise control with the current speed. Pressing again updates the speed set point.&lt;br /&gt;
|-&lt;br /&gt;
|din_start&lt;br /&gt;
|&lt;br /&gt;
|State of digital input &amp;quot;start&amp;quot;. This pin starts inverter operation&lt;br /&gt;
|-&lt;br /&gt;
|din_brake&lt;br /&gt;
|&lt;br /&gt;
|State of digital input &amp;quot;brake&amp;quot;. This pin sets maximum regen torque (brknompedal). Cruise control is disabled.&lt;br /&gt;
|-&lt;br /&gt;
|din_mprot&lt;br /&gt;
|&lt;br /&gt;
|State of digital input &amp;quot;motor protection switch&amp;quot;. Shuts down the inverter when =0&lt;br /&gt;
|-&lt;br /&gt;
|din_forward&lt;br /&gt;
|&lt;br /&gt;
|Direction forward&lt;br /&gt;
|-&lt;br /&gt;
|din_reverse&lt;br /&gt;
|&lt;br /&gt;
|Direction backward&lt;br /&gt;
|-&lt;br /&gt;
|din_emcystop&lt;br /&gt;
|&lt;br /&gt;
|State of digital input &amp;quot;emergency stop&amp;quot;. Shuts down the inverter when =0&lt;br /&gt;
|-&lt;br /&gt;
|din_ocur&lt;br /&gt;
|&lt;br /&gt;
|Over current detected&lt;br /&gt;
|-&lt;br /&gt;
|din_desat&lt;br /&gt;
|&lt;br /&gt;
|Gate driver desaturation event&lt;br /&gt;
|-&lt;br /&gt;
|din_bms&lt;br /&gt;
|&lt;br /&gt;
|BMS over voltage/under voltage&lt;br /&gt;
|-&lt;br /&gt;
|uptime&lt;br /&gt;
|&lt;br /&gt;
|The number of 10ms ticks since power was applied to the inverter&lt;br /&gt;
|-&lt;br /&gt;
|cpuload&lt;br /&gt;
|%&lt;br /&gt;
|CPU load for everything except communication&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tuning Guide ==&lt;br /&gt;
First you want to find a flat surface - a parking lot etc. so you can drive and stop without checking traffic. Change only one parameter at a time and save settings that work! &lt;br /&gt;
&lt;br /&gt;
1. set fslipmin so that you feel car taking off smoothly and try to change it by +/-0,1Hz and check differences in starting. Save when satisfied.&lt;br /&gt;
&lt;br /&gt;
2. lower boost value in 100 point until motor jitters at start. Then return it to last good value.&lt;br /&gt;
&lt;br /&gt;
3. try lowering ampmin in 0,1 increments and observe throttle travel. When throttle is not just smooth but becomes sluggish return some previous increments until throttle reaction is acceptable.&lt;br /&gt;
&lt;br /&gt;
4. change fweak value in +/-10Hz increments from starting point and observe torque in starting. This value is very dependent on battery voltage and is very subjective.&lt;br /&gt;
&lt;br /&gt;
Now you find a hill or ramp and set car on it. You want to hold car in position on slope just using throttle pedal. If there parameters are not good motor will jump or will feel sluggish&lt;br /&gt;
&lt;br /&gt;
1. add boost if motor is oscillating if it is smooth reduce it in 100 point increments until you get oscillation. Then return to last good value&lt;br /&gt;
&lt;br /&gt;
2. reduce/increase ampmin in 0,25 increments untill you get oscilation in motor and return last good value&lt;br /&gt;
&lt;br /&gt;
Now set the car into a hill to set fslipmax. Warning full throttle will be used. Be sure there is no other traffic!&lt;br /&gt;
&lt;br /&gt;
Set fslipmax to chosen value (guess it at 2xfslipmin if you have no other way) and try to take off with full throttle.&lt;br /&gt;
&lt;br /&gt;
If car feels sluggish with full throttle you have to add more slip.&lt;br /&gt;
&lt;br /&gt;
If motor starts to jitter there is too much slip. Try to reduce it in 0.1Hz increments.&lt;br /&gt;
&lt;br /&gt;
When you feel satisfied with settings save them and go on setting regen and braking effect.&lt;br /&gt;
&lt;br /&gt;
[[Category:OpenInverter]] [[Category:Inverter]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5970</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5970"/>
		<updated>2025-12-02T10:12:32Z</updated>

		<summary type="html">&lt;p&gt;Johu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Index|Wiki Index]] - quick reference for all info on the wiki.&lt;br /&gt;
&lt;br /&gt;
If you have trouble logging into the forum, log into [https://openinverter.org:8444/forum this address], then go back to the [https://openinverter.org/forum normal forum].&lt;br /&gt;
&lt;br /&gt;
Did you know you can convert your existing fossil powered vehicle to use electricity instead? And that you can even produce that electricity yourself?&lt;br /&gt;
&lt;br /&gt;
Open Inverter is a [[Main Page#Who we are|community of people]] and projects focused on open source solutions for EV conversions.  Founded in 2008 by Johannes Huebner as an open source inverter control firmware, the project has since expanded to include the reuse of components from production EVs and hybrids, including inverters, motors, batteries, on-board chargers, and DC-DC converters, as well as the open source implementation of other necessary systems for EV conversions such as DC Fast Charging controllers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:Electric-car.jpg|none|frame|Click on the captions to learn more about the respective system! Image source: https://www.newkidscar.com/&lt;br /&gt;
&lt;br /&gt;
poly 248 166 542 166 542 217 248 217 248 166 [[#Reusing motors and inverters - aka drive trains]]&lt;br /&gt;
poly 1041 455 1336 455 1336 506 1041 506 1041 455 [[#Reusing Batteries]]&lt;br /&gt;
poly 147 344 428 344 428 391 147 391 147 344 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 844 624 1118 624 1118 673 844 673 844 624 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 935 539 1200 539 1200 586 935 586 935 539 [[#Rapid Charging]]&lt;br /&gt;
poly 134 435 394 435 394 483 134 483 134 435 [[#Auxiliary Parts]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by the wider community. &#039;&#039;&#039;Please update this wiki&#039;&#039;&#039;. For example if your question has been clarified on the [https://openinverter.org/forum forum] and the new information can not be found here, please add it! The credentials are the same as for the forum.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Main Page#Who we are|Developers]] time is best spent developing;&#039;&#039;&#039; &#039;&#039;&#039;Support is best found in the forums&#039;&#039;&#039; - Developers of various projects are often bombarded with private messages and emails. Managing these emails and questions is a extremely large undertaking. Please read, and take the time to understand the information available here and across the web if you don&#039;t understand a topic. Developers are not your personal support team, unless you want to [[Application Support|pay them directly]] for their time. To keep developers independent please consider donating - donation links can be found [[Main Page#Who we are|down below]].&lt;br /&gt;
&lt;br /&gt;
==Reusing motors and inverters - aka drive trains==&lt;br /&gt;
[[File:Tesla_LDU.jpg|thumb]]&lt;br /&gt;
The drive train is one of the defining building blocks of your conversion as it defines how well your vehicle picks up speed. Over the years we have reverse engineered many popular drive trains from [[:Category:OEM|production cars]] such as Teslas. As a bonus using such complete drive trains facilitates getting the vehicle [[Legalities|road legal]] in many countries. By now you have a choice of low to medium power drive trains that only cost a few 100€ up to high performance ones at many 1000€. &lt;br /&gt;
&lt;br /&gt;
We have established two methods of running these [[:Category:OEM|OEM]] systems: reverse-engineering their communication protocol and making the drive train &amp;quot;think&amp;quot; it is still in its original vehicle OR swapping out the control electronics for our own open source motor controller. The latter method gives your more control and power but also a steeper learning curve. &lt;br /&gt;
&lt;br /&gt;
Nearly all drive trains are targeted at 400V battery voltage. Run at a lower voltage they will produce proportionally less power. &lt;br /&gt;
Here is what we have done so far and how we&#039;ve done it. Some is still work in progress (WIP) &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Drive Train&lt;br /&gt;
!Control Method&lt;br /&gt;
! Approximate Power Output&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model S/X Large Drive Unit (&amp;quot;LDU&amp;quot;)|Large Drive Unit]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=64 Board Swap]&lt;br /&gt;
|335-475 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model S/X Small Drive Unit (&amp;quot;SDU&amp;quot;)|Small Drive Unit]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=62 Board Swap]&lt;br /&gt;
|180 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Rear Drive Unit|Model 3/Y Rear Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|239 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Front Drive Unit|Model 3/Y Front Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|121 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Nissan]]&lt;br /&gt;
|[[Nissan Leaf Motors|Gen1]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing with ZombieVerter VCU]]&lt;br /&gt;
|80 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| [[Nissan Leaf Gen2 Board|Gen2]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing with ZombieVerter VCU]]/[https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=57 Board Swap]&lt;br /&gt;
|80 kW / 130 kW (board swap)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Nissan Leaf Gen 3 (2018 up EM57)|Gen3]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing with ZombieVerter VCU]]/Board Swap [WIP]&lt;br /&gt;
|110 - 160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Toyota|Toyota]]&lt;br /&gt;
|[[Lexus GS450h Drivetrain|Lexus GS 450h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing with ZombieVerterVCU]]&lt;br /&gt;
|250 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus GS300h CVT|Lexus GS 300h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing with ZombieVerterVCU]]&lt;br /&gt;
|105 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter|Prius Gen2]]&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter Controller|External Control Board]] ([https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=68 Buy here])&lt;br /&gt;
|40-70 kW &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen3 Board|Prius Gen3]]&lt;br /&gt;
|[https://evbmw.com/index.php/evbmw-webshop/toyota-built-and-tested-boards Board Swap]/[[ZombieVerter VCU|Communication spoofing with ZombieVerterVCU]]&lt;br /&gt;
|100 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus MGR Rear Transaxle Motor|MGR]]&lt;br /&gt;
|Prius Gen2 or Gen3 inverter&lt;br /&gt;
|18-50 kW (various models)&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander Rear Drive Unit|Rear Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing with ZombieVerterVCU]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Mitsubishi Outlander Front Transaxle|Front Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing with ZombieVerterVCU]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:BMW|BMW]]&lt;br /&gt;
|[[BMW i3 Inverter|i3]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=72 Board Swap]&lt;br /&gt;
|125-135 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Chevrolet|Chevy/Opel]]&lt;br /&gt;
|[[Chevrolet Volt Inverter|Volt/Ampera]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Ford|Ford]]&lt;br /&gt;
|[[Ford Ranger TIM Controller|Ranger]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| Renault&lt;br /&gt;
|[https://openinverter.org/forum/viewtopic.php?t=4749 Zoe]&lt;br /&gt;
|Board Swap [WIP]&lt;br /&gt;
|Unknown &lt;br /&gt;
|-&lt;br /&gt;
|MG&lt;br /&gt;
|[https://github.com/damienmaguire/MG-EV-Inverter ZS EV]&lt;br /&gt;
|Board Swap [WIP] &lt;br /&gt;
|Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reusing Batteries==&lt;br /&gt;
[[File:A09A7634.jpg|thumb]]&lt;br /&gt;
The most expensive and probably equally defining component is the [[Batteries|battery]] that stores all the energy for running your car. Batteries are usually assembled from a number of modules that in turn contain a number of cells. Usually batteries are reused on a [[Batteries#OEM modules|module level]]. In rare cases the battery can be [https://youtu.be/_7l0Y1GsNJ4 reused as is in its original battery] box.&lt;br /&gt;
&lt;br /&gt;
While there are also various [[16-cell BMS|open source implementations]] of [https://www.youtube.com/watch?v=_QsMoCrSTYc battery management systems] (BMS) we generally recommend using as much of the OEM BMS as possible. Sometimes the [[:Category:OEM|OEM]] BMS comes as an all-in-one solution that measures cell data and spits out state of charge and power limit information. In other cases the BMS is split into module units that measure the physical data (voltages, temperatures) and a central unit that calculates the high level information.&lt;br /&gt;
&lt;br /&gt;
Sometimes we managed to reuse the complete system which is generally the safest as you can rely on the manufacturers well tested charge and discharge limits as well as reliable state of charge information (i.e. how much energy is left in the battery at any given time). In other cases we only managed to reuse the module units. This adds the convenience of having a well tested piece of hardware with the matching connector but required us to calculate all high level battery data ourselves. This also includes [https://www.youtube.com/watch?v=RGYLPOlT45A cell balancing].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!BMS usability&lt;br /&gt;
!Energy Content&lt;br /&gt;
!Configuration&lt;br /&gt;
!Rated Output&lt;br /&gt;
!Achieved Output&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model 3 Battery|Model 3]]&lt;br /&gt;
|Module and high level [WIP]&lt;br /&gt;
|60-80 kWh ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Batteries#OEM modules|Model S]]&lt;br /&gt;
|Unknown&lt;br /&gt;
|85-100 kWh&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Nissan|Nissan]]&lt;br /&gt;
|[[Nissan Leaf BMS|Leaf/NV200]]&lt;br /&gt;
|High Level&lt;br /&gt;
|24-40 kWh&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:VAG|VW]]&lt;br /&gt;
|[[VW Hybrid Battery Packs|Passat/Golf]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|8.7-36 kWh&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[MEB Batteries|MEB]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|52-77 kwh &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BMW&lt;br /&gt;
|[[BMW Hybrid Battery Pack|3 Series Hybrid]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|Gen 1: 7kWh. Gen 2: 9KWh&lt;br /&gt;
|80s&lt;br /&gt;
|83kW&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |These Batteries use the same modules. 3 series uses 5 whilst the 5 &amp;amp;7 series uses 6.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[BMW Hybrid Battery Pack|5 &amp;amp; 7 Series Hybrid]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|Gen 1: 9kWh. Gen 2: 12kWh&lt;br /&gt;
|96s&lt;br /&gt;
|83kW&lt;br /&gt;
|120kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[BMW Hybrid Battery Pack|X5]] &lt;br /&gt;
|Module Level&lt;br /&gt;
|24kWh&lt;br /&gt;
|96s&lt;br /&gt;
|83kw&lt;br /&gt;
|&lt;br /&gt;
|12 Modules.&lt;br /&gt;
|-&lt;br /&gt;
|Renault&lt;br /&gt;
|[[Renault Zoe Battery Pack|Zoe]]&lt;br /&gt;
|High Level&lt;br /&gt;
|22kWh - 52kWh&lt;br /&gt;
|2p96s&lt;br /&gt;
|100kW&lt;br /&gt;
|&lt;br /&gt;
|Available in 22kWh, 41kWh &amp;amp; 52kWh variants.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Onboard chargers and DC/DC converters ==&lt;br /&gt;
[[File:PXL_20241020_024043714.jpg|thumb|Onboard charger]]&lt;br /&gt;
The DC/DC converter takes energy from your HV traction battery and sends it to the cars 12V systems and 12V battery. It is basically a 1:1 replacement of the former alternator. An onboard charger (OBC) takes AC current from the grid and converts it into DC current to charge the battery. These two devices are often combined in one common enclosure hence why we treat them as one.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!OBC&lt;br /&gt;
!DC/DC&lt;br /&gt;
!OBC power&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model S GEN1 Charger|Model S]] (Gen1)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|10 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN2 Charger|Model S and X]] (Gen2)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN3 Charger|Model S and X]] (Gen3)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|22 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]] &lt;br /&gt;
|[[Tesla Model S/X DC/DC Converter|Model S and X]] (DC/DC)&lt;br /&gt;
|no&lt;br /&gt;
|yes &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model 3 Charger/DCDC (&amp;quot;PCS&amp;quot;)|Model 3]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt Charger|Volt]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt 2 Charger|Volt 2]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Dilong/Cascadia Chargers|Dilong]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Eltek chargers|Eltek]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander DCDC OBC|Outlander / iMiev]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes &lt;br /&gt;
|3.3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:MG|MG]]&lt;br /&gt;
|[[MG ZS Charger|ZS / MG4 / MG5]] &lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 - 11 kW&lt;br /&gt;
|}&lt;br /&gt;
There are more chargers under investigation, only the proven working ones are listed here. See our [[:Category:Charger|charger listing]] for more.&lt;br /&gt;
&lt;br /&gt;
== Rapid Charging==&lt;br /&gt;
[[File:Ccs-socket.jpg|thumb|CCS2 rapid charging socket]]&lt;br /&gt;
The above mentioned onboard chargers always have limited power as the space requirements and cost rise with power. To overcome this limitation modern EVs offer external access to their HV battery via a so called [[:Category:Rapid Charging|rapid charging]] port. This allows to charge the battery with a much more powerful external charger. As a bonus it also allows [[Bidirectional Charging|taking energy from the HV battery]] and powering appliances with it.&lt;br /&gt;
&lt;br /&gt;
There are 2 rapid charging protocols and 5 connector flavours world wide&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Communication&lt;br /&gt;
!Prevalent countries&lt;br /&gt;
!Open Source solutions&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:ChaDeMo|CHAdeMO]]&lt;br /&gt;
|CAN&lt;br /&gt;
|Japan, world wide&lt;br /&gt;
|[[Chademo with ESP32-Chademo|ESP32]], [[Chademo With Arduino Due|Arduino,]] [[Chademo with Zombieverter|ZombieVerter]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo1&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo2&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|Europe&lt;br /&gt;
|[[Foccci]], [[pyPLC]], [[BMW I3 Fast Charging LIM Module|I3LIM]]&lt;br /&gt;
|-&lt;br /&gt;
|NACS&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|GB/T&lt;br /&gt;
|CAN&lt;br /&gt;
|China&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Auxiliary Parts ==&lt;br /&gt;
We have now treated all the major building blocks of an EV, but there are many other components to complete the vehicle such as heaters, gear shifters and so on. We will summarize them here.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:HVJB|HV Junction Box]]&lt;br /&gt;
* [[:Category:HVAC|HVAC]] (Heating, Air conditioning)&lt;br /&gt;
* [[Vacuum Pumps]]&lt;br /&gt;
* [[:Category:Power Steering|Power Steering]]&lt;br /&gt;
* [[Water Pumps]]&lt;br /&gt;
* [[VCU Comparison|VCU]] (Vehicle Control Unit)&lt;br /&gt;
* [[Shift Controllers]]&lt;br /&gt;
* [[:Category:Charge Ports|Charge Ports]]&lt;br /&gt;
&lt;br /&gt;
== Additional Reading ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Legalities|Legalities]] - Getting a vehicle road legal in your country&lt;br /&gt;
* [[Glossary of Terms]]&lt;br /&gt;
* [[Parameters|Inverter Parameter Definitions]]&lt;br /&gt;
* [[Common Inverter FAQ]] - questions common to all hardware variants&lt;br /&gt;
* [[Tesla Inverter FAQ]] - questions regarding Tesla Large Drive Units and Small Drive Units&lt;br /&gt;
* [[Electronics Basics]] - general advice for troubleshooting electronic circuits&lt;br /&gt;
* [[I want a cheap ev conversion|cheap EV conversions]] - this entry point for the penny pinchers&lt;br /&gt;
* [[I want a powerful ev conversion|performant EV conversions]]  - where torque trumps money&lt;br /&gt;
* [[Mechanical design database]] - here you will find measurements, models, files, etc for a variety of components such as adapter plates and drive shaft flanges&lt;br /&gt;
* [[:Category:OpenInverter|Documentation of all OpenInverter Projects]]&lt;br /&gt;
* [[:Category:Tutorials|Tutorials]]&lt;br /&gt;
* [[Hardware Theory of Operation]]&lt;br /&gt;
* [[Software Theory of Operation]]&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
There is no static team or openinverter company but here we list the most active community members with links to donation or information sites:&lt;br /&gt;
&lt;br /&gt;
*Johannes Hübner, openinverter founder and developer - [https://www.patreon.com/openinverter support on patreon] follow on [https://www.youtube.com/user/EngineersFear youtube] and [https://github.com/jsphuebner/ github]&lt;br /&gt;
*Damien Maguire, developer and most active vehicle converter - [https://evbmw.com/index.php/evbmw-webshop visit shop] [https://www.patreon.com/evbmw support on patreon] follow on [https://www.youtube.com/@Evbmw youtube] and [https://github.com/damienmaguire/ github]&lt;br /&gt;
*Tom de Bree, active member and developer - [https://github.com/Tom-evnut github] and [https://citini.com/ shop]&lt;br /&gt;
*Uwe Hennig, master of CCS - [https://www.patreon.com/uhi22 support on patreon] follow on [https://github.com/uhi22/ github]&lt;br /&gt;
*celeron55, developer - support via [https://www.paypal.com/paypalme/celeron55 paypal] follow on [https://www.youtube.com/user/celeron55 youtube] and [https://github.com/celeron55 github]&lt;br /&gt;
*Dave Fiddes, active member and developer - Follow on [https://github.com/davefiddes/ github]&lt;br /&gt;
*Arber Kramar, long term member and developer - [https://leafdriveblog.wordpress.com/ Follow on blogspot]&lt;br /&gt;
*Janosch Oppermann, active member, developer and producer - follow on [https://www.youtube.com/@foxev-content youtube]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Bidirectional_Charging&amp;diff=5954</id>
		<title>Bidirectional Charging</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Bidirectional_Charging&amp;diff=5954"/>
		<updated>2025-11-19T11:21:16Z</updated>

		<summary type="html">&lt;p&gt;Johu: /* Practical implementation with parts list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bidirectional charging means, that the car is able to provide power to the outside world, via the charge port.&lt;br /&gt;
&lt;br /&gt;
Tags: bidi, inverse charging, vehicle-to-load, V2L, vehicle-to-home, V2H, vehicle-to-grid, V2G&lt;br /&gt;
&lt;br /&gt;
=== Forum discussions related to bidirectional charging: ===&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=5090&lt;br /&gt;
&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=3551&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via AC ===&lt;br /&gt;
Some OEM on-board-chargers are able to create AC voltage. Todo: any reverse-engineering ongoing for such chargers? E.g. for Hyundai/Kia E-GMP?&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via CHAdeMO ===&lt;br /&gt;
The CHAdeMO standard was planned for supporting bidirectional power transfer from the beginning. Todo: Any open-source projects in this direction?&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via CCS ===&lt;br /&gt;
The CCS standard did not plan bidirectional power transfer. This means, depending on the implementation details of the cars charge controller, the car may or may not allow to draw energy out of the CCS port. Later versions of the CCS standard, ISO15118 (2020?), are defining special communication procedures for bidirectional power transfer. But it will take some time until this standard is widely adapted.&lt;br /&gt;
&lt;br /&gt;
In the open-source world, however, we do not need to wait until OEMs and charger manufacturers implement the latest ISO15118. We can support bidirectional charging even with the &amp;quot;old&amp;quot; DIN spec. The strategy is: Even if the car is requesting to be charged, it also accepts discharging, without terminating the charging session. It may terminate if the SOC falls below a certain, configurable level, to prevent an empty battery. The car announces the allowed charge current, and the same value, just in opposite direction, can be used as a discharge current limit, too.&lt;br /&gt;
&lt;br /&gt;
== Practical implementation with parts list ==&lt;br /&gt;
[[File:CCS bidirectional charger.jpg|thumb|First prototype]]&lt;br /&gt;
One way to DIY a bidirectional charger is the use of a hybrid PV inverter with high voltage battery input. The advantage is that these are mass-produced (thus cheap) and conform to the various legal requirements. The inverter then handles power transfer and optionally smart functions such as zero grid import/export and we only need to supply the surrounding logic and electrics.&lt;br /&gt;
[[File:CCS bidirectional charger 2.jpg|thumb|Second version]]&lt;br /&gt;
This component list is just an example that has proven to work. It is preliminary and has not been tested with OEM cars yet, so it will likely be extended. As always, you are working with high voltage and especially grid voltage. Make sure you are qualified otherwise ask for help.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Item&lt;br /&gt;
!Approximate cost&lt;br /&gt;
!Link/Source&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|Sungrow SH5.0RT (or more powerful variant)&lt;br /&gt;
|850€&lt;br /&gt;
|[https://ger.sungrowpower.com/productDetail/905 Sungrow]&lt;br /&gt;
|Pick an inverter that is supported by [https://github.com/dalathegreat/Battery-Emulator/wiki#supported-inverters-list Battery Emulator]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Connector&lt;br /&gt;
|90€&lt;br /&gt;
|AliExpress&lt;br /&gt;
|Plain connector without cable&lt;br /&gt;
|-&lt;br /&gt;
|BeagleBone Green&lt;br /&gt;
|45€&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Seeed-Studio/102010027?qs=Hlcjo%2FO3pQ5AxSET1oW%252B%252Bg%3D%3D Mouser]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[FoccciCape]]&lt;br /&gt;
|t.b.d.&lt;br /&gt;
|t.b.d&lt;br /&gt;
|RS485, CAN comm, 2x relay driver, CCS&lt;br /&gt;
|-&lt;br /&gt;
|Flexible cable, 4 or 5 pole&lt;br /&gt;
|4€/m&lt;br /&gt;
|Local hardware store&lt;br /&gt;
|Size according to charging current. 5x2.5mm² used for the 5 kW inverter&lt;br /&gt;
For DC+, DC-, PE, CP and PP. &lt;br /&gt;
PP can optionally be terminated in the plug, then you just need 4 poles&lt;br /&gt;
|-&lt;br /&gt;
|2 Fuse blocks&lt;br /&gt;
|6€ each&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Altech/002540101?qs=rrS6PyfT74edEoVfbnqxvg%3D%3D Mouser]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2 25A fuses&lt;br /&gt;
|8€ each&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Eaton-Electronics/EKM10-25-1P?qs=sGAEpiMZZMsIz3CjQ1xegZx2pdJYlyprSptsITKY%2FrCWMtgS7UD2BQ%3D%3D Mouser]&lt;br /&gt;
|400V AC rated from your local hardware store suffices as it&#039;s 2 in series&lt;br /&gt;
|-&lt;br /&gt;
|12V 2A DIN rail supply&lt;br /&gt;
|18€&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/MEAN-WELL/HDR-30-12?qs=pHY8AWQbqIN66yYHZne39A%3D%3D Mouser]&lt;br /&gt;
|In case relays are needed later on, otherwise 5V model makes things easier&lt;br /&gt;
|-&lt;br /&gt;
|12V to 5V step-down converter&lt;br /&gt;
|5€&lt;br /&gt;
|ebay or ali&lt;br /&gt;
|Needed if you chose 12V supply&lt;br /&gt;
|-&lt;br /&gt;
|DIN rail cabinet&lt;br /&gt;
|20€&lt;br /&gt;
|Local hardware store&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MC4 connector set&lt;br /&gt;
|5€&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5V to 400V step up converter&lt;br /&gt;
|10€&lt;br /&gt;
|[https://www.ebay.de/itm/357155751299 ebay]&lt;br /&gt;
|Only needed for OEM cars&lt;br /&gt;
|}&lt;br /&gt;
The CCS connectors + and - is connected to the inverter input via the fuse blocks. I did not deploy additional contactors but rely on the ones that are already in the car and the inverter. The PLC modems output transformer is connected to PE and CP via a capacitor and a resistor, more details in [https://github.com/uhi22/pyPLC/blob/master/doc/hardware.md uhis github].&lt;br /&gt;
&lt;br /&gt;
The BeagleBone is connected to the PLC modem and the inverter Ethernet port, so you will need a small network switch, also for the uplink to your home network. In addition the CAN outputs of the COMPCE cape connects to the inverters battery CAN (pins 3 and 4 on the Sungrow).&lt;br /&gt;
&lt;br /&gt;
More info on the software setup in the development threads linked above, uhis github and [https://github.com/jsphuebner/esp-egycounter Johannes&#039; github].&lt;br /&gt;
&lt;br /&gt;
This setup can also be used with CHAdeMO cars in which case the powerline modem can be omitted.&lt;br /&gt;
&lt;br /&gt;
== Compatible cars ==&lt;br /&gt;
This table lists cars where we successfully pulled power OUT of the cars battery via its quick charge port.&lt;br /&gt;
&lt;br /&gt;
More details on [https://github.com/jsphuebner/esp-egycounter forum thread].&lt;br /&gt;
&lt;br /&gt;
First column: Y - works flawlessly with no timeout, P - works partially with long timeout, N - works not at all or quick timeout&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
!Make&lt;br /&gt;
!Model&lt;br /&gt;
!Requirements&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|P&lt;br /&gt;
|Hyundai&lt;br /&gt;
|Ioniq Classic 28 kWh&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|Timeout after 10 minutes&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|MG&lt;br /&gt;
|MG4&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|No timeout&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Tesla&lt;br /&gt;
|Model Y&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|5 kW tested&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Tesla&lt;br /&gt;
|Model 3&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|BMS aborts charging session if more than 15Ah discharge have been detected&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|BYD&lt;br /&gt;
|Atto 3&lt;br /&gt;
|&lt;br /&gt;
|5 kW tested&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Polestar&lt;br /&gt;
|2&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|VW&lt;br /&gt;
|ID.4&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 1 minute&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|BMW&lt;br /&gt;
|IX4&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 5 minutes&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|Chevrolet&lt;br /&gt;
|Bolt&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 50 s&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|Kia&lt;br /&gt;
|EV6&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 10 s&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Collection of documents related to bidirectional charging ==&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
todo&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Bidirectional_Charging&amp;diff=5953</id>
		<title>Bidirectional Charging</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Bidirectional_Charging&amp;diff=5953"/>
		<updated>2025-11-19T11:20:54Z</updated>

		<summary type="html">&lt;p&gt;Johu: Part numbers, replaced PLC modem by FoccciCape&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bidirectional charging means, that the car is able to provide power to the outside world, via the charge port.&lt;br /&gt;
&lt;br /&gt;
Tags: bidi, inverse charging, vehicle-to-load, V2L, vehicle-to-home, V2H, vehicle-to-grid, V2G&lt;br /&gt;
&lt;br /&gt;
=== Forum discussions related to bidirectional charging: ===&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=5090&lt;br /&gt;
&lt;br /&gt;
https://openinverter.org/forum/viewtopic.php?t=3551&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via AC ===&lt;br /&gt;
Some OEM on-board-chargers are able to create AC voltage. Todo: any reverse-engineering ongoing for such chargers? E.g. for Hyundai/Kia E-GMP?&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via CHAdeMO ===&lt;br /&gt;
The CHAdeMO standard was planned for supporting bidirectional power transfer from the beginning. Todo: Any open-source projects in this direction?&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Charging via CCS ===&lt;br /&gt;
The CCS standard did not plan bidirectional power transfer. This means, depending on the implementation details of the cars charge controller, the car may or may not allow to draw energy out of the CCS port. Later versions of the CCS standard, ISO15118 (2020?), are defining special communication procedures for bidirectional power transfer. But it will take some time until this standard is widely adapted.&lt;br /&gt;
&lt;br /&gt;
In the open-source world, however, we do not need to wait until OEMs and charger manufacturers implement the latest ISO15118. We can support bidirectional charging even with the &amp;quot;old&amp;quot; DIN spec. The strategy is: Even if the car is requesting to be charged, it also accepts discharging, without terminating the charging session. It may terminate if the SOC falls below a certain, configurable level, to prevent an empty battery. The car announces the allowed charge current, and the same value, just in opposite direction, can be used as a discharge current limit, too.&lt;br /&gt;
&lt;br /&gt;
== Practical implementation with parts list ==&lt;br /&gt;
[[File:CCS bidirectional charger.jpg|thumb|First prototype]]&lt;br /&gt;
One way to DIY a bidirectional charger is the use of a hybrid PV inverter with high voltage battery input. The advantage is that these are mass-produced (thus cheap) and conform to the various legal requirements. The inverter then handles power transfer and optionally smart functions such as zero grid import/export and we only need to supply the surrounding logic and electrics.&lt;br /&gt;
[[File:CCS bidirectional charger 2.jpg|thumb|Second version]]&lt;br /&gt;
This component list is just an example that has proven to work. It is preliminary and has not been tested with OEM cars yet, so it will likely be extended. As always, you are working with high voltage and especially grid voltage. Make sure you are qualified otherwise ask for help.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Item&lt;br /&gt;
!Approximate cost&lt;br /&gt;
!Link/Source&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|Sungrow SH5.0RT (or more powerful variant)&lt;br /&gt;
|850€&lt;br /&gt;
|[https://ger.sungrowpower.com/productDetail/905 Sungrow]&lt;br /&gt;
|Pick an inverter that is supported by [https://github.com/dalathegreat/Battery-Emulator/wiki#supported-inverters-list Battery Emulator]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Connector&lt;br /&gt;
|90€&lt;br /&gt;
|AliExpress&lt;br /&gt;
|Plain connector without cable&lt;br /&gt;
|-&lt;br /&gt;
|BeagleBone Green&lt;br /&gt;
|45€&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Seeed-Studio/102010027?qs=Hlcjo%2FO3pQ5AxSET1oW%252B%252Bg%3D%3D Mouser]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[FoccciCape]]&lt;br /&gt;
|40€&lt;br /&gt;
|t.b.d&lt;br /&gt;
|RS485, CAN comm, 2x relay driver, CCS&lt;br /&gt;
|-&lt;br /&gt;
|Flexible cable, 4 or 5 pole&lt;br /&gt;
|4€/m&lt;br /&gt;
|Local hardware store&lt;br /&gt;
|Size according to charging current. 5x2.5mm² used for the 5 kW inverter&lt;br /&gt;
For DC+, DC-, PE, CP and PP. &lt;br /&gt;
PP can optionally be terminated in the plug, then you just need 4 poles&lt;br /&gt;
|-&lt;br /&gt;
|2 Fuse blocks&lt;br /&gt;
|6€ each&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Altech/002540101?qs=rrS6PyfT74edEoVfbnqxvg%3D%3D Mouser]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2 25A fuses&lt;br /&gt;
|8€ each&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/Eaton-Electronics/EKM10-25-1P?qs=sGAEpiMZZMsIz3CjQ1xegZx2pdJYlyprSptsITKY%2FrCWMtgS7UD2BQ%3D%3D Mouser]&lt;br /&gt;
|400V AC rated from your local hardware store suffices as it&#039;s 2 in series&lt;br /&gt;
|-&lt;br /&gt;
|12V 2A DIN rail supply&lt;br /&gt;
|18€&lt;br /&gt;
|[https://www.mouser.de/ProductDetail/MEAN-WELL/HDR-30-12?qs=pHY8AWQbqIN66yYHZne39A%3D%3D Mouser]&lt;br /&gt;
|In case relays are needed later on, otherwise 5V model makes things easier&lt;br /&gt;
|-&lt;br /&gt;
|12V to 5V step-down converter&lt;br /&gt;
|5€&lt;br /&gt;
|ebay or ali&lt;br /&gt;
|Needed if you chose 12V supply&lt;br /&gt;
|-&lt;br /&gt;
|DIN rail cabinet&lt;br /&gt;
|20€&lt;br /&gt;
|Local hardware store&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MC4 connector set&lt;br /&gt;
|5€&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|5V to 400V step up converter&lt;br /&gt;
|10€&lt;br /&gt;
|[https://www.ebay.de/itm/357155751299 ebay]&lt;br /&gt;
|Only needed for OEM cars&lt;br /&gt;
|}&lt;br /&gt;
The CCS connectors + and - is connected to the inverter input via the fuse blocks. I did not deploy additional contactors but rely on the ones that are already in the car and the inverter. The PLC modems output transformer is connected to PE and CP via a capacitor and a resistor, more details in [https://github.com/uhi22/pyPLC/blob/master/doc/hardware.md uhis github].&lt;br /&gt;
&lt;br /&gt;
The BeagleBone is connected to the PLC modem and the inverter Ethernet port, so you will need a small network switch, also for the uplink to your home network. In addition the CAN outputs of the COMPCE cape connects to the inverters battery CAN (pins 3 and 4 on the Sungrow).&lt;br /&gt;
&lt;br /&gt;
More info on the software setup in the development threads linked above, uhis github and [https://github.com/jsphuebner/esp-egycounter Johannes&#039; github].&lt;br /&gt;
&lt;br /&gt;
This setup can also be used with CHAdeMO cars in which case the powerline modem can be omitted.&lt;br /&gt;
&lt;br /&gt;
== Compatible cars ==&lt;br /&gt;
This table lists cars where we successfully pulled power OUT of the cars battery via its quick charge port.&lt;br /&gt;
&lt;br /&gt;
More details on [https://github.com/jsphuebner/esp-egycounter forum thread].&lt;br /&gt;
&lt;br /&gt;
First column: Y - works flawlessly with no timeout, P - works partially with long timeout, N - works not at all or quick timeout&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
!Make&lt;br /&gt;
!Model&lt;br /&gt;
!Requirements&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|P&lt;br /&gt;
|Hyundai&lt;br /&gt;
|Ioniq Classic 28 kWh&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|Timeout after 10 minutes&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|MG&lt;br /&gt;
|MG4&lt;br /&gt;
|Simulated precharge&lt;br /&gt;
|No timeout&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Tesla&lt;br /&gt;
|Model Y&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|5 kW tested&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Tesla&lt;br /&gt;
|Model 3&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|BMS aborts charging session if more than 15Ah discharge have been detected&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|BYD&lt;br /&gt;
|Atto 3&lt;br /&gt;
|&lt;br /&gt;
|5 kW tested&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Polestar&lt;br /&gt;
|2&lt;br /&gt;
|Physical Precharge voltage&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|VW&lt;br /&gt;
|ID.4&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 1 minute&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|BMW&lt;br /&gt;
|IX4&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 5 minutes&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|Chevrolet&lt;br /&gt;
|Bolt&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 50 s&lt;br /&gt;
|-&lt;br /&gt;
|N&lt;br /&gt;
|Kia&lt;br /&gt;
|EV6&lt;br /&gt;
|&lt;br /&gt;
|Timeout after 10 s&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Collection of documents related to bidirectional charging ==&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
todo&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=FoccciCape&amp;diff=5952</id>
		<title>FoccciCape</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=FoccciCape&amp;diff=5952"/>
		<updated>2025-11-19T10:35:04Z</updated>

		<summary type="html">&lt;p&gt;Johu: added part numbers for accessories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:CCS]] [[Category:Rapid Charging]]&lt;br /&gt;
[[Category:Charger]]&lt;br /&gt;
[[Category:OpenInverter]]&lt;br /&gt;
[[File:FoccciCape.jpg|thumb|FoccciCape]]&lt;br /&gt;
This is an add-on board for the popular BeagleBone single board computer. It is mainly a communication breakout board but features a very special form of communication: CCS! So with it you can get your EV to close its charge port contactors. At the very least you can then charge your EV with your hybrid PV inverter and if the manufacturer doesn&#039;t actively inhibit it you can also draw energy from your vehicles battery to supply your house or even selling it back to the grid.&lt;br /&gt;
&lt;br /&gt;
In addition it has enough communication power to talk to all sorts of PV inverters, BMSes etc. to tie it all together an fully control the flow of energy from a single point.&lt;br /&gt;
&lt;br /&gt;
== Connections ==&lt;br /&gt;
The board has a 12-way Phoenix connector or can be equipped with any other 3.81 mm pin pitch terminal. Together with the BeagleBone it offers the following interfaces:&lt;br /&gt;
&lt;br /&gt;
* 1x RS485&lt;br /&gt;
* 2x CAN&lt;br /&gt;
* 1x CCS PowerLine communication and PWM signalling&lt;br /&gt;
* 2x open drain relay outputs&lt;br /&gt;
* 1x status LED output combined with button input&lt;br /&gt;
* 1x Ethernet (on BeagleBone)&lt;br /&gt;
* 1x USB (on BeagleBone)&lt;br /&gt;
* 1x HDMI (only BeagleBone Black)&lt;br /&gt;
* 1x Grove I2C (only BeagleBone Green)&lt;br /&gt;
* 1x Grove UART (only BeagleBone Green)&lt;br /&gt;
&lt;br /&gt;
=== Part numbers and links ===&lt;br /&gt;
&lt;br /&gt;
* Phoenix 12-way connector [https://www.mouser.de/ProductDetail/Phoenix-Contact/1803523?qs=CXo1rOUe%2FWsOGk2v2GZlUQ%3D%3D 1803523]&lt;br /&gt;
* Phoenix 12-way screw terminal [https://www.mouser.de/ProductDetail/Phoenix-Contact/1803675?qs=WWq3Ki8dym4RD77JGGq8bA%3D%3D 1803675]&lt;br /&gt;
* BeagleBone Green [https://www.mouser.de/ProductDetail/Seeed-Studio/102010027?qs=Hlcjo%2FO3pQ5AxSET1oW%252B%252Bg%3D%3D 102010027]&lt;br /&gt;
* DIN rail [https://www.reichelt.de/de/de/shop/produkt/gehaeuse_fuer_beaglbone_black_stahl_schwarz-315121 enclosure] and [https://www.reichelt.de/de/de/shop/produkt/gehaeuse_fuer_beaglbone_black_stahl_schwarz-315121 clip]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
[[File:StorageSystemConfigurationScreen.png|thumb|Storage System Configuration Screen]]&lt;br /&gt;
The software is comprised of a bunch of [https://github.com/jsphuebner/esp-egycounter/tree/main/battery-control python scripts] that exchange information via MQTT. The following modules are available:&lt;br /&gt;
&lt;br /&gt;
* Communication via Modbus using [https://github.com/tjhowse/modbus4mqtt Modbus4Mqtt] &lt;br /&gt;
* Communication with SoyoSource inverters&lt;br /&gt;
* Simulation of BYD battery via CAN&lt;br /&gt;
* Communication with Eltek Flatpack chargers&lt;br /&gt;
* Reading status from Keba P20 EVSE&lt;br /&gt;
* Communication with Manson switch mode power supply&lt;br /&gt;
* Communication with openinverter [[16-cell BMS]]&lt;br /&gt;
* Retrieval of spot market prices via awattar or Tibber API&lt;br /&gt;
* Data logger&lt;br /&gt;
* Submission of raw meter data to Tibber&lt;br /&gt;
* CCS communication via [[PyPLC]]&lt;br /&gt;
* Energy flow controller (Zero Grid Exchange, charge on low spot market price, discharge only on high spot market price)&lt;br /&gt;
* Web Interface for configuration and monitoring&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
This section is only relevant if you&#039;re setting up the BeagleBone yourself. If you buy a preprogrammed one from the shop (not yet available) this has already been done for you. We are also working on an image file that is already set up.&lt;br /&gt;
&lt;br /&gt;
The howto for compiling the QCA kernel module and setting it up can be found on the [https://openinverter.org/forum/viewtopic.php?p=87295#p87295 forum].&lt;br /&gt;
&lt;br /&gt;
Next you need to flash the SPI flash on the cape with QCA firmware, this is also described on the [https://openinverter.org/forum/viewtopic.php?p=87710#p87710 forum].&lt;br /&gt;
&lt;br /&gt;
Finally you enable all relevant peripherals in /boot/uEnv.txt:&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
uboot_overlay_addr0=/lib/firmware/BB-CAN0-00A0.dtbo&lt;br /&gt;
uboot_overlay_addr1=/lib/firmware/BB-CAN1-00A0.dtbo&lt;br /&gt;
uboot_overlay_addr2=/lib/firmware/BB-SPI0-QCASPI-00A0.dtbo&lt;br /&gt;
uboot_overlay_addr3=/lib/firmware/BB-UART4-00A0.dtbo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To enable both CAN interfaces at boot you configure systemd-networkd by creating one file per interface, /etc/systemd/network/80-can0.network&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Match]&lt;br /&gt;
Name=can0&lt;br /&gt;
&lt;br /&gt;
[CAN]&lt;br /&gt;
BitRate=500K&lt;br /&gt;
RestartSec=100ms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;And likewise 81-can1.network (Name=can1). Of course you need to pick the baud rate that matches the devices you connect to the port, but 500k is usually your best bet.&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=FoccciCape&amp;diff=5951</id>
		<title>FoccciCape</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=FoccciCape&amp;diff=5951"/>
		<updated>2025-11-19T10:14:36Z</updated>

		<summary type="html">&lt;p&gt;Johu: Created page with &amp;quot;  Category:CCS Category:Rapid Charging Category:Charger Category:OpenInverter FoccciCape This is an add-on board for the popular BeagleBone single board computer. It is mainly a communication breakout board but features a very special form of communication: CCS! So with it you can get your EV to close its charge port contactors. At the very least you can then charge your EV with your hybrid PV inverter and if the manufacturer...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:CCS]] [[Category:Rapid Charging]]&lt;br /&gt;
[[Category:Charger]]&lt;br /&gt;
[[Category:OpenInverter]]&lt;br /&gt;
[[File:FoccciCape.jpg|thumb|FoccciCape]]&lt;br /&gt;
This is an add-on board for the popular BeagleBone single board computer. It is mainly a communication breakout board but features a very special form of communication: CCS! So with it you can get your EV to close its charge port contactors. At the very least you can then charge your EV with your hybrid PV inverter and if the manufacturer doesn&#039;t actively inhibit it you can also draw energy from your vehicles battery to supply your house or even selling it back to the grid.&lt;br /&gt;
&lt;br /&gt;
In addition it has enough communication power to talk to all sorts of PV inverters, BMSes etc. to tie it all together an fully control the flow of energy from a single point.&lt;br /&gt;
&lt;br /&gt;
== Connections ==&lt;br /&gt;
The board has a 12-way Phoenix connector or can be equipped with any other 3.81 mm pin pitch terminal. Together with the BeagleBone it offers the following interfaces:&lt;br /&gt;
&lt;br /&gt;
* 1x RS485&lt;br /&gt;
* 2x CAN&lt;br /&gt;
* 1x CCS PowerLine communication and PWM signalling&lt;br /&gt;
* 2x open drain relay outputs&lt;br /&gt;
* 1x status LED output combined with button input&lt;br /&gt;
* 1x Ethernet (on BeagleBone)&lt;br /&gt;
* 1x USB (on BeagleBone)&lt;br /&gt;
* 1x HDMI (only BeagleBone Black)&lt;br /&gt;
* 1x Grove I2C (only BeagleBone Green)&lt;br /&gt;
* 1x Grove UART (only BeagleBone Green)&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
[[File:StorageSystemConfigurationScreen.png|thumb|Storage System Configuration Screen]]&lt;br /&gt;
The software is comprised of a bunch of [https://github.com/jsphuebner/esp-egycounter/tree/main/battery-control python scripts] that exchange information via MQTT. The following modules are available:&lt;br /&gt;
&lt;br /&gt;
* Communication via Modbus using [https://github.com/tjhowse/modbus4mqtt Modbus4Mqtt] &lt;br /&gt;
* Communication with SoyoSource inverters&lt;br /&gt;
* Simulation of BYD battery via CAN&lt;br /&gt;
* Communication with Eltek Flatpack chargers&lt;br /&gt;
* Reading status from Keba P20 EVSE&lt;br /&gt;
* Communication with Manson switch mode power supply&lt;br /&gt;
* Communication with openinverter [[16-cell BMS]]&lt;br /&gt;
* Retrieval of spot market prices via awattar or Tibber API&lt;br /&gt;
* Data logger&lt;br /&gt;
* Submission of raw meter data to Tibber&lt;br /&gt;
* CCS communication via [[PyPLC]]&lt;br /&gt;
* Energy flow controller (Zero Grid Exchange, charge on low spot market price, discharge only on high spot market price)&lt;br /&gt;
* Web Interface for configuration and monitoring&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
This section is only relevant if you&#039;re setting up the BeagleBone yourself. If you buy a preprogrammed one from the shop (not yet available) this has already been done for you. We are also working on an image file that is already set up.&lt;br /&gt;
&lt;br /&gt;
The howto for compiling the QCA kernel module and setting it up can be found on the [https://openinverter.org/forum/viewtopic.php?p=87295#p87295 forum].&lt;br /&gt;
&lt;br /&gt;
Next you need to flash the SPI flash on the cape with QCA firmware, this is also described on the [https://openinverter.org/forum/viewtopic.php?p=87710#p87710 forum].&lt;br /&gt;
&lt;br /&gt;
Finally you enable all relevant peripherals in /boot/uEnv.txt:&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
uboot_overlay_addr0=/lib/firmware/BB-CAN0-00A0.dtbo&lt;br /&gt;
uboot_overlay_addr1=/lib/firmware/BB-CAN1-00A0.dtbo&lt;br /&gt;
uboot_overlay_addr2=/lib/firmware/BB-SPI0-QCASPI-00A0.dtbo&lt;br /&gt;
uboot_overlay_addr3=/lib/firmware/BB-UART4-00A0.dtbo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;To enable both CAN interfaces at boot you configure systemd-networkd by creating one file per interface, /etc/systemd/network/80-can0.network&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Match]&lt;br /&gt;
Name=can0&lt;br /&gt;
&lt;br /&gt;
[CAN]&lt;br /&gt;
BitRate=500K&lt;br /&gt;
RestartSec=100ms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;And likewise 81-can1.network (Name=can1). Of course you need to pick the baud rate that matches the devices you connect to the port, but 500k is usually your best bet.&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=File:StorageSystemConfigurationScreen.png&amp;diff=5950</id>
		<title>File:StorageSystemConfigurationScreen.png</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=File:StorageSystemConfigurationScreen.png&amp;diff=5950"/>
		<updated>2025-11-19T10:01:04Z</updated>

		<summary type="html">&lt;p&gt;Johu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Storage System Configuration Screen&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=File:FoccciCape.jpg&amp;diff=5949</id>
		<title>File:FoccciCape.jpg</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=File:FoccciCape.jpg&amp;diff=5949"/>
		<updated>2025-11-19T09:07:00Z</updated>

		<summary type="html">&lt;p&gt;Johu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FoccciCape with pin descriptions&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Tesla_Model_S/X_Small_Drive_Unit_(%22SDU%22)&amp;diff=5907</id>
		<title>Tesla Model S/X Small Drive Unit (&quot;SDU&quot;)</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Tesla_Model_S/X_Small_Drive_Unit_(%22SDU%22)&amp;diff=5907"/>
		<updated>2025-10-14T17:28:22Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added connector part numbers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
Tesla uses the Small Drive Unit (SDU) in dual-motor versions of the Model S/X. The Front SDU (FDU) is found in performance and non-performance dual-motor models, while the Rear SDU (RDSU) is only found in non-performance dual motor models.&lt;br /&gt;
&lt;br /&gt;
== Wiring ==&lt;br /&gt;
[[File:Drive Inverter Front Connector.png|thumb|Small Drive Unit (&amp;quot;SDU&amp;quot;) Data Connector|alt=]]&lt;br /&gt;
=== Low Voltage Data Connector ===&lt;br /&gt;
[[File:Drive Inverter Front Connector Schematic.png|thumb|Small Front Drive Unit (&amp;quot;SDU&amp;quot;) Data Schematic|alt=]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Housing&#039;&#039;&#039; ===&lt;br /&gt;
Molex MX150 33472-2002 (key “B”) &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pins:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
22 AWG:      Molex 33012-2003&lt;br /&gt;
&lt;br /&gt;
18-20 AWG: Molex 33012-2002&lt;br /&gt;
&lt;br /&gt;
14-16 AWG: Molex 33012-2001&lt;br /&gt;
&lt;br /&gt;
=== High Voltage Power Connectors===&lt;br /&gt;
Although the connectors are known ([https://www.rosenberger.com/product/hpk/ Rosenberger HPK series]), they are not available through conventional vendors.&lt;br /&gt;
&lt;br /&gt;
=== Internal connectors ===&lt;br /&gt;
20-pole Molex: 75757-5101&lt;br /&gt;
&lt;br /&gt;
2-pole temp sensor: S02BA-AIT2-1AK&lt;br /&gt;
&lt;br /&gt;
6-pole encoder: S06B-AIT2-1AK&lt;br /&gt;
&lt;br /&gt;
24-pole inverter: CES-112-02-T-D&lt;br /&gt;
&lt;br /&gt;
==Drop-in control board==&lt;br /&gt;
[[File:Tesla SDU controller connections.png|thumb|Tesla SDU drop-in board]]&lt;br /&gt;
&lt;br /&gt;
This board replaces the original board  that comes with the OEM Tesla drive train. As opposed to the latter this board lets you use the drive train in the first place and allows you to fine-tune driving behaviour with the usual set of openinverter parameters. It does not restrict you in power output or regen input.&lt;br /&gt;
&lt;br /&gt;
You can fully control the board via CAN or via a set of digital and analog inputs.&lt;br /&gt;
&lt;br /&gt;
Dual Pot mode, connect pot 2 to pin 10, BRAKE TRANSDUCER SIGNAL. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Note: see this thread regarding throttle pedal safety https://openinverter.org/forum/viewtopic.php?p=75841 this applies to the SDU boards.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Resources===&lt;br /&gt;
&#039;&#039;&#039;Wiring&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/damienmaguire/Tesla-Front-Drive-Unit/blob/master/SDU_Wiring_Connections.pdf Wiring connections]&lt;br /&gt;
&lt;br /&gt;
[[:File:Zombieverter SDU Wiring.png|Wiring with Zombieverter]]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/damienmaguire/Tesla-Front-Drive-Unit/blob/master/FDU_Main_conn_pinout_V1.ods Pinout]&lt;br /&gt;
&lt;br /&gt;
[https://www.thingiverse.com/thing:6230844 MX150 male header receptacle STL on Thingiverse]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Buying&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=62 Purchase in openinverter shop]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tuning&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[https://openinverter.org/forum/viewtopic.php?t=2558 SDU Tuning Optimization Forum Thread]&lt;br /&gt;
&lt;br /&gt;
[https://openinverter.org/parameters/view.html?id=15 Original Parameters from Johannes]&lt;br /&gt;
&lt;br /&gt;
[https://openinverter.org/parameters/view.html?id=27 Parameters tuned by catphish]&lt;br /&gt;
&lt;br /&gt;
[[Setup FAQ]]&lt;br /&gt;
&lt;br /&gt;
===Application Info===&lt;br /&gt;
The board comes programmed with a recent software version. Please check [https://github.com/jsphuebner/stm32-sine/releases github] for recent software releases. In addition the board comes with a set of parameters appropriate to run the Tesla SDU. So it will work out of the box. Parameters that must not be changed are hidden to eliminate sources of error.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;It is essential that the tripmode parameter is set to 1 &amp;quot;DcSwOn&amp;quot;&#039;&#039;&#039;. Also do not use a low value fuse while testing. On over current trips some energy is still stored in the motor and it has nowhere to go if the contactor/fuse opens leading to immediate destruction of your inverter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You will need to solder the supplied connectors and the current sensors embedded into the inverter assembly to the board, see [https://youtu.be/VVSRzmP-fRw this video].&lt;br /&gt;
&lt;br /&gt;
To test run your drive unit, supply the board with 12V and GND on Conn6.13 and Conn6.19, respectively. Also supply 12V to Conn6.5 to select forward direction.&lt;br /&gt;
&lt;br /&gt;
Supply inverter with some high voltage. For first tests it is recommended to put a large resistor/heating element/kettle in series.&lt;br /&gt;
&lt;br /&gt;
You can start in manual mode using the button on the web interface and enter like 1Hz for „Fslipspnt“ and some value between 10-50 for „ampnom“ to see if the motor spins up. Be careful because manual mode does not enforce a motor speed limit!&lt;br /&gt;
&lt;br /&gt;
You may also set parameter „udcsw“ and „udcmin“ to 0 and start drive mode by pulsing 12V on Conn6.9. Then connect a pot between Conn6.4, Conn6.7 and Conn6.8 (wiper). This will also spin the motor AND enforce a speed limit.&lt;br /&gt;
&lt;br /&gt;
==Cooling ==&lt;br /&gt;
&lt;br /&gt;
===Small Front Drive Unit (FDU)===&lt;br /&gt;
[[File:Tesla FDU cooling.jpg|none|thumb|Tesla FDU cooling]]&lt;br /&gt;
&lt;br /&gt;
===Small Rear Drive Unit (SRDU)===&lt;br /&gt;
[[File:Tesla SRDU cooling.png|none|thumb|Tesla SRDU cooling]]&lt;br /&gt;
[[Category:Tesla]]&lt;br /&gt;
[[Category:Motor]]&lt;br /&gt;
[[Category:Inverter]]&lt;br /&gt;
[[Category:Gearbox]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5876</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5876"/>
		<updated>2025-09-22T12:35:36Z</updated>

		<summary type="html">&lt;p&gt;Johu: added link to fallback forum&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Index|Wiki Index]] - quick reference for all info on the wiki.&lt;br /&gt;
&lt;br /&gt;
If you have trouble logging into the forum, log into [https://openinverter.org:8443/forum this address], then go back to the [https://openinverter.org/forum normal forum].&lt;br /&gt;
&lt;br /&gt;
Did you know you can convert your existing fossil powered vehicle to use electricity instead? And that you can even produce that electricity yourself?&lt;br /&gt;
&lt;br /&gt;
Open Inverter is a [[Main Page#Who we are|community of people]] and projects focused on open source solutions for EV conversions.  Founded in 2008 by Johannes Huebner as an open source inverter control firmware, the project has since expanded to include the reuse of components from production EVs and hybrids, including inverters, motors, batteries, on-board chargers, and DC-DC converters, as well as the open source implementation of other necessary systems for EV conversions such as DC Fast Charging controllers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:Electric-car.jpg|none|frame|Click on the captions to learn more about the respective system! Image source: https://www.newkidscar.com/&lt;br /&gt;
&lt;br /&gt;
poly 248 166 542 166 542 217 248 217 248 166 [[#Reusing motors and inverters - aka drive trains]]&lt;br /&gt;
poly 1041 455 1336 455 1336 506 1041 506 1041 455 [[#Reusing Batteries]]&lt;br /&gt;
poly 147 344 428 344 428 391 147 391 147 344 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 844 624 1118 624 1118 673 844 673 844 624 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 935 539 1200 539 1200 586 935 586 935 539 [[#Rapid Charging]]&lt;br /&gt;
poly 134 435 394 435 394 483 134 483 134 435 [[#Auxiliary Parts]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by the wider community. &#039;&#039;&#039;Please update this wiki&#039;&#039;&#039;. For example if your question has been clarified on the [https://openinverter.org/forum forum] and the new information can not be found here, please add it! The credentials are the same as for the forum.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Main Page#Who we are|Developers]] time is best spent developing;&#039;&#039;&#039; &#039;&#039;&#039;Support is best found in the forums&#039;&#039;&#039; - Developers of various projects are often bombarded with private messages and emails. Managing these emails and questions is a extremely large undertaking. Please read, and take the time to understand the information available here and across the web if you don&#039;t understand a topic. Developers are not your personal support team, unless you want to [[Application Support|pay them directly]] for their time. To keep developers independent please consider donating - donation links can be found [[Main Page#Who we are|down below]].&lt;br /&gt;
&lt;br /&gt;
==Reusing motors and inverters - aka drive trains==&lt;br /&gt;
[[File:Tesla_LDU.jpg|thumb]]&lt;br /&gt;
The drive train is one of the defining building blocks of your conversion as it defines how well your vehicle picks up speed. Over the years we have reverse engineered many popular drive trains from [[:Category:OEM|production cars]] such as Teslas. As a bonus using such complete drive trains facilitates getting the vehicle [[Legalities|road legal]] in many countries. By now you have a choice of low to medium power drive trains that only cost a few 100€ up to high performance ones at many 1000€. &lt;br /&gt;
&lt;br /&gt;
We have established two methods of running these [[:Category:OEM|OEM]] systems: reverse-engineering their communication protocol and making the drive train &amp;quot;think&amp;quot; it is still in its original vehicle OR swapping out the control electronics for our own open source motor controller. The latter method gives your more control and power but also a steeper learning curve. &lt;br /&gt;
&lt;br /&gt;
Nearly all drive trains are targeted at 400V battery voltage. Run at a lower voltage they will produce proportionally less power. &lt;br /&gt;
Here is what we have done so far and how we&#039;ve done it. Some is still work in progress (WIP) &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Drive Train&lt;br /&gt;
!Control Method&lt;br /&gt;
! Approximate Power Output&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model S/X Large Drive Unit (&amp;quot;LDU&amp;quot;)|Large Drive Unit]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=64 Board Swap]&lt;br /&gt;
|335-475 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model S/X Small Drive Unit (&amp;quot;SDU&amp;quot;)|Small Drive Unit]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=62 Board Swap]&lt;br /&gt;
|180 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Rear Drive Unit|Model 3/Y Rear Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|239 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Front Drive Unit|Model 3/Y Front Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|121 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Nissan]]&lt;br /&gt;
|[[Nissan Leaf Motors|Gen1]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing with ZombieVerter VCU]]&lt;br /&gt;
|80 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| [[Nissan Leaf Gen2 Board|Gen2]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing with ZombieVerter VCU]]/[https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=57 Board Swap]&lt;br /&gt;
|80 kW / 130 kW (board swap)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Nissan Leaf Gen 3 (2018 up EM57)|Gen3]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing with ZombieVerter VCU]]/Board Swap [WIP]&lt;br /&gt;
|110 - 160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Toyota|Toyota]]&lt;br /&gt;
|[[Lexus GS450h Drivetrain|Lexus GS 450h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing with ZombieVerterVCU]]&lt;br /&gt;
|250 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus GS300h CVT|Lexus GS 300h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing with ZombieVerterVCU]]&lt;br /&gt;
|105 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter|Prius Gen2]]&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter Controller|External Control Board]] ([https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=68 Buy here])&lt;br /&gt;
|40-70 kW &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen3 Board|Prius Gen3]]&lt;br /&gt;
|[https://evbmw.com/index.php/evbmw-webshop/toyota-built-and-tested-boards Board Swap]/[[ZombieVerter VCU|Communication spoofing with ZombieVerterVCU]]&lt;br /&gt;
|100 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus MGR Rear Transaxle Motor|MGR]]&lt;br /&gt;
|Prius Gen2 or Gen3 inverter&lt;br /&gt;
|18-50 kW (various models)&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander Rear Drive Unit|Rear Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing with ZombieVerterVCU]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Mitsubishi Outlander Front Transaxle|Front Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing with ZombieVerterVCU]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:BMW|BMW]]&lt;br /&gt;
|[[BMW i3 Inverter|i3]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=72 Board Swap]&lt;br /&gt;
|125-135 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Chevrolet|Chevy/Opel]]&lt;br /&gt;
|[[Chevrolet Volt Inverter|Volt/Ampera]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Ford|Ford]]&lt;br /&gt;
|[[Ford Ranger TIM Controller|Ranger]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| Renault&lt;br /&gt;
|[https://openinverter.org/forum/viewtopic.php?t=4749 Zoe]&lt;br /&gt;
|Board Swap [WIP]&lt;br /&gt;
|Unknown &lt;br /&gt;
|-&lt;br /&gt;
|MG&lt;br /&gt;
|[https://github.com/damienmaguire/MG-EV-Inverter ZS EV]&lt;br /&gt;
|Board Swap [WIP] &lt;br /&gt;
|Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reusing Batteries==&lt;br /&gt;
[[File:A09A7634.jpg|thumb]]&lt;br /&gt;
The most expensive and probably equally defining component is the [[Batteries|battery]] that stores all the energy for running your car. Batteries are usually assembled from a number of modules that in turn contain a number of cells. Usually batteries are reused on a module level. In rare cases the battery can be [https://youtu.be/_7l0Y1GsNJ4 reused as is in its original battery] box.&lt;br /&gt;
&lt;br /&gt;
While there are also various [[16-cell BMS|open source implementations]] of [https://www.youtube.com/watch?v=_QsMoCrSTYc battery management systems] (BMS) we generally recommend using as much of the OEM BMS as possible. Sometimes the [[:Category:OEM|OEM]] BMS comes as an all-in-one solution that measures cell data and spits out state of charge and power limit information. In other cases the BMS is split into module units that measure the physical data (voltages, temperatures) and a central unit that calculates the high level information.&lt;br /&gt;
&lt;br /&gt;
Sometimes we managed to reuse the complete system which is generally the safest as you can rely on the manufacturers well tested charge and discharge limits as well as reliable state of charge information (i.e. how much energy is left in the battery at any given time). In other cases we only managed to reuse the module units. This adds the convenience of having a well tested piece of hardware with the matching connector but required us to calculate all high level battery data ourselves. This also includes [https://www.youtube.com/watch?v=RGYLPOlT45A cell balancing].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!BMS usability&lt;br /&gt;
!Energy Content&lt;br /&gt;
!Configuration&lt;br /&gt;
!Rated Output&lt;br /&gt;
!Achieved Output&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model 3 Battery|Model 3]]&lt;br /&gt;
|Module and high level [WIP]&lt;br /&gt;
|60-80 kWh ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Batteries#OEM modules|Model S]]&lt;br /&gt;
|Unknown&lt;br /&gt;
|85-100 kWh&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Nissan|Nissan]]&lt;br /&gt;
|[[Nissan Leaf BMS|Leaf/NV200]]&lt;br /&gt;
|High Level&lt;br /&gt;
|24-40 kWh&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:VAG|VW]]&lt;br /&gt;
|[[VW Hybrid Battery Packs|Passat/Golf]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|8.7-36 kWh&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[MEB Batteries|MEB]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|52-77 kwh &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BMW&lt;br /&gt;
|[[BMW Hybrid Battery Pack|3 Series Hybrid]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|Gen 1: 7kWh. Gen 2: 9KWh&lt;br /&gt;
|80s&lt;br /&gt;
|83kW&lt;br /&gt;
|&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |These Batteries use the same modules. 3 series uses 5 whilst the 5 &amp;amp;7 series uses 6.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[BMW Hybrid Battery Pack|5 &amp;amp; 7 Series Hybrid]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|Gen 1: 9kWh. Gen 2: 12kWh&lt;br /&gt;
|96s&lt;br /&gt;
|83kW&lt;br /&gt;
|120kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[BMW Hybrid Battery Pack|X5]] &lt;br /&gt;
|Module Level&lt;br /&gt;
|24kWh&lt;br /&gt;
|96s&lt;br /&gt;
|83kw&lt;br /&gt;
|&lt;br /&gt;
|12 Modules.&lt;br /&gt;
|-&lt;br /&gt;
|Renault&lt;br /&gt;
|[[Renault Zoe Battery Pack|Zoe]]&lt;br /&gt;
|High Level&lt;br /&gt;
|22kWh - 52kWh&lt;br /&gt;
|2p96s&lt;br /&gt;
|100kW&lt;br /&gt;
|&lt;br /&gt;
|Available in 22kWh, 41kWh &amp;amp; 52kWh variants.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Onboard chargers and DC/DC converters ==&lt;br /&gt;
[[File:PXL_20241020_024043714.jpg|thumb|Onboard charger]]&lt;br /&gt;
The DC/DC converter takes energy from your HV traction battery and sends it to the cars 12V systems and 12V battery. It is basically a 1:1 replacement of the former alternator. An onboard charger (OBC) takes AC current from the grid and converts it into DC current to charge the battery. These two devices are often combined in one common enclosure hence why we treat them as one.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!OBC&lt;br /&gt;
!DC/DC&lt;br /&gt;
!OBC power&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model S GEN1 Charger|Model S]] (Gen1)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|10 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN2 Charger|Model S and X]] (Gen2)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN3 Charger|Model S and X]] (Gen3)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|22 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]] &lt;br /&gt;
|[[Tesla Model S/X DC/DC Converter|Model S and X]] (DC/DC)&lt;br /&gt;
|no&lt;br /&gt;
|yes &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model 3 Charger/DCDC (&amp;quot;PCS&amp;quot;)|Model 3]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt Charger|Volt]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt 2 Charger|Volt 2]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Dilong/Cascadia Chargers|Dilong]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Eltek chargers|Eltek]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander DCDC OBC|Outlander / iMiev]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes &lt;br /&gt;
|3.3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:MG|MG]]&lt;br /&gt;
|[[MG ZS Charger|ZS / MG4 / MG5]] &lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 - 11 kW&lt;br /&gt;
|}&lt;br /&gt;
There are more chargers under investigation, only the proven working ones are listed here. See our [[:Category:Charger|charger listing]] for more.&lt;br /&gt;
&lt;br /&gt;
== Rapid Charging==&lt;br /&gt;
[[File:Ccs-socket.jpg|thumb|CCS2 rapid charging socket]]&lt;br /&gt;
The above mentioned onboard chargers always have limited power as the space requirements and cost rise with power. To overcome this limitation modern EVs offer external access to their HV battery via a so called [[:Category:Rapid Charging|rapid charging]] port. This allows to charge the battery with a much more powerful external charger. As a bonus it also allows [[Bidirectional Charging|taking energy from the HV battery]] and powering appliances with it.&lt;br /&gt;
&lt;br /&gt;
There are 2 rapid charging protocols and 5 connector flavours world wide&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Communication&lt;br /&gt;
!Prevalent countries&lt;br /&gt;
!Open Source solutions&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:ChaDeMo|CHAdeMO]]&lt;br /&gt;
|CAN&lt;br /&gt;
|Japan, world wide&lt;br /&gt;
|[[Chademo with ESP32-Chademo|ESP32]], [[Chademo With Arduino Due|Arduino,]] [[Chademo with Zombieverter|ZombieVerter]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo1&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo2&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|Europe&lt;br /&gt;
|[[Foccci]], [[pyPLC]], [[BMW I3 Fast Charging LIM Module|I3LIM]]&lt;br /&gt;
|-&lt;br /&gt;
|NACS&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|GB/T&lt;br /&gt;
|CAN&lt;br /&gt;
|China&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Auxiliary Parts ==&lt;br /&gt;
We have now treated all the major building blocks of an EV, but there are many other components to complete the vehicle such as heaters, gear shifters and so on. We will summarize them here.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:HVJB|HV Junction Box]]&lt;br /&gt;
* [[:Category:HVAC|HVAC]] (Heating, Air conditioning)&lt;br /&gt;
* [[Vacuum Pumps]]&lt;br /&gt;
* [[:Category:Power Steering|Power Steering]]&lt;br /&gt;
* [[Water Pumps]]&lt;br /&gt;
* [[VCU Comparison|VCU]] (Vehicle Control Unit)&lt;br /&gt;
* [[Shift Controllers]]&lt;br /&gt;
* [[:Category:Charge Ports|Charge Ports]]&lt;br /&gt;
&lt;br /&gt;
== Additional Reading ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Legalities|Legalities]] - Getting a vehicle road legal in your country&lt;br /&gt;
* [[Glossary of Terms]]&lt;br /&gt;
* [[Parameters|Inverter Parameter Definitions]]&lt;br /&gt;
* [[Common Inverter FAQ]] - questions common to all hardware variants&lt;br /&gt;
* [[Tesla Inverter FAQ]] - questions regarding Tesla Large Drive Units and Small Drive Units&lt;br /&gt;
* [[Electronics Basics]] - general advice for troubleshooting electronic circuits&lt;br /&gt;
* [[I want a cheap ev conversion|cheap EV conversions]] - this entry point for the penny pinchers&lt;br /&gt;
* [[I want a powerful ev conversion|performant EV conversions]]  - where torque trumps money&lt;br /&gt;
* [[Mechanical design database]] - here you will find measurements, models, files, etc for a variety of components such as adapter plates and drive shaft flanges&lt;br /&gt;
* [[:Category:OpenInverter|Documentation of all OpenInverter Projects]]&lt;br /&gt;
* [[:Category:Tutorials|Tutorials]]&lt;br /&gt;
* [[Hardware Theory of Operation]]&lt;br /&gt;
* [[Software Theory of Operation]]&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
There is no static team or openinverter company but here we list the most active community members with links to donation or information sites:&lt;br /&gt;
&lt;br /&gt;
*Johannes Hübner, openinverter founder and developer - [https://www.patreon.com/openinverter support on patreon] follow on [https://www.youtube.com/user/EngineersFear youtube] and [https://github.com/jsphuebner/ github]&lt;br /&gt;
*Damien Maguire, developer and most active vehicle converter - [https://evbmw.com/index.php/evbmw-webshop visit shop] [https://www.patreon.com/evbmw support on patreon] follow on [https://www.youtube.com/@Evbmw youtube] and [https://github.com/damienmaguire/ github]&lt;br /&gt;
*Tom de Bree, active member and developer - [https://github.com/Tom-evnut github] and [https://citini.com/ shop]&lt;br /&gt;
*Uwe Hennig, master of CCS - [https://www.patreon.com/uhi22 support on patreon] follow on [https://github.com/uhi22/ github]&lt;br /&gt;
*celeron55, developer - support via [https://www.paypal.com/paypalme/celeron55 paypal] follow on [https://www.youtube.com/user/celeron55 youtube] and [https://github.com/celeron55 github]&lt;br /&gt;
*Dave Fiddes, active member and developer - Follow on [https://github.com/davefiddes/ github]&lt;br /&gt;
*Arber Kramar, long term member and developer - [https://leafdriveblog.wordpress.com/ Follow on blogspot]&lt;br /&gt;
*Janosch Oppermann, active member, developer and producer - follow on [https://www.youtube.com/@foxev-content youtube]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Application_Support&amp;diff=5799</id>
		<title>Application Support</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Application_Support&amp;diff=5799"/>
		<updated>2025-06-16T11:10:04Z</updated>

		<summary type="html">&lt;p&gt;Johu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Openinverter is an opensource project, i.e. there is no large company behind it that has paid employees. Therefore all products that you buy in the openinverter shop, the EVBMW shop or that you order yourself from a PCB manufacturer are self-supported. It means you need to research the needed information on the forum or on this wiki.&lt;br /&gt;
&lt;br /&gt;
The developers are well aware that this research can be a show-stopper. Since we don&#039;t want people to get stuck in their project there are paid support options:&lt;br /&gt;
&lt;br /&gt;
* Johannes Hübner offers [https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=60&amp;amp;product_id=65 support time by the hour] for BMS and CCS boards (no longer inverters!). Most commonly you will [https://openinverter.org/forum/viewtopic.php?t=937 grant remote access] to your board and speak via video chat to diagnose and solve problems&lt;br /&gt;
* Janosch Oppermann offers [http://foxev.io/openinverter/?ref=oiw support time by the hour]. Any questions/projects/troubleshooting welcome.&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Errors&amp;diff=5787</id>
		<title>Errors</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Errors&amp;diff=5787"/>
		<updated>2025-05-16T04:58:23Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added new codes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The inverter software continously checks it&#039;s inputs for implausibilities and error conditions. The last 4 errors are stored in RAM. They can be displayed by typing &amp;quot;errors&amp;quot; or pressing the according button on the web interface.&lt;br /&gt;
&lt;br /&gt;
== Error Codes ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;#&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Message&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Reaction&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|OVERCURRENT&lt;br /&gt;
|STOP&lt;br /&gt;
|HW overcurrent limit was hit&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|THROTTLE1&lt;br /&gt;
|DISPLAY&lt;br /&gt;
|Throttle input 1 went out of range → 0 throttle assumed&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|THROTTLE2&lt;br /&gt;
|DISPLAY&lt;br /&gt;
|Throttle input 2 went out of range&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|CANTIMEOUT&lt;br /&gt;
|DISPLAY&lt;br /&gt;
|No IO CAN messages for 500ms&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|EMCYSTOP&lt;br /&gt;
|STOP&lt;br /&gt;
|Emcystop pin went low&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|MPROT&lt;br /&gt;
|STOP&lt;br /&gt;
|Mprot pin went low&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|DESAT&lt;br /&gt;
|STOP&lt;br /&gt;
|Desat pin went low&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|OVERVOLTAGE&lt;br /&gt;
|STOP&lt;br /&gt;
|udcmax was hit&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|ENCODER&lt;br /&gt;
|DISPLAY&lt;br /&gt;
|Implausible pulses on encoder (only single mode)&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|PRECHARGE&lt;br /&gt;
|STOP&lt;br /&gt;
|udcsw was not reached after 5s of precharging&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|TMPHSMAX&lt;br /&gt;
|DERATE&lt;br /&gt;
|Derating because maximum heatsink temperature of 85°C reached&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|CURRENTLIMIT&lt;br /&gt;
|DERATE&lt;br /&gt;
|Derating because iacmax limit was approached&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|PWMSTUCK&lt;br /&gt;
|DISPLAY&lt;br /&gt;
|For pwmpol=0 all 6 PWM pins are expected low on start, and all high for pwmpol=1. Otherwise this error is generated&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|HICUROFS1/2&lt;br /&gt;
|DISPLAY&lt;br /&gt;
|Current channel 1 or 2, respectively, is below 1.23 or above 2.06V when no current is flowing. Check wiring and voltage dividers&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|HICUROFS2&lt;br /&gt;
|DISPLAY&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|HIRESOFS&lt;br /&gt;
|DISPLAY&lt;br /&gt;
|Resolver feedback voltage is below 1.23 or above 2.06V when idle. Check wiring.&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|LORESAMP&lt;br /&gt;
|DISPLAY&lt;br /&gt;
|Resolver feedback voltage swing is below 0.8V peak-to-peak. Check wiring or raise amplitude of excitation.&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|TMPMMAX&lt;br /&gt;
|DERATE&lt;br /&gt;
|Derating because maximum motor temperature reached&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|CANCRC&lt;br /&gt;
|STOP&lt;br /&gt;
|Repeated CRC error in CAN control message detected&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|CANCOUNTER&lt;br /&gt;
|STOP&lt;br /&gt;
|Repeated sequencing error in CAN control message detected&lt;br /&gt;
|}&lt;br /&gt;
[[Category:FAQ]] [[Category:Troubleshoot]] [[Category:Errors]]&lt;br /&gt;
[[Category:OpenInverter]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Foccci&amp;diff=5619</id>
		<title>Foccci</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Foccci&amp;diff=5619"/>
		<updated>2025-02-06T21:19:16Z</updated>

		<summary type="html">&lt;p&gt;Johu: /* External connector (&amp;quot;Deutsch Header&amp;quot;) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Disclaimer: This Page is still work in progress! Any information written here is a draft only and should be handled as such. Contributions more then welcome. If you have questions please ask them in the discussion section of the page or in the OpenInvert Forum.&lt;br /&gt;
[[File:Foccci pinout.svg|thumb|Foccci (v4.5) pinout]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Foccci 4.5b pinout.png|thumb|Foccci 4.5b / 5 / 5.1 pinout]]&lt;br /&gt;
This page is about FOCCCI. FOCCCI is an open source CCS Charge Interface started by Uhi and developed by the OpenInverter Community.&lt;br /&gt;
&lt;br /&gt;
Foccci is the hardware part, and on it runs the software Clara.&lt;br /&gt;
&lt;br /&gt;
Here you will find documentation on the Hardware (and Clara software), where to get it (or how to build it yourself), News regarding the development and many more great things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Video presentation: https://www.youtube.com/watch?v=Bc7lXPGtLXY&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=79 Foccci for sale on OpenInverter Shop]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/uhi22/foccci Foccci on Github.]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/uhi22/ccs32clara Clara on Github.] &lt;br /&gt;
&lt;br /&gt;
[https://openinverter.org/forum/viewtopic.php?t=3727 Foccci in the OpenInverter Forum.]&lt;br /&gt;
&lt;br /&gt;
== Pin description ==&lt;br /&gt;
&lt;br /&gt;
=== External connector (&amp;quot;Deutsch Header&amp;quot;) ===&lt;br /&gt;
Starting version 4.5b the pins were reshuffled to allow one wiring loom going to the charge port and one to the car side. Changed pins are &#039;&#039;&#039;bold&#039;&#039;&#039;. [[Connector Part Numbers#FOCCCI|Connector part numbers]] are on a separate page.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Short name&lt;br /&gt;
!Pin up to version 4.5a&lt;br /&gt;
!Pin for version 4.5b, 5, 5.1&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|TEMP1&lt;br /&gt;
|A1&lt;br /&gt;
|A1&lt;br /&gt;
|Power pin temperature sensor. It is pulled up to 3.3V with 10k and the sensor must pull down to GND. Sensor characteristics are configurable in software&lt;br /&gt;
|-&lt;br /&gt;
|TEMP2&lt;br /&gt;
|A2&lt;br /&gt;
|A2&lt;br /&gt;
|As above&lt;br /&gt;
|-&lt;br /&gt;
|TEMP3&lt;br /&gt;
|A3&lt;br /&gt;
|A3&lt;br /&gt;
|As Above&lt;br /&gt;
|-&lt;br /&gt;
|LOCKFB&lt;br /&gt;
|A4&lt;br /&gt;
|A4&lt;br /&gt;
|Feedback signal from connector lock. Pulled up to 3.3V with 10k, so feedback must pull down to GND. Thresholds configurable in software&lt;br /&gt;
|-&lt;br /&gt;
|IN_U_HV&lt;br /&gt;
|A5&lt;br /&gt;
|&#039;&#039;&#039;B10&#039;&#039;&#039;&lt;br /&gt;
|Analog input 0 to 5V, with pull-down-resistor. Can be used to measure the charge port voltage, using a converter board, e.g. the &amp;quot;muehlpower board&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|CP&lt;br /&gt;
|A6&lt;br /&gt;
|A6&lt;br /&gt;
|CP (Control Pilot) pin from charge port&lt;br /&gt;
|-&lt;br /&gt;
|SW2(_LS)&lt;br /&gt;
|A7&lt;br /&gt;
|&#039;&#039;&#039;B4&#039;&#039;&#039;&lt;br /&gt;
|Output for charge port contactor 2. Low side switch until Foccci 4.4, high side switch starting 4.5&lt;br /&gt;
Controls one of the contactors to make the connection between the HV battery and the vehicle inlet.&lt;br /&gt;
&lt;br /&gt;
The output can drive inductive load without additional circuits. It will clamp the turn-off voltage to ~40V. The driver has protection against shortcut and thermal overload.&lt;br /&gt;
&lt;br /&gt;
The output can be configured to be just digital on/off, and can also be configured to use PWM. BUT: In Foccci versions 4.2 and 4.3 (maybe more) the output driver is only capable of slow PWM, which is hearable and may cause trouble with the contactors. So it is recommended to NOT use the PWM feature, and instead use contactors which do not require economizing or use external economizers. In case you want the PWM nevertheless, you need a external freewheeling diode.&lt;br /&gt;
&lt;br /&gt;
Starting Foccci 4.5 PWM is working as intended at 18 kHz. It is a high side output starting v4.5, so the other side of the contactor must be connected to GND. Before v4.5 it is a low side output so the other side must be connected to 12V&lt;br /&gt;
|-&lt;br /&gt;
|LOCK_MOT2&lt;br /&gt;
|A8&lt;br /&gt;
|A8&lt;br /&gt;
|Motor driver output for charge port lock servo&lt;br /&gt;
|-&lt;br /&gt;
|LOCK_MOT1&lt;br /&gt;
|A9&lt;br /&gt;
|A9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PP&lt;br /&gt;
|A10&lt;br /&gt;
|&#039;&#039;&#039;A5&#039;&#039;&#039;&lt;br /&gt;
|PP (Proximity Pilot) pin from charge port. If you want Foccci to wake up when an unpowered charge cord is plugged in you must close JP3 to pin 1 (towards R7). There mustn&#039;t be a pull-down resistor in the charge port in this case as that would permanently keep Foccci awake&lt;br /&gt;
|-&lt;br /&gt;
|5V&lt;br /&gt;
|A11&lt;br /&gt;
|&#039;&#039;&#039;B11&#039;&#039;&#039;&lt;br /&gt;
|5V, 500mA e.g. for supplying voltage sense board. This is an OUTPUT of Foccci. Do not apply an external voltage source here. Foccci contains a step-down-converter from the 12V supply to this 5V output.&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|A12&lt;br /&gt;
|&#039;&#039;&#039;B12&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CANH&lt;br /&gt;
|B1&lt;br /&gt;
|B1&lt;br /&gt;
|CAN communication&lt;br /&gt;
|-&lt;br /&gt;
|CANL&lt;br /&gt;
|B2&lt;br /&gt;
|B2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n.c.&lt;br /&gt;
|B3&lt;br /&gt;
|&lt;br /&gt;
|Unused pins were assigned GND in 4.5b&lt;br /&gt;
|-&lt;br /&gt;
|n.c.&lt;br /&gt;
|B4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|B5&lt;br /&gt;
|B5, &#039;&#039;&#039;B3&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SW1(_LS)&lt;br /&gt;
|B6&lt;br /&gt;
|B6&lt;br /&gt;
|Output for the charge port contactor 1. See description of SW2(_LS).&lt;br /&gt;
|-&lt;br /&gt;
|WAKEUP&lt;br /&gt;
|B7&lt;br /&gt;
|B7&lt;br /&gt;
|Wakeup bus. Momentarily (or constantly) applying 12V wakes up the board. In the other direction Foccci can wake up (or supply with up to 1A) other devices via a 12V high side switch&lt;br /&gt;
|-&lt;br /&gt;
|12V&lt;br /&gt;
|B8&lt;br /&gt;
|B8&lt;br /&gt;
|Supply voltage, always on. 9 to 24V are fine.&lt;br /&gt;
|-&lt;br /&gt;
|LED_RED&lt;br /&gt;
|B9&lt;br /&gt;
|&#039;&#039;&#039;A12&#039;&#039;&#039;&lt;br /&gt;
|Status LEDs&lt;br /&gt;
|-&lt;br /&gt;
|LED_GREEN&lt;br /&gt;
|B10&lt;br /&gt;
|&#039;&#039;&#039;A11&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LED_BLUE&lt;br /&gt;
|B11&lt;br /&gt;
|&#039;&#039;&#039;A10&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BUTTON&lt;br /&gt;
|B12&lt;br /&gt;
|&#039;&#039;&#039;A7&#039;&#039;&#039;&lt;br /&gt;
|Wakes up Foccci or stops an ongoing charging session&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Internal connectors ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!short name&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|UART TX&lt;br /&gt;
|Provides logging information, 921600 Baud. See also https://github.com/uhi22/ccs32clara/blob/main/doc/clara_user_manual.md#serial-logging&lt;br /&gt;
|-&lt;br /&gt;
|UART RX&lt;br /&gt;
|Not used&lt;br /&gt;
|-&lt;br /&gt;
|SWCLK&lt;br /&gt;
|for flashing with STLINK&lt;br /&gt;
|-&lt;br /&gt;
|SWDIO&lt;br /&gt;
|for flashing with STLINK&lt;br /&gt;
|}&lt;br /&gt;
== Integrating Foccci with your car/BMS==&lt;br /&gt;
[[File:Foccci CCS2.png|thumb|Foccci with (Orion) BMS]]&lt;br /&gt;
Depending on your use case Foccci has to communicate with one or more components in your car. All in-car communication happens via a single CAN bus.&lt;br /&gt;
===Basic communication considerations ===&lt;br /&gt;
Foccci can be configured to run at various baud rates and defaults to 500k. The Wifi interface mentioned below is hard coded to 500k. So when configuring a different baud rate you will loose communication with the Wifi interface. This might be fixed in the future by allowing variable baud rates for the wifi interface. Bottom line: &#039;&#039;&#039;keep it at 500k.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Apart from that it is mostly sufficient if Foccci can communicate, or more precisely, listen to the BMS. Foccci uses the flexible [[CAN communication|CAN mapping]] known from other OI firmware. There are 5 key parameters that need to be received via CAN:&lt;br /&gt;
*&#039;&#039;&#039;ChargeCurrent&#039;&#039;&#039;: this is the single most important item. It is directly relayed to the charger and specifies the current the battery can accept at the given moment. This depends on battery voltage, temperature and other things to be determined by the BMS. &#039;&#039;Foccci itself does no battery monitoring of any kind, it is completely down to the BMS to specify a safe charge current&#039;&#039;&#039;&#039;&#039;.&#039;&#039;&#039; When this value is not updated for more than 2 seconds the charging session is terminated.&lt;br /&gt;
* &#039;&#039;&#039;BatteryVoltage&#039;&#039;&#039;: this item is important for precharging the CCS chargers output to the momentary battery voltage. Most BMSes output the total pack voltage in a CAN message&lt;br /&gt;
* &#039;&#039;&#039;TargetVoltage&#039;&#039;&#039;: In theory this is the maximum voltage you want the battery to be charged to. In practise the maximum battery voltage MUST be governed by specifying an appropriate ChargeCurrent. More importantly many chargers cut back charge power when &#039;&#039;approaching&#039;&#039; this voltage resulting in poor charging performance towards the top end. So in practise you want to set this to a voltage about 10V above charge end voltage of your battery.&lt;br /&gt;
*&#039;&#039;&#039;soc&#039;&#039;&#039;: This is purely informative as far as we know. It displays the batteries state of charge on the chargers display&lt;br /&gt;
*&#039;&#039;&#039;enable&#039;&#039;&#039;: this is optional as it defaults to always enabled. It can be used to completely terminate the charging session by setting it to 0.&lt;br /&gt;
===Using Foccci as a charge coordinator===&lt;br /&gt;
This topic is still work in progress. The CCS connector, as its name suggests, combines both AC and DC charging in one socket. As long as we use the socket only for DC charging it is very easy to wire up. But once we also use the AC functionality we have to spend further thought on this.&lt;br /&gt;
&lt;br /&gt;
The two pins PP and CP communicate information about the cable limit and the momentary current limit of the AC outlet. PP is a simple resistor between PE and PP that is evaluated by putting a test current onto it. This concludes that this signal can only be used by one device. CP is a bit more complex. When plugging in it communicates with a 2k7 resistor to PE that the cable is now connected to a car. From this simple fact we can again conclude that CP is a peer-to-peer signal only. Once the car is ready to charge it switches another 1k3 resistor in parallel to the 2k7 resistor. Only then the AC voltage is switched to the power pins. Lastly, the AC outlet encodes the momentary current limit in a PWM duty cycle.&lt;br /&gt;
&lt;br /&gt;
Foccci does all the evaluation and makes the result available as spot values that can in turn be mapped to CAN:&lt;br /&gt;
*EvseAcCurrentLimit&lt;br /&gt;
*CableCurrentLimit&lt;br /&gt;
To activate the 1k3 resistor aka activating the AC outlet we map AcObcState. It must be set to 2 for activation.&lt;br /&gt;
&lt;br /&gt;
Some chargers want to evaluate the CP (and perhaps PP) signal themselves. This issue can be solved with a change over switch that disconnects Foccci from CP while AC charging. Alternatively the CP signal can be spoofed and the charge current controlled by CAN to satisfy the limits of the AC outlet (EVSE).&lt;br /&gt;
== Wakeup ==&lt;br /&gt;
For charging it is particularly interesting to wake up Foccci itself and necessary subsystems &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?p=66547#p66547&amp;lt;/ref&amp;gt; when plugging in a charge cord. To allow for this, Foccci has various wakeup sources and also can wake up other devices. For wakeup to work, Foccci must be permanently supplied with 12V (it will draw no current when asleep). &#039;&#039;&#039;Hardware version V4.5 and above required for wakeup.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Here are the sources:&lt;br /&gt;
&lt;br /&gt;
# Wakeup pin - bidirectional - level triggered (12V)&lt;br /&gt;
# Button - level triggered (GND)&lt;br /&gt;
# PP - optional via solder bridge - level triggered&lt;br /&gt;
# CP - Edge triggered&lt;br /&gt;
&lt;br /&gt;
So the first 3 inputs will force the Foccci on. It can&#039;t turn itself off as long as that wakeup source is active. The last input will only trigger when transitioning from invalid to valid PWM and then Foccci can decide how long to stay awake. All modes always work regardless of software settings - except PP wakeup which can be turned off in hardware (JP3).&lt;br /&gt;
&lt;br /&gt;
The wakeup output on the other hand is software-defined. Foccci offers the following options&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Level&#039;&#039;&#039; - as long as the Foccci doesn&#039;t decide to turn off, we keep Wakeup on as well&lt;br /&gt;
# &#039;&#039;&#039;Pulse&#039;&#039;&#039; - When Foccci boots generate a 1s wakeup pulse&lt;br /&gt;
# &#039;&#039;&#039;LevelOnValidCp&#039;&#039;&#039; - As long as CP is pulsing we keep wakeup on&lt;br /&gt;
# &#039;&#039;&#039;PulseOnValidCp&#039;&#039;&#039; - Whenever we transition from non-pulsing to pulsing CP we generate a 1s pulse&lt;br /&gt;
# &#039;&#039;&#039;LevelOnValidPp&#039;&#039;&#039; - As long as PP is valid keep wakeup on&lt;br /&gt;
&lt;br /&gt;
The output can supply about 1A and 12V. When running loads larger than that (e.g. a pump) use a relay to amplify the current capability.&lt;br /&gt;
&lt;br /&gt;
It depends on your vehicle architecture how you organize the wakeup. Here are some examples:&lt;br /&gt;
&lt;br /&gt;
=== Basic wakeup ===&lt;br /&gt;
wakeup via PP enabled, WakeupPinFunc=LevelOnValidPp&lt;br /&gt;
&lt;br /&gt;
# Foccci turns on as soon as even a non-powered charging cable is plugged in&lt;br /&gt;
# Wakeup signal is turned on&lt;br /&gt;
# BMS, VCU etc. is turned on (directly powered from wakeup as it can supply about 1A)&lt;br /&gt;
# VCU can detect via the level of the wakeup signal that a cable is plugged in and inhibit drive&lt;br /&gt;
# When charging cable is unplugged (as in PP lost), Wakeup is turned off and the VCU can allow driving&lt;br /&gt;
# If we wanted to report e.g. welded charge port relays Foccci would have to keep itself running until the car is started in drive mode again. Then something can be displayed on the instrument cluster. Of course this will time out eventually. Should be fine as you at least have to pull away from the rapid charger after charging.&lt;br /&gt;
# When charging is paused all ECUs stay on and consume 12V power (or HV power via DC/DC)&lt;br /&gt;
&lt;br /&gt;
=== Advanced Wakeup ===&lt;br /&gt;
wakeup via PP disabled, WakeupPinFunc=PulseOnValidCp. Here we have a bidirectional wakeup bus. Any ECU connected to it can send or receive wakeup events and the individual ECUs can decide whether they are needed for a particular task or not.&lt;br /&gt;
&lt;br /&gt;
# Foccci turns on as soon as CP PWM starts. So either a cable is being plugged in or is already plugged in and now wants to charge&lt;br /&gt;
# It then turns on the wakeup output for 1s and wakes up all other ECUs&lt;br /&gt;
# The relevant ECUs will detect that we want to charge and stay on, the other ones turn off&lt;br /&gt;
# If we turn on ignition the VCU is already on and in charge mode and can inhibit drive&lt;br /&gt;
# If charging is paused (i.e. cable plugged in but no CP PWM) and we turn on ignition the VCU wakes up the Foccci and queries PP status. If something is plugged in drive is inhbited&lt;br /&gt;
# If Foccci detects an error e.g. welded relays, it stores that error to flash. When woken up by the VCU it report its non-zero error code&lt;br /&gt;
# When charging is paused, ALL ECUs can turn off and no 12V power is consumed. When CP comes back, the cycle restarts&lt;br /&gt;
&lt;br /&gt;
The second approach is more versatile but it also means all devices need to support this method.&lt;br /&gt;
&lt;br /&gt;
So I think there can be an intermediate approach:&lt;br /&gt;
&lt;br /&gt;
=== Semi-advanced wakeup ===&lt;br /&gt;
Here we only have a wakeup bus between VCU and Foccci. All other devices are powered up by other means, like VCU controlled relays. Wakeup via PP is disabled, WakeupPinFunc=LevelOnValidCp&lt;br /&gt;
&lt;br /&gt;
# Foccci turns on as soon as CP PWM starts. So either a cable is being plugged in or is already plugged in and now wants to charge&lt;br /&gt;
# It then turns on the wakeup output this waking up the VCU&lt;br /&gt;
# The VCU determines via CAN message from Foccci whether we want to AC or DC charge and turns on needed components. Components needed in both cases that have low power consumption (e.g. BMS) can also be driven from the wakeup signal directly&lt;br /&gt;
# If we turn on ignition the VCU is already on and in charge mode and can inhibit drive&lt;br /&gt;
# If charging is paused (i.e. cable plugged in but no CP PWM) and we turn on ignition the VCU wakes up the Foccci and queries PP status. If something is plugged in drive is inhbited&lt;br /&gt;
# If Foccci detects an error e.g. welded relays, it stores that error to flash. When woken up by the VCU it report its non-zero error code&lt;br /&gt;
# When charging is paused, ALL ECUs will turn off and no 12V power is consumed. When CP comes back, the cycle restarts&lt;br /&gt;
&lt;br /&gt;
== Configuring Foccci via CAN ==&lt;br /&gt;
Foccci exposes only one single CAN interface for vehicle communication and initial configuration. So we need a CAN counterpart to talk to it.&lt;br /&gt;
&lt;br /&gt;
There are two main approaches to this: a) use a command line tool &amp;lt;ref&amp;gt;OIC https://openinverter.org/forum/viewtopic.php?t=2907&amp;lt;/ref&amp;gt; or b) use an ESP based CAN module &amp;lt;ref&amp;gt;ESP32 CAN Web Interface https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=59&amp;amp;product_id=78&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both ways require knowing Focccis so called Node Id (similar to an IP address on a local network). By default this is 22. You can enter this node id on the bottom left navigation bar.&lt;br /&gt;
== Parameters==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Unit&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Min&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Max&#039;&#039;&#039; &lt;br /&gt;
|&#039;&#039;&#039;Default&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Hardware Config&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|UdcDivider&lt;br /&gt;
|dig/V &lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|10 &lt;br /&gt;
|Division factor from ADC digits to V of external voltage measurement board.&lt;br /&gt;
In other words: The UdcDivider is the configuration parameter which defines the scaling of the physical inlet voltage measurement circuit. That&#039;s why it is only relevant if a physical inlet voltage measurement circuit is present, and if the parameter InletVtgSrc is 1, means the Foccci will measure the inlet voltage with the analog input. CAN mapping makes no sense for the UdcDivider, because it is a fix value. It is the ratio between the voltage on the inlet and the digital value on the AD converter.&lt;br /&gt;
|-&lt;br /&gt;
|EconomizerDuty&lt;br /&gt;
|%&lt;br /&gt;
| 0&lt;br /&gt;
|100&lt;br /&gt;
| 100&lt;br /&gt;
|Contactor economizer duty cycle. Contactors are always turned on with 12V for 1s then drop to this value. Set to 100% if your contactor has a built-in economizer &lt;br /&gt;
|-&lt;br /&gt;
|InletVtgSrc&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
| 0&lt;br /&gt;
|Inlet Voltage Source. There are three option where Foccci gets the CCS inlet voltage from:&lt;br /&gt;
0 - Charger output voltage (EVSEPresentVoltage) is considered equal to charge port inlet voltage 1 - Analog input U_IN_HV is used for measuring charge port inlet voltage&lt;br /&gt;
&lt;br /&gt;
2 - Charge port inlet voltage is provided via CAN - don&#039;t forget to map something to InletVoltage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The InletVoltage is important for precharging, while the contactors are still open. The car (Foccci) will close the contactors, if the inlet voltage is near to the battery voltage. After closing the contactors, it is the battery voltage (besides some cable losses), and out of interest. The most straight forward solution to measure the inlet voltage is to rely on what the charging station tells us. It reports the voltage on the CCS plug in EVSEPresentVoltage. With configuring InletVtgSrc=0 we tell Foccci to use the EVSEPresentVoltage. In this case, neither an analog inlet voltage measuring circuit nor a separate gadget which provides the inlet voltage via CAN is necessary. For most users this will be fine (even OEM cars use this approach).&lt;br /&gt;
|-&lt;br /&gt;
|LockDuty&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
| 100&lt;br /&gt;
|30&lt;br /&gt;
|H-bridge duty cycle for operating the lock. Use negative value if lock polarity is swapped&lt;br /&gt;
|-&lt;br /&gt;
| LockRunTime&lt;br /&gt;
|ms &lt;br /&gt;
|0&lt;br /&gt;
|10000&lt;br /&gt;
|1000&lt;br /&gt;
|Timeout for lock operation&lt;br /&gt;
|-&lt;br /&gt;
|LockClosedThresh&lt;br /&gt;
| dig&lt;br /&gt;
| 0&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
| Lock feedback value for closed&lt;br /&gt;
|-&lt;br /&gt;
|LockOpenThresh&lt;br /&gt;
| dig&lt;br /&gt;
| 0&lt;br /&gt;
|4095 &lt;br /&gt;
| 0&lt;br /&gt;
| Lock feedback value for open - if equal to lockclosethr no feedback is assumed and lock is operated timed &lt;br /&gt;
|-&lt;br /&gt;
| ppvariant&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|9&lt;br /&gt;
|0&lt;br /&gt;
|Various circuit variations exist for PP resistor measurement.&lt;br /&gt;
&amp;quot;0&amp;quot; is for the variant with 1k pull-up to 3.3V, like old the old Foccci 4.1&lt;br /&gt;
&amp;quot;1&amp;quot; is for the variant with 330 ohm pull-up to 5V and 3k pull-down.&lt;br /&gt;
&amp;quot;2&amp;quot; is for the variant with 330 ohm pull-up to 5V and NO pull-down.&lt;br /&gt;
Foccci 4.5 ususally has NO pulldown, except the related solder jumper was closed.&lt;br /&gt;
|-&lt;br /&gt;
|WakeupPinFunc&lt;br /&gt;
|&lt;br /&gt;
| 0&lt;br /&gt;
|4&lt;br /&gt;
|0&lt;br /&gt;
| Configure what the wakeup pin does. See [[Foccci#Wakeup|Wakeup]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Communication&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|NodeId&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|63&lt;br /&gt;
|22&lt;br /&gt;
|CANOpen node id for SDO requests &lt;br /&gt;
|-&lt;br /&gt;
|CanSpeed&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
| 4&lt;br /&gt;
|2&lt;br /&gt;
|Baud rate of CAN interface 0=125k, 1=250k, 2=500k, 3=800k, 4=1M - &#039;&#039;&#039;when configuring this != 500k you have to change it also for your ESP web interface!&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Charge Parameters&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|MaxPower&lt;br /&gt;
|kW&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
| 100&lt;br /&gt;
|Absolute maximum charge power. Foccci will announce this value in the ChargeParameterDiscoveryRequest message in the element EVMaximumPowerLimit. The charger may or may not respect this limitation. &lt;br /&gt;
|-&lt;br /&gt;
|MaxVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|410&lt;br /&gt;
|Over voltage threshold. Always set about 10-20V higher then desired battery full voltage. Foccci will announce this value in the ChargeParameterDiscoveryRequest message to the charger, in the element EVMaximumVoltageLimit. The charger may or may not respect this limitation. Some chargers shut down, if this limit is reached. That&#039;s why it is recommended to set it some volts higher than the voltage which is used during normal charging. &lt;br /&gt;
|-&lt;br /&gt;
|MaxCurrent &lt;br /&gt;
|A&lt;br /&gt;
|0&lt;br /&gt;
|500 &lt;br /&gt;
|125&lt;br /&gt;
| Absolute maximum charge current. Foccci will announce this value in the ChargeParameterDiscoveryRequest, in the element EVMaximumCurrentLimit. The charger may or may not respect this limitation.&lt;br /&gt;
|-&lt;br /&gt;
|MaxAllowedPinTemperature&lt;br /&gt;
|°C&lt;br /&gt;
|0&lt;br /&gt;
|120&lt;br /&gt;
|70&lt;br /&gt;
|Temperature of the CCS inlet which leads to fully reduced charge current. If the maximum of temp1, temp2, temp3 reaches this value, the charge current is cut down. Before reaching this limit, the charge current decreases linearily. If the temperature still rises and reaches 10 Kelvin more than parametrized, the charge session will be terminated.&lt;br /&gt;
For information purpose, the current limit caused by the temperature is visible in the spot value TempLimitedCurrent. If the limitation is effective, which means, that the BMS would have requested a higher current than the limitation, the spot value LimitationReason shows &amp;quot;InletHot&amp;quot;.&lt;br /&gt;
In case of massive overheat (10K more than parametrized), the spotvalue StopReason will show &amp;quot;InletOverheat&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|TargetVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
| 0&lt;br /&gt;
|Charge target voltage (volatile)&lt;br /&gt;
|-&lt;br /&gt;
|ChargeCurrent&lt;br /&gt;
|A&lt;br /&gt;
|0&lt;br /&gt;
|500 &lt;br /&gt;
|0&lt;br /&gt;
| Instantaneous current setpoint (volatile) - must be written at least once per second to prevent [[Foccci#Errors|CANTIMEOUT]]&lt;br /&gt;
|-&lt;br /&gt;
|soc&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|0&lt;br /&gt;
|Battery SoC for display on charger (volatile)&lt;br /&gt;
|-&lt;br /&gt;
|BatteryVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
| 1000&lt;br /&gt;
|0&lt;br /&gt;
| Present battery voltage for precharge state (volatile)&lt;br /&gt;
|-&lt;br /&gt;
|enable &lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|When 0 charging is stopped/not started (volatile) - must be written at least once per second to prevent [[Foccci#Errors|CANTIMEOUT]]&lt;br /&gt;
|-&lt;br /&gt;
|AcObcState &lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|15 &lt;br /&gt;
|0&lt;br /&gt;
|Feedback from OBC&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Testing&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|DemoVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|500&lt;br /&gt;
|0&lt;br /&gt;
|Voltage for light bulb demo. To use the board without CAN, to get an constant voltage. Is ignored as long democtrl is not STANDALONE. Only values between 150V and 250V are accepted, others are treated as zero. &lt;br /&gt;
|-&lt;br /&gt;
|DemoControl&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|511&lt;br /&gt;
|0&lt;br /&gt;
|Enables the standalone demo mode if value is set to STANDALONE. In this mode, no CAN is required and the target voltages for precharge and charging loop are taken from demovtg.&lt;br /&gt;
|-&lt;br /&gt;
|ActuatorTest&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|7&lt;br /&gt;
|0&lt;br /&gt;
|Tests various outputs&lt;br /&gt;
|-&lt;br /&gt;
|logging&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2047&lt;br /&gt;
|&lt;br /&gt;
|Selects which modules log to the serial console&lt;br /&gt;
|}&lt;br /&gt;
==Spot values ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|opmode&lt;br /&gt;
|&lt;br /&gt;
|State of the CCS state machine&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|lasterr&lt;br /&gt;
|&lt;br /&gt;
|Last detected error&lt;br /&gt;
|-&lt;br /&gt;
|EvseVoltage&lt;br /&gt;
|V&lt;br /&gt;
|Outlet voltage reported by EVSE&lt;br /&gt;
|-&lt;br /&gt;
|EvseCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Outlet current reported by EVSE&lt;br /&gt;
|-&lt;br /&gt;
|TempLimitedCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Current limit calculated based on the inlet temperature&lt;br /&gt;
|-&lt;br /&gt;
|EVTargetCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Current demand which is communicated to the DC charging station. Is the minimum of TempLimitedCurrent and ChargeCurrent. &lt;br /&gt;
|-&lt;br /&gt;
|LimitationReason&lt;br /&gt;
|&lt;br /&gt;
|Shows the reason why charge power is limited&lt;br /&gt;
|-&lt;br /&gt;
|InletVoltage&lt;br /&gt;
|V&lt;br /&gt;
|Charge port voltage&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Maximum current the EVSE can deliver&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxVoltage&lt;br /&gt;
|V&lt;br /&gt;
|Maximum voltage the EVSE can deliver&lt;br /&gt;
|-&lt;br /&gt;
|ControlPilotDuty&lt;br /&gt;
|%&lt;br /&gt;
|The PWM ratio of the CP line. This is normally 5% for DC chargers, and between 10% and 90% for analog AC chargers.&lt;br /&gt;
Typical values are explained here: [https://de.wikipedia.org/wiki/IEC_62196_Typ_2 IEC 62196 Typ 2 – Wikipedia]&lt;br /&gt;
|-&lt;br /&gt;
|temp1, 2, 3&lt;br /&gt;
|°C&lt;br /&gt;
|Temperatures of the temperature sensors. Requires correct calibration values depending on the used NTC types.&lt;br /&gt;
|-&lt;br /&gt;
|MaxTemp&lt;br /&gt;
|°C&lt;br /&gt;
|Maximum of the above&lt;br /&gt;
|-&lt;br /&gt;
|ContactorDuty&lt;br /&gt;
|%&lt;br /&gt;
|Duty cycle of charge port contactor driver&lt;br /&gt;
|-&lt;br /&gt;
|AdcLockFeedback&lt;br /&gt;
|digit&lt;br /&gt;
|Feedback value from charge port lock&lt;br /&gt;
|-&lt;br /&gt;
|AdcProximityPilot&lt;br /&gt;
|digit&lt;br /&gt;
|Analog value of the PP line. This is the raw value of the analog-to-digital-converter in range 0 to 4095.&lt;br /&gt;
|-&lt;br /&gt;
|ResistanceProximityPilot&lt;br /&gt;
|ohm&lt;br /&gt;
|Measured resistance between PP line and ground. Requires correct setting of the parameter ppvariant.&lt;br /&gt;
|-&lt;br /&gt;
|CableCurrentLimit&lt;br /&gt;
|A&lt;br /&gt;
|Based on the PP resistance. The current limit of the charging cable for AC charging.&lt;br /&gt;
|-&lt;br /&gt;
|EvseCurrentLimit&lt;br /&gt;
|A&lt;br /&gt;
|Based on the CP PWM. The current limit of the charging station for AC charging.&lt;br /&gt;
|-&lt;br /&gt;
|AdcHwVariant&lt;br /&gt;
|digit&lt;br /&gt;
|raw AD value of the hardware variant coding input. Used to detect which variant of Foccci the software runs on.&lt;br /&gt;
|-&lt;br /&gt;
|AdcIpropi&lt;br /&gt;
|digit&lt;br /&gt;
|raw AD value of the current sensor for the charge port lock motor driver.&lt;br /&gt;
|-&lt;br /&gt;
|LockState&lt;br /&gt;
|&lt;br /&gt;
|State of charge port lock&lt;br /&gt;
|-&lt;br /&gt;
|StopReason&lt;br /&gt;
|&lt;br /&gt;
|shows the reason why the charging session stopped&lt;br /&gt;
|-&lt;br /&gt;
|checkpoint&lt;br /&gt;
|&lt;br /&gt;
|shows the progress of the charging session in detail. Explanation here: https://github.com/uhi22/pyPLC?tab=readme-ov-file#example-flow&lt;br /&gt;
|-&lt;br /&gt;
|CanWatchdog&lt;br /&gt;
|100 ms&lt;br /&gt;
|Time since last ChargeCurrent update. When it reaches 30 (3s) the charge session is stopped&lt;br /&gt;
|-&lt;br /&gt;
|cpuload&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
==Errors==&lt;br /&gt;
The spot value &amp;quot;lasterr&amp;quot; displays the last detected error that lead to a cancellation of charging or to not starting in the first place&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Error&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|CANTIMEOUT&lt;br /&gt;
|The ChargeCurrent or enable hasn&#039;t been updated via CAN for more than 2s&lt;br /&gt;
|-&lt;br /&gt;
|PLCTIMEOUT&lt;br /&gt;
|PLC communication with charger timed out&lt;br /&gt;
|-&lt;br /&gt;
|PRECTIMEOUT&lt;br /&gt;
|Precharging the EVSE output to specified voltage timed out or battery voltage is below minimum EVSE output voltage&lt;br /&gt;
|-&lt;br /&gt;
|LOCKTIMEOUT&lt;br /&gt;
|The connector lock didn&#039;t reach the desired position in time&lt;br /&gt;
|-&lt;br /&gt;
|EVSEFAULT&lt;br /&gt;
|The EVSE reported an error and stopped&lt;br /&gt;
|-&lt;br /&gt;
|RELAYWELDED&lt;br /&gt;
|A welded charge port relay was detected&lt;br /&gt;
|}&lt;br /&gt;
== Making Foccci talk CHAdeMO on the CAN side ==&lt;br /&gt;
A pretty straightforward way to integrate CCS charging into your vehicle is to use the existing CHAdeMO (let&#039;s call it CDM from here on) CAN messaging. CDM has pretty much all data items we need to initiate a CCS charging session, so rather than defining a new set of messages we might as well adopt it. For example, Orion BMS or Zombieverter VCU natively support CHAdeMO anyway.[[File:Can mapping chademo.png|thumb|Screenshot of CAN mapping to interface Foccci CCS with CHAdeMO]]Let&#039;s go over the items in the screenshot one by one. Note that the IDs are decimal! (256=0x100, 258=0x102, 264=0x108, 265=0x109)&lt;br /&gt;
*&#039;&#039;&#039;UdcDivider&#039;&#039;&#039; - Actually, here we just select some dummy item as the important bit is in the Offset field: the version. In this case I signal non-existent CDM version 10. This tells the CDM module in my car that it talks to Foccci. It then includes the battery voltage in some unused message bytes - see below.&lt;br /&gt;
*&#039;&#039;&#039;EvseVoltage&#039;&#039;&#039; - Transmits the charger&#039;s present output voltage back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;EvseCurrent&#039;&#039;&#039; - Transmits the charger&#039;s present output current back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;opmode&#039;&#039;&#039; - Observe the weird gain - this is forged to map Foccci state &amp;quot;CurrentDemand (13)&amp;quot; to CDM state &amp;quot;ConnectorLocked (4)&amp;quot;. In my car&#039;s CDM module this is sufficient to initiate the charging progress. You may need to change it so that the ChargeEnable flag together with ConnectorLocked is forged (numerical value 5).&lt;br /&gt;
*&#039;&#039;&#039;EvseMaxVoltage&#039;&#039;&#039; - Transmits the EVSE&#039;s maximum output voltage back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;EvseMaxCurrent&#039;&#039;&#039; - Transmits the EVSE&#039;s maximum output current back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;BatteryVoltage&#039;&#039;&#039; - Transmits the present battery voltage to the EVSE.  This is the special item that normally doesn&#039;t exist in CDM and that unfortunately will prevent you from using this solution with an OEM car in a safe manner. Of course, you could manually set this to some medium battery voltage like 360V, but if you arrive with a really low battery at, say, 300V this might weld your charge port contactors.  You could also manually enter the battery voltage before each charging session.&lt;br /&gt;
*&#039;&#039;&#039;TargetVoltage&#039;&#039;&#039; - Transmits the charge end voltage to the EVSE.&lt;br /&gt;
*&#039;&#039;&#039;ChargeCurrent&#039;&#039;&#039; - By far the most important data item: the charge current request.&lt;br /&gt;
*&#039;&#039;&#039;soc&#039;&#039;&#039; - In CDM this isn&#039;t normally a percentage value but some encoded kWh value.  In my car&#039;s CDM module I specify a full battery as &amp;quot;200&amp;quot; (no idea what this actually means in kWh) and thereby can just output the SoC in 0.5% steps.&lt;br /&gt;
*&#039;&#039;&#039;enable&#039;&#039;&#039; - The car&#039;s charge enable flag.  When 0 will stop the CCS session.&lt;br /&gt;
As an additional safety measure you could connect CDM pin 4 (charge enable) to Foccci&#039;s button input (at least once we added an active low mode for it).  It might also be worthwhile to connect pin 7 (connection check) to the PP input for drive away protection when CDM is plugged in but not charging (again, once we have actually implemented this).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s list the CHAdeMO pin mapping one by one as well:&lt;br /&gt;
*Pin 1 - GND&lt;br /&gt;
*Pin 2 (12V, charger start/stop) - 12V (I take it from cigarette lighter)&lt;br /&gt;
*Pin 4 (charging enable) - Foccci BUTTON&lt;br /&gt;
*Pin 5, 6 - Power pins, triple check correct polarity!&lt;br /&gt;
*Pin 7 (Connection check) - Foccci PP&lt;br /&gt;
*Pin 8, 9 (CAN) - Foccci CANL, CANH&lt;br /&gt;
*Pin 10 (charger start/stop 2) - Foccci SW1_LS&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;u&amp;gt;Attention:&amp;lt;/u&amp;gt;&#039;&#039;&#039; with this mapping the error flags are ignored, e.g. voltage or current mismatch.&lt;br /&gt;
&lt;br /&gt;
==Making Foccci talk to boostech BMS==&lt;br /&gt;
The boostech BMS has a fixed CAN mapping. It doesn&#039;t expect any feedback from the CCS controller so we just keep the CHAdeMO mapping from above in case the info is needed elsewhere in the car.&lt;br /&gt;
&lt;br /&gt;
The BMS sends out big endian messages hence why the length fields are negative. It does not send out a charge end voltage so we simply multiply the charge enable flag with the voltage we want. In the example 368V.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Item&lt;br /&gt;
!Direction&lt;br /&gt;
!ID&lt;br /&gt;
!Position&lt;br /&gt;
!Length&lt;br /&gt;
!Gain&lt;br /&gt;
!Offset&lt;br /&gt;
!Extended&lt;br /&gt;
!Remark&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxVoltage&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x108 / 264&lt;br /&gt;
|8&lt;br /&gt;
|16&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxCurrent&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x108 / 264&lt;br /&gt;
|24&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EvseVoltage&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x109 / 265&lt;br /&gt;
|8&lt;br /&gt;
|16&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EvseCurrent&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x109 / 265&lt;br /&gt;
|24&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|enable&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|48&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BatteryVoltage&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|15&lt;br /&gt;
| -16&lt;br /&gt;
|0.1&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|soc&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|47&lt;br /&gt;
| -16&lt;br /&gt;
|0.1&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TargetVoltage&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|48&lt;br /&gt;
|1&lt;br /&gt;
|368&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|Put your desired TargetVoltage into gain&lt;br /&gt;
|-&lt;br /&gt;
|ChargeCurrent&lt;br /&gt;
|Receive&lt;br /&gt;
|0x313 / 787&lt;br /&gt;
|31&lt;br /&gt;
| -16&lt;br /&gt;
|0.097&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|This value is static, more below&lt;br /&gt;
|}&lt;br /&gt;
The boostech BMS &#039;&#039;&#039;lacks one critical feature&#039;&#039;&#039; for rapid charging: a dynamic charge limit. That means ChargeCurrent it always a fixed value that you program into the BMS. It will not cut back when cells are getting full, hot or cold. It can be somewhat mitigated by setting a sane target voltage (e.g. 4.1V x NumberOfCells). The rapid charger will then start to cut back charge current as this voltage is approached. Also by mapping the enable flag the BMS has the possibility to abort the charging session if one single cell voltage or module temperature rises above the safe threshold. In winter you will need to dial back your maximum charge current manually or heat you cells to avoid dendrites.&lt;br /&gt;
&lt;br /&gt;
== Hardware detection ==&lt;br /&gt;
[[File:3.3v Addressing Voltage Divider.png|thumb]]&lt;br /&gt;
To allow software to reliably detect which version hardware it runs on, in HW version 4.1 a version indication resistor was added. As opposed to some other boards that run at 5.3V, the voltage here is 3.3V.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Variant&lt;br /&gt;
!R1&lt;br /&gt;
!R2&lt;br /&gt;
!voltage&lt;br /&gt;
!ADC&lt;br /&gt;
!-3%&lt;br /&gt;
!+3%&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|2,7&lt;br /&gt;
|0,179&lt;br /&gt;
|222&lt;br /&gt;
|216&lt;br /&gt;
|229&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|3,3&lt;br /&gt;
|0,217&lt;br /&gt;
|269&lt;br /&gt;
|261&lt;br /&gt;
|277&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|3,9&lt;br /&gt;
|0,253&lt;br /&gt;
|314&lt;br /&gt;
|304&lt;br /&gt;
|323&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|4,7&lt;br /&gt;
|0,300&lt;br /&gt;
|372&lt;br /&gt;
|361&lt;br /&gt;
|383&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|5,1&lt;br /&gt;
|0,323&lt;br /&gt;
|401&lt;br /&gt;
|389&lt;br /&gt;
|413&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|5,6&lt;br /&gt;
|0,351&lt;br /&gt;
|436&lt;br /&gt;
|423&lt;br /&gt;
|449&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|6,8&lt;br /&gt;
|0,417&lt;br /&gt;
|518&lt;br /&gt;
|502&lt;br /&gt;
|533&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|7,5&lt;br /&gt;
|0,454&lt;br /&gt;
|564&lt;br /&gt;
|547&lt;br /&gt;
|580&lt;br /&gt;
|-&lt;br /&gt;
|4.0 with economizer&lt;br /&gt;
|47&lt;br /&gt;
|8,2&lt;br /&gt;
|0,490&lt;br /&gt;
|608&lt;br /&gt;
|590&lt;br /&gt;
|627&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|9,1&lt;br /&gt;
|0,535&lt;br /&gt;
|664&lt;br /&gt;
|644&lt;br /&gt;
|684&lt;br /&gt;
|-&lt;br /&gt;
|4.2&lt;br /&gt;
|47&lt;br /&gt;
|10&lt;br /&gt;
|0,579&lt;br /&gt;
|718&lt;br /&gt;
|697&lt;br /&gt;
|740&lt;br /&gt;
|-&lt;br /&gt;
|4.3&lt;br /&gt;
|47&lt;br /&gt;
|12&lt;br /&gt;
|0,671&lt;br /&gt;
|833&lt;br /&gt;
|808&lt;br /&gt;
|858&lt;br /&gt;
|-&lt;br /&gt;
|4.4&lt;br /&gt;
|47&lt;br /&gt;
|15&lt;br /&gt;
|0,798&lt;br /&gt;
|991&lt;br /&gt;
|961&lt;br /&gt;
|1020&lt;br /&gt;
|-&lt;br /&gt;
|4.5 - 5.2&lt;br /&gt;
|47&lt;br /&gt;
|18&lt;br /&gt;
|0,914&lt;br /&gt;
|1134&lt;br /&gt;
|1100&lt;br /&gt;
|1168&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|22&lt;br /&gt;
|1,052&lt;br /&gt;
|1306&lt;br /&gt;
|1266&lt;br /&gt;
|1345&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|27&lt;br /&gt;
|1,204&lt;br /&gt;
|1494&lt;br /&gt;
|1449&lt;br /&gt;
|1539&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|33&lt;br /&gt;
|1,361&lt;br /&gt;
|1689&lt;br /&gt;
|1639&lt;br /&gt;
|1740&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|39&lt;br /&gt;
|1,497&lt;br /&gt;
|1857&lt;br /&gt;
|1801&lt;br /&gt;
|1913&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|47&lt;br /&gt;
|1,650&lt;br /&gt;
|2048&lt;br /&gt;
|1986&lt;br /&gt;
|2109&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|56&lt;br /&gt;
|1,794&lt;br /&gt;
|2226&lt;br /&gt;
|2160&lt;br /&gt;
|2293&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Frequently Asked Questions ==&lt;br /&gt;
&lt;br /&gt;
=== Q1: Does Foccci help me for AC charging with a Tesla OBC? ===&lt;br /&gt;
No. The Tesla OBC wants exclusive access to the control lines of the charge port. It handles the communications with the AC charging station by its own. This communication means providing the CP Résistance and measuring the CP PWM duty cycle. Foccci can also do this, but there cannot be two instances which do the same things. There is the other case: DC charging. For this, the Tesla OBC is not involved. The BMS needs to send the limits to Foccci, and Foccci performs the communication with the charging station.&lt;br /&gt;
&lt;br /&gt;
=== Q2: Does Foccci create an 1kHz PWM, for controlling an onboard charger via the CP pin? ===&lt;br /&gt;
No. The CP pin of Foccci is the vehicle side of the CP line. This means, Foccci can *measure* the PWM duty cycle. It can *not* generate the PWM. If you need to generate a 1kHz PWM for your onboard charger, you could have a look to the Zombieverter.&lt;br /&gt;
&lt;br /&gt;
=== Q3: What is the absolute minimum to start a DC charging session? ===&lt;br /&gt;
Foccci has the task, to tell the charging station three important values:&lt;br /&gt;
&lt;br /&gt;
# The actual battery voltage, before the charging starts. The battery voltage is needed during the &amp;quot;precharge&amp;quot; phase, to give the charger the possibility to adjust the output voltage exactly to the battery voltage. This avoids large inrush currents when the contactors between the charger and the battery are closed. Large inrush current would damage the involved components, like contactors and capacitors.&lt;br /&gt;
# The target charge voltage. The voltage is chosen usually higher than the actual battery voltage, but lower than the maximum voltage rating of the battery. The charger will not deliver more than this voltage. The voltage limit is effective if the battery is nearly full, the current automatically drops slowly while charging in &amp;quot;constant voltage mode&amp;quot;.&lt;br /&gt;
# The target charge current. This should be a value which is safe for the battery and cables, depending on temperature, SOC, whatever. The charger will use this demand as long as the target voltage is not reached. This is called &amp;quot;constant current mode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Normally, these three values shall be provided via CAN bus from the battery management system (BMS). For experimentation, it is possible to set these values directly in the web interface, without the need of a BMS. This is called &amp;quot;DemoMode&amp;quot;. Not recommended for real charging session, but ok to test the communication with the charger without having a battery installed.&lt;br /&gt;
&lt;br /&gt;
Foccci needs to have the control, whether the DC contacts of the CCS socket shall be connected to the battery pack or not. For this purpose, two contactors are needed (one between CCS plus and battery plus, and one between CCS minus and battery minus). Foccci has two outputs, to control these two contactors.&lt;br /&gt;
&lt;br /&gt;
Foccci needs a power supply, usually 12V, but everything between 9V and 16V is perfect. To have a permanent wakeup, you connect the 12V also to Focccis wakeup-pin.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it.&lt;br /&gt;
&lt;br /&gt;
=== Q4: Besides the absolute minimum, what other features of Foccci are recommended to be used in a real-life scenario? ===&lt;br /&gt;
&lt;br /&gt;
# Map the battery voltage, the target voltage and the target current to CAN signals, which are provided by your BMS. This gives the BMS the complete control about the charge parameters, to achieve a safe and fast charging.&lt;br /&gt;
# Connect three LEDs (red, green, blue), 12V, common ground, to see the progress of the communication.&lt;br /&gt;
# Connect a button (could be combined with the LEDs) which allows to stop the charging session.&lt;br /&gt;
# Connect the charge port lock motor. This allows Foccci to lock the charge plug, to avoid unintended disconnection.&lt;br /&gt;
# Connect up to 3 temperatur sensors, which are installed in the charge port or cable harness. This gives Foccci the chance to reduce the charge current in case of rising temperature, to avoid thermal damage of the components.&lt;br /&gt;
&lt;br /&gt;
=== Q5: Can I use Foccci together with an onboard charger? ===&lt;br /&gt;
The main purpose of Foccci is DC charging. But since the CCS port is also intended to contain AC pins, Foccci supports the following features for AC charging:&lt;br /&gt;
&lt;br /&gt;
- Foccci measures the PWM duty cycle on the control pilot (CP) pin, which the charging station provides. This is 5% in case of DC stations, and higher values on AC stations, depending on the allowed charge current. (There is also a special case, AC station with digital high-level communication. Foccci/Clara do not support this feature at the time of writing.) Foccci provides the measured PWM duty and the calculated AC current limit via CAN bus, so it can be used by an matching onboard charger, or an intermediate controller like Zombieverter, to control the AC charge current.&lt;br /&gt;
&lt;br /&gt;
- In the other direction, Focccis status LEDs and CP status resistor can be controlled via CAN.&lt;br /&gt;
&lt;br /&gt;
An example of usage of Foccci for AC charging is the integration with Zombieverter. An other possibility would be OBCs which can be configured or programmed to have full control via CAN bus.&lt;br /&gt;
=== Q5: I&#039;m missing a certain feature of Foccci, could I add this by myself? ===&lt;br /&gt;
Sure. It&#039;s all open source. Feel free to experiment, discuss (in the forum or in github issues), and finally make a pull request.&lt;br /&gt;
&lt;br /&gt;
=== Q6: Can I use Foccci also to build a charging station? ===&lt;br /&gt;
Not directly. Foccci is designed to play the car side of the CCS communication. For using it on the other side, some things need to be changed:&lt;br /&gt;
&lt;br /&gt;
- generate the 1kHz PWM&lt;br /&gt;
&lt;br /&gt;
- measure the CP resistance&lt;br /&gt;
&lt;br /&gt;
- configure the PLC modem to be an EVSE modem instead a PEV modem&lt;br /&gt;
&lt;br /&gt;
- and the biggest part: write the message handling of the high-level protocol for the charging station.&lt;br /&gt;
&lt;br /&gt;
=== Q7: Does Foccci support Plug&amp;amp;Charge or AutoCharge? ===&lt;br /&gt;
&lt;br /&gt;
# The &amp;quot;big&amp;quot; Plug&amp;amp;Charge according to ISO15118 is not supported. It would require a key infrastructure and a newer version of the EXI decoder software, which is not public available at the moment.&lt;br /&gt;
# AutoCharge (which is used by FastNed and EnBW) is supported. This uses the MAC address for identification. Focccis MAC address is calculated based on the serial number of the STM32 controller, and therefore each Foccci has (or at least is expected to have) a different MAC address. Alternatively you can patch the code to enter any MAC address you like.&lt;br /&gt;
&lt;br /&gt;
=== Q8: How can I find out the version of Foccci/Clara, which I am running? ===&lt;br /&gt;
Using the web interface, show the spot values. At the top there is the software version of the Clara software. For example &amp;quot;0.42.76.B&amp;quot;. The &amp;quot;B&amp;quot; means, it is a build from the github actions. And the 76 means, it is github action build number 76. If the version ends with the letter &amp;quot;R&amp;quot;, you have a local build, and should contact the person who provided the binary file regarding the content.&lt;br /&gt;
&lt;br /&gt;
Besides the software versions, there are also different hardware versions flying around. The early hardware versions could be (at least partially) identified by the spot value AdcHardwareVariant and HardwareVariant. Starting from Foccci version 4.5, this number is unchanged until (at least) versions 5, 5.1 and 5.2.&lt;br /&gt;
&lt;br /&gt;
=== Q9: I want to try out a different software version. Where can I find it? ===&lt;br /&gt;
Each commit on github, or, in simple words, each change of the software, is automatically build into a binary file by a service called &amp;quot;Github actions&amp;quot;. This is also called &amp;quot;Continuous Integration&amp;quot;, or short &amp;quot;CI&amp;quot;. All the generated binaries are available on the Github action page: https://github.com/uhi22/ccs32clara/actions Click on the headline of a certain run, to see the details, and scroll down to the &amp;quot;Artifacts&amp;quot; chapter. There you find the binary file (for flashing via the web interface) and the hex file (for flashing with the STLink tool).&lt;br /&gt;
&lt;br /&gt;
Each run has a certain number (e.g. CI #90). After flashing a new version, the same number will be shown in the spot value &amp;quot;version&amp;quot; after the &amp;quot;0.42.&amp;quot; and before the &amp;quot;.B&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Q10: ... Feel ... free ... to .... add ... more ... questions ... here. ===&lt;br /&gt;
Q11: ... Feel ... free ... to .... add ... more ... questions ... here.&lt;br /&gt;
[[Category:CCS]] [[Category:Rapid Charging]]&lt;br /&gt;
[[Category:Charger]]&lt;br /&gt;
[[Category:OpenInverter]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=16-cell_BMS&amp;diff=5594</id>
		<title>16-cell BMS</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=16-cell_BMS&amp;diff=5594"/>
		<updated>2025-02-02T15:46:58Z</updated>

		<summary type="html">&lt;p&gt;Johu: Enable signal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:BMS]]&lt;br /&gt;
[[Category:Battery]]&lt;br /&gt;
[[File:16-cell BMS.jpg|thumb|16-cell BMS]]&lt;br /&gt;
The goal of this BMS is to use mostly decade old components to create a 16 channel cell voltage meter. It uses a very accurate sigma/delta ADC for superb resolution. It can drain about 100mA from a cell or charge it with 50 mA via the DC/DC converter. The ability to both charge and discharge cells speeds up balancing despite the low balancing current.&lt;br /&gt;
&lt;br /&gt;
When turned off it drains no current from the connected cells at all.&lt;br /&gt;
&lt;br /&gt;
On the low voltage side it features two inputs for temperature sensors and one input for a 5V current sensor, differential or single ended.&lt;br /&gt;
&lt;br /&gt;
It can be cascaded to be used with more than 16 cells and has an automatic addressing scheme to forgo the use of jumpers or DIP switches. All communication is done via CAN. Supply voltage is 12V with about 20 mA draw when not balancing.&lt;br /&gt;
&lt;br /&gt;
The software is not yet finished, see forum for progress &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=2338&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The boards can be bought in the [https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=74 shop].&lt;br /&gt;
&lt;br /&gt;
== Pinout ==&lt;br /&gt;
The pinout is also written to the bottom silkscreen.&lt;br /&gt;
&lt;br /&gt;
On the left side you see 17 inputs. The first one is connected to the negative pole (GND) of your (sub)pack, the subsequent ones to the positive poles of up to 16 cells. At least the lower two cell inputs must be connected. When cascading modules the positive-most input of module n is also the GND of module n+1, so must be spliced to connect to both.&lt;br /&gt;
&lt;br /&gt;
On the top right is the vehicle interfacing or low voltage connector. From top to bottom it is low voltage GND, 12V, enable_in, enable_out, CANH, CANL. GND, 12V, CANH, CANL are connected to all modules in parallel whereas enable_out is chained to enable_in of the next module. The first enable_in must be connected to 12V whenever the BMS should become active, e.g. when charging or driving. The module with 12V on the enable_in auto-detects as &amp;quot;main&amp;quot; module, collects data from the subsequent modules and sends more high level CAN messages&lt;br /&gt;
&lt;br /&gt;
On the bottom right is the temperature sensor and current sensor input. Top to bottom it is tsensor1+, tsensor1- (not silkscreened), tsensor2+ , tsensor2-(not silkscreened), 5V, CUR+, CUR-, GND. A single ended current sensor is just connected to CUR+.&lt;br /&gt;
&lt;br /&gt;
Right now the current sensor is only supported on the main module.&lt;br /&gt;
&lt;br /&gt;
=== Connector part numbers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Header&lt;br /&gt;
!Counterpart&lt;br /&gt;
!Pins&lt;br /&gt;
|-&lt;br /&gt;
|LV connector (supply, CAN, enable)&lt;br /&gt;
|Phoenix Contact&lt;br /&gt;
|1803468&lt;br /&gt;
|1803617&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Temperature and current sensors&lt;br /&gt;
|Molex&lt;br /&gt;
|640454-8&lt;br /&gt;
|1375820-8&lt;br /&gt;
|1445336-1&lt;br /&gt;
|-&lt;br /&gt;
|Cell taps&lt;br /&gt;
|Molex&lt;br /&gt;
|1-640456-7&lt;br /&gt;
|1-1375820-7&lt;br /&gt;
|1445336-1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Power supply ===&lt;br /&gt;
The pins GND and 12V must be connected to a permanent 12V source in order to ensure correct operation. In other words, don&#039;t connect 12V for example to your cars ignition 12V that is interrupted whenever you stop the car.&lt;br /&gt;
&lt;br /&gt;
The enable input of the first (main) module is connected to an interruptable 12V source. This input starts up the BMS. Enable can stay high but even a 1s pulse is enough to start the BMS, as it will then keep itself running as long as needed.&lt;br /&gt;
&lt;br /&gt;
The BMS will then keep running as long as current flows through the battery. 2 hours after it has measured the last current flow it will shut down. It will use these 2 hours to let the cells settle to their open circuit voltage and will do balancing and [[16-cell BMS#State of Health calculation|SoH calculation]]. Afterwards it will shut itself down and consume only a few uA from your 12V source.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
All configuration, queries and firmware updates are done via the CAN bus. There is no independent web interface like known from e.g. the inverter. However there is a solution to connect an ESP32 via CAN and then have the known web interface &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?p=56913#p56913&amp;lt;/ref&amp;gt; or you can use Dave Fiddes &amp;quot;oic&amp;quot; tool for the command line&amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=2907&amp;lt;/ref&amp;gt;. It is important to know that the main module has node-id 10 and the subsequent ones 10+i (i index of submodule, so 1st submodule has node-id 11). The base node id can be configured to start at something else than 10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;All info given here is preliminary and will likely change!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Apart from that the modules output periodic CAN messages depending on their role. The base address for cyclic messages defaults to 0x1F4 and can be changed by modifying pdobase on the main module. pdobase is ignored on the sub modules.&lt;br /&gt;
&lt;br /&gt;
All modules output on ID 501 (0x1F5) + i&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!start&lt;br /&gt;
!length&lt;br /&gt;
!item&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|13&lt;br /&gt;
|umin&lt;br /&gt;
|minimum cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|13&lt;br /&gt;
|umax&lt;br /&gt;
|maximum cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|2&lt;br /&gt;
|counter&lt;br /&gt;
|counts from 0-3 (anti-freeze)&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|13&lt;br /&gt;
|uavg&lt;br /&gt;
|average cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|48&lt;br /&gt;
|8&lt;br /&gt;
|tempmin&lt;br /&gt;
|Minimum temp +40 on module i&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|8&lt;br /&gt;
|tempmax&lt;br /&gt;
|Maximum temp +40 on module i&lt;br /&gt;
|}&lt;br /&gt;
The main module does not output its local accumulated values but accumulated values over all modules.&lt;br /&gt;
&lt;br /&gt;
In addition the main module outputs on id 500 (0x1F4)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!start&lt;br /&gt;
!length&lt;br /&gt;
!item&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|11&lt;br /&gt;
|chargelim&lt;br /&gt;
|maximum charge current in A&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|11&lt;br /&gt;
|dischargelim&lt;br /&gt;
|maximum discharge current in A&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|10&lt;br /&gt;
|soc&lt;br /&gt;
|Pack soc in 0.1%&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|16&lt;br /&gt;
|idcavg&lt;br /&gt;
|Averaged current reading of last 1s in 0.1A - signed!&lt;br /&gt;
|-&lt;br /&gt;
|48&lt;br /&gt;
|10&lt;br /&gt;
|utotal&lt;br /&gt;
|Total pack voltage in V&lt;br /&gt;
|-&lt;br /&gt;
|62&lt;br /&gt;
|2&lt;br /&gt;
|counter&lt;br /&gt;
|counts from 0-3 (anti-freeze)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reading individual cell voltages ===&lt;br /&gt;
Cell voltages are only available via CAN SDO from the module that measures them. So voltages 1-16 must be queried from the first (main) module, 17-32 from the 2nd (1st submodule) and so on. With Dave Fiddes tool this translates to:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
oic -n 10 dumpall #dumps all values including cell voltages from 1st module&lt;br /&gt;
oic -n 11 dumpall #same for second module&lt;br /&gt;
oic -n 11 read u0 #Read first cell voltage of second module&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For querying voltages say in your arduino sketch you&#039;ll need to acquire every voltage separately by sending and receiving SDO messages&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x60A#0x40 idhigh 0x21 idlow 0 0 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
idhigh and low are the bytes of the internal ID. The id of the first cell voltage is 2006 (0x7D6) so for querying the 1st cell voltage of the first module you send&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x60A#0x40 0x07 0x21 0xD6 0 0 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And you will receive the reply&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x58A#0x43 0x07 0x21 0xD6 0xD0 0xED 0x01 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x0001EDD0 is the voltage value which decodes to mV x 32. So 0x1EDD0/32 = 3950.5 mV.&lt;br /&gt;
&lt;br /&gt;
The next cell would be on 0x7D7 and the last on 0x7E5. The next 16 voltages are then queried from node id 0x60B.&lt;br /&gt;
&lt;br /&gt;
=== Configuration Parameters ===&lt;br /&gt;
There is currently a limited set of parameters which will be extended as the software grows. This table always reflects the latest git commit. Check the page history for previous versions.&lt;br /&gt;
&lt;br /&gt;
These are the parameters of v0.20.B&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Min&lt;br /&gt;
!Max&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;BMS&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|gain&lt;br /&gt;
|uV/dig&lt;br /&gt;
|1&lt;br /&gt;
|1000&lt;br /&gt;
|586&lt;br /&gt;
|Scaling factor from ADC digits to mV&lt;br /&gt;
|-&lt;br /&gt;
|correction0&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
| -1250&lt;br /&gt;
|The first two and the last channel have slightly different topology and need their own correction factor&lt;br /&gt;
|-&lt;br /&gt;
|correction1&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
|1500&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|correction15&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
|1000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|numchan&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|16&lt;br /&gt;
|16&lt;br /&gt;
|Number of cells connected to the module, power cycle required following saving parameters to update.&lt;br /&gt;
|-&lt;br /&gt;
|balmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Balancing mode&lt;br /&gt;
0=No balancing&lt;br /&gt;
1=Only bump up low cells&lt;br /&gt;
2=Only dissipate high cells&lt;br /&gt;
3=Do both&lt;br /&gt;
&lt;br /&gt;
By default balancing starts 60s after power up or in fact 60s after idcavg settled below 1A. You will see opmode changing to RunBalance&lt;br /&gt;
|-&lt;br /&gt;
|ubalance&lt;br /&gt;
|mV&lt;br /&gt;
|0&lt;br /&gt;
|4500&lt;br /&gt;
|4500&lt;br /&gt;
|Voltage above which top balancing is started&lt;br /&gt;
|-&lt;br /&gt;
|idlewait&lt;br /&gt;
|s&lt;br /&gt;
|0&lt;br /&gt;
|100000&lt;br /&gt;
|60&lt;br /&gt;
|Number of seconds to wait after stop of current flow to measure unloaded cell voltage und start balancing&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Battery Characteristics&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|dischargemax&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2047&lt;br /&gt;
|200&lt;br /&gt;
|Maximum discharge current&lt;br /&gt;
|-&lt;br /&gt;
|nomcap&lt;br /&gt;
|Ah&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|100&lt;br /&gt;
|Nominal capacity&lt;br /&gt;
|-&lt;br /&gt;
|icc1&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|50&lt;br /&gt;
|Maximum charge current of empty battery&lt;br /&gt;
|-&lt;br /&gt;
|icc2&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|30&lt;br /&gt;
|Maximum charge current of roughly half-charged battery&lt;br /&gt;
|-&lt;br /&gt;
|icc3&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|20&lt;br /&gt;
|Maximum charge current of rather full battery&lt;br /&gt;
|-&lt;br /&gt;
|ucv1&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|3900&lt;br /&gt;
|First constant voltage set point. Transition to next one when dropping below icc2&lt;br /&gt;
|-&lt;br /&gt;
|ucv2&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|4000&lt;br /&gt;
|Second constant voltage set point. Transition to next one when dropping below icc3&lt;br /&gt;
|-&lt;br /&gt;
|ucellmax&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|4200&lt;br /&gt;
|Third constant voltage set point and maximum cell voltage&lt;br /&gt;
|-&lt;br /&gt;
|ucellmin&lt;br /&gt;
|mV&lt;br /&gt;
|1000&lt;br /&gt;
|4500&lt;br /&gt;
|3300&lt;br /&gt;
|Minimum loaded cell voltage. Discharge limit is dropped to stay above this value&lt;br /&gt;
|-&lt;br /&gt;
|chargeXsoc&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|Percentage of charge current at soc X. In between two points charge current is interpolated&lt;br /&gt;
|-&lt;br /&gt;
|sohpreset&lt;br /&gt;
|%&lt;br /&gt;
|10&lt;br /&gt;
|100&lt;br /&gt;
|100&lt;br /&gt;
|This is the starting value for the state of health (SoH) calculation. The value is continuously updated by the BMS as SoH is estimated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Sensor Setup&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|idcgain&lt;br /&gt;
|dig/A&lt;br /&gt;
| -1000&lt;br /&gt;
|1000&lt;br /&gt;
|10&lt;br /&gt;
|Gain (or actually division factor) of current sensor&lt;br /&gt;
|-&lt;br /&gt;
|idcofs&lt;br /&gt;
|dig&lt;br /&gt;
| -4095&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
|0A offset&lt;br /&gt;
|-&lt;br /&gt;
|idcmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Current sensor mode 0=Off, 1=Single Ended ADC, 2=Differential ADC, 3=ISA current shunt&lt;br /&gt;
|-&lt;br /&gt;
|tempsns&lt;br /&gt;
|&lt;br /&gt;
| 0&lt;br /&gt;
|3&lt;br /&gt;
| 0&lt;br /&gt;
|Temperature sensor 0=None, 1=Channel1, 2=Channel3, 3=Both (set tempsns 0 in dashboard if dropdown not availble and value set as -1)&lt;br /&gt;
|-&lt;br /&gt;
|tempres&lt;br /&gt;
|Ohm&lt;br /&gt;
|10&lt;br /&gt;
|500000&lt;br /&gt;
|10000&lt;br /&gt;
|Nominal sensor resistance at 25°C&lt;br /&gt;
|-&lt;br /&gt;
|tempbeta&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|100000&lt;br /&gt;
|3900&lt;br /&gt;
|beta factor of Steinhart equation (see data sheet)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Communication&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|pdobase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2047&lt;br /&gt;
|500&lt;br /&gt;
|base COB Id for cyclic messages. Main module uses pdobase and pdobase+1, 1st submodule uses pdobase+2 and so on&lt;br /&gt;
|-&lt;br /&gt;
|sdobase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|63&lt;br /&gt;
|10&lt;br /&gt;
|base node ID for SDO queries. Main module uses sdobase, 1st submodule sdobase+1 and so on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Spot values ===&lt;br /&gt;
All values that the BMS either measures or calculates are called spot values. While all modules show all spot values, some only make sense on the main module. The column &amp;quot;scope&amp;quot; denotes that. &amp;quot;M&amp;quot; means the value is only relevant on the main module, &amp;quot;S&amp;quot; means it&#039;s relevant on main and sub modules.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Scope&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Firmware version&lt;br /&gt;
|-&lt;br /&gt;
|opmode&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|State of operation&lt;br /&gt;
&lt;br /&gt;
* BOOT - System starting&lt;br /&gt;
* GETADDR - Waiting for address assignment&lt;br /&gt;
* SETADDR - Setting address of next node&lt;br /&gt;
* REQINFO - Requesting info from sub modules&lt;br /&gt;
* RECVINFO - Receiving info&lt;br /&gt;
* INIT - Initialize BMS hardware&lt;br /&gt;
* SELFTEST - Running hardware self tests&lt;br /&gt;
* RUN - normal operation when current flows through battery&lt;br /&gt;
* IDLE - battery is idle, i.e. no current through it for a given time&lt;br /&gt;
* ERROR - selftests detected a critical error, operation halted&lt;br /&gt;
|-&lt;br /&gt;
|lasterr&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Last detected error, see Errors&lt;br /&gt;
|-&lt;br /&gt;
|errchan&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Cell tap channel causing the error, if applicable&lt;br /&gt;
|-&lt;br /&gt;
|modaddr&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Address of module&lt;br /&gt;
|-&lt;br /&gt;
|modnum&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Total number of modules&lt;br /&gt;
|-&lt;br /&gt;
|totalcells&lt;br /&gt;
|&lt;br /&gt;
|M&lt;br /&gt;
|Total number of cells&lt;br /&gt;
|-&lt;br /&gt;
|counter&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Revolving counter 0-15 100 ms clock rate&lt;br /&gt;
|-&lt;br /&gt;
|uptime&lt;br /&gt;
|s&lt;br /&gt;
|S&lt;br /&gt;
|Time in s since power was applied to 12V pin&lt;br /&gt;
|-&lt;br /&gt;
|chargein&lt;br /&gt;
|As&lt;br /&gt;
|M&lt;br /&gt;
|Charge into the battery &lt;br /&gt;
|-&lt;br /&gt;
|chargeout&lt;br /&gt;
|As&lt;br /&gt;
|M&lt;br /&gt;
|Charge from the battery to load&lt;br /&gt;
|-&lt;br /&gt;
|soc&lt;br /&gt;
|%&lt;br /&gt;
|M&lt;br /&gt;
|State of charge, i.e. available charge in percent of fully charged battery&lt;br /&gt;
|-&lt;br /&gt;
|soh&lt;br /&gt;
|%&lt;br /&gt;
|M&lt;br /&gt;
|State of health, i.e. available total charge in percent of data sheet value when new&lt;br /&gt;
|-&lt;br /&gt;
|chargelim&lt;br /&gt;
|A&lt;br /&gt;
|M&lt;br /&gt;
|Current limit for charging the battery, see [[16-cell BMS#Charge Curve|Charge Curve]]&lt;br /&gt;
|-&lt;br /&gt;
|dischargelim&lt;br /&gt;
|A&lt;br /&gt;
|M&lt;br /&gt;
|Current limit for discharging, see [[16-cell BMS#Calculating current limits|Calculating current limits]]&lt;br /&gt;
|-&lt;br /&gt;
|idc&lt;br /&gt;
|A&lt;br /&gt;
|M&lt;br /&gt;
|Present current through battery, negative for current out of the battery, positive for current into the battery&lt;br /&gt;
|-&lt;br /&gt;
|idcavg&lt;br /&gt;
|A&lt;br /&gt;
|M&lt;br /&gt;
|Average current of the last second&lt;br /&gt;
|-&lt;br /&gt;
|power&lt;br /&gt;
|W&lt;br /&gt;
|M&lt;br /&gt;
|Average battery power of the last second&lt;br /&gt;
|-&lt;br /&gt;
|tempmin&lt;br /&gt;
|°C&lt;br /&gt;
|M&lt;br /&gt;
|Minimum temperature of all modules&lt;br /&gt;
|-&lt;br /&gt;
|tempmax&lt;br /&gt;
|°C&lt;br /&gt;
|M&lt;br /&gt;
|Maximum temperature of all modules&lt;br /&gt;
|-&lt;br /&gt;
|uavg&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|average cell voltage over entire pack&lt;br /&gt;
|-&lt;br /&gt;
|umin&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|Minimum cell voltage of entire pack&lt;br /&gt;
|-&lt;br /&gt;
|umax&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|Maximum cell voltage of entire pack&lt;br /&gt;
|-&lt;br /&gt;
|udelta&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|Difference between minimum and maximum cell voltage of entire pack&lt;br /&gt;
|-&lt;br /&gt;
|utotal&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|Sum of all cell voltages, i.e. pack voltage&lt;br /&gt;
|-&lt;br /&gt;
|uX&lt;br /&gt;
|mV&lt;br /&gt;
|S&lt;br /&gt;
|Present voltage of cell X of current module, see also [[16-cell BMS#Reading individual cell voltages|Reading individual cell voltages]]&lt;br /&gt;
|-&lt;br /&gt;
|uavgX, uminX, umaxX, tempminX, tempmaxX&lt;br /&gt;
|mV, °C&lt;br /&gt;
|M&lt;br /&gt;
|Average/Minimum/Maximum cell voltage and temperature of sub module X&lt;br /&gt;
|-&lt;br /&gt;
|uXcmd&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|State of balancer&lt;br /&gt;
|-&lt;br /&gt;
|cpuload&lt;br /&gt;
|%&lt;br /&gt;
|S&lt;br /&gt;
|Time the CPU spends actually doing something&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Operation ==&lt;br /&gt;
&lt;br /&gt;
=== State of Charge calculation ===&lt;br /&gt;
The State of Charge (SoC) lets you know how many percent of charge you battery still holds, in percent of a fully charged battery.&lt;br /&gt;
&lt;br /&gt;
Determining SoC is split into two methods: determining the SoC from cell voltage and then tracking it as current flows in or out of the pack.&lt;br /&gt;
&lt;br /&gt;
To estimate the SoC a 10-point lookup table is implemented that maps from cell voltage to SoC. The accuracy of this table is directly related to the accuracy of the estimation. You can edit the lookup table by changing the &#039;&#039;&#039;chargeXsoc&#039;&#039;&#039; parameters. The voltages you enter are open circuit voltages. These can only be obtained when there was no current flow through the battery for a certain amount of time, typically 10-30 minutes. This time is configured via the &#039;&#039;&#039;idlewait&#039;&#039;&#039; parameter.&lt;br /&gt;
&lt;br /&gt;
So whenever the BMS has the chance to estimate the SoC it will do so. You can adjust &#039;&#039;&#039;idlewait&#039;&#039;&#039; to a low value to start estimating quickly. It means the first estimates will be off but it will become more accurate if the pack remains unloaded for longer time.&lt;br /&gt;
&lt;br /&gt;
The subsequent tracking of SoC requires the BMS to know the current through the battery. Right now it supports analog current sensors (e.g. hall effect) with an operating voltage of 5V. Within this class it supports differential and single ended sensors, configurable via &#039;&#039;&#039;idcmode&#039;&#039;&#039;. The parameters &#039;&#039;&#039;idcofs&#039;&#039;&#039; and &#039;&#039;&#039;idcgain&#039;&#039;&#039; are used for calibration. When no current is flowing adjust &#039;&#039;&#039;idcofs&#039;&#039;&#039; until &#039;&#039;&#039;idcavg&#039;&#039;&#039; shows 0A. Then put a known current through the sensor and adjust &#039;&#039;&#039;idcgain&#039;&#039;&#039; until &#039;&#039;&#039;idcavg&#039;&#039;&#039; shows the correct current.&lt;br /&gt;
&lt;br /&gt;
Lastly the BMS needs to know the energy or charge content of your battery in Ah. This is configured with the &#039;&#039;&#039;nomcap&#039;&#039;&#039; parameter and can be found in the data sheet.&lt;br /&gt;
&lt;br /&gt;
=== State of Health calculation ===&lt;br /&gt;
The State of Health (SoH) lets you know how the remaining fully charged capacity, in percent of the data sheet value, i.e. when the battery was new. Batteries slowly degrade over time and usage cycles.&lt;br /&gt;
&lt;br /&gt;
Whenever we do a SoC estimation as described above, we also update the SoH. If the estimated SoC has changed by more than 20% we compare the energy that we have taken out of the battery to the difference in SoC. If the two match, the SoH is 100%. If we have taken more energy from the battery then the difference in SoC suggests, SoH is above 100% (and you likely configured a wrong &#039;&#039;&#039;nomcap&#039;&#039;&#039;). Otherwise SoH is &amp;lt; 100%.&lt;br /&gt;
&lt;br /&gt;
As this method comes with certain inaccuracies we only change the long term SoH slowly, i.e. every estimate is slowly averaged onto the long term SoH. This should balance out inaccuracies.&lt;br /&gt;
&lt;br /&gt;
The spot value &#039;&#039;&#039;soh&#039;&#039;&#039; shows the current long term SoH. The value is also reflected onto &#039;&#039;&#039;sohpreset&#039;&#039;&#039;, a saveable parameter. Whenever you need to interrupt the BMSes power supply you should go should save parameters so that next time it starts up with the correct long term SoH.&lt;br /&gt;
&lt;br /&gt;
=== Calculating current limits ===&lt;br /&gt;
Limiting charge and discharge current are the only means of this BMS to protect the battery. It has no means to turn off the current flow by itself but instead relies on the connected components to obey the calculated current limits that are sent out via CAN. The current limits are calculated in a number of steps.&lt;br /&gt;
&lt;br /&gt;
==== Charge Curve ====&lt;br /&gt;
The initial approach was to assign a certain charge current to points in the SoC curve. This method can be skewed if the SoC calculation is off for some reason. The new method deploys 3 CC/CV regulators. This was copied from oberving VWs charge curve of the MEB cars. The first regulator has the highest charge current and aims for a voltage typically around 3.9V for many NMC chemistries. When current drops below the CC value of the second regulator then that one is used, aiming for a higher voltage of typically 4V. And finally the 3rd regulator takes over aiming for the charge end voltage of typically 4.2V. When setting all 3 to the same values a simple CC/CV curve is generated.&lt;br /&gt;
&lt;br /&gt;
==== Voltage limits ====&lt;br /&gt;
Voltage limits are enforced via a P-regulator. I.e. as we approach the upper or lower voltage limit current is cut back to stay away from the limits until it reaches 0A. The upper and lower limit is configurable&lt;br /&gt;
&lt;br /&gt;
==== Temperature limits ====&lt;br /&gt;
High temperature will cut back both charge and discharge current whereas low temperature will only cut back charge current. These limits only work when you&#039;ve set up your temperature sensors correctly. Please check the readings against a reference before relying on it.&lt;br /&gt;
&lt;br /&gt;
Charge current has a proportional, multi-step temperature derating, i.e. the charge curve defined by iccX and ucvX is scaled with a derating factor the lower the temperature or when the maximum temperature is approached&lt;br /&gt;
&lt;br /&gt;
* Below &#039;&#039;&#039;-20°C&#039;&#039;&#039; no charging is possible&lt;br /&gt;
* Between &#039;&#039;&#039;-20°C and 0°C&#039;&#039;&#039; charging with 0-30% of the charge curve is allowed&lt;br /&gt;
* Between &#039;&#039;&#039;0°C and 25°C&#039;&#039;&#039; charging with 30% to 100% of the charge curve is allowed&lt;br /&gt;
* Between &#039;&#039;&#039;43°C and 50°C&#039;&#039;&#039; charging with 100% to 0% of the charge curve is allowed, i.e. &#039;&#039;&#039;above 50°C&#039;&#039;&#039; charging is no longer allowed.&lt;br /&gt;
&lt;br /&gt;
Discharging is not limited at low temperatures as high discharge currents at low temperatures are not known to cause damage. As the battery heats up discharge current is limited, starting at &#039;&#039;&#039;46°C&#039;&#039;&#039; until discharging is no longer allowed when reaching &#039;&#039;&#039;53°C&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Energy limits ====&lt;br /&gt;
Not enforced yet. Some OEM BMSes cut back charge current after a certain amount of energy has been put into the battery. E.g. When starting charge at 50% charge rate will end up higher at 70% than if we start charging at 10%.&lt;br /&gt;
&lt;br /&gt;
== Calibration ==&lt;br /&gt;
As every instrument the voltage measurement needs to be calibrated to cancel out tolerances in the involved components. There are 4 parameters for calibration.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gain:&#039;&#039;&#039; The translation ration between the ADC digits and mV. This applies to all channels&lt;br /&gt;
* &#039;&#039;&#039;correction0, 1 and 15&#039;&#039;&#039;: This allows special tuning of said 3 channels because they use a slightly different current path and thus need a small gain correction&lt;br /&gt;
&lt;br /&gt;
=== Calibration procedure ===&lt;br /&gt;
First we determine the general gain. Pick any of the voltages between u2 and u14 which share a common gain factor. Use a good multimeter to measure the physical voltage of your reference channel. Now tune the &#039;&#039;&#039;gain&#039;&#039;&#039; parameter until your multimeter and the BMS voltage read the same value +-0.5mV. Now all channels from 2-14 should read correctly.&lt;br /&gt;
&lt;br /&gt;
Then for channels 0, 1 and 15 also measure the physical voltage input and tune the respective &#039;&#039;&#039;correctionX&#039;&#039;&#039; parameter until multimeter and BMS report the same voltage. The correction factors can be negative if a channels reads too high.&lt;br /&gt;
&lt;br /&gt;
Save your parameters to flash to make the calibration permanent.&lt;br /&gt;
&lt;br /&gt;
== Flashing firmware ==&lt;br /&gt;
If you have sourced the BMS boards from an alternative source then you will need to flash the bootloader and firmware onto the BMS. This is a relatively straightforward process once understood but took me a while to get it to work.&lt;br /&gt;
&lt;br /&gt;
Firstly you will need an STLink dongle, I used this one &amp;lt;ref&amp;gt;https://www.amazon.co.uk/dp/B07QBLNDPM?psc=1&amp;lt;/ref&amp;gt; but I believe any will do.&lt;br /&gt;
&lt;br /&gt;
I used STM32CubeProgrammer &amp;lt;ref&amp;gt;https://www.st.com/en/development-tools/stm32cubeprog.html&amp;lt;/ref&amp;gt; on Linux to flash my board and also (prior to flashing) upgrade the STLinkdongle to the latest firmware (might not be necessary but felt it was wise to do so).&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve got STM32Cubeprogrammer installed you&#039;re probably best erasing the STM32 Chip to ensure you&#039;re starting from a clean board. Navigate to the &amp;quot;Erasing &amp;amp; Programming&amp;quot; tab on the left and connect to your STlink dongle (if you havent already). Once connected, (you can also update the firmware on the dongle at this point on the &amp;quot;Memory &amp;amp; File Editing&amp;quot; tab), connect the dongle to the BMS board via the VDCG pins... &lt;br /&gt;
&lt;br /&gt;
(V = Voltage 3.3V, D = SWDIO, C = SWCLK, G = Gnd)&lt;br /&gt;
&lt;br /&gt;
and perform a &amp;quot;full chip erase&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Once thats complete head over to Github to download the Bootloader &amp;lt;ref&amp;gt;https://github.com/jsphuebner/stm32-CANBootloader/releases&amp;lt;/ref&amp;gt; and download the hex file (you may need to be logged in to download the files).&lt;br /&gt;
&lt;br /&gt;
Once downloaded, in STM32CubeProgrammer, navigate to the &amp;quot;Memory &amp;amp; File Editing&amp;quot; tab and open the hex file you just downloaded, once opened you can use the &amp;quot;Download&amp;quot; button to flash the bootloader to your BMS board.&lt;br /&gt;
&lt;br /&gt;
You can now repeat the above process of opening the hex file and &amp;quot;downloading&amp;quot; to the BMS board for the main BMS firmware which is available from the BMS Github repository &amp;lt;ref&amp;gt;https://github.com/jsphuebner/FlyingAdcBms/actions&amp;lt;/ref&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Once all that is done, you can move onto the Web interface. You&#039;ll need the &amp;quot;Can Backend&amp;quot; version of the ESP32 Web Interface available here &amp;lt;ref&amp;gt;https://github.com/jsphuebner/esp32-web-interface/tree/can-backend&amp;lt;/ref&amp;gt; (click the green code button and download zip)&lt;br /&gt;
&lt;br /&gt;
Once downloaded download Arduino IDE 1.8.19 (you&#039;ll need this version, nothing beyond version 2 as this does not support SPIFFS flashing as far as I&#039;m aware) and set it up for flashing to ESP32 boards &amp;lt;ref&amp;gt;https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html&amp;lt;/ref&amp;gt; and also flashing ESP32 Spiffs &amp;lt;ref&amp;gt;https://randomnerdtutorials.com/install-esp32-filesystem-uploader-arduino-ide/&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
To setup the Web interface Arduino sketch, you&#039;ll want to unzip and (IMPORTANT) RENAME the folder to &amp;quot;esp32-web-interface&amp;quot; to match the ino file within the folder, if you don&#039;t do this you&#039;ll have problems further down the line. Once unzipped and renamed, open the esp32-web-interface.ino sketch file and upload it to your ESP32 dev board. when this completed you&#039;ll also need to upload the SPIFFS image, you can do this by going to Tools and &amp;quot;ESP32 Sketch Data Upload&amp;quot; and choosing SPIFFS. once this is complete, you can connect your ESP32 to your BMS board via CAN and power them and they shuld work (note you&#039;ll need the 12V enable in line connected also).&lt;br /&gt;
&lt;br /&gt;
Once on the Web interface, select Node ID 10 and a speed of 500kbps and you&#039;ll have all your wonderful BMS spot values and params ready to go.&lt;br /&gt;
&lt;br /&gt;
== Operating Limits==&lt;br /&gt;
&lt;br /&gt;
* Max voltage for the board is 70v&lt;br /&gt;
* Max number of cells is 16&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=16-cell_BMS&amp;diff=5593</id>
		<title>16-cell BMS</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=16-cell_BMS&amp;diff=5593"/>
		<updated>2025-02-02T15:45:29Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added SoH&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:BMS]]&lt;br /&gt;
[[Category:Battery]]&lt;br /&gt;
[[File:16-cell BMS.jpg|thumb|16-cell BMS]]&lt;br /&gt;
The goal of this BMS is to use mostly decade old components to create a 16 channel cell voltage meter. It uses a very accurate sigma/delta ADC for superb resolution. It can drain about 100mA from a cell or charge it with 50 mA via the DC/DC converter. The ability to both charge and discharge cells speeds up balancing despite the low balancing current.&lt;br /&gt;
&lt;br /&gt;
When turned off it drains no current from the connected cells at all.&lt;br /&gt;
&lt;br /&gt;
On the low voltage side it features two inputs for temperature sensors and one input for a 5V current sensor, differential or single ended.&lt;br /&gt;
&lt;br /&gt;
It can be cascaded to be used with more than 16 cells and has an automatic addressing scheme to forgo the use of jumpers or DIP switches. All communication is done via CAN. Supply voltage is 12V with about 20 mA draw when not balancing.&lt;br /&gt;
&lt;br /&gt;
The software is not yet finished, see forum for progress &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=2338&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The boards can be bought in the [https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=74 shop].&lt;br /&gt;
&lt;br /&gt;
== Pinout ==&lt;br /&gt;
The pinout is also written to the bottom silkscreen.&lt;br /&gt;
&lt;br /&gt;
On the left side you see 17 inputs. The first one is connected to the negative pole (GND) of your (sub)pack, the subsequent ones to the positive poles of up to 16 cells. At least the lower two cell inputs must be connected. When cascading modules the positive-most input of module n is also the GND of module n+1, so must be spliced to connect to both.&lt;br /&gt;
&lt;br /&gt;
On the top right is the vehicle interfacing or low voltage connector. From top to bottom it is low voltage GND, 12V, enable_in, enable_out, CANH, CANL. GND, 12V, CANH, CANL are connected to all modules in parallel whereas enable_out is chained to enable_in of the next module. The first enable_in must be connected to 12V whenever the BMS should become active, e.g. when charging or driving. The module with 12V on the enable_in auto-detects as &amp;quot;main&amp;quot; module, collects data from the subsequent modules and sends more high level CAN messages&lt;br /&gt;
&lt;br /&gt;
On the bottom right is the temperature sensor and current sensor input. Top to bottom it is tsensor1+, tsensor1- (not silkscreened), tsensor2+ , tsensor2-(not silkscreened), 5V, CUR+, CUR-, GND. A single ended current sensor is just connected to CUR+.&lt;br /&gt;
&lt;br /&gt;
Right now the current sensor is only supported on the main module.&lt;br /&gt;
&lt;br /&gt;
=== Connector part numbers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Header&lt;br /&gt;
!Counterpart&lt;br /&gt;
!Pins&lt;br /&gt;
|-&lt;br /&gt;
|LV connector (supply, CAN, enable)&lt;br /&gt;
|Phoenix Contact&lt;br /&gt;
|1803468&lt;br /&gt;
|1803617&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Temperature and current sensors&lt;br /&gt;
|Molex&lt;br /&gt;
|640454-8&lt;br /&gt;
|1375820-8&lt;br /&gt;
|1445336-1&lt;br /&gt;
|-&lt;br /&gt;
|Cell taps&lt;br /&gt;
|Molex&lt;br /&gt;
|1-640456-7&lt;br /&gt;
|1-1375820-7&lt;br /&gt;
|1445336-1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Power supply ===&lt;br /&gt;
The pins GND and 12V must be connected to a permanent 12V source in order to ensure correct operation. In other words, don&#039;t connect 12V for example to your cars ignition 12V that is interrupted whenever you stop the car.&lt;br /&gt;
&lt;br /&gt;
The enable input of the first (main) module is connected to an interruptable 12V source. This input starts up the BMS.&lt;br /&gt;
&lt;br /&gt;
The BMS will then keep running as long as current flows through the battery. 2 hours after it has measured the last current flow it will shut down. It will use these 2 hours to let the cells settle to their open circuit voltage and will do balancing and [[16-cell BMS#State of Health calculation|SoH calculation]]. Afterwards it will shut itself down and consume only a few uA from your 12V source.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
All configuration, queries and firmware updates are done via the CAN bus. There is no independent web interface like known from e.g. the inverter. However there is a solution to connect an ESP32 via CAN and then have the known web interface &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?p=56913#p56913&amp;lt;/ref&amp;gt; or you can use Dave Fiddes &amp;quot;oic&amp;quot; tool for the command line&amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=2907&amp;lt;/ref&amp;gt;. It is important to know that the main module has node-id 10 and the subsequent ones 10+i (i index of submodule, so 1st submodule has node-id 11). The base node id can be configured to start at something else than 10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;All info given here is preliminary and will likely change!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Apart from that the modules output periodic CAN messages depending on their role. The base address for cyclic messages defaults to 0x1F4 and can be changed by modifying pdobase on the main module. pdobase is ignored on the sub modules.&lt;br /&gt;
&lt;br /&gt;
All modules output on ID 501 (0x1F5) + i&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!start&lt;br /&gt;
!length&lt;br /&gt;
!item&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|13&lt;br /&gt;
|umin&lt;br /&gt;
|minimum cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|13&lt;br /&gt;
|umax&lt;br /&gt;
|maximum cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|2&lt;br /&gt;
|counter&lt;br /&gt;
|counts from 0-3 (anti-freeze)&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|13&lt;br /&gt;
|uavg&lt;br /&gt;
|average cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|48&lt;br /&gt;
|8&lt;br /&gt;
|tempmin&lt;br /&gt;
|Minimum temp +40 on module i&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|8&lt;br /&gt;
|tempmax&lt;br /&gt;
|Maximum temp +40 on module i&lt;br /&gt;
|}&lt;br /&gt;
The main module does not output its local accumulated values but accumulated values over all modules.&lt;br /&gt;
&lt;br /&gt;
In addition the main module outputs on id 500 (0x1F4)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!start&lt;br /&gt;
!length&lt;br /&gt;
!item&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|11&lt;br /&gt;
|chargelim&lt;br /&gt;
|maximum charge current in A&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|11&lt;br /&gt;
|dischargelim&lt;br /&gt;
|maximum discharge current in A&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|10&lt;br /&gt;
|soc&lt;br /&gt;
|Pack soc in 0.1%&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|16&lt;br /&gt;
|idcavg&lt;br /&gt;
|Averaged current reading of last 1s in 0.1A - signed!&lt;br /&gt;
|-&lt;br /&gt;
|48&lt;br /&gt;
|10&lt;br /&gt;
|utotal&lt;br /&gt;
|Total pack voltage in V&lt;br /&gt;
|-&lt;br /&gt;
|62&lt;br /&gt;
|2&lt;br /&gt;
|counter&lt;br /&gt;
|counts from 0-3 (anti-freeze)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reading individual cell voltages ===&lt;br /&gt;
Cell voltages are only available via CAN SDO from the module that measures them. So voltages 1-16 must be queried from the first (main) module, 17-32 from the 2nd (1st submodule) and so on. With Dave Fiddes tool this translates to:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
oic -n 10 dumpall #dumps all values including cell voltages from 1st module&lt;br /&gt;
oic -n 11 dumpall #same for second module&lt;br /&gt;
oic -n 11 read u0 #Read first cell voltage of second module&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For querying voltages say in your arduino sketch you&#039;ll need to acquire every voltage separately by sending and receiving SDO messages&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x60A#0x40 idhigh 0x21 idlow 0 0 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
idhigh and low are the bytes of the internal ID. The id of the first cell voltage is 2006 (0x7D6) so for querying the 1st cell voltage of the first module you send&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x60A#0x40 0x07 0x21 0xD6 0 0 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And you will receive the reply&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x58A#0x43 0x07 0x21 0xD6 0xD0 0xED 0x01 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x0001EDD0 is the voltage value which decodes to mV x 32. So 0x1EDD0/32 = 3950.5 mV.&lt;br /&gt;
&lt;br /&gt;
The next cell would be on 0x7D7 and the last on 0x7E5. The next 16 voltages are then queried from node id 0x60B.&lt;br /&gt;
&lt;br /&gt;
=== Configuration Parameters ===&lt;br /&gt;
There is currently a limited set of parameters which will be extended as the software grows. This table always reflects the latest git commit. Check the page history for previous versions.&lt;br /&gt;
&lt;br /&gt;
These are the parameters of v0.20.B&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Min&lt;br /&gt;
!Max&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;BMS&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|gain&lt;br /&gt;
|uV/dig&lt;br /&gt;
|1&lt;br /&gt;
|1000&lt;br /&gt;
|586&lt;br /&gt;
|Scaling factor from ADC digits to mV&lt;br /&gt;
|-&lt;br /&gt;
|correction0&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
| -1250&lt;br /&gt;
|The first two and the last channel have slightly different topology and need their own correction factor&lt;br /&gt;
|-&lt;br /&gt;
|correction1&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
|1500&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|correction15&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
|1000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|numchan&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|16&lt;br /&gt;
|16&lt;br /&gt;
|Number of cells connected to the module, power cycle required following saving parameters to update.&lt;br /&gt;
|-&lt;br /&gt;
|balmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Balancing mode&lt;br /&gt;
0=No balancing&lt;br /&gt;
1=Only bump up low cells&lt;br /&gt;
2=Only dissipate high cells&lt;br /&gt;
3=Do both&lt;br /&gt;
&lt;br /&gt;
By default balancing starts 60s after power up or in fact 60s after idcavg settled below 1A. You will see opmode changing to RunBalance&lt;br /&gt;
|-&lt;br /&gt;
|ubalance&lt;br /&gt;
|mV&lt;br /&gt;
|0&lt;br /&gt;
|4500&lt;br /&gt;
|4500&lt;br /&gt;
|Voltage above which top balancing is started&lt;br /&gt;
|-&lt;br /&gt;
|idlewait&lt;br /&gt;
|s&lt;br /&gt;
|0&lt;br /&gt;
|100000&lt;br /&gt;
|60&lt;br /&gt;
|Number of seconds to wait after stop of current flow to measure unloaded cell voltage und start balancing&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Battery Characteristics&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|dischargemax&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2047&lt;br /&gt;
|200&lt;br /&gt;
|Maximum discharge current&lt;br /&gt;
|-&lt;br /&gt;
|nomcap&lt;br /&gt;
|Ah&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|100&lt;br /&gt;
|Nominal capacity&lt;br /&gt;
|-&lt;br /&gt;
|icc1&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|50&lt;br /&gt;
|Maximum charge current of empty battery&lt;br /&gt;
|-&lt;br /&gt;
|icc2&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|30&lt;br /&gt;
|Maximum charge current of roughly half-charged battery&lt;br /&gt;
|-&lt;br /&gt;
|icc3&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|20&lt;br /&gt;
|Maximum charge current of rather full battery&lt;br /&gt;
|-&lt;br /&gt;
|ucv1&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|3900&lt;br /&gt;
|First constant voltage set point. Transition to next one when dropping below icc2&lt;br /&gt;
|-&lt;br /&gt;
|ucv2&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|4000&lt;br /&gt;
|Second constant voltage set point. Transition to next one when dropping below icc3&lt;br /&gt;
|-&lt;br /&gt;
|ucellmax&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|4200&lt;br /&gt;
|Third constant voltage set point and maximum cell voltage&lt;br /&gt;
|-&lt;br /&gt;
|ucellmin&lt;br /&gt;
|mV&lt;br /&gt;
|1000&lt;br /&gt;
|4500&lt;br /&gt;
|3300&lt;br /&gt;
|Minimum loaded cell voltage. Discharge limit is dropped to stay above this value&lt;br /&gt;
|-&lt;br /&gt;
|chargeXsoc&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|Percentage of charge current at soc X. In between two points charge current is interpolated&lt;br /&gt;
|-&lt;br /&gt;
|sohpreset&lt;br /&gt;
|%&lt;br /&gt;
|10&lt;br /&gt;
|100&lt;br /&gt;
|100&lt;br /&gt;
|This is the starting value for the state of health (SoH) calculation. The value is continuously updated by the BMS as SoH is estimated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Sensor Setup&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|idcgain&lt;br /&gt;
|dig/A&lt;br /&gt;
| -1000&lt;br /&gt;
|1000&lt;br /&gt;
|10&lt;br /&gt;
|Gain (or actually division factor) of current sensor&lt;br /&gt;
|-&lt;br /&gt;
|idcofs&lt;br /&gt;
|dig&lt;br /&gt;
| -4095&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
|0A offset&lt;br /&gt;
|-&lt;br /&gt;
|idcmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Current sensor mode 0=Off, 1=Single Ended ADC, 2=Differential ADC, 3=ISA current shunt&lt;br /&gt;
|-&lt;br /&gt;
|tempsns&lt;br /&gt;
|&lt;br /&gt;
| 0&lt;br /&gt;
|3&lt;br /&gt;
| 0&lt;br /&gt;
|Temperature sensor 0=None, 1=Channel1, 2=Channel3, 3=Both (set tempsns 0 in dashboard if dropdown not availble and value set as -1)&lt;br /&gt;
|-&lt;br /&gt;
|tempres&lt;br /&gt;
|Ohm&lt;br /&gt;
|10&lt;br /&gt;
|500000&lt;br /&gt;
|10000&lt;br /&gt;
|Nominal sensor resistance at 25°C&lt;br /&gt;
|-&lt;br /&gt;
|tempbeta&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|100000&lt;br /&gt;
|3900&lt;br /&gt;
|beta factor of Steinhart equation (see data sheet)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Communication&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|pdobase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2047&lt;br /&gt;
|500&lt;br /&gt;
|base COB Id for cyclic messages. Main module uses pdobase and pdobase+1, 1st submodule uses pdobase+2 and so on&lt;br /&gt;
|-&lt;br /&gt;
|sdobase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|63&lt;br /&gt;
|10&lt;br /&gt;
|base node ID for SDO queries. Main module uses sdobase, 1st submodule sdobase+1 and so on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Spot values ===&lt;br /&gt;
All values that the BMS either measures or calculates are called spot values. While all modules show all spot values, some only make sense on the main module. The column &amp;quot;scope&amp;quot; denotes that. &amp;quot;M&amp;quot; means the value is only relevant on the main module, &amp;quot;S&amp;quot; means it&#039;s relevant on main and sub modules.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Scope&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Firmware version&lt;br /&gt;
|-&lt;br /&gt;
|opmode&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|State of operation&lt;br /&gt;
&lt;br /&gt;
* BOOT - System starting&lt;br /&gt;
* GETADDR - Waiting for address assignment&lt;br /&gt;
* SETADDR - Setting address of next node&lt;br /&gt;
* REQINFO - Requesting info from sub modules&lt;br /&gt;
* RECVINFO - Receiving info&lt;br /&gt;
* INIT - Initialize BMS hardware&lt;br /&gt;
* SELFTEST - Running hardware self tests&lt;br /&gt;
* RUN - normal operation when current flows through battery&lt;br /&gt;
* IDLE - battery is idle, i.e. no current through it for a given time&lt;br /&gt;
* ERROR - selftests detected a critical error, operation halted&lt;br /&gt;
|-&lt;br /&gt;
|lasterr&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Last detected error, see Errors&lt;br /&gt;
|-&lt;br /&gt;
|errchan&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Cell tap channel causing the error, if applicable&lt;br /&gt;
|-&lt;br /&gt;
|modaddr&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Address of module&lt;br /&gt;
|-&lt;br /&gt;
|modnum&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Total number of modules&lt;br /&gt;
|-&lt;br /&gt;
|totalcells&lt;br /&gt;
|&lt;br /&gt;
|M&lt;br /&gt;
|Total number of cells&lt;br /&gt;
|-&lt;br /&gt;
|counter&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|Revolving counter 0-15 100 ms clock rate&lt;br /&gt;
|-&lt;br /&gt;
|uptime&lt;br /&gt;
|s&lt;br /&gt;
|S&lt;br /&gt;
|Time in s since power was applied to 12V pin&lt;br /&gt;
|-&lt;br /&gt;
|chargein&lt;br /&gt;
|As&lt;br /&gt;
|M&lt;br /&gt;
|Charge into the battery &lt;br /&gt;
|-&lt;br /&gt;
|chargeout&lt;br /&gt;
|As&lt;br /&gt;
|M&lt;br /&gt;
|Charge from the battery to load&lt;br /&gt;
|-&lt;br /&gt;
|soc&lt;br /&gt;
|%&lt;br /&gt;
|M&lt;br /&gt;
|State of charge, i.e. available charge in percent of fully charged battery&lt;br /&gt;
|-&lt;br /&gt;
|soh&lt;br /&gt;
|%&lt;br /&gt;
|M&lt;br /&gt;
|State of health, i.e. available total charge in percent of data sheet value when new&lt;br /&gt;
|-&lt;br /&gt;
|chargelim&lt;br /&gt;
|A&lt;br /&gt;
|M&lt;br /&gt;
|Current limit for charging the battery, see [[16-cell BMS#Charge Curve|Charge Curve]]&lt;br /&gt;
|-&lt;br /&gt;
|dischargelim&lt;br /&gt;
|A&lt;br /&gt;
|M&lt;br /&gt;
|Current limit for discharging, see [[16-cell BMS#Calculating current limits|Calculating current limits]]&lt;br /&gt;
|-&lt;br /&gt;
|idc&lt;br /&gt;
|A&lt;br /&gt;
|M&lt;br /&gt;
|Present current through battery, negative for current out of the battery, positive for current into the battery&lt;br /&gt;
|-&lt;br /&gt;
|idcavg&lt;br /&gt;
|A&lt;br /&gt;
|M&lt;br /&gt;
|Average current of the last second&lt;br /&gt;
|-&lt;br /&gt;
|power&lt;br /&gt;
|W&lt;br /&gt;
|M&lt;br /&gt;
|Average battery power of the last second&lt;br /&gt;
|-&lt;br /&gt;
|tempmin&lt;br /&gt;
|°C&lt;br /&gt;
|M&lt;br /&gt;
|Minimum temperature of all modules&lt;br /&gt;
|-&lt;br /&gt;
|tempmax&lt;br /&gt;
|°C&lt;br /&gt;
|M&lt;br /&gt;
|Maximum temperature of all modules&lt;br /&gt;
|-&lt;br /&gt;
|uavg&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|average cell voltage over entire pack&lt;br /&gt;
|-&lt;br /&gt;
|umin&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|Minimum cell voltage of entire pack&lt;br /&gt;
|-&lt;br /&gt;
|umax&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|Maximum cell voltage of entire pack&lt;br /&gt;
|-&lt;br /&gt;
|udelta&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|Difference between minimum and maximum cell voltage of entire pack&lt;br /&gt;
|-&lt;br /&gt;
|utotal&lt;br /&gt;
|mV&lt;br /&gt;
|M&lt;br /&gt;
|Sum of all cell voltages, i.e. pack voltage&lt;br /&gt;
|-&lt;br /&gt;
|uX&lt;br /&gt;
|mV&lt;br /&gt;
|S&lt;br /&gt;
|Present voltage of cell X of current module, see also [[16-cell BMS#Reading individual cell voltages|Reading individual cell voltages]]&lt;br /&gt;
|-&lt;br /&gt;
|uavgX, uminX, umaxX, tempminX, tempmaxX&lt;br /&gt;
|mV, °C&lt;br /&gt;
|M&lt;br /&gt;
|Average/Minimum/Maximum cell voltage and temperature of sub module X&lt;br /&gt;
|-&lt;br /&gt;
|uXcmd&lt;br /&gt;
|&lt;br /&gt;
|S&lt;br /&gt;
|State of balancer&lt;br /&gt;
|-&lt;br /&gt;
|cpuload&lt;br /&gt;
|%&lt;br /&gt;
|S&lt;br /&gt;
|Time the CPU spends actually doing something&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Operation ==&lt;br /&gt;
&lt;br /&gt;
=== State of Charge calculation ===&lt;br /&gt;
The State of Charge (SoC) lets you know how many percent of charge you battery still holds, in percent of a fully charged battery.&lt;br /&gt;
&lt;br /&gt;
Determining SoC is split into two methods: determining the SoC from cell voltage and then tracking it as current flows in or out of the pack.&lt;br /&gt;
&lt;br /&gt;
To estimate the SoC a 10-point lookup table is implemented that maps from cell voltage to SoC. The accuracy of this table is directly related to the accuracy of the estimation. You can edit the lookup table by changing the &#039;&#039;&#039;chargeXsoc&#039;&#039;&#039; parameters. The voltages you enter are open circuit voltages. These can only be obtained when there was no current flow through the battery for a certain amount of time, typically 10-30 minutes. This time is configured via the &#039;&#039;&#039;idlewait&#039;&#039;&#039; parameter.&lt;br /&gt;
&lt;br /&gt;
So whenever the BMS has the chance to estimate the SoC it will do so. You can adjust &#039;&#039;&#039;idlewait&#039;&#039;&#039; to a low value to start estimating quickly. It means the first estimates will be off but it will become more accurate if the pack remains unloaded for longer time.&lt;br /&gt;
&lt;br /&gt;
The subsequent tracking of SoC requires the BMS to know the current through the battery. Right now it supports analog current sensors (e.g. hall effect) with an operating voltage of 5V. Within this class it supports differential and single ended sensors, configurable via &#039;&#039;&#039;idcmode&#039;&#039;&#039;. The parameters &#039;&#039;&#039;idcofs&#039;&#039;&#039; and &#039;&#039;&#039;idcgain&#039;&#039;&#039; are used for calibration. When no current is flowing adjust &#039;&#039;&#039;idcofs&#039;&#039;&#039; until &#039;&#039;&#039;idcavg&#039;&#039;&#039; shows 0A. Then put a known current through the sensor and adjust &#039;&#039;&#039;idcgain&#039;&#039;&#039; until &#039;&#039;&#039;idcavg&#039;&#039;&#039; shows the correct current.&lt;br /&gt;
&lt;br /&gt;
Lastly the BMS needs to know the energy or charge content of your battery in Ah. This is configured with the &#039;&#039;&#039;nomcap&#039;&#039;&#039; parameter and can be found in the data sheet.&lt;br /&gt;
&lt;br /&gt;
=== State of Health calculation ===&lt;br /&gt;
The State of Health (SoH) lets you know how the remaining fully charged capacity, in percent of the data sheet value, i.e. when the battery was new. Batteries slowly degrade over time and usage cycles.&lt;br /&gt;
&lt;br /&gt;
Whenever we do a SoC estimation as described above, we also update the SoH. If the estimated SoC has changed by more than 20% we compare the energy that we have taken out of the battery to the difference in SoC. If the two match, the SoH is 100%. If we have taken more energy from the battery then the difference in SoC suggests, SoH is above 100% (and you likely configured a wrong &#039;&#039;&#039;nomcap&#039;&#039;&#039;). Otherwise SoH is &amp;lt; 100%.&lt;br /&gt;
&lt;br /&gt;
As this method comes with certain inaccuracies we only change the long term SoH slowly, i.e. every estimate is slowly averaged onto the long term SoH. This should balance out inaccuracies.&lt;br /&gt;
&lt;br /&gt;
The spot value &#039;&#039;&#039;soh&#039;&#039;&#039; shows the current long term SoH. The value is also reflected onto &#039;&#039;&#039;sohpreset&#039;&#039;&#039;, a saveable parameter. Whenever you need to interrupt the BMSes power supply you should go should save parameters so that next time it starts up with the correct long term SoH.&lt;br /&gt;
&lt;br /&gt;
=== Calculating current limits ===&lt;br /&gt;
Limiting charge and discharge current are the only means of this BMS to protect the battery. It has no means to turn off the current flow by itself but instead relies on the connected components to obey the calculated current limits that are sent out via CAN. The current limits are calculated in a number of steps.&lt;br /&gt;
&lt;br /&gt;
==== Charge Curve ====&lt;br /&gt;
The initial approach was to assign a certain charge current to points in the SoC curve. This method can be skewed if the SoC calculation is off for some reason. The new method deploys 3 CC/CV regulators. This was copied from oberving VWs charge curve of the MEB cars. The first regulator has the highest charge current and aims for a voltage typically around 3.9V for many NMC chemistries. When current drops below the CC value of the second regulator then that one is used, aiming for a higher voltage of typically 4V. And finally the 3rd regulator takes over aiming for the charge end voltage of typically 4.2V. When setting all 3 to the same values a simple CC/CV curve is generated.&lt;br /&gt;
&lt;br /&gt;
==== Voltage limits ====&lt;br /&gt;
Voltage limits are enforced via a P-regulator. I.e. as we approach the upper or lower voltage limit current is cut back to stay away from the limits until it reaches 0A. The upper and lower limit is configurable&lt;br /&gt;
&lt;br /&gt;
==== Temperature limits ====&lt;br /&gt;
High temperature will cut back both charge and discharge current whereas low temperature will only cut back charge current. These limits only work when you&#039;ve set up your temperature sensors correctly. Please check the readings against a reference before relying on it.&lt;br /&gt;
&lt;br /&gt;
Charge current has a proportional, multi-step temperature derating, i.e. the charge curve defined by iccX and ucvX is scaled with a derating factor the lower the temperature or when the maximum temperature is approached&lt;br /&gt;
&lt;br /&gt;
* Below &#039;&#039;&#039;-20°C&#039;&#039;&#039; no charging is possible&lt;br /&gt;
* Between &#039;&#039;&#039;-20°C and 0°C&#039;&#039;&#039; charging with 0-30% of the charge curve is allowed&lt;br /&gt;
* Between &#039;&#039;&#039;0°C and 25°C&#039;&#039;&#039; charging with 30% to 100% of the charge curve is allowed&lt;br /&gt;
* Between &#039;&#039;&#039;43°C and 50°C&#039;&#039;&#039; charging with 100% to 0% of the charge curve is allowed, i.e. &#039;&#039;&#039;above 50°C&#039;&#039;&#039; charging is no longer allowed.&lt;br /&gt;
&lt;br /&gt;
Discharging is not limited at low temperatures as high discharge currents at low temperatures are not known to cause damage. As the battery heats up discharge current is limited, starting at &#039;&#039;&#039;46°C&#039;&#039;&#039; until discharging is no longer allowed when reaching &#039;&#039;&#039;53°C&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Energy limits ====&lt;br /&gt;
Not enforced yet. Some OEM BMSes cut back charge current after a certain amount of energy has been put into the battery. E.g. When starting charge at 50% charge rate will end up higher at 70% than if we start charging at 10%.&lt;br /&gt;
&lt;br /&gt;
== Calibration ==&lt;br /&gt;
As every instrument the voltage measurement needs to be calibrated to cancel out tolerances in the involved components. There are 4 parameters for calibration.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gain:&#039;&#039;&#039; The translation ration between the ADC digits and mV. This applies to all channels&lt;br /&gt;
* &#039;&#039;&#039;correction0, 1 and 15&#039;&#039;&#039;: This allows special tuning of said 3 channels because they use a slightly different current path and thus need a small gain correction&lt;br /&gt;
&lt;br /&gt;
=== Calibration procedure ===&lt;br /&gt;
First we determine the general gain. Pick any of the voltages between u2 and u14 which share a common gain factor. Use a good multimeter to measure the physical voltage of your reference channel. Now tune the &#039;&#039;&#039;gain&#039;&#039;&#039; parameter until your multimeter and the BMS voltage read the same value +-0.5mV. Now all channels from 2-14 should read correctly.&lt;br /&gt;
&lt;br /&gt;
Then for channels 0, 1 and 15 also measure the physical voltage input and tune the respective &#039;&#039;&#039;correctionX&#039;&#039;&#039; parameter until multimeter and BMS report the same voltage. The correction factors can be negative if a channels reads too high.&lt;br /&gt;
&lt;br /&gt;
Save your parameters to flash to make the calibration permanent.&lt;br /&gt;
&lt;br /&gt;
== Flashing firmware ==&lt;br /&gt;
If you have sourced the BMS boards from an alternative source then you will need to flash the bootloader and firmware onto the BMS. This is a relatively straightforward process once understood but took me a while to get it to work.&lt;br /&gt;
&lt;br /&gt;
Firstly you will need an STLink dongle, I used this one &amp;lt;ref&amp;gt;https://www.amazon.co.uk/dp/B07QBLNDPM?psc=1&amp;lt;/ref&amp;gt; but I believe any will do.&lt;br /&gt;
&lt;br /&gt;
I used STM32CubeProgrammer &amp;lt;ref&amp;gt;https://www.st.com/en/development-tools/stm32cubeprog.html&amp;lt;/ref&amp;gt; on Linux to flash my board and also (prior to flashing) upgrade the STLinkdongle to the latest firmware (might not be necessary but felt it was wise to do so).&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve got STM32Cubeprogrammer installed you&#039;re probably best erasing the STM32 Chip to ensure you&#039;re starting from a clean board. Navigate to the &amp;quot;Erasing &amp;amp; Programming&amp;quot; tab on the left and connect to your STlink dongle (if you havent already). Once connected, (you can also update the firmware on the dongle at this point on the &amp;quot;Memory &amp;amp; File Editing&amp;quot; tab), connect the dongle to the BMS board via the VDCG pins... &lt;br /&gt;
&lt;br /&gt;
(V = Voltage 3.3V, D = SWDIO, C = SWCLK, G = Gnd)&lt;br /&gt;
&lt;br /&gt;
and perform a &amp;quot;full chip erase&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Once thats complete head over to Github to download the Bootloader &amp;lt;ref&amp;gt;https://github.com/jsphuebner/stm32-CANBootloader/releases&amp;lt;/ref&amp;gt; and download the hex file (you may need to be logged in to download the files).&lt;br /&gt;
&lt;br /&gt;
Once downloaded, in STM32CubeProgrammer, navigate to the &amp;quot;Memory &amp;amp; File Editing&amp;quot; tab and open the hex file you just downloaded, once opened you can use the &amp;quot;Download&amp;quot; button to flash the bootloader to your BMS board.&lt;br /&gt;
&lt;br /&gt;
You can now repeat the above process of opening the hex file and &amp;quot;downloading&amp;quot; to the BMS board for the main BMS firmware which is available from the BMS Github repository &amp;lt;ref&amp;gt;https://github.com/jsphuebner/FlyingAdcBms/actions&amp;lt;/ref&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Once all that is done, you can move onto the Web interface. You&#039;ll need the &amp;quot;Can Backend&amp;quot; version of the ESP32 Web Interface available here &amp;lt;ref&amp;gt;https://github.com/jsphuebner/esp32-web-interface/tree/can-backend&amp;lt;/ref&amp;gt; (click the green code button and download zip)&lt;br /&gt;
&lt;br /&gt;
Once downloaded download Arduino IDE 1.8.19 (you&#039;ll need this version, nothing beyond version 2 as this does not support SPIFFS flashing as far as I&#039;m aware) and set it up for flashing to ESP32 boards &amp;lt;ref&amp;gt;https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html&amp;lt;/ref&amp;gt; and also flashing ESP32 Spiffs &amp;lt;ref&amp;gt;https://randomnerdtutorials.com/install-esp32-filesystem-uploader-arduino-ide/&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
To setup the Web interface Arduino sketch, you&#039;ll want to unzip and (IMPORTANT) RENAME the folder to &amp;quot;esp32-web-interface&amp;quot; to match the ino file within the folder, if you don&#039;t do this you&#039;ll have problems further down the line. Once unzipped and renamed, open the esp32-web-interface.ino sketch file and upload it to your ESP32 dev board. when this completed you&#039;ll also need to upload the SPIFFS image, you can do this by going to Tools and &amp;quot;ESP32 Sketch Data Upload&amp;quot; and choosing SPIFFS. once this is complete, you can connect your ESP32 to your BMS board via CAN and power them and they shuld work (note you&#039;ll need the 12V enable in line connected also).&lt;br /&gt;
&lt;br /&gt;
Once on the Web interface, select Node ID 10 and a speed of 500kbps and you&#039;ll have all your wonderful BMS spot values and params ready to go.&lt;br /&gt;
&lt;br /&gt;
== Operating Limits==&lt;br /&gt;
&lt;br /&gt;
* Max voltage for the board is 70v&lt;br /&gt;
* Max number of cells is 16&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=16-cell_BMS&amp;diff=5592</id>
		<title>16-cell BMS</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=16-cell_BMS&amp;diff=5592"/>
		<updated>2025-02-02T15:22:20Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added spot values and SoC calculation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:BMS]]&lt;br /&gt;
[[Category:Battery]]&lt;br /&gt;
[[File:16-cell BMS.jpg|thumb|16-cell BMS]]&lt;br /&gt;
The goal of this BMS is to use mostly decade old components to create a 16 channel cell voltage meter. It uses a very accurate sigma/delta ADC for superb resolution. It can drain about 100mA from a cell or charge it with 50 mA via the DC/DC converter. The ability to both charge and discharge cells speeds up balancing despite the low balancing current.&lt;br /&gt;
&lt;br /&gt;
When turned off it drains no current from the connected cells at all.&lt;br /&gt;
&lt;br /&gt;
On the low voltage side it features two inputs for temperature sensors and one input for a 5V current sensor, differential or single ended.&lt;br /&gt;
&lt;br /&gt;
It can be cascaded to be used with more than 16 cells and has an automatic addressing scheme to forgo the use of jumpers or DIP switches. All communication is done via CAN. Supply voltage is 12V with about 20 mA draw when not balancing.&lt;br /&gt;
&lt;br /&gt;
The software is not yet finished, see forum for progress &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=2338&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The boards can be bought in the [https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=74 shop].&lt;br /&gt;
&lt;br /&gt;
== Pinout ==&lt;br /&gt;
The pinout is also written to the bottom silkscreen.&lt;br /&gt;
&lt;br /&gt;
On the left side you see 17 inputs. The first one is connected to the negative pole (GND) of your (sub)pack, the subsequent ones to the positive poles of up to 16 cells. At least the lower two cell inputs must be connected. When cascading modules the positive-most input of module n is also the GND of module n+1, so must be spliced to connect to both.&lt;br /&gt;
&lt;br /&gt;
On the top right is the vehicle interfacing or low voltage connector. From top to bottom it is low voltage GND, 12V, enable_in, enable_out, CANH, CANL. GND, 12V, CANH, CANL are connected to all modules in parallel whereas enable_out is chained to enable_in of the next module. The first enable_in must be connected to 12V whenever the BMS should become active, e.g. when charging or driving. The module with 12V on the enable_in auto-detects as &amp;quot;main&amp;quot; module, collects data from the subsequent modules and sends more high level CAN messages&lt;br /&gt;
&lt;br /&gt;
On the bottom right is the temperature sensor and current sensor input. Top to bottom it is tsensor1+, tsensor1- (not silkscreened), tsensor2+ , tsensor2-(not silkscreened), 5V, CUR+, CUR-, GND. A single ended current sensor is just connected to CUR+.&lt;br /&gt;
&lt;br /&gt;
Right now the current sensor is only supported on the main module.&lt;br /&gt;
&lt;br /&gt;
=== Connector part numbers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Header&lt;br /&gt;
!Counterpart&lt;br /&gt;
!Pins&lt;br /&gt;
|-&lt;br /&gt;
|LV connector (supply, CAN, enable)&lt;br /&gt;
|Phoenix Contact&lt;br /&gt;
|1803468&lt;br /&gt;
|1803617&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Temperature and current sensors&lt;br /&gt;
|Molex&lt;br /&gt;
|640454-8&lt;br /&gt;
|1375820-8&lt;br /&gt;
|1445336-1&lt;br /&gt;
|-&lt;br /&gt;
|Cell taps&lt;br /&gt;
|Molex&lt;br /&gt;
|1-640456-7&lt;br /&gt;
|1-1375820-7&lt;br /&gt;
|1445336-1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
All configuration, queries and firmware updates are done via the CAN bus. There is no independent web interface like known from e.g. the inverter. However there is a solution to connect an ESP32 via CAN and then have the known web interface &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?p=56913#p56913&amp;lt;/ref&amp;gt; or you can use Dave Fiddes &amp;quot;oic&amp;quot; tool for the command line&amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=2907&amp;lt;/ref&amp;gt;. It is important to know that the main module has node-id 10 and the subsequent ones 10+i (i index of submodule, so 1st submodule has node-id 11). The base node id can be configured to start at something else than 10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;All info given here is preliminary and will likely change!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Apart from that the modules output periodic CAN messages depending on their role. The base address for cyclic messages defaults to 0x1F4 and can be changed by modifying pdobase on the main module. pdobase is ignored on the sub modules.&lt;br /&gt;
&lt;br /&gt;
All modules output on ID 501 (0x1F5) + i&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!start&lt;br /&gt;
!length&lt;br /&gt;
!item&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|13&lt;br /&gt;
|umin&lt;br /&gt;
|minimum cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|13&lt;br /&gt;
|umax&lt;br /&gt;
|maximum cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|2&lt;br /&gt;
|counter&lt;br /&gt;
|counts from 0-3 (anti-freeze)&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|13&lt;br /&gt;
|uavg&lt;br /&gt;
|average cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|48&lt;br /&gt;
|8&lt;br /&gt;
|tempmin&lt;br /&gt;
|Minimum temp +40 on module i&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|8&lt;br /&gt;
|tempmax&lt;br /&gt;
|Maximum temp +40 on module i&lt;br /&gt;
|}&lt;br /&gt;
The main module does not output its local accumulated values but accumulated values over all modules.&lt;br /&gt;
&lt;br /&gt;
In addition the main module outputs on id 500 (0x1F4)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!start&lt;br /&gt;
!length&lt;br /&gt;
!item&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|11&lt;br /&gt;
|chargelim&lt;br /&gt;
|maximum charge current in A&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|11&lt;br /&gt;
|dischargelim&lt;br /&gt;
|maximum discharge current in A&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|10&lt;br /&gt;
|soc&lt;br /&gt;
|Pack soc in 0.1%&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|16&lt;br /&gt;
|idcavg&lt;br /&gt;
|Averaged current reading of last 1s in 0.1A - signed!&lt;br /&gt;
|-&lt;br /&gt;
|48&lt;br /&gt;
|10&lt;br /&gt;
|utotal&lt;br /&gt;
|Total pack voltage in V&lt;br /&gt;
|-&lt;br /&gt;
|62&lt;br /&gt;
|2&lt;br /&gt;
|counter&lt;br /&gt;
|counts from 0-3 (anti-freeze)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reading individual cell voltages ===&lt;br /&gt;
Cell voltages are only available via CAN SDO from the module that measures them. So voltages 1-16 must be queried from the first (main) module, 17-32 from the 2nd (1st submodule) and so on. With Dave Fiddes tool this translates to:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
oic -n 10 dumpall #dumps all values including cell voltages from 1st module&lt;br /&gt;
oic -n 11 dumpall #same for second module&lt;br /&gt;
oic -n 11 read u0 #Read first cell voltage of second module&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For querying voltages say in your arduino sketch you&#039;ll need to acquire every voltage separately by sending and receiving SDO messages&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x60A#0x40 idhigh 0x21 idlow 0 0 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
idhigh and low are the bytes of the internal ID. The id of the first cell voltage is 2006 (0x7D6) so for querying the 1st cell voltage of the first module you send&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x60A#0x40 0x07 0x21 0xD6 0 0 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And you will receive the reply&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x58A#0x43 0x07 0x21 0xD6 0xD0 0xED 0x01 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x0001EDD0 is the voltage value which decodes to mV x 32. So 0x1EDD0/32 = 3950.5 mV.&lt;br /&gt;
&lt;br /&gt;
The next cell would be on 0x7D7 and the last on 0x7E5. The next 16 voltages are then queried from node id 0x60B.&lt;br /&gt;
&lt;br /&gt;
=== Configuration Parameters ===&lt;br /&gt;
There is currently a limited set of parameters which will be extended as the software grows. This table always reflects the latest git commit. Check the page history for previous versions.&lt;br /&gt;
&lt;br /&gt;
These are the parameters of v0.20.B&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Min&lt;br /&gt;
!Max&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;BMS&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|gain&lt;br /&gt;
|uV/dig&lt;br /&gt;
|1&lt;br /&gt;
|1000&lt;br /&gt;
|586&lt;br /&gt;
|Scaling factor from ADC digits to mV&lt;br /&gt;
|-&lt;br /&gt;
|correction0&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
| -1250&lt;br /&gt;
|The first two and the last channel have slightly different topology and need their own correction factor&lt;br /&gt;
|-&lt;br /&gt;
|correction1&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
|1500&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|correction15&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
|1000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|numchan&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|16&lt;br /&gt;
|16&lt;br /&gt;
|Number of cells connected to the module, power cycle required following saving parameters to update.&lt;br /&gt;
|-&lt;br /&gt;
|balmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Balancing mode&lt;br /&gt;
0=No balancing&lt;br /&gt;
1=Only bump up low cells&lt;br /&gt;
2=Only dissipate high cells&lt;br /&gt;
3=Do both&lt;br /&gt;
&lt;br /&gt;
By default balancing starts 60s after power up or in fact 60s after idcavg settled below 1A. You will see opmode changing to RunBalance&lt;br /&gt;
|-&lt;br /&gt;
|ubalance&lt;br /&gt;
|mV&lt;br /&gt;
|0&lt;br /&gt;
|4500&lt;br /&gt;
|4500&lt;br /&gt;
|Voltage above which top balancing is started&lt;br /&gt;
|-&lt;br /&gt;
|idlewait&lt;br /&gt;
|s&lt;br /&gt;
|0&lt;br /&gt;
|100000&lt;br /&gt;
|60&lt;br /&gt;
|Number of seconds to wait after stop of current flow to measure unloaded cell voltage und start balancing&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Battery Characteristics&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|dischargemax&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2047&lt;br /&gt;
|200&lt;br /&gt;
|Maximum discharge current&lt;br /&gt;
|-&lt;br /&gt;
|nomcap&lt;br /&gt;
|Ah&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|100&lt;br /&gt;
|Nominal capacity&lt;br /&gt;
|-&lt;br /&gt;
|icc1&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|50&lt;br /&gt;
|Maximum charge current of empty battery&lt;br /&gt;
|-&lt;br /&gt;
|icc2&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|30&lt;br /&gt;
|Maximum charge current of roughly half-charged battery&lt;br /&gt;
|-&lt;br /&gt;
|icc3&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|20&lt;br /&gt;
|Maximum charge current of rather full battery&lt;br /&gt;
|-&lt;br /&gt;
|ucv1&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|3900&lt;br /&gt;
|First constant voltage set point. Transition to next one when dropping below icc2&lt;br /&gt;
|-&lt;br /&gt;
|ucv2&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|4000&lt;br /&gt;
|Second constant voltage set point. Transition to next one when dropping below icc3&lt;br /&gt;
|-&lt;br /&gt;
|ucellmax&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|4200&lt;br /&gt;
|Third constant voltage set point and maximum cell voltage&lt;br /&gt;
|-&lt;br /&gt;
|ucellmin&lt;br /&gt;
|mV&lt;br /&gt;
|1000&lt;br /&gt;
|4500&lt;br /&gt;
|3300&lt;br /&gt;
|Minimum loaded cell voltage. Discharge limit is dropped to stay above this value&lt;br /&gt;
|-&lt;br /&gt;
|chargeXsoc&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|Percentage of charge current at soc X. In between two points charge current is interpolated&lt;br /&gt;
|-&lt;br /&gt;
|sohpreset&lt;br /&gt;
|%&lt;br /&gt;
|10&lt;br /&gt;
|100&lt;br /&gt;
|100&lt;br /&gt;
|This is the starting value for the state of health (SoH) calculation. The value is continuously updated by the BMS as SoH is estimated.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Sensor Setup&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|idcgain&lt;br /&gt;
|dig/A&lt;br /&gt;
| -1000&lt;br /&gt;
|1000&lt;br /&gt;
|10&lt;br /&gt;
|Gain (or actually division factor) of current sensor&lt;br /&gt;
|-&lt;br /&gt;
|idcofs&lt;br /&gt;
|dig&lt;br /&gt;
| -4095&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
|0A offset&lt;br /&gt;
|-&lt;br /&gt;
|idcmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Current sensor mode 0=Off, 1=Single Ended ADC, 2=Differential ADC, 3=ISA current shunt&lt;br /&gt;
|-&lt;br /&gt;
|tempsns&lt;br /&gt;
|&lt;br /&gt;
| 0&lt;br /&gt;
|3&lt;br /&gt;
| 0&lt;br /&gt;
|Temperature sensor 0=None, 1=Channel1, 2=Channel3, 3=Both (set tempsns 0 in dashboard if dropdown not availble and value set as -1)&lt;br /&gt;
|-&lt;br /&gt;
|tempres&lt;br /&gt;
|Ohm&lt;br /&gt;
|10&lt;br /&gt;
|500000&lt;br /&gt;
|10000&lt;br /&gt;
|Nominal sensor resistance at 25°C&lt;br /&gt;
|-&lt;br /&gt;
|tempbeta&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|100000&lt;br /&gt;
|3900&lt;br /&gt;
|beta factor of Steinhart equation (see data sheet)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Communication&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|pdobase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2047&lt;br /&gt;
|500&lt;br /&gt;
|base COB Id for cyclic messages. Main module uses pdobase and pdobase+1, 1st submodule uses pdobase+2 and so on&lt;br /&gt;
|-&lt;br /&gt;
|sdobase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|63&lt;br /&gt;
|10&lt;br /&gt;
|base node ID for SDO queries. Main module uses sdobase, 1st submodule sdobase+1 and so on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Spot values ===&lt;br /&gt;
All values that the BMS either measures or calculates are called spot values.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|&lt;br /&gt;
|Firmware version&lt;br /&gt;
|-&lt;br /&gt;
|opmode&lt;br /&gt;
|&lt;br /&gt;
|State of operation&lt;br /&gt;
&lt;br /&gt;
* BOOT - System starting&lt;br /&gt;
* GETADDR - Waiting for address assignment&lt;br /&gt;
* SETADDR - Setting address of next node&lt;br /&gt;
* REQINFO - Requesting info from sub modules&lt;br /&gt;
* RECVINFO - Receiving info&lt;br /&gt;
* INIT - Initialize BMS hardware&lt;br /&gt;
* SELFTEST - Running hardware self tests&lt;br /&gt;
* RUN - normal operation when current flows through battery&lt;br /&gt;
* IDLE - battery is idle, i.e. no current through it for a given time&lt;br /&gt;
* ERROR - selftests detected a critical error, operation halted&lt;br /&gt;
|-&lt;br /&gt;
|lasterr&lt;br /&gt;
|&lt;br /&gt;
|Last detected error, see Errors&lt;br /&gt;
|-&lt;br /&gt;
|errchan&lt;br /&gt;
|&lt;br /&gt;
|Cell tap channel causing the error, if applicable&lt;br /&gt;
|-&lt;br /&gt;
|modaddr&lt;br /&gt;
|&lt;br /&gt;
|Address of module&lt;br /&gt;
|-&lt;br /&gt;
|modnum&lt;br /&gt;
|&lt;br /&gt;
|Total number of modules&lt;br /&gt;
|-&lt;br /&gt;
|totalcells&lt;br /&gt;
|&lt;br /&gt;
|Total number if cells&lt;br /&gt;
|-&lt;br /&gt;
|counter&lt;br /&gt;
|&lt;br /&gt;
|Revolving counter 0-15 100 ms clock rate&lt;br /&gt;
|-&lt;br /&gt;
|uptime&lt;br /&gt;
|s&lt;br /&gt;
|Time in s since power was applied to 12V pin&lt;br /&gt;
|-&lt;br /&gt;
|chargein&lt;br /&gt;
|As&lt;br /&gt;
|Charge into the battery &lt;br /&gt;
|-&lt;br /&gt;
|chargeout&lt;br /&gt;
|As&lt;br /&gt;
|Charge from the battery to load&lt;br /&gt;
|-&lt;br /&gt;
|soc&lt;br /&gt;
|%&lt;br /&gt;
|State of charge, i.e. available charge in percent of fully charged battery&lt;br /&gt;
|-&lt;br /&gt;
|soh&lt;br /&gt;
|%&lt;br /&gt;
|State of health, i.e. available total charge in percent of data sheet value when new&lt;br /&gt;
|-&lt;br /&gt;
|chargelim&lt;br /&gt;
|A&lt;br /&gt;
|Current limit for charging the battery, see [[16-cell BMS#Charge Curve|Charge Curve]]&lt;br /&gt;
|-&lt;br /&gt;
|dischargelim&lt;br /&gt;
|A&lt;br /&gt;
|Current limit for discharging, see [[16-cell BMS#Calculating current limits|Calculating current limits]]&lt;br /&gt;
|-&lt;br /&gt;
|idc&lt;br /&gt;
|A&lt;br /&gt;
|Present current through battery, negative for current out of the battery, positive for current into the battery&lt;br /&gt;
|-&lt;br /&gt;
|idcavg&lt;br /&gt;
|A&lt;br /&gt;
|Average current of the last second&lt;br /&gt;
|-&lt;br /&gt;
|power&lt;br /&gt;
|W&lt;br /&gt;
|Average battery power of the last second&lt;br /&gt;
|-&lt;br /&gt;
|tempmin&lt;br /&gt;
|°C&lt;br /&gt;
|Minimum temperature of all modules&lt;br /&gt;
|-&lt;br /&gt;
|tempmax&lt;br /&gt;
|°C&lt;br /&gt;
|Maximum temperature of all modules&lt;br /&gt;
|-&lt;br /&gt;
|uavg&lt;br /&gt;
|mV&lt;br /&gt;
|average cell voltage over entire pack&lt;br /&gt;
|-&lt;br /&gt;
|umin&lt;br /&gt;
|mV&lt;br /&gt;
|Minimum cell voltage of entire pack&lt;br /&gt;
|-&lt;br /&gt;
|umax&lt;br /&gt;
|mV&lt;br /&gt;
|Maximum cell voltage of entire pack&lt;br /&gt;
|-&lt;br /&gt;
|udelta&lt;br /&gt;
|mV&lt;br /&gt;
|Difference between minimum and maximum cell voltage of entire pack&lt;br /&gt;
|-&lt;br /&gt;
|utotal&lt;br /&gt;
|mV&lt;br /&gt;
|Sum of all cell voltages, i.e. pack voltage&lt;br /&gt;
|-&lt;br /&gt;
|uX&lt;br /&gt;
|mV&lt;br /&gt;
|Present voltage of cell X of current module, see also [[16-cell BMS#Reading individual cell voltages|Reading individual cell voltages]]&lt;br /&gt;
|-&lt;br /&gt;
|uavgX, uminX, umaxX, tempminX, tempmaxX&lt;br /&gt;
|mV/°C&lt;br /&gt;
|Average/Minimum/Maximum cell voltage and temperature of sub module X&lt;br /&gt;
|-&lt;br /&gt;
|uXcmd&lt;br /&gt;
|&lt;br /&gt;
|State of balancer&lt;br /&gt;
|-&lt;br /&gt;
|cpuload&lt;br /&gt;
|%&lt;br /&gt;
|Time the CPU spends with actually doing something&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Operation ==&lt;br /&gt;
&lt;br /&gt;
=== State of Charge calculation ===&lt;br /&gt;
Determining state of charge (SoC) is split into two methods: determining the SoC from cell voltage and then tracking it as current flows in or out of the pack.&lt;br /&gt;
&lt;br /&gt;
To estimate the SoC a 10-point lookup table is implemented that maps from cell voltage to SoC. The accuracy of this table is directly related to the accuracy of the estimation. You can edit the lookup table by changing the &#039;&#039;&#039;chargeXsoc&#039;&#039;&#039; parameters. The voltages you enter are open circuit voltages. These can only be obtained when there was no current flow through the battery for a certain amount of time, typically 10-30 minutes. This time is configured via the &#039;&#039;&#039;idlewait&#039;&#039;&#039; parameter.&lt;br /&gt;
&lt;br /&gt;
So whenever the BMS has the chance to estimate the SoC it will do so. You can adjust &#039;&#039;&#039;idlewait&#039;&#039;&#039; to a low value to start estimating quickly. It means the first estimates will be off but it will become more accurate if the pack remains unloaded for longer time.&lt;br /&gt;
&lt;br /&gt;
The subsequent tracking of SoC requires the BMS to know the current through the battery. Right now it supports analog current sensors (e.g. hall effect) with an operating voltage of 5V. Within this class it supports differential and single ended sensors, configurable via &#039;&#039;&#039;idcmode&#039;&#039;&#039;. The parameters &#039;&#039;&#039;idcofs&#039;&#039;&#039; and &#039;&#039;&#039;idcgain&#039;&#039;&#039; are used for calibration. When no current is flowing adjust &#039;&#039;&#039;idcofs&#039;&#039;&#039; until &#039;&#039;&#039;idcavg&#039;&#039;&#039; shows 0A. Then put a known current through the sensor and adjust &#039;&#039;&#039;idcgain&#039;&#039;&#039; until &#039;&#039;&#039;idcavg&#039;&#039;&#039; shows the correct current.&lt;br /&gt;
&lt;br /&gt;
Lastly the BMS needs to know the energy or charge content of your battery in Ah. This is configured with the &#039;&#039;&#039;nomcap&#039;&#039;&#039; parameter and can be found in the data sheet.&lt;br /&gt;
&lt;br /&gt;
=== Calculating current limits ===&lt;br /&gt;
Limiting charge and discharge current are the only means of this BMS to protect the battery. It has no means to turn off the current flow by itself but instead relies on the connected components to obey the calculated current limits that are sent out via CAN. The current limits are calculated in a number of steps.&lt;br /&gt;
&lt;br /&gt;
==== Charge Curve ====&lt;br /&gt;
The initial approach was to assign a certain charge current to points in the SoC curve. This method can be skewed if the SoC calculation is off for some reason. The new method deploys 3 CC/CV regulators. This was copied from oberving VWs charge curve of the MEB cars. The first regulator has the highest charge current and aims for a voltage typically around 3.9V for many NMC chemistries. When current drops below the CC value of the second regulator then that one is used, aiming for a higher voltage of typically 4V. And finally the 3rd regulator takes over aiming for the charge end voltage of typically 4.2V. When setting all 3 to the same values a simple CC/CV curve is generated.&lt;br /&gt;
&lt;br /&gt;
==== Voltage limits ====&lt;br /&gt;
Voltage limits are enforced via a P-regulator. I.e. as we approach the upper or lower voltage limit current is cut back to stay away from the limits until it reaches 0A. The upper and lower limit is configurable&lt;br /&gt;
&lt;br /&gt;
==== Temperature limits ====&lt;br /&gt;
High temperature will cut back both charge and discharge current whereas low temperature will only cut back charge current. These limits only work when you&#039;ve set up your temperature sensors correctly. Please check the readings against a reference before relying on it.&lt;br /&gt;
&lt;br /&gt;
Charge current has a proportional, multi-step temperature derating, i.e. the charge curve defined by iccX and ucvX is scaled with a derating factor the lower the temperature or when the maximum temperature is approached&lt;br /&gt;
&lt;br /&gt;
* Below &#039;&#039;&#039;-20°C&#039;&#039;&#039; no charging is possible&lt;br /&gt;
* Between &#039;&#039;&#039;-20°C and 0°C&#039;&#039;&#039; charging with 0-30% of the charge curve is allowed&lt;br /&gt;
* Between &#039;&#039;&#039;0°C and 25°C&#039;&#039;&#039; charging with 30% to 100% of the charge curve is allowed&lt;br /&gt;
* Between &#039;&#039;&#039;43°C and 50°C&#039;&#039;&#039; charging with 100% to 0% of the charge curve is allowed, i.e. &#039;&#039;&#039;above 50°C&#039;&#039;&#039; charging is no longer allowed.&lt;br /&gt;
&lt;br /&gt;
Discharging is not limited at low temperatures as high discharge currents at low temperatures are not known to cause damage. As the battery heats up discharge current is limited, starting at &#039;&#039;&#039;46°C&#039;&#039;&#039; until discharging is no longer allowed when reaching &#039;&#039;&#039;53°C&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Energy limits ====&lt;br /&gt;
Not enforced yet. Some OEM BMSes cut back charge current after a certain amount of energy has been put into the battery. E.g. When starting charge at 50% charge rate will end up higher at 70% than if we start charging at 10%.&lt;br /&gt;
&lt;br /&gt;
== Calibration ==&lt;br /&gt;
As every instrument the voltage measurement needs to be calibrated to cancel out tolerances in the involved components. There are 4 parameters for calibration.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gain:&#039;&#039;&#039; The translation ration between the ADC digits and mV. This applies to all channels&lt;br /&gt;
* &#039;&#039;&#039;correction0, 1 and 15&#039;&#039;&#039;: This allows special tuning of said 3 channels because they use a slightly different current path and thus need a small gain correction&lt;br /&gt;
&lt;br /&gt;
=== Calibration procedure ===&lt;br /&gt;
First we determine the general gain. Pick any of the voltages between u2 and u14 which share a common gain factor. Use a good multimeter to measure the physical voltage of your reference channel. Now tune the &#039;&#039;&#039;gain&#039;&#039;&#039; parameter until your multimeter and the BMS voltage read the same value +-0.5mV. Now all channels from 2-14 should read correctly.&lt;br /&gt;
&lt;br /&gt;
Then for channels 0, 1 and 15 also measure the physical voltage input and tune the respective &#039;&#039;&#039;correctionX&#039;&#039;&#039; parameter until multimeter and BMS report the same voltage. The correction factors can be negative if a channels reads too high.&lt;br /&gt;
&lt;br /&gt;
Save your parameters to flash to make the calibration permanent.&lt;br /&gt;
&lt;br /&gt;
== Flashing firmware ==&lt;br /&gt;
If you have sourced the BMS boards from an alternative source then you will need to flash the bootloader and firmware onto the BMS. This is a relatively straightforward process once understood but took me a while to get it to work.&lt;br /&gt;
&lt;br /&gt;
Firstly you will need an STLink dongle, I used this one &amp;lt;ref&amp;gt;https://www.amazon.co.uk/dp/B07QBLNDPM?psc=1&amp;lt;/ref&amp;gt; but I believe any will do.&lt;br /&gt;
&lt;br /&gt;
I used STM32CubeProgrammer &amp;lt;ref&amp;gt;https://www.st.com/en/development-tools/stm32cubeprog.html&amp;lt;/ref&amp;gt; on Linux to flash my board and also (prior to flashing) upgrade the STLinkdongle to the latest firmware (might not be necessary but felt it was wise to do so).&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve got STM32Cubeprogrammer installed you&#039;re probably best erasing the STM32 Chip to ensure you&#039;re starting from a clean board. Navigate to the &amp;quot;Erasing &amp;amp; Programming&amp;quot; tab on the left and connect to your STlink dongle (if you havent already). Once connected, (you can also update the firmware on the dongle at this point on the &amp;quot;Memory &amp;amp; File Editing&amp;quot; tab), connect the dongle to the BMS board via the VDCG pins... &lt;br /&gt;
&lt;br /&gt;
(V = Voltage 3.3V, D = SWDIO, C = SWCLK, G = Gnd)&lt;br /&gt;
&lt;br /&gt;
and perform a &amp;quot;full chip erase&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Once thats complete head over to Github to download the Bootloader &amp;lt;ref&amp;gt;https://github.com/jsphuebner/stm32-CANBootloader/releases&amp;lt;/ref&amp;gt; and download the hex file (you may need to be logged in to download the files).&lt;br /&gt;
&lt;br /&gt;
Once downloaded, in STM32CubeProgrammer, navigate to the &amp;quot;Memory &amp;amp; File Editing&amp;quot; tab and open the hex file you just downloaded, once opened you can use the &amp;quot;Download&amp;quot; button to flash the bootloader to your BMS board.&lt;br /&gt;
&lt;br /&gt;
You can now repeat the above process of opening the hex file and &amp;quot;downloading&amp;quot; to the BMS board for the main BMS firmware which is available from the BMS Github repository &amp;lt;ref&amp;gt;https://github.com/jsphuebner/FlyingAdcBms/actions&amp;lt;/ref&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Once all that is done, you can move onto the Web interface. You&#039;ll need the &amp;quot;Can Backend&amp;quot; version of the ESP32 Web Interface available here &amp;lt;ref&amp;gt;https://github.com/jsphuebner/esp32-web-interface/tree/can-backend&amp;lt;/ref&amp;gt; (click the green code button and download zip)&lt;br /&gt;
&lt;br /&gt;
Once downloaded download Arduino IDE 1.8.19 (you&#039;ll need this version, nothing beyond version 2 as this does not support SPIFFS flashing as far as I&#039;m aware) and set it up for flashing to ESP32 boards &amp;lt;ref&amp;gt;https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html&amp;lt;/ref&amp;gt; and also flashing ESP32 Spiffs &amp;lt;ref&amp;gt;https://randomnerdtutorials.com/install-esp32-filesystem-uploader-arduino-ide/&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
To setup the Web interface Arduino sketch, you&#039;ll want to unzip and (IMPORTANT) RENAME the folder to &amp;quot;esp32-web-interface&amp;quot; to match the ino file within the folder, if you don&#039;t do this you&#039;ll have problems further down the line. Once unzipped and renamed, open the esp32-web-interface.ino sketch file and upload it to your ESP32 dev board. when this completed you&#039;ll also need to upload the SPIFFS image, you can do this by going to Tools and &amp;quot;ESP32 Sketch Data Upload&amp;quot; and choosing SPIFFS. once this is complete, you can connect your ESP32 to your BMS board via CAN and power them and they shuld work (note you&#039;ll need the 12V enable in line connected also).&lt;br /&gt;
&lt;br /&gt;
Once on the Web interface, select Node ID 10 and a speed of 500kbps and you&#039;ll have all your wonderful BMS spot values and params ready to go.&lt;br /&gt;
&lt;br /&gt;
== Operating Limits==&lt;br /&gt;
&lt;br /&gt;
* Max voltage for the board is 70v&lt;br /&gt;
* Max number of cells is 16&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=16-cell_BMS&amp;diff=5520</id>
		<title>16-cell BMS</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=16-cell_BMS&amp;diff=5520"/>
		<updated>2025-01-26T18:06:58Z</updated>

		<summary type="html">&lt;p&gt;Johu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:BMS]]&lt;br /&gt;
[[Category:Battery]]&lt;br /&gt;
[[File:16-cell BMS.jpg|thumb|16-cell BMS]]&lt;br /&gt;
The goal of this BMS is to use mostly decade old components to create a 16 channel cell voltage meter. It uses a very accurate sigma/delta ADC for superb resolution. It can drain about 100mA from a cell or charge it with 50 mA via the DC/DC converter. The ability to both charge and discharge cells speeds up balancing despite the low balancing current.&lt;br /&gt;
&lt;br /&gt;
When turned off it drains no current from the connected cells at all.&lt;br /&gt;
&lt;br /&gt;
On the low voltage side it features two inputs for temperature sensors and one input for a 5V current sensor, differential or single ended.&lt;br /&gt;
&lt;br /&gt;
It can be cascaded to be used with more than 16 cells and has an automatic addressing scheme to forgo the use of jumpers or DIP switches. All communication is done via CAN. Supply voltage is 12V with about 20 mA draw when not balancing.&lt;br /&gt;
&lt;br /&gt;
The software is not yet finished, see forum for progress &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=2338&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The boards can be bought in the [https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=74 shop].&lt;br /&gt;
&lt;br /&gt;
== Pinout ==&lt;br /&gt;
The pinout is also written to the bottom silkscreen.&lt;br /&gt;
&lt;br /&gt;
On the left side you see 17 inputs. The first one is connected to the negative pole (GND) of your (sub)pack, the subsequent ones to the positive poles of up to 16 cells. At least the lower two cell inputs must be connected. When cascading modules the positive-most input of module n is also the GND of module n+1, so must be spliced to connect to both.&lt;br /&gt;
&lt;br /&gt;
On the top right is the vehicle interfacing or low voltage connector. From top to bottom it is low voltage GND, 12V, enable_in, enable_out, CANH, CANL. GND, 12V, CANH, CANL are connected to all modules in parallel whereas enable_out is chained to enable_in of the next module. The first enable_in must be connected to 12V whenever the BMS should become active, e.g. when charging or driving. The module with 12V on the enable_in auto-detects as &amp;quot;main&amp;quot; module, collects data from the subsequent modules and sends more high level CAN messages&lt;br /&gt;
&lt;br /&gt;
On the bottom right is the temperature sensor and current sensor input. Top to bottom it is tsensor1+, tsensor1-, tsensor2+, tsensor2-, 5V, CUR+, CUR-, GND. A single ended current sensor is just connected to CUR+.&lt;br /&gt;
&lt;br /&gt;
Right now the current sensor is only supported on the main module.&lt;br /&gt;
&lt;br /&gt;
=== Connector part numbers ===&lt;br /&gt;
LV connector (supply, CAN, enable): header: Phoenix Contact 1803468 and 1803617 (screw terminal block)&lt;br /&gt;
&lt;br /&gt;
Temperature and current sensors: header: 640454-8, housing: 1375820-8, pins: 1445336-1&lt;br /&gt;
&lt;br /&gt;
cell taps: header: 1-640456-7, housing: 1-1375820-7, pins: 1445336-1&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
All configuration, queries and firmware updates are done via the CAN bus. There is no independent web interface like known from e.g. the inverter. However there is a solution to connect an ESP32 via CAN and then have the known web interface &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?p=56913#p56913&amp;lt;/ref&amp;gt; or you can use Dave Fiddes &amp;quot;oic&amp;quot; tool for the command line&amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=2907&amp;lt;/ref&amp;gt;. It is important to know that the main module has node-id 10 and the subsequent ones 10+i (i index of submodule, so 1st submodule has node-id 11). The base node id can be configured to start at something else than 10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;All info given here is preliminary and will likely change!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Apart from that the modules output periodic CAN messages depending on their role. The base address for cyclic messages defaults to 0x1F4 and can be changed by modifying pdobase on the main module. pdobase is ignored on the sub modules.&lt;br /&gt;
&lt;br /&gt;
All modules output on ID 501 (0x1F5) + i&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!start&lt;br /&gt;
!length&lt;br /&gt;
!item&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|13&lt;br /&gt;
|umin&lt;br /&gt;
|minimum cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|13&lt;br /&gt;
|umax&lt;br /&gt;
|maximum cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|2&lt;br /&gt;
|counter&lt;br /&gt;
|counts from 0-3 (anti-freeze)&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|13&lt;br /&gt;
|uavg&lt;br /&gt;
|average cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|48&lt;br /&gt;
|8&lt;br /&gt;
|tempmin&lt;br /&gt;
|Minimum temp +40 on module i&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|8&lt;br /&gt;
|tempmax&lt;br /&gt;
|Maximum temp +40 on module i&lt;br /&gt;
|}&lt;br /&gt;
The main module does not output its local accumulated values but accumulated values over all modules.&lt;br /&gt;
&lt;br /&gt;
In addition the main module outputs on id 500 (0x1F4)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!start&lt;br /&gt;
!length&lt;br /&gt;
!item&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|11&lt;br /&gt;
|chargelim&lt;br /&gt;
|maximum charge current in A&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|11&lt;br /&gt;
|dischargelim&lt;br /&gt;
|maximum discharge current in A&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|10&lt;br /&gt;
|soc&lt;br /&gt;
|Pack soc in 0.1%&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|16&lt;br /&gt;
|idcavg&lt;br /&gt;
|Averaged current reading of last 1s in 0.1A - signed!&lt;br /&gt;
|-&lt;br /&gt;
|48&lt;br /&gt;
|10&lt;br /&gt;
|utotal&lt;br /&gt;
|Total pack voltage in V&lt;br /&gt;
|-&lt;br /&gt;
|62&lt;br /&gt;
|2&lt;br /&gt;
|counter&lt;br /&gt;
|counts from 0-3 (anti-freeze)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reading individual cell voltages ===&lt;br /&gt;
Cell voltages are only available via CAN SDO from the module that measures them. So voltages 1-16 must be queried from the first (main) module, 17-32 from the 2nd (1st submodule) and so on. With Dave Fiddes tool this translates to:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
oic -n 10 dumpall #dumps all values including cell voltages from 1st module&lt;br /&gt;
oic -n 11 dumpall #same for second module&lt;br /&gt;
oic -n 11 read u0 #Read first cell voltage of second module&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For querying voltages say in your arduino sketch you&#039;ll need to acquire every voltage separately by sending and receiving SDO messages&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x60A#0x40 idhigh 0x21 idlow 0 0 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
idhigh and low are the bytes of the internal ID. The id of the first cell voltage is 2006 (0x7D6) so for querying the 1st cell voltage of the first module you send&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x60A#0x40 0x07 0x21 0xD6 0 0 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And you will receive the reply&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x58A#0x43 0x07 0x21 0xD6 0xD0 0xED 0x01 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x0001EDD0 is the voltage value which decodes to mV x 32. So 0x1EDD0/32 = 3950.5 mV.&lt;br /&gt;
&lt;br /&gt;
The next cell would be on 0x7D7 and the last on 0x7E5. The next 16 voltages are then queried from node id 0x60B.&lt;br /&gt;
&lt;br /&gt;
=== Configuration Parameters ===&lt;br /&gt;
There is currently a limited set of parameters which will be extended as the software grows. This table always reflects the latest git commit. Check the page history for previous versions.&lt;br /&gt;
&lt;br /&gt;
These are the parameters of v0.20.B&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Min&lt;br /&gt;
!Max&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;BMS&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|gain&lt;br /&gt;
|uV/dig&lt;br /&gt;
|1&lt;br /&gt;
|1000&lt;br /&gt;
|586&lt;br /&gt;
|Scaling factor from ADC digits to mV&lt;br /&gt;
|-&lt;br /&gt;
|correction0&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
| -1250&lt;br /&gt;
|The first two and the last channel have slightly different topology and need their own correction factor&lt;br /&gt;
|-&lt;br /&gt;
|correction1&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
|1500&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|correction15&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
|1000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|numchan&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|16&lt;br /&gt;
|16&lt;br /&gt;
|Number of cells connected to the module&lt;br /&gt;
|-&lt;br /&gt;
|balmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Balancing mode&lt;br /&gt;
0=No balancing&lt;br /&gt;
1=Only bump up low cells&lt;br /&gt;
2=Only dissipate high cells&lt;br /&gt;
3=Do both&lt;br /&gt;
|-&lt;br /&gt;
|ubalance&lt;br /&gt;
|mV&lt;br /&gt;
|0&lt;br /&gt;
|4500&lt;br /&gt;
|4500&lt;br /&gt;
|Voltage above which top balancing is started&lt;br /&gt;
|-&lt;br /&gt;
|idlewait&lt;br /&gt;
|s&lt;br /&gt;
|0&lt;br /&gt;
|100000&lt;br /&gt;
|60&lt;br /&gt;
|Number of seconds to wait after stop of current flow to measure unloaded cell voltage und start balancing&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Battery Characteristics&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|dischargemax&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2047&lt;br /&gt;
|200&lt;br /&gt;
|Maximum discharge current&lt;br /&gt;
|-&lt;br /&gt;
|nomcap&lt;br /&gt;
|Ah&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|100&lt;br /&gt;
|Nominal capacity&lt;br /&gt;
|-&lt;br /&gt;
|icc1&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|50&lt;br /&gt;
|Maximum charge current of empty battery&lt;br /&gt;
|-&lt;br /&gt;
|icc2&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|30&lt;br /&gt;
|Maximum charge current of roughly half-charged battery&lt;br /&gt;
|-&lt;br /&gt;
|icc3&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|20&lt;br /&gt;
|Maximum charge current of rather full battery&lt;br /&gt;
|-&lt;br /&gt;
|ucv1&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|3900&lt;br /&gt;
|First constant voltage set point. Transition to next one when dropping below icc2&lt;br /&gt;
|-&lt;br /&gt;
|ucv2&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|4000&lt;br /&gt;
|Second constant voltage set point. Transition to next one when dropping below icc3&lt;br /&gt;
|-&lt;br /&gt;
|ucellmax&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|4200&lt;br /&gt;
|Third constant voltage set point and maximum cell voltage&lt;br /&gt;
|-&lt;br /&gt;
|ucellmin&lt;br /&gt;
|mV&lt;br /&gt;
|1000&lt;br /&gt;
|4500&lt;br /&gt;
|3300&lt;br /&gt;
|Minimum loaded cell voltage. Discharge limit is dropped to stay above this value&lt;br /&gt;
|-&lt;br /&gt;
|chargeXsoc&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|Percentage of charge current at soc X. In between two points charge current is interpolated&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Sensor Setup&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|idcgain&lt;br /&gt;
|dig/A&lt;br /&gt;
| -1000&lt;br /&gt;
|1000&lt;br /&gt;
|10&lt;br /&gt;
|Gain (or actually division factor) of current sensor&lt;br /&gt;
|-&lt;br /&gt;
|idcofs&lt;br /&gt;
|dig&lt;br /&gt;
| -4095&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
|0A offset&lt;br /&gt;
|-&lt;br /&gt;
|idcmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Current sensor mode 0=Off, 1=Single Ended ADC, 2=Differential ADC, 3=ISA current shunt&lt;br /&gt;
|-&lt;br /&gt;
|tempsns&lt;br /&gt;
|&lt;br /&gt;
| 0&lt;br /&gt;
|3&lt;br /&gt;
| 0&lt;br /&gt;
|Temperature sensor 0=None, 1=Channel1, 2=Channel3, 3=Both&lt;br /&gt;
|-&lt;br /&gt;
|tempres&lt;br /&gt;
|Ohm&lt;br /&gt;
|10&lt;br /&gt;
|500000&lt;br /&gt;
|10000&lt;br /&gt;
|Nominal sensor resistance at 25°C&lt;br /&gt;
|-&lt;br /&gt;
|tempbeta&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|100000&lt;br /&gt;
|3900&lt;br /&gt;
|beta factor of Steinhart equation (see data sheet)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Communication&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|pdobase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2047&lt;br /&gt;
|500&lt;br /&gt;
|base COB Id for cyclic messages. Main module uses pdobase and pdobase+1, 1st submodule uses pdobase+2 and so on&lt;br /&gt;
|-&lt;br /&gt;
|sdobase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|63&lt;br /&gt;
|10&lt;br /&gt;
|base node ID for SDO queries. Main module uses sdobase, 1st submodule sdobase+1 and so on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Calculating current limits ===&lt;br /&gt;
Limiting charge and discharge current are the only means of this BMS to protect the battery. It has no means to turn off the current flow by itself but instead relies on the connected components to obey the calculated current limits that are sent out via CAN. The current limits are calculated in a number of steps.&lt;br /&gt;
&lt;br /&gt;
==== Charge Curve ====&lt;br /&gt;
The initial approach was to assign a certain charge current to points in the SoC curve. This method can be skewed if the SoC calculation is off for some reason. The new method deploys 3 CC/CV regulators. This was copied from oberving VWs charge curve of the MEB cars. The first regulator has the highest charge current and aims for a voltage typically around 3.9V for many NMC chemistries. When current drops below the CC value of the second regulator then that one is used, aiming for a higher voltage of typically 4V. And finally the 3rd regulator takes over aiming for the charge end voltage of typically 4.2V. When setting all 3 to the same values a simple CC/CV curve is generated.&lt;br /&gt;
&lt;br /&gt;
==== Voltage limits ====&lt;br /&gt;
Voltage limits are enforced via a P-regulator. I.e. as we approach the upper or lower voltage limit current is cut back to stay away from the limits until it reaches 0A. The upper and lower limit is configurable&lt;br /&gt;
&lt;br /&gt;
==== Temperature limits ====&lt;br /&gt;
High temperature will cut back both charge and discharge current whereas low temperature will only cut back charge current. These limits only work when you&#039;ve set up your temperature sensors correctly. Please check the readings against a reference before relying on it.&lt;br /&gt;
&lt;br /&gt;
Charge current has a proportional, multi-step temperature derating, i.e. the charge curve defined by iccX and ucvX is scaled with a derating factor the lower the temperature or when the maximum temperature is approached&lt;br /&gt;
&lt;br /&gt;
* Below &#039;&#039;&#039;-20°C&#039;&#039;&#039; no charging is possible&lt;br /&gt;
* Between &#039;&#039;&#039;-20°C and 0°C&#039;&#039;&#039; charging with 0-30% of the charge curve is allowed&lt;br /&gt;
* Between &#039;&#039;&#039;0°C and 25°C&#039;&#039;&#039; charging with 30% to 100% of the charge curve is allowed&lt;br /&gt;
* Between &#039;&#039;&#039;43°C and 50°C&#039;&#039;&#039; charging with 100% to 0% of the charge curve is allowed, i.e. &#039;&#039;&#039;above 50°C&#039;&#039;&#039; charging is no longer allowed.&lt;br /&gt;
&lt;br /&gt;
Discharging is not limited at low temperatures as high discharge currents at low temperatures are not known to cause damage. As the battery heats up discharge current is limited, starting at &#039;&#039;&#039;46°C&#039;&#039;&#039; until discharging is no longer allowed when reaching &#039;&#039;&#039;53°C&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Energy limits ====&lt;br /&gt;
Not enforced yet. Some OEM BMSes cut back charge current after a certain amount of energy has been put into the battery. E.g. When starting charge at 50% charge rate will end up higher at 70% than if we start charging at 10%.&lt;br /&gt;
&lt;br /&gt;
== Calibration ==&lt;br /&gt;
As every instrument the voltage measurement needs to be calibrated to cancel out tolerances in the involved components. There are 4 parameters for calibration.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gain :&#039;&#039;&#039; The translation ration between the ADC digits and mV. This applies to all channels&lt;br /&gt;
* &#039;&#039;&#039;correction0, 1 and 15&#039;&#039;&#039; : This allows special tuning of said 3 channels because they use a slightly different current path and thus need a small gain correction&lt;br /&gt;
&lt;br /&gt;
=== Calibration procedure ===&lt;br /&gt;
First we determine the general gain. Pick any of the voltages between u2 and u14 which share a common gain factor. Use a good multimeter to measure the physical voltage of your reference channel. Now tune the &#039;&#039;&#039;gain&#039;&#039;&#039; parameter until your multimeter and the BMS voltage read the same value +-0.5mV. Now all channels from 2-14 should read correctly.&lt;br /&gt;
&lt;br /&gt;
Then for channels 0, 1 and 15 also measure the physical voltage input and tune the respective &#039;&#039;&#039;correctionX&#039;&#039;&#039; parameter until multimeter and BMS report the same voltage. The correction factors can be negative if a channels reads too high.&lt;br /&gt;
&lt;br /&gt;
Save your parameters to flash to make the calibration permanent.&lt;br /&gt;
&lt;br /&gt;
== Flashing firmware ==&lt;br /&gt;
If you have sourced the BMS boards from an alternative source then you will need to flash the bootloader and firmware onto the BMS. This is a relatively straightforward process once understood but took me a while to get it to work.&lt;br /&gt;
&lt;br /&gt;
Firstly you will need an STLink dongle, I used this one &amp;lt;ref&amp;gt;https://www.amazon.co.uk/dp/B07QBLNDPM?psc=1&amp;lt;/ref&amp;gt; but I believe any will do.&lt;br /&gt;
&lt;br /&gt;
I used STM32CubeProgrammer &amp;lt;ref&amp;gt;https://www.st.com/en/development-tools/stm32cubeprog.html&amp;lt;/ref&amp;gt; on Linux to flash my board and also (prior to flashing) upgrade the STLinkdongle to the latest firmware (might not be necessary but felt it was wise to do so).&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve got STM32Cubeprogrammer installed you&#039;re probably best erasing the STM32 Chip to ensure you&#039;re starting from a clean board. Navigate to the &amp;quot;Erasing &amp;amp; Programming&amp;quot; tab on the left and connect to your STlink dongle (if you havent already). Once connected, (you can also update the firmware on the dongle at this point on the &amp;quot;Memory &amp;amp; File Editing&amp;quot; tab), connect the dongle to the BMS board via the VDCG pins... &lt;br /&gt;
&lt;br /&gt;
(V = Voltage 3.3V, D = SWDIO, C = SWCLK, G = Gnd)&lt;br /&gt;
&lt;br /&gt;
and perform a &amp;quot;full chip erase&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Once thats complete head over to Github to download the Bootloader &amp;lt;ref&amp;gt;https://github.com/jsphuebner/stm32-CANBootloader/releases&amp;lt;/ref&amp;gt; and download the hex file (you may need to be logged in to download the files).&lt;br /&gt;
&lt;br /&gt;
Once downloaded, in STM32CubeProgrammer, navigate to the &amp;quot;Memory &amp;amp; File Editing&amp;quot; tab and open the hex file you just downloaded, once opened you can use the &amp;quot;Download&amp;quot; button to flash the bootloader to your BMS board.&lt;br /&gt;
&lt;br /&gt;
You can now repeat the above process of opening the hex file and &amp;quot;downloading&amp;quot; to the BMS board for the main BMS firmware which is available from the BMS Github repository &amp;lt;ref&amp;gt;https://github.com/jsphuebner/FlyingAdcBms/actions&amp;lt;/ref&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Once all that is done, you can move onto the Web interface. You&#039;ll need the &amp;quot;Can Backend&amp;quot; version of the ESP32 Web Interface available here &amp;lt;ref&amp;gt;https://github.com/jsphuebner/esp32-web-interface/tree/can-backend&amp;lt;/ref&amp;gt; (click the green code button and download zip)&lt;br /&gt;
&lt;br /&gt;
Once downloaded download Arduino IDE 1.8.19 (you&#039;ll need this version, nothing beyond version 2 as this does not support SPIFFS flashing as far as I&#039;m aware) and set it up for flashing to ESP32 boards &amp;lt;ref&amp;gt;https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html&amp;lt;/ref&amp;gt; and also flashing ESP32 Spiffs &amp;lt;ref&amp;gt;https://randomnerdtutorials.com/install-esp32-filesystem-uploader-arduino-ide/&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
To setup the Web interface Arduino sketch, you&#039;ll want to unzip and (IMPORTANT) RENAME the folder to &amp;quot;esp32-web-interface&amp;quot; to match the ino file within the folder, if you don&#039;t do this you&#039;ll have problems further down the line. Once unzipped and renamed, open the esp32-web-interface.ino sketch file and upload it to your ESP32 dev board. when this completed you&#039;ll also need to upload the SPIFFS image, you can do this by going to Tools and &amp;quot;ESP32 Sketch Data Upload&amp;quot; and choosing SPIFFS. once this is complete, you can connect your ESP32 to your BMS board via CAN and power them and they shuld work (note you&#039;ll need the 12V enable in line connected also).&lt;br /&gt;
&lt;br /&gt;
Once on the Web interface, select Node ID 10 and a speed of 500kbps and you&#039;ll have all your wonderful BMS spot values and params ready to go.&lt;br /&gt;
&lt;br /&gt;
== Operating Limits==&lt;br /&gt;
&lt;br /&gt;
* Max voltage for the board is 70v&lt;br /&gt;
* Max number of cells is 16&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=16-cell_BMS&amp;diff=5471</id>
		<title>16-cell BMS</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=16-cell_BMS&amp;diff=5471"/>
		<updated>2025-01-06T16:45:02Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added temperature derating doc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:BMS]]&lt;br /&gt;
[[Category:Battery]]&lt;br /&gt;
[[File:16-cell BMS.jpg|thumb|16-cell BMS]]&lt;br /&gt;
The goal of this BMS is to use mostly decade old components to create a 16 channel cell voltage meter. It uses a very accurate sigma/delta ADC for superb resolution. It can drain about 100mA from a cell or charge it with 50 mA via the DC/DC converter. The ability to both charge and discharge cells speeds up balancing despite the low balancing current.&lt;br /&gt;
&lt;br /&gt;
When turned off it drains no current from the connected cells at all.&lt;br /&gt;
&lt;br /&gt;
On the low voltage side it features two inputs for temperature sensors and one input for a 5V current sensor, differential or single ended.&lt;br /&gt;
&lt;br /&gt;
It can be cascaded to be used with more than 16 cells and has an automatic addressing scheme to forgo the use of jumpers or DIP switches. All communication is done via CAN. Supply voltage is 12V with about 20 mA draw when not balancing.&lt;br /&gt;
&lt;br /&gt;
The software is not yet finished, see forum for progress &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=2338&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The boards can be bought in the [https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=74 shop].&lt;br /&gt;
&lt;br /&gt;
== Pinout ==&lt;br /&gt;
The pinout is also written to the bottom silkscreen.&lt;br /&gt;
&lt;br /&gt;
On the left side you see 17 inputs. The first one is connected to the negative pole (GND) of your (sub)pack, the subsequent ones to the positive poles of up to 16 cells. At least the lower two cell inputs must be connected. When cascading modules the positive-most input of module n is also the GND of module n+1, so must be spliced to connect to both.&lt;br /&gt;
&lt;br /&gt;
On the top right is the vehicle interfacing or low voltage connector. From top to bottom it is low voltage GND, 12V, enable_in, enable_out, CANH, CANL. GND, 12V, CANH, CANL are connected to all modules in parallel whereas enable_out is chained to enable_in of the next module. The first enable_in must be connected to 12V whenever the BMS should become active, e.g. when charging or driving. The module with 12V on the enable_in auto-detects as &amp;quot;main&amp;quot; module, collects data from the subsequent modules and sends more high level CAN messages&lt;br /&gt;
&lt;br /&gt;
On the bottom right is the temperature sensor and current sensor input. Top to bottom it is tsensor1+, tsensor1-, tsensor2+, tsensor2-, 5V, CUR+, CUR-, GND. A single ended current sensor is just connected to CUR+.&lt;br /&gt;
&lt;br /&gt;
Right now the current sensor is only supported on the main module.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
All configuration, queries and firmware updates are done via the CAN bus. There is no independent web interface like known from e.g. the inverter. However there is a solution to connect an ESP32 via CAN and then have the known web interface &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?p=56913#p56913&amp;lt;/ref&amp;gt; or you can use Dave Fiddes &amp;quot;oic&amp;quot; tool for the command line&amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=2907&amp;lt;/ref&amp;gt;. It is important to know that the main module has node-id 10 and the subsequent ones 10+i (i index of submodule, so 1st submodule has node-id 11). The base node id can be configured to start at something else than 10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;All info given here is preliminary and will likely change!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Apart from that the modules output periodic CAN messages depending on their role. The base address for cyclic messages defaults to 0x1F4 and can be changed by modifying pdobase on the main module. pdobase is ignored on the sub modules.&lt;br /&gt;
&lt;br /&gt;
All modules output on ID 501 (0x1F5) + i&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!start&lt;br /&gt;
!length&lt;br /&gt;
!item&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|13&lt;br /&gt;
|umin&lt;br /&gt;
|minimum cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|13&lt;br /&gt;
|umax&lt;br /&gt;
|maximum cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|2&lt;br /&gt;
|counter&lt;br /&gt;
|counts from 0-3 (anti-freeze)&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|13&lt;br /&gt;
|uavg&lt;br /&gt;
|average cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|48&lt;br /&gt;
|8&lt;br /&gt;
|tempmin&lt;br /&gt;
|Minimum temp +40 on module i&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|8&lt;br /&gt;
|tempmax&lt;br /&gt;
|Maximum temp +40 on module i&lt;br /&gt;
|}&lt;br /&gt;
The main module does not output its local accumulated values but accumulated values over all modules.&lt;br /&gt;
&lt;br /&gt;
In addition the main module outputs on id 500 (0x1F4)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!start&lt;br /&gt;
!length&lt;br /&gt;
!item&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|11&lt;br /&gt;
|chargelim&lt;br /&gt;
|maximum charge current in A&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|11&lt;br /&gt;
|dischargelim&lt;br /&gt;
|maximum discharge current in A&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|10&lt;br /&gt;
|soc&lt;br /&gt;
|Pack soc in 0.1%&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|16&lt;br /&gt;
|idcavg&lt;br /&gt;
|Averaged current reading of last 1s in 0.1A - signed!&lt;br /&gt;
|-&lt;br /&gt;
|48&lt;br /&gt;
|10&lt;br /&gt;
|utotal&lt;br /&gt;
|Total pack voltage in V&lt;br /&gt;
|-&lt;br /&gt;
|62&lt;br /&gt;
|2&lt;br /&gt;
|counter&lt;br /&gt;
|counts from 0-3 (anti-freeze)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reading individual cell voltages ===&lt;br /&gt;
Cell voltages are only available via CAN SDO from the module that measures them. So voltages 1-16 must be queried from the first (main) module, 17-32 from the 2nd (1st submodule) and so on. With Dave Fiddes tool this translates to:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
oic -n 10 dumpall #dumps all values including cell voltages from 1st module&lt;br /&gt;
oic -n 11 dumpall #same for second module&lt;br /&gt;
oic -n 11 read u0 #Read first cell voltage of second module&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For querying voltages say in your arduino sketch you&#039;ll need to acquire every voltage separately by sending and receiving SDO messages&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x60A#0x40 idhigh 0x21 idlow 0 0 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
idhigh and low are the bytes of the internal ID. The id of the first cell voltage is 2006 (0x7D6) so for querying the 1st cell voltage of the first module you send&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x60A#0x40 0x07 0x21 0xD6 0 0 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And you will receive the reply&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x58A#0x43 0x07 0x21 0xD6 0xD0 0xED 0x01 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x0001EDD0 is the voltage value which decodes to mV x 32. So 0x1EDD0/32 = 3950.5 mV.&lt;br /&gt;
&lt;br /&gt;
The next cell would be on 0x7D7 and the last on 0x7E5. The next 16 voltages are then queried from node id 0x60B.&lt;br /&gt;
&lt;br /&gt;
=== Configuration Parameters ===&lt;br /&gt;
There is currently a limited set of parameters which will be extended as the software grows. This table always reflects the latest git commit. Check the page history for previous versions.&lt;br /&gt;
&lt;br /&gt;
These are the parameters of v0.20.B&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Min&lt;br /&gt;
!Max&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;BMS&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|gain&lt;br /&gt;
|uV/dig&lt;br /&gt;
|1&lt;br /&gt;
|1000&lt;br /&gt;
|586&lt;br /&gt;
|Scaling factor from ADC digits to mV&lt;br /&gt;
|-&lt;br /&gt;
|correction0&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
| -1250&lt;br /&gt;
|The first two and the last channel have slightly different topology and need their own correction factor&lt;br /&gt;
|-&lt;br /&gt;
|correction1&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
|1500&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|correction15&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
|1000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|numchan&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|16&lt;br /&gt;
|16&lt;br /&gt;
|Number of cells connected to the module&lt;br /&gt;
|-&lt;br /&gt;
|balmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Balancing mode&lt;br /&gt;
0=No balancing&lt;br /&gt;
1=Only bump up low cells&lt;br /&gt;
2=Only dissipate high cells&lt;br /&gt;
3=Do both&lt;br /&gt;
|-&lt;br /&gt;
|ubalance&lt;br /&gt;
|mV&lt;br /&gt;
|0&lt;br /&gt;
|4500&lt;br /&gt;
|4500&lt;br /&gt;
|Voltage above which top balancing is started&lt;br /&gt;
|-&lt;br /&gt;
|idlewait&lt;br /&gt;
|s&lt;br /&gt;
|0&lt;br /&gt;
|100000&lt;br /&gt;
|60&lt;br /&gt;
|Number of seconds to wait after stop of current flow to measure unloaded cell voltage und start balancing&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Battery Characteristics&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|dischargemax&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2047&lt;br /&gt;
|200&lt;br /&gt;
|Maximum discharge current&lt;br /&gt;
|-&lt;br /&gt;
|nomcap&lt;br /&gt;
|Ah&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|100&lt;br /&gt;
|Nominal capacity&lt;br /&gt;
|-&lt;br /&gt;
|icc1&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|50&lt;br /&gt;
|Maximum charge current of empty battery&lt;br /&gt;
|-&lt;br /&gt;
|icc2&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|30&lt;br /&gt;
|Maximum charge current of roughly half-charged battery&lt;br /&gt;
|-&lt;br /&gt;
|icc3&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|20&lt;br /&gt;
|Maximum charge current of rather full battery&lt;br /&gt;
|-&lt;br /&gt;
|ucv1&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|3900&lt;br /&gt;
|First constant voltage set point. Transition to next one when dropping below icc2&lt;br /&gt;
|-&lt;br /&gt;
|ucv2&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|4000&lt;br /&gt;
|Second constant voltage set point. Transition to next one when dropping below icc3&lt;br /&gt;
|-&lt;br /&gt;
|ucellmax&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|4200&lt;br /&gt;
|Third constant voltage set point and maximum cell voltage&lt;br /&gt;
|-&lt;br /&gt;
|ucellmin&lt;br /&gt;
|mV&lt;br /&gt;
|1000&lt;br /&gt;
|4500&lt;br /&gt;
|3300&lt;br /&gt;
|Minimum loaded cell voltage. Discharge limit is dropped to stay above this value&lt;br /&gt;
|-&lt;br /&gt;
|chargeXsoc&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|Percentage of charge current at soc X. In between two points charge current is interpolated&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Sensor Setup&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|idcgain&lt;br /&gt;
|dig/A&lt;br /&gt;
| -1000&lt;br /&gt;
|1000&lt;br /&gt;
|10&lt;br /&gt;
|Gain (or actually division factor) of current sensor&lt;br /&gt;
|-&lt;br /&gt;
|idcofs&lt;br /&gt;
|dig&lt;br /&gt;
| -4095&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
|0A offset&lt;br /&gt;
|-&lt;br /&gt;
|idcmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Current sensor mode 0=Off, 1=Single Ended ADC, 2=Differential ADC, 3=ISA current shunt&lt;br /&gt;
|-&lt;br /&gt;
|tempsns&lt;br /&gt;
|&lt;br /&gt;
| 0&lt;br /&gt;
|3&lt;br /&gt;
| 0&lt;br /&gt;
|Temperature sensor 0=None, 1=Channel1, 2=Channel3, 3=Both&lt;br /&gt;
|-&lt;br /&gt;
|tempres&lt;br /&gt;
|Ohm&lt;br /&gt;
|10&lt;br /&gt;
|500000&lt;br /&gt;
|10000&lt;br /&gt;
|Nominal sensor resistance at 25°C&lt;br /&gt;
|-&lt;br /&gt;
|tempbeta&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|100000&lt;br /&gt;
|3900&lt;br /&gt;
|beta factor of Steinhart equation (see data sheet)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Communication&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|pdobase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2047&lt;br /&gt;
|500&lt;br /&gt;
|base COB Id for cyclic messages. Main module uses pdobase and pdobase+1, 1st submodule uses pdobase+2 and so on&lt;br /&gt;
|-&lt;br /&gt;
|sdobase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|63&lt;br /&gt;
|10&lt;br /&gt;
|base node ID for SDO queries. Main module uses sdobase, 1st submodule sdobase+1 and so on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Calculating current limits ===&lt;br /&gt;
Limiting charge and discharge current are the only means of this BMS to protect the battery. It has no means to turn off the current flow by itself but instead relies on the connected components to obey the calculated current limits that are sent out via CAN. The current limits are calculated in a number of steps.&lt;br /&gt;
&lt;br /&gt;
==== Charge Curve ====&lt;br /&gt;
The initial approach was to assign a certain charge current to points in the SoC curve. This method can be skewed if the SoC calculation is off for some reason. The new method deploys 3 CC/CV regulators. This was copied from oberving VWs charge curve of the MEB cars. The first regulator has the highest charge current and aims for a voltage typically around 3.9V for many NMC chemistries. When current drops below the CC value of the second regulator then that one is used, aiming for a higher voltage of typically 4V. And finally the 3rd regulator takes over aiming for the charge end voltage of typically 4.2V. When setting all 3 to the same values a simple CC/CV curve is generated.&lt;br /&gt;
&lt;br /&gt;
==== Voltage limits ====&lt;br /&gt;
Voltage limits are enforced via a P-regulator. I.e. as we approach the upper or lower voltage limit current is cut back to stay away from the limits until it reaches 0A. The upper and lower limit is configurable&lt;br /&gt;
&lt;br /&gt;
==== Temperature limits ====&lt;br /&gt;
High temperature will cut back both charge and discharge current whereas low temperature will only cut back charge current. These limits only work when you&#039;ve set up your temperature sensors correctly. Please check the readings against a reference before relying on it.&lt;br /&gt;
&lt;br /&gt;
Charge current has a proportional, multi-step temperature derating, i.e. the charge curve defined by iccX and ucvX is scaled with a derating factor the lower the temperature or when the maximum temperature is approached&lt;br /&gt;
&lt;br /&gt;
* Below &#039;&#039;&#039;-20°C&#039;&#039;&#039; no charging is possible&lt;br /&gt;
* Between &#039;&#039;&#039;-20°C and 0°C&#039;&#039;&#039; charging with 0-30% of the charge curve is allowed&lt;br /&gt;
* Between &#039;&#039;&#039;0°C and 25°C&#039;&#039;&#039; charging with 30% to 100% of the charge curve is allowed&lt;br /&gt;
* Between &#039;&#039;&#039;43°C and 50°C&#039;&#039;&#039; charging with 100% to 0% of the charge curve is allowed, i.e. &#039;&#039;&#039;above 50°C&#039;&#039;&#039; charging is no longer allowed.&lt;br /&gt;
&lt;br /&gt;
Discharging is not limited at low temperatures has high discharge currents at low temperatures are not known to cause damage. As the battery heats up discharge current is limited, starting at &#039;&#039;&#039;46°C&#039;&#039;&#039; until discharging is no longer allowed when reaching &#039;&#039;&#039;53°C&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Energy limits ====&lt;br /&gt;
Not enforced yet. Some OEM BMSes cut back charge current after a certain amount of energy has been put into the battery. E.g. When starting charge at 50% charge rate will end up higher at 70% than if we start charging at 10%.&lt;br /&gt;
&lt;br /&gt;
== Calibration ==&lt;br /&gt;
As every instrument the voltage measurement needs to be calibrated to cancel out tolerances in the involved components. There are 4 parameters for calibration.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gain :&#039;&#039;&#039; The translation ration between the ADC digits and mV. This applies to all channels&lt;br /&gt;
* &#039;&#039;&#039;correction0, 1 and 15&#039;&#039;&#039; : This allows special tuning of said 3 channels because they use a slightly different current path and thus need a small gain correction&lt;br /&gt;
&lt;br /&gt;
=== Calibration procedure ===&lt;br /&gt;
First we determine the general gain. Pick any of the voltages between u2 and u14 which share a common gain factor. Use a good multimeter to measure the physical voltage of your reference channel. Now tune the &#039;&#039;&#039;gain&#039;&#039;&#039; parameter until your multimeter and the BMS voltage read the same value +-0.5mV. Now all channels from 2-14 should read correctly.&lt;br /&gt;
&lt;br /&gt;
Then for channels 0, 1 and 15 also measure the physical voltage input and tune the respective &#039;&#039;&#039;correctionX&#039;&#039;&#039; parameter until multimeter and BMS report the same voltage. The correction factors can be negative if a channels reads too high.&lt;br /&gt;
&lt;br /&gt;
Save your parameters to flash to make the calibration permanent.&lt;br /&gt;
&lt;br /&gt;
== Flashing firmware ==&lt;br /&gt;
If you have sourced the BMS boards from an alternative source then you will need to flash the bootloader and firmware onto the BMS. This is a relatively straightforward process once understood but took me a while to get it to work.&lt;br /&gt;
&lt;br /&gt;
Firstly you will need an STLink dongle, I used this one &amp;lt;ref&amp;gt;https://www.amazon.co.uk/dp/B07QBLNDPM?psc=1&amp;lt;/ref&amp;gt; but I believe any will do.&lt;br /&gt;
&lt;br /&gt;
I used STM32CubeProgrammer &amp;lt;ref&amp;gt;https://www.st.com/en/development-tools/stm32cubeprog.html&amp;lt;/ref&amp;gt; on Linux to flash my board and also (prior to flashing) upgrade the STLinkdongle to the latest firmware (might not be necessary but felt it was wise to do so).&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve got STM32Cubeprogrammer installed you&#039;re probably best erasing the STM32 Chip to ensure you&#039;re starting from a clean board. Navigate to the &amp;quot;Erasing &amp;amp; Programming&amp;quot; tab on the left and connect to your STlink dongle (if you havent already). Once connected, (you can also update the firmware on the dongle at this point on the &amp;quot;Memory &amp;amp; File Editing&amp;quot; tab), connect the dongle to the BMS board via the VDCG pins... &lt;br /&gt;
&lt;br /&gt;
(V = Voltage 3.3V, D = SWDIO, C = SWCLK, G = Gnd)&lt;br /&gt;
&lt;br /&gt;
and perform a &amp;quot;full chip erase&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Once thats complete head over to Github to download the Bootloader &amp;lt;ref&amp;gt;https://github.com/jsphuebner/stm32-CANBootloader/releases&amp;lt;/ref&amp;gt; and download the hex file (you may need to be logged in to download the files).&lt;br /&gt;
&lt;br /&gt;
Once downloaded, in STM32CubeProgrammer, navigate to the &amp;quot;Memory &amp;amp; File Editing&amp;quot; tab and open the hex file you just downloaded, once opened you can use the &amp;quot;Download&amp;quot; button to flash the bootloader to your BMS board.&lt;br /&gt;
&lt;br /&gt;
You can now repeat the above process of opening the hex file and &amp;quot;downloading&amp;quot; to the BMS board for the main BMS firmware which is available from the BMS Github repository &amp;lt;ref&amp;gt;https://github.com/jsphuebner/FlyingAdcBms/actions&amp;lt;/ref&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Once all that is done, you can move onto the Web interface. You&#039;ll need the &amp;quot;Can Backend&amp;quot; version of the ESP32 Web Interface available here &amp;lt;ref&amp;gt;https://github.com/jsphuebner/esp32-web-interface/tree/can-backend&amp;lt;/ref&amp;gt; (click the green code button and download zip)&lt;br /&gt;
&lt;br /&gt;
Once downloaded download Arduino IDE 1.8.19 (you&#039;ll need this version, nothing beyond version 2 as this does not support SPIFFS flashing as far as I&#039;m aware) and set it up for flashing to ESP32 boards &amp;lt;ref&amp;gt;https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html&amp;lt;/ref&amp;gt; and also flashing ESP32 Spiffs &amp;lt;ref&amp;gt;https://randomnerdtutorials.com/install-esp32-filesystem-uploader-arduino-ide/&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
To setup the Web interface Arduino sketch, you&#039;ll want to unzip and (IMPORTANT) RENAME the folder to &amp;quot;esp32-web-interface&amp;quot; to match the ino file within the folder, if you don&#039;t do this you&#039;ll have problems further down the line. Once unzipped and renamed, open the esp32-web-interface.ino sketch file and upload it to your ESP32 dev board. when this completed you&#039;ll also need to upload the SPIFFS image, you can do this by going to Tools and &amp;quot;ESP32 Sketch Data Upload&amp;quot; and choosing SPIFFS. once this is complete, you can connect your ESP32 to your BMS board via CAN and power them and they shuld work (note you&#039;ll need the 12V enable in line connected also).&lt;br /&gt;
&lt;br /&gt;
Once on the Web interface, select Node ID 10 and a speed of 500kbps and you&#039;ll have all your wonderful BMS spot values and params ready to go.&lt;br /&gt;
&lt;br /&gt;
== Operating Limits==&lt;br /&gt;
&lt;br /&gt;
* Max voltage for the board is 70v&lt;br /&gt;
* Max number of cells is 16&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=16-cell_BMS&amp;diff=5470</id>
		<title>16-cell BMS</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=16-cell_BMS&amp;diff=5470"/>
		<updated>2025-01-06T16:19:45Z</updated>

		<summary type="html">&lt;p&gt;Johu: Temp sensor update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:BMS]]&lt;br /&gt;
[[Category:Battery]]&lt;br /&gt;
[[File:16-cell BMS.jpg|thumb|16-cell BMS]]&lt;br /&gt;
The goal of this BMS is to use mostly decade old components to create a 16 channel cell voltage meter. It uses a very accurate sigma/delta ADC for superb resolution. It can drain about 100mA from a cell or charge it with 50 mA via the DC/DC converter. The ability to both charge and discharge cells speeds up balancing despite the low balancing current.&lt;br /&gt;
&lt;br /&gt;
When turned off it drains no current from the connected cells at all.&lt;br /&gt;
&lt;br /&gt;
On the low voltage side it features two inputs for temperature sensors and one input for a 5V current sensor, differential or single ended.&lt;br /&gt;
&lt;br /&gt;
It can be cascaded to be used with more than 16 cells and has an automatic addressing scheme to forgo the use of jumpers or DIP switches. All communication is done via CAN. Supply voltage is 12V with about 20 mA draw when not balancing.&lt;br /&gt;
&lt;br /&gt;
The software is not yet finished, see forum for progress &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=2338&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The boards can be bought in the [https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=74 shop].&lt;br /&gt;
&lt;br /&gt;
== Pinout ==&lt;br /&gt;
The pinout is also written to the bottom silkscreen.&lt;br /&gt;
&lt;br /&gt;
On the left side you see 17 inputs. The first one is connected to the negative pole (GND) of your (sub)pack, the subsequent ones to the positive poles of up to 16 cells. At least the lower two cell inputs must be connected. When cascading modules the positive-most input of module n is also the GND of module n+1, so must be spliced to connect to both.&lt;br /&gt;
&lt;br /&gt;
On the top right is the vehicle interfacing or low voltage connector. From top to bottom it is low voltage GND, 12V, enable_in, enable_out, CANH, CANL. GND, 12V, CANH, CANL are connected to all modules in parallel whereas enable_out is chained to enable_in of the next module. The first enable_in must be connected to 12V whenever the BMS should become active, e.g. when charging or driving. The module with 12V on the enable_in auto-detects as &amp;quot;main&amp;quot; module, collects data from the subsequent modules and sends more high level CAN messages&lt;br /&gt;
&lt;br /&gt;
On the bottom right is the temperature sensor and current sensor input. Top to bottom it is tsensor1+, tsensor1-, tsensor2+, tsensor2-, 5V, CUR+, CUR-, GND. A single ended current sensor is just connected to CUR+.&lt;br /&gt;
&lt;br /&gt;
Right now the current sensor is only supported on the main module.&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
All configuration, queries and firmware updates are done via the CAN bus. There is no independent web interface like known from e.g. the inverter. However there is a solution to connect an ESP32 via CAN and then have the known web interface &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?p=56913#p56913&amp;lt;/ref&amp;gt; or you can use Dave Fiddes &amp;quot;oic&amp;quot; tool for the command line&amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?t=2907&amp;lt;/ref&amp;gt;. It is important to know that the main module has node-id 10 and the subsequent ones 10+i (i index of submodule, so 1st submodule has node-id 11). The base node id can be configured to start at something else than 10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;All info given here is preliminary and will likely change!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Apart from that the modules output periodic CAN messages depending on their role. The base address for cyclic messages defaults to 0x1F4 and can be changed by modifying pdobase on the main module. pdobase is ignored on the sub modules.&lt;br /&gt;
&lt;br /&gt;
All modules output on ID 501 (0x1F5) + i&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!start&lt;br /&gt;
!length&lt;br /&gt;
!item&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|13&lt;br /&gt;
|umin&lt;br /&gt;
|minimum cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|13&lt;br /&gt;
|umax&lt;br /&gt;
|maximum cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|2&lt;br /&gt;
|counter&lt;br /&gt;
|counts from 0-3 (anti-freeze)&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|13&lt;br /&gt;
|uavg&lt;br /&gt;
|average cell voltage of module i&lt;br /&gt;
|-&lt;br /&gt;
|48&lt;br /&gt;
|8&lt;br /&gt;
|tempmin&lt;br /&gt;
|Minimum temp +40 on module i&lt;br /&gt;
|-&lt;br /&gt;
|56&lt;br /&gt;
|8&lt;br /&gt;
|tempmax&lt;br /&gt;
|Maximum temp +40 on module i&lt;br /&gt;
|}&lt;br /&gt;
The main module does not output its local accumulated values but accumulated values over all modules.&lt;br /&gt;
&lt;br /&gt;
In addition the main module outputs on id 500 (0x1F4)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!start&lt;br /&gt;
!length&lt;br /&gt;
!item&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|11&lt;br /&gt;
|chargelim&lt;br /&gt;
|maximum charge current in A&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|11&lt;br /&gt;
|dischargelim&lt;br /&gt;
|maximum discharge current in A&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|10&lt;br /&gt;
|soc&lt;br /&gt;
|Pack soc in 0.1%&lt;br /&gt;
|-&lt;br /&gt;
|32&lt;br /&gt;
|16&lt;br /&gt;
|idcavg&lt;br /&gt;
|Averaged current reading of last 1s in 0.1A - signed!&lt;br /&gt;
|-&lt;br /&gt;
|48&lt;br /&gt;
|10&lt;br /&gt;
|utotal&lt;br /&gt;
|Total pack voltage in V&lt;br /&gt;
|-&lt;br /&gt;
|62&lt;br /&gt;
|2&lt;br /&gt;
|counter&lt;br /&gt;
|counts from 0-3 (anti-freeze)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reading individual cell voltages ===&lt;br /&gt;
Cell voltages are only available via CAN SDO from the module that measures them. So voltages 1-16 must be queried from the first (main) module, 17-32 from the 2nd (1st submodule) and so on. With Dave Fiddes tool this translates to:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
oic -n 10 dumpall #dumps all values including cell voltages from 1st module&lt;br /&gt;
oic -n 11 dumpall #same for second module&lt;br /&gt;
oic -n 11 read u0 #Read first cell voltage of second module&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;For querying voltages say in your arduino sketch you&#039;ll need to acquire every voltage separately by sending and receiving SDO messages&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x60A#0x40 idhigh 0x21 idlow 0 0 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
idhigh and low are the bytes of the internal ID. The id of the first cell voltage is 2006 (0x7D6) so for querying the 1st cell voltage of the first module you send&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x60A#0x40 0x07 0x21 0xD6 0 0 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And you will receive the reply&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x58A#0x43 0x07 0x21 0xD6 0xD0 0xED 0x01 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x0001EDD0 is the voltage value which decodes to mV x 32. So 0x1EDD0/32 = 3950.5 mV.&lt;br /&gt;
&lt;br /&gt;
The next cell would be on 0x7D7 and the last on 0x7E5. The next 16 voltages are then queried from node id 0x60B.&lt;br /&gt;
&lt;br /&gt;
=== Configuration Parameters ===&lt;br /&gt;
There is currently a limited set of parameters which will be extended as the software grows. This table always reflects the latest git commit. Check the page history for previous versions.&lt;br /&gt;
&lt;br /&gt;
These are the parameters of v0.19.B&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Min&lt;br /&gt;
!Max&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;BMS&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|gain&lt;br /&gt;
|uV/dig&lt;br /&gt;
|1&lt;br /&gt;
|1000&lt;br /&gt;
|586&lt;br /&gt;
|Scaling factor from ADC digits to mV&lt;br /&gt;
|-&lt;br /&gt;
|correction0&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
| -1250&lt;br /&gt;
|The first two and the last channel have slightly different topology and need their own correction factor&lt;br /&gt;
|-&lt;br /&gt;
|correction1&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
|1500&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|correction15&lt;br /&gt;
|ppm&lt;br /&gt;
| -10000&lt;br /&gt;
|10000&lt;br /&gt;
|1000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|numchan&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|16&lt;br /&gt;
|16&lt;br /&gt;
|Number of cells connected to the module&lt;br /&gt;
|-&lt;br /&gt;
|balmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Balancing mode&lt;br /&gt;
0=No balancing&lt;br /&gt;
1=Only bump up low cells&lt;br /&gt;
2=Only dissipate high cells&lt;br /&gt;
3=Do both&lt;br /&gt;
|-&lt;br /&gt;
|ubalance&lt;br /&gt;
|mV&lt;br /&gt;
|0&lt;br /&gt;
|4500&lt;br /&gt;
|4500&lt;br /&gt;
|Voltage above which top balancing is started&lt;br /&gt;
|-&lt;br /&gt;
|idlewait&lt;br /&gt;
|s&lt;br /&gt;
|0&lt;br /&gt;
|100000&lt;br /&gt;
|60&lt;br /&gt;
|Number of seconds to wait after stop of current flow to measure unloaded cell voltage und start balancing&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Battery Characteristics&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|dischargemax&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2047&lt;br /&gt;
|200&lt;br /&gt;
|Maximum discharge current&lt;br /&gt;
|-&lt;br /&gt;
|nomcap&lt;br /&gt;
|Ah&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|100&lt;br /&gt;
|Nominal capacity&lt;br /&gt;
|-&lt;br /&gt;
|icc1&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|50&lt;br /&gt;
|Maximum charge current of empty battery&lt;br /&gt;
|-&lt;br /&gt;
|icc2&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|30&lt;br /&gt;
|Maximum charge current of roughly half-charged battery&lt;br /&gt;
|-&lt;br /&gt;
|icc3&lt;br /&gt;
|A&lt;br /&gt;
|1&lt;br /&gt;
|2000&lt;br /&gt;
|20&lt;br /&gt;
|Maximum charge current of rather full battery&lt;br /&gt;
|-&lt;br /&gt;
|ucv1&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|3900&lt;br /&gt;
|First constant voltage set point. Transition to next one when dropping below icc2&lt;br /&gt;
|-&lt;br /&gt;
|ucv2&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|4000&lt;br /&gt;
|Second constant voltage set point. Transition to next one when dropping below icc3&lt;br /&gt;
|-&lt;br /&gt;
|ucellmax&lt;br /&gt;
|mV&lt;br /&gt;
|3000&lt;br /&gt;
|4500&lt;br /&gt;
|4200&lt;br /&gt;
|Third constant voltage set point and maximum cell voltage&lt;br /&gt;
|-&lt;br /&gt;
|ucellmin&lt;br /&gt;
|mV&lt;br /&gt;
|1000&lt;br /&gt;
|4500&lt;br /&gt;
|3300&lt;br /&gt;
|Minimum loaded cell voltage. Discharge limit is dropped to stay above this value&lt;br /&gt;
|-&lt;br /&gt;
|chargeXsoc&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|Percentage of charge current at soc X. In between two points charge current is interpolated&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Sensor Setup&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|idcgain&lt;br /&gt;
|dig/A&lt;br /&gt;
| -1000&lt;br /&gt;
|1000&lt;br /&gt;
|10&lt;br /&gt;
|Gain (or actually division factor) of current sensor&lt;br /&gt;
|-&lt;br /&gt;
|idcofs&lt;br /&gt;
|dig&lt;br /&gt;
| -4095&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
|0A offset&lt;br /&gt;
|-&lt;br /&gt;
|idcmode&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|Current sensor mode 0=Off, 1=Single Ended ADC, 2=Differential ADC, 3=ISA current shunt&lt;br /&gt;
|-&lt;br /&gt;
|tempsns&lt;br /&gt;
|&lt;br /&gt;
| 0&lt;br /&gt;
|3&lt;br /&gt;
| 0&lt;br /&gt;
|Temperature sensor 0=None, 1=Channel1, 2=Channel3, 3=Both&lt;br /&gt;
|-&lt;br /&gt;
|tempres&lt;br /&gt;
|Ohm&lt;br /&gt;
|10&lt;br /&gt;
|500000&lt;br /&gt;
|10000&lt;br /&gt;
|Nominal sensor resistance at 25°C&lt;br /&gt;
|-&lt;br /&gt;
|tempbeta&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|100000&lt;br /&gt;
|3900&lt;br /&gt;
|beta factor of Steinhart equation (see data sheet)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Communication&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|pdobase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2047&lt;br /&gt;
|500&lt;br /&gt;
|base COB Id for cyclic messages. Main module uses pdobase and pdobase+1, 1st submodule uses pdobase+2 and so on&lt;br /&gt;
|-&lt;br /&gt;
|sdobase&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|63&lt;br /&gt;
|10&lt;br /&gt;
|base node ID for SDO queries. Main module uses sdobase, 1st submodule sdobase+1 and so on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Operation ==&lt;br /&gt;
&lt;br /&gt;
=== Calculating current limits ===&lt;br /&gt;
Limiting charge and discharge current are the only means of this BMS to protect the battery. It has no means to turn off the current flow by itself but instead relies on the connected components to obey the calculated current limits that are sent out via CAN. The current limits are calculated in a number of steps.&lt;br /&gt;
&lt;br /&gt;
==== Charge Curve ====&lt;br /&gt;
The initial approach was to assign a certain charge current to points in the SoC curve. This method can be skewed if the SoC calculation is off for some reason. The new method deploys 3 CC/CV regulators. This was copied from oberving VWs charge curve of the MEB cars. The first regulator has the highest charge current and aims for a voltage typically around 3.9V for many NMC chemistries. When current drops below the CC value of the second regulator then that one is used, aiming for a higher voltage of typically 4V. And finally the 3rd regulator takes over aiming for the charge end voltage of typically 4.2V. When setting all 3 to the same values a simple CC/CV curve is generated.&lt;br /&gt;
&lt;br /&gt;
==== Voltage limits ====&lt;br /&gt;
Voltage limits are enforced via a P-regulator. I.e. as we approach the upper or lower voltage limit current is cut back to stay away from the limits until it reaches 0A. The upper and lower limit is configurable&lt;br /&gt;
&lt;br /&gt;
==== Temperature limits ====&lt;br /&gt;
&#039;&#039;&#039;These are not enforced yet&#039;&#039;&#039;. High temperature will cut back both charge and discharge current whereas low temperature will only cut back charge current. These limits only work when you&#039;ve set up your temperature sensors correctly. Please check the readings against a reference before relying on it.&lt;br /&gt;
&lt;br /&gt;
==== Energy limits ====&lt;br /&gt;
Not enforced yet. Some OEM BMSes cut back charge current after a certain amount of energy has been put into the battery. E.g. When starting charge at 50% charge rate will end up higher at 70% than if we start charging at 10%.&lt;br /&gt;
&lt;br /&gt;
== Calibration ==&lt;br /&gt;
As every instrument the voltage measurement needs to be calibrated to cancel out tolerances in the involved components. There are 4 parameters for calibration.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;gain :&#039;&#039;&#039; The translation ration between the ADC digits and mV. This applies to all channels&lt;br /&gt;
* &#039;&#039;&#039;correction0, 1 and 15&#039;&#039;&#039; : This allows special tuning of said 3 channels because they use a slightly different current path and thus need a small gain correction&lt;br /&gt;
&lt;br /&gt;
=== Calibration procedure ===&lt;br /&gt;
First we determine the general gain. Pick any of the voltages between u2 and u14 which share a common gain factor. Use a good multimeter to measure the physical voltage of your reference channel. Now tune the &#039;&#039;&#039;gain&#039;&#039;&#039; parameter until your multimeter and the BMS voltage read the same value +-0.5mV. Now all channels from 2-14 should read correctly.&lt;br /&gt;
&lt;br /&gt;
Then for channels 0, 1 and 15 also measure the physical voltage input and tune the respective &#039;&#039;&#039;correctionX&#039;&#039;&#039; parameter until multimeter and BMS report the same voltage. The correction factors can be negative if a channels reads too high.&lt;br /&gt;
&lt;br /&gt;
Save your parameters to flash to make the calibration permanent.&lt;br /&gt;
&lt;br /&gt;
== Flashing firmware ==&lt;br /&gt;
If you have sourced the BMS boards from an alternative source then you will need to flash the bootloader and firmware onto the BMS. This is a relatively straightforward process once understood but took me a while to get it to work.&lt;br /&gt;
&lt;br /&gt;
Firstly you will need an STLink dongle, I used this one &amp;lt;ref&amp;gt;https://www.amazon.co.uk/dp/B07QBLNDPM?psc=1&amp;lt;/ref&amp;gt; but I believe any will do.&lt;br /&gt;
&lt;br /&gt;
I used STM32CubeProgrammer &amp;lt;ref&amp;gt;https://www.st.com/en/development-tools/stm32cubeprog.html&amp;lt;/ref&amp;gt; on Linux to flash my board and also (prior to flashing) upgrade the STLinkdongle to the latest firmware (might not be necessary but felt it was wise to do so).&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve got STM32Cubeprogrammer installed you&#039;re probably best erasing the STM32 Chip to ensure you&#039;re starting from a clean board. Navigate to the &amp;quot;Erasing &amp;amp; Programming&amp;quot; tab on the left and connect to your STlink dongle (if you havent already). Once connected, (you can also update the firmware on the dongle at this point on the &amp;quot;Memory &amp;amp; File Editing&amp;quot; tab), connect the dongle to the BMS board via the VDCG pins... &lt;br /&gt;
&lt;br /&gt;
(V = Voltage 3.3V, D = SWDIO, C = SWCLK, G = Gnd)&lt;br /&gt;
&lt;br /&gt;
and perform a &amp;quot;full chip erase&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Once thats complete head over to Github to download the Bootloader &amp;lt;ref&amp;gt;https://github.com/jsphuebner/stm32-CANBootloader/releases&amp;lt;/ref&amp;gt; and download the hex file (you may need to be logged in to download the files).&lt;br /&gt;
&lt;br /&gt;
Once downloaded, in STM32CubeProgrammer, navigate to the &amp;quot;Memory &amp;amp; File Editing&amp;quot; tab and open the hex file you just downloaded, once opened you can use the &amp;quot;Download&amp;quot; button to flash the bootloader to your BMS board.&lt;br /&gt;
&lt;br /&gt;
You can now repeat the above process of opening the hex file and &amp;quot;downloading&amp;quot; to the BMS board for the main BMS firmware which is available from the BMS Github repository &amp;lt;ref&amp;gt;https://github.com/jsphuebner/FlyingAdcBms/actions&amp;lt;/ref&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Once all that is done, you can move onto the Web interface. You&#039;ll need the &amp;quot;Can Backend&amp;quot; version of the ESP32 Web Interface available here &amp;lt;ref&amp;gt;https://github.com/jsphuebner/esp32-web-interface/tree/can-backend&amp;lt;/ref&amp;gt; (click the green code button and download zip)&lt;br /&gt;
&lt;br /&gt;
Once downloaded download Arduino IDE 1.8.19 (you&#039;ll need this version, nothing beyond version 2 as this does not support SPIFFS flashing as far as I&#039;m aware) and set it up for flashing to ESP32 boards &amp;lt;ref&amp;gt;https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html&amp;lt;/ref&amp;gt; and also flashing ESP32 Spiffs &amp;lt;ref&amp;gt;https://randomnerdtutorials.com/install-esp32-filesystem-uploader-arduino-ide/&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
To setup the Web interface Arduino sketch, you&#039;ll want to unzip and (IMPORTANT) RENAME the folder to &amp;quot;esp32-web-interface&amp;quot; to match the ino file within the folder, if you don&#039;t do this you&#039;ll have problems further down the line. Once unzipped and renamed, open the esp32-web-interface.ino sketch file and upload it to your ESP32 dev board. when this completed you&#039;ll also need to upload the SPIFFS image, you can do this by going to Tools and &amp;quot;ESP32 Sketch Data Upload&amp;quot; and choosing SPIFFS. once this is complete, you can connect your ESP32 to your BMS board via CAN and power them and they shuld work (note you&#039;ll need the 12V enable in line connected also).&lt;br /&gt;
&lt;br /&gt;
Once on the Web interface, select Node ID 10 and a speed of 500kbps and you&#039;ll have all your wonderful BMS spot values and params ready to go.&lt;br /&gt;
&lt;br /&gt;
== Operating Limits==&lt;br /&gt;
&lt;br /&gt;
* Max voltage for the board is 70v&lt;br /&gt;
* Max number of cells is 16&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Mini_Mainboard&amp;diff=5198</id>
		<title>Mini Mainboard</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Mini_Mainboard&amp;diff=5198"/>
		<updated>2024-12-16T18:10:53Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added Tesla M3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Mini mainboard front.jpg|thumb|Mini mainboard front]]&lt;br /&gt;
The mini mainboard is the smallest form factor openinverter motor control board. It has the same functionality as the [[Main Board Version 3]] but offloads a few components. It is meant to be used as a daughter board on top of an adapter board. The adapter board must (or may) implement:&lt;br /&gt;
&lt;br /&gt;
* The Wifi module socket&lt;br /&gt;
* Relay drivers&lt;br /&gt;
In addition the mini mainboard allows talking to SPI peripherals. Therefore some pins have double mapping:&lt;br /&gt;
&lt;br /&gt;
* SIG_CRUISE: MOSI (SJ3 must be closed to the right side for that).&lt;br /&gt;
* OUT_BRAKE: MISO&lt;br /&gt;
* OUT_ERR: SCK&lt;br /&gt;
* OUT_OUVTG: /CS&lt;br /&gt;
Like previous boards it contains a 5V switching regulator that can be loaded with about 500 mA. Alternatively It can be powered with a single 5V rail, which has to sit at 5.3V though for sufficient resolver excitation amplitude.&lt;br /&gt;
&lt;br /&gt;
As opposed to earlier mainboards the current sensor inputs are now designed for 5V input, i.e. 2.5V @ 0A. This interfaces directly with most current sensors that OEMs use and also with Melexis chips, LEM HTFS and Tamura L06P current sensors.&lt;br /&gt;
== Digital inputs ==&lt;br /&gt;
There are external 7 digital inputs on JP2. A voltage of &amp;gt;7V is interpreted as a logical 1 (high). They all have a cutoff frequency of 40Hz.&lt;br /&gt;
# Cruise Control (Pin 4). This input sets the current motor speed as the set point for cruise control. Cruise control is disabled with the Brake input. In SPI mode: MOSI&lt;br /&gt;
# Start (Pin 5). This input starts the inverter operation.&lt;br /&gt;
# Brake input (Pin 6). This input is connected to the brake pedal. It sets a configurable negative torque (regen) which overrides the throttle. I.e. if you press both, brake pedal and throttle, the throttle is ignored.&lt;br /&gt;
# Forward (Pin 7). If this input is high the motor spins forward.&lt;br /&gt;
# Reverse (Pin 8). If this input is high the motor spins backward. When neither input is high the motor will not spin at all.&lt;br /&gt;
# Emergency stop (Pin 9). The PWM is enabled as long as this input is high and shut down as soon as it goes low.&lt;br /&gt;
# BMS input (Pin 10). This input limits the motor torque (both negative and positive) if a BMS signals an over or undervoltage condition. It is active high, i.e. high means over/undervoltage.&lt;br /&gt;
There is one more digital inputs on JP1&lt;br /&gt;
# Gate driver error/Desat (Pin 5) This pin is pulled high (5V). When pulled low an error is signalled and the PWM is inhibited&lt;br /&gt;
&lt;br /&gt;
== Digital outputs ==&lt;br /&gt;
There are 5 outputs on JP2. They just source 3.3V with 220 Ohm series resistance and are meant to drive FETs or NPN transistors. &lt;br /&gt;
# Precharge output (Pin 15) This output is activated when the inverter is powered up. It is disabled as soon as the DC contactor is enabled.&lt;br /&gt;
# DC contactor output (Pin 16) This output is activated when the bus voltage is above a given threshold and the start pin goes high. It is disabled on overcurrent, motor overheat and emergency stop.&lt;br /&gt;
# Error output (Pin 17) This output is activated on over current, motor overheat, emergency stop, throttle out of range. In SPI mode: SCK&lt;br /&gt;
# Brake output (Pin 18) This output is high when potnom reaches a certain negative threshold. The purpose is to switch on the brake light on a certain regen level At startup this pin is configured as an analog input to sense some preset adapter boards In SPI mode: MISO&lt;br /&gt;
# Voltage output (Pin 19) This output is activated when the bus voltage surpasses an upper or lower threshold. In SPI mode: /CS&lt;br /&gt;
== PWM outputs ==&lt;br /&gt;
There is one external PWM output on JP2, Pin 20. It outputs a duty cycle that is proportional to the motor or heatsink temperature or speed. Its offset and gain is software configurable. The frequency is fixed to 17kHz.&lt;br /&gt;
&lt;br /&gt;
There are 6 internal PWM outputs on JP1.  The outputs are 3.3V, 16mA. Frequency is configurable to 4.4, 8.8 or 17.6kHz.&lt;br /&gt;
# PWM Top phase 1 (Pin 6)&lt;br /&gt;
# PWM Bottom phase 1 (Pin 7)&lt;br /&gt;
# PWM Top phase 2 (Pin 8)&lt;br /&gt;
# PWM Bottom phase 2 (Pin 9)&lt;br /&gt;
# PWM Top phase 3 (Pin 10)&lt;br /&gt;
# PWM Bottom phase 3 (Pin 11)&lt;br /&gt;
There is a configurable dead time between top and bottom outputs.&lt;br /&gt;
&lt;br /&gt;
== Analog Inputs and over-current protection ==&lt;br /&gt;
There are 3 external analog inputs on JP2.&lt;br /&gt;
# Throttle input, 0-6.6V (Pin 11). Cutoff frequency 16Hz, input resistance 10k.&lt;br /&gt;
# Redundant throttle or Regen pot input, 0-6.6V (Pin 12). Cutoff frequency 16Hz, input resistance 10k.&lt;br /&gt;
# KTY83 temperature sensor input (Pin 14 positive, Pin 13 negative).  Cutoff frequency 16Hz&lt;br /&gt;
There are 4 internal analog inputs on JP1.&lt;br /&gt;
# Udc (Pin 17) Bus voltage input. 0-3.3V, cutoff frequency 16Hz&lt;br /&gt;
# Heatsink temperature (Pin 18), cutoff frequency 16Hz&lt;br /&gt;
# Il1 (Pin 19) Current phase 1. 0V=-Imax, 2.5V=0A, 5V=Imax (software configurable). Cutoff frequency 48kHz.&lt;br /&gt;
# Il2 (Pin 20) Current phase 2&lt;br /&gt;
The two current sensors are used for the programmable hardware over-current protection. A trip limit can be programmed that configures a hardware comparator. When the given current limit is hit, the PWM signals will be shut down without software interaction.&lt;br /&gt;
&lt;br /&gt;
== Position feedback ==&lt;br /&gt;
Multiple position feedback types are supported via JP1. On the back of the board you will find solder jumper SJ1 that enables a 500 Ohm pull-up resistor that is needed for open collector encoders.&lt;br /&gt;
&lt;br /&gt;
# Single channel pulse encoder - signal connected to Pin 14&lt;br /&gt;
# Dual channel quadrature encoder - connected to Pin 14 (A) and Pin 15 (B)&lt;br /&gt;
# Resolver - Exciter coil connected to Pin 13 (R1) and Pin 12 (R2). Feedback coils positive connected to Pin 14 (S2) and Pin 15 (S3). Negative poles of coils tied together and connected to Pin 16 (S1S4)&lt;br /&gt;
# SinCos feedback chip 0-3.3V - connected to Pin 14 and 15&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
JP1 provides a TTL level (3.3V) UART interface, Pin 3 (RX), Pin 4 (TX)&lt;br /&gt;
&lt;br /&gt;
The communication parameters are fixed to 115200 8N2 (2 stop bits!) and may be raised to 921600.&lt;br /&gt;
&lt;br /&gt;
CAN interface Pin 1 is CANH, Pin 2 is CANL&lt;br /&gt;
&lt;br /&gt;
== Power input ==&lt;br /&gt;
The main board contains a regulated buck converter to power all of its components. The allowed input voltage is 7-26V.&lt;br /&gt;
&lt;br /&gt;
== Pin Header Summary ==&lt;br /&gt;
Pin Header JP1&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Pin&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Signal&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|CANH&lt;br /&gt;
|CANH&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|CANL&lt;br /&gt;
|CANL&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|RX&lt;br /&gt;
|Serial console&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|TX&lt;br /&gt;
|Serial console&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|DESAT&lt;br /&gt;
|Gate driver fault&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|PWM1P&lt;br /&gt;
|Power stage PWM&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|PWM1N&lt;br /&gt;
|Power stage PWM&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|PWM2P&lt;br /&gt;
|Power stage PWM&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|PWM2N&lt;br /&gt;
|Power stage PWM&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|PWM3P&lt;br /&gt;
|Power stage PWM&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|PWM3N&lt;br /&gt;
|Power stage PWM&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|R2&lt;br /&gt;
|Resover excitation R2&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|R1&lt;br /&gt;
|Resover excitation R1&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|ENC_A/S2&lt;br /&gt;
|Encoder channel A or single channel input/Resolver S2&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|ENC_B/S3&lt;br /&gt;
|Encoder channel B/Resolver S3&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|S1S4&lt;br /&gt;
|GND/Resolver center point S1S4&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|TMPHS&lt;br /&gt;
|Heatsink temperature sensor&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|UDC&lt;br /&gt;
|Bus voltage&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|IL1&lt;br /&gt;
|Phase current 1&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|IL2&lt;br /&gt;
|Phase current 2&lt;br /&gt;
|}&lt;br /&gt;
Pin header JP2&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Pin&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Signal&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|VCC&lt;br /&gt;
|Vcc (7-26V)&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|5V&lt;br /&gt;
|500mA output&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|SIG_CRUISE/MOSI&lt;br /&gt;
|Cruise Control Input (12V) or SPI MOSI (3.3V)&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|SIG_START&lt;br /&gt;
|Start input (12V)&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|SIG_BRAKE&lt;br /&gt;
|Brake Input (12V)&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|SIG_FORWARD&lt;br /&gt;
|Forward (12V)&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|SIG_REVERSE&lt;br /&gt;
|Reverse (12V)&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|SIG_EMCYSTOP&lt;br /&gt;
|Emergency stop (12V)&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|SIG_BMS&lt;br /&gt;
|BMS Over/Under Voltage input (12V)&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|THROTTLE2&lt;br /&gt;
|Regen Pot Input (0-6.6V)&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|THROTTLE1&lt;br /&gt;
|Throttle Input (0-6.6V)&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|MTEMP-&lt;br /&gt;
|Motor Temperature Input -&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|MTEMP+&lt;br /&gt;
|Motor Temperature Input +&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|OUT_PRE&lt;br /&gt;
|Precharge Output (3.3V)&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|OUT_DCSW&lt;br /&gt;
|DC contactor output (3.3V)&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|OUT_ERR/SCK&lt;br /&gt;
|Error Signal or SPI SCK (both 3.3V)&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|OUT_BRAKE/MISO&lt;br /&gt;
|Brake output or SPI MISO (both 3.3V)&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|OUT_OUVTG/CS&lt;br /&gt;
|Over/Under Voltage or SPI /CS (both 3.3V)&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|PWM_USER&lt;br /&gt;
|Temperature PWM output (3.3V)&lt;br /&gt;
|}&lt;br /&gt;
== Hardware detection ==&lt;br /&gt;
Because the mini mainboard is primarily meant to be mounted on some sort of base board, we wanted to introduce a detection mechanism for the base board in case any special treatment is needed.&lt;br /&gt;
&lt;br /&gt;
We chose to assign a secondary meaning to the OUT_BRAKE pin because its level can be measured by the ADC. So OUT_BRAKE can be brought to a certain voltage level with a high impedance voltage divider. The voltage level encodes the hardware variant. It will not disturb normal operation because its total resistance is chosen at least one order of magnitude larger than the output impedance of OUT_BRAKE, which is about 270 Ohms.&lt;br /&gt;
[[File:Board address voltage divider.png|thumb]]&lt;br /&gt;
A the upper voltage divider resistor R1 is connected to the &amp;quot;5V&amp;quot; rail which actually sits at 5.3V. R2 is connected to GND&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Variant&lt;br /&gt;
!R1&lt;br /&gt;
!R2&lt;br /&gt;
!voltage&lt;br /&gt;
!ADC&lt;br /&gt;
!+/-3% range&lt;br /&gt;
!Remark&lt;br /&gt;
|-&lt;br /&gt;
| MG&lt;br /&gt;
|47k&lt;br /&gt;
|2k7&lt;br /&gt;
|0.27 V&lt;br /&gt;
|337&lt;br /&gt;
|327-347&lt;br /&gt;
|Not Mini-MB based, upper voltage 5.0V&lt;br /&gt;
|-&lt;br /&gt;
| Tesla M3&lt;br /&gt;
|47k&lt;br /&gt;
|3k3&lt;br /&gt;
|0.33 V&lt;br /&gt;
|407&lt;br /&gt;
|395-419&lt;br /&gt;
|Not Mini-MB based, upper voltage 5.0V&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|3k9&lt;br /&gt;
|0.41 V&lt;br /&gt;
|504&lt;br /&gt;
|489-519&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nissan Leaf Gen3&lt;br /&gt;
|47k&lt;br /&gt;
|4k7&lt;br /&gt;
|0.48 V&lt;br /&gt;
|598&lt;br /&gt;
|580-616&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Renault Zoe Gen1&lt;br /&gt;
|47k&lt;br /&gt;
|5k1&lt;br /&gt;
|0.52 V&lt;br /&gt;
|643&lt;br /&gt;
|624-662&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|5k6&lt;br /&gt;
|0.56 V&lt;br /&gt;
|700&lt;br /&gt;
|679-721&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|6k8&lt;br /&gt;
|0.67 V&lt;br /&gt;
|831&lt;br /&gt;
|806-856&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|7k5&lt;br /&gt;
|0.73 V&lt;br /&gt;
|905&lt;br /&gt;
|878-932&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|8k2&lt;br /&gt;
|0.79 V&lt;br /&gt;
|977&lt;br /&gt;
|948-1006&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|9k1&lt;br /&gt;
|0.86 V&lt;br /&gt;
|1067&lt;br /&gt;
|1035-1099&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|10k&lt;br /&gt;
|0.93 V&lt;br /&gt;
|1154&lt;br /&gt;
|1119-1189&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|12k&lt;br /&gt;
|1.08 V&lt;br /&gt;
|1338&lt;br /&gt;
|1298-1378&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
[[Category:OpenInverter]] [[Category:Inverter]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Mini_Mainboard&amp;diff=5197</id>
		<title>Mini Mainboard</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Mini_Mainboard&amp;diff=5197"/>
		<updated>2024-12-16T18:07:14Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added MG board&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Mini mainboard front.jpg|thumb|Mini mainboard front]]&lt;br /&gt;
The mini mainboard is the smallest form factor openinverter motor control board. It has the same functionality as the [[Main Board Version 3]] but offloads a few components. It is meant to be used as a daughter board on top of an adapter board. The adapter board must (or may) implement:&lt;br /&gt;
&lt;br /&gt;
* The Wifi module socket&lt;br /&gt;
* Relay drivers&lt;br /&gt;
In addition the mini mainboard allows talking to SPI peripherals. Therefore some pins have double mapping:&lt;br /&gt;
&lt;br /&gt;
* SIG_CRUISE: MOSI (SJ3 must be closed to the right side for that).&lt;br /&gt;
* OUT_BRAKE: MISO&lt;br /&gt;
* OUT_ERR: SCK&lt;br /&gt;
* OUT_OUVTG: /CS&lt;br /&gt;
Like previous boards it contains a 5V switching regulator that can be loaded with about 500 mA. Alternatively It can be powered with a single 5V rail, which has to sit at 5.3V though for sufficient resolver excitation amplitude.&lt;br /&gt;
&lt;br /&gt;
As opposed to earlier mainboards the current sensor inputs are now designed for 5V input, i.e. 2.5V @ 0A. This interfaces directly with most current sensors that OEMs use and also with Melexis chips, LEM HTFS and Tamura L06P current sensors.&lt;br /&gt;
== Digital inputs ==&lt;br /&gt;
There are external 7 digital inputs on JP2. A voltage of &amp;gt;7V is interpreted as a logical 1 (high). They all have a cutoff frequency of 40Hz.&lt;br /&gt;
# Cruise Control (Pin 4). This input sets the current motor speed as the set point for cruise control. Cruise control is disabled with the Brake input. In SPI mode: MOSI&lt;br /&gt;
# Start (Pin 5). This input starts the inverter operation.&lt;br /&gt;
# Brake input (Pin 6). This input is connected to the brake pedal. It sets a configurable negative torque (regen) which overrides the throttle. I.e. if you press both, brake pedal and throttle, the throttle is ignored.&lt;br /&gt;
# Forward (Pin 7). If this input is high the motor spins forward.&lt;br /&gt;
# Reverse (Pin 8). If this input is high the motor spins backward. When neither input is high the motor will not spin at all.&lt;br /&gt;
# Emergency stop (Pin 9). The PWM is enabled as long as this input is high and shut down as soon as it goes low.&lt;br /&gt;
# BMS input (Pin 10). This input limits the motor torque (both negative and positive) if a BMS signals an over or undervoltage condition. It is active high, i.e. high means over/undervoltage.&lt;br /&gt;
There is one more digital inputs on JP1&lt;br /&gt;
# Gate driver error/Desat (Pin 5) This pin is pulled high (5V). When pulled low an error is signalled and the PWM is inhibited&lt;br /&gt;
&lt;br /&gt;
== Digital outputs ==&lt;br /&gt;
There are 5 outputs on JP2. They just source 3.3V with 220 Ohm series resistance and are meant to drive FETs or NPN transistors. &lt;br /&gt;
# Precharge output (Pin 15) This output is activated when the inverter is powered up. It is disabled as soon as the DC contactor is enabled.&lt;br /&gt;
# DC contactor output (Pin 16) This output is activated when the bus voltage is above a given threshold and the start pin goes high. It is disabled on overcurrent, motor overheat and emergency stop.&lt;br /&gt;
# Error output (Pin 17) This output is activated on over current, motor overheat, emergency stop, throttle out of range. In SPI mode: SCK&lt;br /&gt;
# Brake output (Pin 18) This output is high when potnom reaches a certain negative threshold. The purpose is to switch on the brake light on a certain regen level At startup this pin is configured as an analog input to sense some preset adapter boards In SPI mode: MISO&lt;br /&gt;
# Voltage output (Pin 19) This output is activated when the bus voltage surpasses an upper or lower threshold. In SPI mode: /CS&lt;br /&gt;
== PWM outputs ==&lt;br /&gt;
There is one external PWM output on JP2, Pin 20. It outputs a duty cycle that is proportional to the motor or heatsink temperature or speed. Its offset and gain is software configurable. The frequency is fixed to 17kHz.&lt;br /&gt;
&lt;br /&gt;
There are 6 internal PWM outputs on JP1.  The outputs are 3.3V, 16mA. Frequency is configurable to 4.4, 8.8 or 17.6kHz.&lt;br /&gt;
# PWM Top phase 1 (Pin 6)&lt;br /&gt;
# PWM Bottom phase 1 (Pin 7)&lt;br /&gt;
# PWM Top phase 2 (Pin 8)&lt;br /&gt;
# PWM Bottom phase 2 (Pin 9)&lt;br /&gt;
# PWM Top phase 3 (Pin 10)&lt;br /&gt;
# PWM Bottom phase 3 (Pin 11)&lt;br /&gt;
There is a configurable dead time between top and bottom outputs.&lt;br /&gt;
&lt;br /&gt;
== Analog Inputs and over-current protection ==&lt;br /&gt;
There are 3 external analog inputs on JP2.&lt;br /&gt;
# Throttle input, 0-6.6V (Pin 11). Cutoff frequency 16Hz, input resistance 10k.&lt;br /&gt;
# Redundant throttle or Regen pot input, 0-6.6V (Pin 12). Cutoff frequency 16Hz, input resistance 10k.&lt;br /&gt;
# KTY83 temperature sensor input (Pin 14 positive, Pin 13 negative).  Cutoff frequency 16Hz&lt;br /&gt;
There are 4 internal analog inputs on JP1.&lt;br /&gt;
# Udc (Pin 17) Bus voltage input. 0-3.3V, cutoff frequency 16Hz&lt;br /&gt;
# Heatsink temperature (Pin 18), cutoff frequency 16Hz&lt;br /&gt;
# Il1 (Pin 19) Current phase 1. 0V=-Imax, 2.5V=0A, 5V=Imax (software configurable). Cutoff frequency 48kHz.&lt;br /&gt;
# Il2 (Pin 20) Current phase 2&lt;br /&gt;
The two current sensors are used for the programmable hardware over-current protection. A trip limit can be programmed that configures a hardware comparator. When the given current limit is hit, the PWM signals will be shut down without software interaction.&lt;br /&gt;
&lt;br /&gt;
== Position feedback ==&lt;br /&gt;
Multiple position feedback types are supported via JP1. On the back of the board you will find solder jumper SJ1 that enables a 500 Ohm pull-up resistor that is needed for open collector encoders.&lt;br /&gt;
&lt;br /&gt;
# Single channel pulse encoder - signal connected to Pin 14&lt;br /&gt;
# Dual channel quadrature encoder - connected to Pin 14 (A) and Pin 15 (B)&lt;br /&gt;
# Resolver - Exciter coil connected to Pin 13 (R1) and Pin 12 (R2). Feedback coils positive connected to Pin 14 (S2) and Pin 15 (S3). Negative poles of coils tied together and connected to Pin 16 (S1S4)&lt;br /&gt;
# SinCos feedback chip 0-3.3V - connected to Pin 14 and 15&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
JP1 provides a TTL level (3.3V) UART interface, Pin 3 (RX), Pin 4 (TX)&lt;br /&gt;
&lt;br /&gt;
The communication parameters are fixed to 115200 8N2 (2 stop bits!) and may be raised to 921600.&lt;br /&gt;
&lt;br /&gt;
CAN interface Pin 1 is CANH, Pin 2 is CANL&lt;br /&gt;
&lt;br /&gt;
== Power input ==&lt;br /&gt;
The main board contains a regulated buck converter to power all of its components. The allowed input voltage is 7-26V.&lt;br /&gt;
&lt;br /&gt;
== Pin Header Summary ==&lt;br /&gt;
Pin Header JP1&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Pin&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Signal&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|CANH&lt;br /&gt;
|CANH&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|CANL&lt;br /&gt;
|CANL&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|RX&lt;br /&gt;
|Serial console&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|TX&lt;br /&gt;
|Serial console&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|DESAT&lt;br /&gt;
|Gate driver fault&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|PWM1P&lt;br /&gt;
|Power stage PWM&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|PWM1N&lt;br /&gt;
|Power stage PWM&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|PWM2P&lt;br /&gt;
|Power stage PWM&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|PWM2N&lt;br /&gt;
|Power stage PWM&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|PWM3P&lt;br /&gt;
|Power stage PWM&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|PWM3N&lt;br /&gt;
|Power stage PWM&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|R2&lt;br /&gt;
|Resover excitation R2&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|R1&lt;br /&gt;
|Resover excitation R1&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|ENC_A/S2&lt;br /&gt;
|Encoder channel A or single channel input/Resolver S2&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|ENC_B/S3&lt;br /&gt;
|Encoder channel B/Resolver S3&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|S1S4&lt;br /&gt;
|GND/Resolver center point S1S4&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|TMPHS&lt;br /&gt;
|Heatsink temperature sensor&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|UDC&lt;br /&gt;
|Bus voltage&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|IL1&lt;br /&gt;
|Phase current 1&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|IL2&lt;br /&gt;
|Phase current 2&lt;br /&gt;
|}&lt;br /&gt;
Pin header JP2&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Pin&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Signal&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|VCC&lt;br /&gt;
|Vcc (7-26V)&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|5V&lt;br /&gt;
|500mA output&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|SIG_CRUISE/MOSI&lt;br /&gt;
|Cruise Control Input (12V) or SPI MOSI (3.3V)&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|SIG_START&lt;br /&gt;
|Start input (12V)&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|SIG_BRAKE&lt;br /&gt;
|Brake Input (12V)&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|SIG_FORWARD&lt;br /&gt;
|Forward (12V)&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|SIG_REVERSE&lt;br /&gt;
|Reverse (12V)&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|SIG_EMCYSTOP&lt;br /&gt;
|Emergency stop (12V)&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|SIG_BMS&lt;br /&gt;
|BMS Over/Under Voltage input (12V)&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|THROTTLE2&lt;br /&gt;
|Regen Pot Input (0-6.6V)&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|THROTTLE1&lt;br /&gt;
|Throttle Input (0-6.6V)&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|MTEMP-&lt;br /&gt;
|Motor Temperature Input -&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|MTEMP+&lt;br /&gt;
|Motor Temperature Input +&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|OUT_PRE&lt;br /&gt;
|Precharge Output (3.3V)&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|OUT_DCSW&lt;br /&gt;
|DC contactor output (3.3V)&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|OUT_ERR/SCK&lt;br /&gt;
|Error Signal or SPI SCK (both 3.3V)&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|OUT_BRAKE/MISO&lt;br /&gt;
|Brake output or SPI MISO (both 3.3V)&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|OUT_OUVTG/CS&lt;br /&gt;
|Over/Under Voltage or SPI /CS (both 3.3V)&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|PWM_USER&lt;br /&gt;
|Temperature PWM output (3.3V)&lt;br /&gt;
|}&lt;br /&gt;
== Hardware detection ==&lt;br /&gt;
Because the mini mainboard is primarily meant to be mounted on some sort of base board, we wanted to introduce a detection mechanism for the base board in case any special treatment is needed.&lt;br /&gt;
&lt;br /&gt;
We chose to assign a secondary meaning to the OUT_BRAKE pin because its level can be measured by the ADC. So OUT_BRAKE can be brought to a certain voltage level with a high impedance voltage divider. The voltage level encodes the hardware variant. It will not disturb normal operation because its total resistance is chosen at least one order of magnitude larger than the output impedance of OUT_BRAKE, which is about 270 Ohms.&lt;br /&gt;
[[File:Board address voltage divider.png|thumb]]&lt;br /&gt;
A the upper voltage divider resistor R1 is connected to the &amp;quot;5V&amp;quot; rail which actually sits at 5.3V. R2 is connected to GND&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Variant&lt;br /&gt;
!R1&lt;br /&gt;
!R2&lt;br /&gt;
!voltage&lt;br /&gt;
!ADC&lt;br /&gt;
!+/-3% range&lt;br /&gt;
!Remark&lt;br /&gt;
|-&lt;br /&gt;
| MG&lt;br /&gt;
|47k&lt;br /&gt;
|2k7&lt;br /&gt;
|0.27 V&lt;br /&gt;
|357&lt;br /&gt;
|327-347&lt;br /&gt;
|Upper voltage 5.0V&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|3k3&lt;br /&gt;
|0.35 V&lt;br /&gt;
|431&lt;br /&gt;
|418-444&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|3k9&lt;br /&gt;
|0.41 V&lt;br /&gt;
|504&lt;br /&gt;
|489-519&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nissan Leaf Gen3&lt;br /&gt;
|47k&lt;br /&gt;
|4k7&lt;br /&gt;
|0.48 V&lt;br /&gt;
|598&lt;br /&gt;
|580-616&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Renault Zoe Gen1&lt;br /&gt;
|47k&lt;br /&gt;
|5k1&lt;br /&gt;
|0.52 V&lt;br /&gt;
|643&lt;br /&gt;
|624-662&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|5k6&lt;br /&gt;
|0.56 V&lt;br /&gt;
|700&lt;br /&gt;
|679-721&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|6k8&lt;br /&gt;
|0.67 V&lt;br /&gt;
|831&lt;br /&gt;
|806-856&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|7k5&lt;br /&gt;
|0.73 V&lt;br /&gt;
|905&lt;br /&gt;
|878-932&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|8k2&lt;br /&gt;
|0.79 V&lt;br /&gt;
|977&lt;br /&gt;
|948-1006&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|9k1&lt;br /&gt;
|0.86 V&lt;br /&gt;
|1067&lt;br /&gt;
|1035-1099&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|10k&lt;br /&gt;
|0.93 V&lt;br /&gt;
|1154&lt;br /&gt;
|1119-1189&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47k&lt;br /&gt;
|12k&lt;br /&gt;
|1.08 V&lt;br /&gt;
|1338&lt;br /&gt;
|1298-1378&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
[[Category:OpenInverter]] [[Category:Inverter]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Foccci&amp;diff=5190</id>
		<title>Foccci</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Foccci&amp;diff=5190"/>
		<updated>2024-12-12T18:19:06Z</updated>

		<summary type="html">&lt;p&gt;Johu: /* Errors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Disclaimer: This Page is still work in progress! Any information written here is a draft only and should be handled as such. Contributions more then welcome. If you have questions please ask them in the discussion section of the page or in the OpenInvert Forum.&lt;br /&gt;
[[File:Foccci pinout.svg|thumb|Foccci (v4.5) pinout]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Foccci 4.5b pinout.png|thumb|Foccci 4.5b / 5 / 5.1 pinout]]&lt;br /&gt;
This page is about FOCCCI. FOCCCI is an open source CCS Charge Interface started by Uhi and developed by the OpenInverter Community.&lt;br /&gt;
&lt;br /&gt;
Foccci is the hardware part, and on it runs the software Clara.&lt;br /&gt;
&lt;br /&gt;
Here you will find documentation on the Hardware (and Clara software), where to get it (or how to build it yourself), News regarding the development and many more great things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=79 Foccci for sale on OpenInverter Shop]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/uhi22/foccci Foccci on Github.]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/uhi22/ccs32clara Clara on Github.] &lt;br /&gt;
&lt;br /&gt;
[https://openinverter.org/forum/viewtopic.php?t=3727 Foccci in the OpenInverter Forum.]&lt;br /&gt;
&lt;br /&gt;
== Pin description ==&lt;br /&gt;
&lt;br /&gt;
=== External connector (&amp;quot;Deutsch Header&amp;quot;) ===&lt;br /&gt;
Starting version 4.5b the pins were reshuffled to allow one wiring loom going to the charge port and one to the car side. Changed pins are &#039;&#039;&#039;bold&#039;&#039;&#039;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Short name&lt;br /&gt;
!Pin up to version 4.5a&lt;br /&gt;
!Pin for version 4.5b, 5, 5.1&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|TEMP1&lt;br /&gt;
|A1&lt;br /&gt;
|A1&lt;br /&gt;
|Power pin temperature sensor. It is pulled up to 3.3V with 10k and the sensor must pull down to GND. Sensor characteristics are configurable in software&lt;br /&gt;
|-&lt;br /&gt;
|TEMP2&lt;br /&gt;
|A2&lt;br /&gt;
|A2&lt;br /&gt;
|As above&lt;br /&gt;
|-&lt;br /&gt;
|TEMP3&lt;br /&gt;
|A3&lt;br /&gt;
|A3&lt;br /&gt;
|As Above&lt;br /&gt;
|-&lt;br /&gt;
|LOCKFB&lt;br /&gt;
|A4&lt;br /&gt;
|A4&lt;br /&gt;
|Feedback signal from connector lock. Pulled up to 3.3V with 10k, so feedback must pull down to GND. Thresholds configurable in software&lt;br /&gt;
|-&lt;br /&gt;
|IN_U_HV&lt;br /&gt;
|A5&lt;br /&gt;
|&#039;&#039;&#039;B10&#039;&#039;&#039;&lt;br /&gt;
|Analog input 0 to 5V, with pull-down-resistor. Can be used to measure the charge port voltage, using a converter board, e.g. the &amp;quot;muehlpower board&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|CP&lt;br /&gt;
|A6&lt;br /&gt;
|A6&lt;br /&gt;
|CP (Control Pilot) pin from charge port&lt;br /&gt;
|-&lt;br /&gt;
|SW2(_LS)&lt;br /&gt;
|A7&lt;br /&gt;
|&#039;&#039;&#039;B4&#039;&#039;&#039;&lt;br /&gt;
|Output for charge port contactor 2. Low side switch until Foccci 4.4, high side switch starting 4.5&lt;br /&gt;
Controls one of the contactors to make the connection between the HV battery and the vehicle inlet.&lt;br /&gt;
&lt;br /&gt;
The output can drive inductive load without additional circuits. It will clamp the turn-off voltage to ~40V. The driver has protection against shortcut and thermal overload.&lt;br /&gt;
&lt;br /&gt;
The output can be configured to be just digital on/off, and can also be configured to use PWM. BUT: In Foccci versions 4.2 and 4.3 (maybe more) the output driver is only capable of slow PWM, which is hearable and may cause trouble with the contactors. So it is recommended to NOT use the PWM feature, and instead use contactors which do not require economizing or use external economizers. In case you want the PWM nevertheless, you need a external freewheeling diode.&lt;br /&gt;
&lt;br /&gt;
Starting Foccci 4.5 PWM is working as intended at 18 kHz. It is a high side output starting v4.5, so the other side of the contactor must be connected to GND. Before v4.5 it is a low side output so the other side must be connected to 12V&lt;br /&gt;
|-&lt;br /&gt;
|LOCK_MOT2&lt;br /&gt;
|A8&lt;br /&gt;
|A8&lt;br /&gt;
|Motor driver output for charge port lock servo&lt;br /&gt;
|-&lt;br /&gt;
|LOCK_MOT1&lt;br /&gt;
|A9&lt;br /&gt;
|A9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PP&lt;br /&gt;
|A10&lt;br /&gt;
|&#039;&#039;&#039;A5&#039;&#039;&#039;&lt;br /&gt;
|PP (Proximity Pilot) pin from charge port. If you want Foccci to wake up when an unpowered charge cord is plugged in you must close JP3 to pin 1 (towards R7). There mustn&#039;t be a pull-down resistor in the charge port in this case as that would permanently keep Foccci awake&lt;br /&gt;
|-&lt;br /&gt;
|5V&lt;br /&gt;
|A11&lt;br /&gt;
|&#039;&#039;&#039;B11&#039;&#039;&#039;&lt;br /&gt;
|5V, 500mA e.g. for supplying voltage sense board. This is an OUTPUT of Foccci. Do not apply an external voltage source here. Foccci contains a step-down-converter from the 12V supply to this 5V output.&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|A12&lt;br /&gt;
|&#039;&#039;&#039;B12&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CANH&lt;br /&gt;
|B1&lt;br /&gt;
|B1&lt;br /&gt;
|CAN communication&lt;br /&gt;
|-&lt;br /&gt;
|CANL&lt;br /&gt;
|B2&lt;br /&gt;
|B2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n.c.&lt;br /&gt;
|B3&lt;br /&gt;
|&lt;br /&gt;
|Unused pins were assigned GND in 4.5b&lt;br /&gt;
|-&lt;br /&gt;
|n.c.&lt;br /&gt;
|B4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|B5&lt;br /&gt;
|B5, &#039;&#039;&#039;B3&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SW1(_LS)&lt;br /&gt;
|B6&lt;br /&gt;
|B6&lt;br /&gt;
|Output for the charge port contactor 1. See description of SW2(_LS).&lt;br /&gt;
|-&lt;br /&gt;
|WAKEUP&lt;br /&gt;
|B7&lt;br /&gt;
|B7&lt;br /&gt;
|Wakeup bus. Momentarily (or constantly) applying 12V wakes up the board. In the other direction Foccci can wake up (or supply with up to 1A) other devices via a 12V high side switch&lt;br /&gt;
|-&lt;br /&gt;
|12V&lt;br /&gt;
|B8&lt;br /&gt;
|B8&lt;br /&gt;
|Supply voltage, always on. 9 to 24V are fine.&lt;br /&gt;
|-&lt;br /&gt;
|LED_RED&lt;br /&gt;
|B9&lt;br /&gt;
|&#039;&#039;&#039;A12&#039;&#039;&#039;&lt;br /&gt;
|Status LEDs&lt;br /&gt;
|-&lt;br /&gt;
|LED_GREEN&lt;br /&gt;
|B10&lt;br /&gt;
|&#039;&#039;&#039;A11&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LED_BLUE&lt;br /&gt;
|B11&lt;br /&gt;
|&#039;&#039;&#039;A10&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BUTTON&lt;br /&gt;
|B12&lt;br /&gt;
|&#039;&#039;&#039;A7&#039;&#039;&#039;&lt;br /&gt;
|Wakes up Foccci or stops an ongoing charging session&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Internal connectors ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!short name&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|UART TX&lt;br /&gt;
|Provides logging information, 921600 Baud. See also https://github.com/uhi22/ccs32clara/blob/main/doc/clara_user_manual.md#serial-logging&lt;br /&gt;
|-&lt;br /&gt;
|UART RX&lt;br /&gt;
|Not used&lt;br /&gt;
|-&lt;br /&gt;
|SWCLK&lt;br /&gt;
|for flashing with STLINK&lt;br /&gt;
|-&lt;br /&gt;
|SWDIO&lt;br /&gt;
|for flashing with STLINK&lt;br /&gt;
|}&lt;br /&gt;
== Integrating Foccci with your car/BMS==&lt;br /&gt;
[[File:Foccci CCS2.png|thumb|Foccci with (Orion) BMS]]&lt;br /&gt;
Depending on your use case Foccci has to communicate with one or more components in your car. All in-car communication happens via a single CAN bus.&lt;br /&gt;
===Basic communication considerations ===&lt;br /&gt;
Foccci can be configured to run at various baud rates and defaults to 500k. The Wifi interface mentioned below is hard coded to 500k. So when configuring a different baud rate you will loose communication with the Wifi interface. This might be fixed in the future by allowing variable baud rates for the wifi interface. Bottom line: &#039;&#039;&#039;keep it at 500k.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Apart from that it is mostly sufficient if Foccci can communicate, or more precisely, listen to the BMS. Foccci uses the flexible [[CAN communication|CAN mapping]] known from other OI firmware. There are 5 key parameters that need to be received via CAN:&lt;br /&gt;
*&#039;&#039;&#039;ChargeCurrent&#039;&#039;&#039;: this is the single most important item. It is directly relayed to the charger and specifies the current the battery can accept at the given moment. This depends on battery voltage, temperature and other things to be determined by the BMS. &#039;&#039;Foccci itself does no battery monitoring of any kind, it is completely down to the BMS to specify a safe charge current&#039;&#039;&#039;&#039;&#039;.&#039;&#039;&#039; When this value is not updated for more than 2 seconds the charging session is terminated.&lt;br /&gt;
* &#039;&#039;&#039;BatteryVoltage&#039;&#039;&#039;: this item is important for precharging the CCS chargers output to the momentary battery voltage. Most BMSes output the total pack voltage in a CAN message&lt;br /&gt;
* &#039;&#039;&#039;TargetVoltage&#039;&#039;&#039;: In theory this is the maximum voltage you want the battery to be charged to. In practise the maximum battery voltage MUST be governed by specifying an appropriate ChargeCurrent. More importantly many chargers cut back charge power when &#039;&#039;approaching&#039;&#039; this voltage resulting in poor charging performance towards the top end. So in practise you want to set this to a voltage about 10V above charge end voltage of your battery.&lt;br /&gt;
*&#039;&#039;&#039;soc&#039;&#039;&#039;: This is purely informative as far as we know. It displays the batteries state of charge on the chargers display&lt;br /&gt;
*&#039;&#039;&#039;enable&#039;&#039;&#039;: this is optional as it defaults to always enabled. It can be used to completely terminate the charging session by setting it to 0.&lt;br /&gt;
===Using Foccci as a charge coordinator===&lt;br /&gt;
This topic is still work in progress. The CCS connector, as its name suggests, combines both AC and DC charging in one socket. As long as we use the socket only for DC charging it is very easy to wire up. But once we also use the AC functionality we have to spend further thought on this.&lt;br /&gt;
&lt;br /&gt;
The two pins PP and CP communicate information about the cable limit and the momentary current limit of the AC outlet. PP is a simple resistor between PE and PP that is evaluated by putting a test current onto it. This concludes that this signal can only be used by one device. CP is a bit more complex. When plugging in it communicates with a 2k7 resistor to PE that the cable is now connected to a car. From this simple fact we can again conclude that CP is a peer-to-peer signal only. Once the car is ready to charge it switches another 1k3 resistor in parallel to the 2k7 resistor. Only then the AC voltage is switched to the power pins. Lastly, the AC outlet encodes the momentary current limit in a PWM duty cycle.&lt;br /&gt;
&lt;br /&gt;
Foccci does all the evaluation and makes the result available as spot values that can in turn be mapped to CAN:&lt;br /&gt;
*EvseAcCurrentLimit&lt;br /&gt;
*CableCurrentLimit&lt;br /&gt;
To activate the 1k3 resistor aka activating the AC outlet we map AcObcState. It must be set to 2 for activation.&lt;br /&gt;
&lt;br /&gt;
Some chargers want to evaluate the CP (and perhaps PP) signal themselves. This issue can be solved with a change over switch that disconnects Foccci from CP while AC charging. Alternatively the CP signal can be spoofed and the charge current controlled by CAN to satisfy the limits of the AC outlet (EVSE).&lt;br /&gt;
== Wakeup ==&lt;br /&gt;
For charging it is particularly interesting to wake up Foccci itself and necessary subsystems &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?p=66547#p66547&amp;lt;/ref&amp;gt; when plugging in a charge cord. To allow for this, Foccci has various wakeup sources and also can wake up other devices. For wakeup to work, Foccci must be permanently supplied with 12V (it will draw no current when asleep). &#039;&#039;&#039;Hardware version V4.5 and above required for wakeup.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Here are the sources:&lt;br /&gt;
&lt;br /&gt;
# Wakeup pin - bidirectional - level triggered (12V)&lt;br /&gt;
# Button - level triggered (GND)&lt;br /&gt;
# PP - optional via solder bridge - level triggered&lt;br /&gt;
# CP - Edge triggered&lt;br /&gt;
&lt;br /&gt;
So the first 3 inputs will force the Foccci on. It can&#039;t turn itself off as long as that wakeup source is active. The last input will only trigger when transitioning from invalid to valid PWM and then Foccci can decide how long to stay awake. All modes always work regardless of software settings - except PP wakeup which can be turned off in hardware (JP3).&lt;br /&gt;
&lt;br /&gt;
The wakeup output on the other hand is software-defined. Foccci offers the following options&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Level&#039;&#039;&#039; - as long as the Foccci doesn&#039;t decide to turn off, we keep Wakeup on as well&lt;br /&gt;
# &#039;&#039;&#039;Pulse&#039;&#039;&#039; - When Foccci boots generate a 1s wakeup pulse&lt;br /&gt;
# &#039;&#039;&#039;LevelOnValidCp&#039;&#039;&#039; - As long as CP is pulsing we keep wakeup on&lt;br /&gt;
# &#039;&#039;&#039;PulseOnValidCp&#039;&#039;&#039; - Whenever we transition from non-pulsing to pulsing CP we generate a 1s pulse&lt;br /&gt;
# &#039;&#039;&#039;LevelOnValidPp&#039;&#039;&#039; - As long as PP is valid keep wakeup on&lt;br /&gt;
&lt;br /&gt;
The output can supply about 1A and 12V. When running loads larger than that (e.g. a pump) use a relay to amplify the current capability.&lt;br /&gt;
&lt;br /&gt;
It depends on your vehicle architecture how you organize the wakeup. Here are some examples:&lt;br /&gt;
&lt;br /&gt;
=== Basic wakeup ===&lt;br /&gt;
wakeup via PP enabled, WakeupPinFunc=LevelOnValidPp&lt;br /&gt;
&lt;br /&gt;
# Foccci turns on as soon as even a non-powered charging cable is plugged in&lt;br /&gt;
# Wakeup signal is turned on&lt;br /&gt;
# BMS, VCU etc. is turned on (directly powered from wakeup as it can supply about 1A)&lt;br /&gt;
# VCU can detect via the level of the wakeup signal that a cable is plugged in and inhibit drive&lt;br /&gt;
# When charging cable is unplugged (as in PP lost), Wakeup is turned off and the VCU can allow driving&lt;br /&gt;
# If we wanted to report e.g. welded charge port relays Foccci would have to keep itself running until the car is started in drive mode again. Then something can be displayed on the instrument cluster. Of course this will time out eventually. Should be fine as you at least have to pull away from the rapid charger after charging.&lt;br /&gt;
# When charging is paused all ECUs stay on and consume 12V power (or HV power via DC/DC)&lt;br /&gt;
&lt;br /&gt;
=== Advanced Wakeup ===&lt;br /&gt;
wakeup via PP disabled, WakeupPinFunc=PulseOnValidCp. Here we have a bidirectional wakeup bus. Any ECU connected to it can send or receive wakeup events and the individual ECUs can decide whether they are needed for a particular task or not.&lt;br /&gt;
&lt;br /&gt;
# Foccci turns on as soon as CP PWM starts. So either a cable is being plugged in or is already plugged in and now wants to charge&lt;br /&gt;
# It then turns on the wakeup output for 1s and wakes up all other ECUs&lt;br /&gt;
# The relevant ECUs will detect that we want to charge and stay on, the other ones turn off&lt;br /&gt;
# If we turn on ignition the VCU is already on and in charge mode and can inhibit drive&lt;br /&gt;
# If charging is paused (i.e. cable plugged in but no CP PWM) and we turn on ignition the VCU wakes up the Foccci and queries PP status. If something is plugged in drive is inhbited&lt;br /&gt;
# If Foccci detects an error e.g. welded relays, it stores that error to flash. When woken up by the VCU it report its non-zero error code&lt;br /&gt;
# When charging is paused, ALL ECUs can turn off and no 12V power is consumed. When CP comes back, the cycle restarts&lt;br /&gt;
&lt;br /&gt;
The second approach is more versatile but it also means all devices need to support this method.&lt;br /&gt;
&lt;br /&gt;
So I think there can be an intermediate approach:&lt;br /&gt;
&lt;br /&gt;
=== Semi-advanced wakeup ===&lt;br /&gt;
Here we only have a wakeup bus between VCU and Foccci. All other devices are powered up by other means, like VCU controlled relays. Wakeup via PP is disabled, WakeupPinFunc=LevelOnValidCp&lt;br /&gt;
&lt;br /&gt;
# Foccci turns on as soon as CP PWM starts. So either a cable is being plugged in or is already plugged in and now wants to charge&lt;br /&gt;
# It then turns on the wakeup output this waking up the VCU&lt;br /&gt;
# The VCU determines via CAN message from Foccci whether we want to AC or DC charge and turns on needed components. Components needed in both cases that have low power consumption (e.g. BMS) can also be driven from the wakeup signal directly&lt;br /&gt;
# If we turn on ignition the VCU is already on and in charge mode and can inhibit drive&lt;br /&gt;
# If charging is paused (i.e. cable plugged in but no CP PWM) and we turn on ignition the VCU wakes up the Foccci and queries PP status. If something is plugged in drive is inhbited&lt;br /&gt;
# If Foccci detects an error e.g. welded relays, it stores that error to flash. When woken up by the VCU it report its non-zero error code&lt;br /&gt;
# When charging is paused, ALL ECUs will turn off and no 12V power is consumed. When CP comes back, the cycle restarts&lt;br /&gt;
&lt;br /&gt;
== Configuring Foccci via CAN ==&lt;br /&gt;
Foccci exposes only one single CAN interface for vehicle communication and initial configuration. So we need a CAN counterpart to talk to it.&lt;br /&gt;
&lt;br /&gt;
There are two main approaches to this: a) use a command line tool &amp;lt;ref&amp;gt;OIC https://openinverter.org/forum/viewtopic.php?t=2907&amp;lt;/ref&amp;gt; or b) use an ESP based CAN module &amp;lt;ref&amp;gt;ESP32 CAN Web Interface https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=59&amp;amp;product_id=78&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both ways require knowing Focccis so called Node Id (similar to an IP address on a local network). By default this is 22. You can enter this node id on the bottom left navigation bar.&lt;br /&gt;
== Parameters==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Unit&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Min&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Max&#039;&#039;&#039; &lt;br /&gt;
|&#039;&#039;&#039;Default&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Hardware Config&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|UdcDivider&lt;br /&gt;
|dig/V &lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|10 &lt;br /&gt;
|Division factor from ADC digits to V of external voltage measurement board.&lt;br /&gt;
In other words: The UdcDivider is the configuration parameter which defines the scaling of the physical inlet voltage measurement circuit. That&#039;s why it is only relevant if a physical inlet voltage measurement circuit is present, and if the parameter InletVtgSrc is 1, means the Foccci will measure the inlet voltage with the analog input. CAN mapping makes no sense for the UdcDivider, because it is a fix value. It is the ratio between the voltage on the inlet and the digital value on the AD converter.&lt;br /&gt;
|-&lt;br /&gt;
|EconomizerDuty&lt;br /&gt;
|%&lt;br /&gt;
| 0&lt;br /&gt;
|100&lt;br /&gt;
| 100&lt;br /&gt;
|Contactor economizer duty cycle. Contactors are always turned on with 12V for 1s then drop to this value. Set to 100% if your contactor has a built-in economizer &lt;br /&gt;
|-&lt;br /&gt;
|InletVtgSrc&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
| 0&lt;br /&gt;
|Inlet Voltage Source. There are three option where Foccci gets the CCS inlet voltage from:&lt;br /&gt;
0 - Charger output voltage (EVSEPresentVoltage) is considered equal to charge port inlet voltage 1 - Analog input U_IN_HV is used for measuring charge port inlet voltage&lt;br /&gt;
&lt;br /&gt;
2 - Charge port inlet voltage is provided via CAN - don&#039;t forget to map something to InletVoltage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The InletVoltage is important for precharging, while the contactors are still open. The car (Foccci) will close the contactors, if the inlet voltage is near to the battery voltage. After closing the contactors, it is the battery voltage (besides some cable losses), and out of interest. The most straight forward solution to measure the inlet voltage is to rely on what the charging station tells us. It reports the voltage on the CCS plug in EVSEPresentVoltage. With configuring InletVtgSrc=0 we tell Foccci to use the EVSEPresentVoltage. In this case, neither an analog inlet voltage measuring circuit nor a separate gadget which provides the inlet voltage via CAN is necessary. For most users this will be fine (even OEM cars use this approach).&lt;br /&gt;
|-&lt;br /&gt;
|LockDuty&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
| 100&lt;br /&gt;
|30&lt;br /&gt;
|H-bridge duty cycle for operating the lock. Use negative value if lock polarity is swapped&lt;br /&gt;
|-&lt;br /&gt;
| LockRunTime&lt;br /&gt;
|ms &lt;br /&gt;
|0&lt;br /&gt;
|10000&lt;br /&gt;
|1000&lt;br /&gt;
|Timeout for lock operation&lt;br /&gt;
|-&lt;br /&gt;
|LockClosedThresh&lt;br /&gt;
| dig&lt;br /&gt;
| 0&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
| Lock feedback value for closed&lt;br /&gt;
|-&lt;br /&gt;
|LockOpenThresh&lt;br /&gt;
| dig&lt;br /&gt;
| 0&lt;br /&gt;
|4095 &lt;br /&gt;
| 0&lt;br /&gt;
| Lock feedback value for open - if equal to lockclosethr no feedback is assumed and lock is operated timed &lt;br /&gt;
|-&lt;br /&gt;
| ppvariant&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|9&lt;br /&gt;
|0&lt;br /&gt;
|Various circuit variations exist for PP resistor measurement.&lt;br /&gt;
&amp;quot;0&amp;quot; is for the variant with 1k pull-up to 3.3V, like old the old Foccci 4.1&lt;br /&gt;
&amp;quot;1&amp;quot; is for the variant with 330 ohm pull-up to 5V and 3k pull-down.&lt;br /&gt;
&amp;quot;2&amp;quot; is for the variant with 330 ohm pull-up to 5V and NO pull-down.&lt;br /&gt;
Foccci 4.5 ususally has NO pulldown, except the related solder jumper was closed.&lt;br /&gt;
|-&lt;br /&gt;
|WakeupPinFunc&lt;br /&gt;
|&lt;br /&gt;
| 0&lt;br /&gt;
|4&lt;br /&gt;
|0&lt;br /&gt;
| Configure what the wakeup pin does. See [[Foccci#Wakeup|Wakeup]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Communication&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|NodeId&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|63&lt;br /&gt;
|22&lt;br /&gt;
|CANOpen node id for SDO requests &lt;br /&gt;
|-&lt;br /&gt;
|CanSpeed&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
| 4&lt;br /&gt;
|2&lt;br /&gt;
|Baud rate of CAN interface 0=125k, 1=250k, 2=500k, 3=800k, 4=1M - &#039;&#039;&#039;when configuring this != 500k you have to change it also for your ESP web interface!&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Charge Parameters&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|MaxPower&lt;br /&gt;
|kW&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
| 100&lt;br /&gt;
|Absolute maximum charge power. Foccci will announce this value in the ChargeParameterDiscoveryRequest message in the element EVMaximumPowerLimit. The charger may or may not respect this limitation. &lt;br /&gt;
|-&lt;br /&gt;
|MaxVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|410&lt;br /&gt;
|Over voltage threshold. Always set about 10-20V higher then desired battery full voltage. Foccci will announce this value in the ChargeParameterDiscoveryRequest message to the charger, in the element EVMaximumVoltageLimit. The charger may or may not respect this limitation. Some chargers shut down, if this limit is reached. That&#039;s why it is recommended to set it some volts higher than the voltage which is used during normal charging. &lt;br /&gt;
|-&lt;br /&gt;
|MaxCurrent &lt;br /&gt;
|A&lt;br /&gt;
|0&lt;br /&gt;
|500 &lt;br /&gt;
|125&lt;br /&gt;
| Absolute maximum charge current. Foccci will announce this value in the ChargeParameterDiscoveryRequest, in the element EVMaximumCurrentLimit. The charger may or may not respect this limitation.&lt;br /&gt;
|-&lt;br /&gt;
|MaxAllowedPinTemperature&lt;br /&gt;
|°C&lt;br /&gt;
|0&lt;br /&gt;
|120&lt;br /&gt;
|70&lt;br /&gt;
|Temperature of the CCS inlet which leads to fully reduced charge current. If the maximum of temp1, temp2, temp3 reaches this value, the charge current is cut down. Before reaching this limit, the charge current decreases linearily. If the temperature still rises and reaches 10 Kelvin more than parametrized, the charge session will be terminated.&lt;br /&gt;
For information purpose, the current limit caused by the temperature is visible in the spot value TempLimitedCurrent. If the limitation is effective, which means, that the BMS would have requested a higher current than the limitation, the spot value LimitationReason shows &amp;quot;InletHot&amp;quot;.&lt;br /&gt;
In case of massive overheat (10K more than parametrized), the spotvalue StopReason will show &amp;quot;InletOverheat&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|TargetVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
| 0&lt;br /&gt;
|Charge target voltage (volatile)&lt;br /&gt;
|-&lt;br /&gt;
|ChargeCurrent&lt;br /&gt;
|A&lt;br /&gt;
|0&lt;br /&gt;
|500 &lt;br /&gt;
|0&lt;br /&gt;
| Instantaneous current setpoint (volatile) - must be written at least once per second to prevent [[Foccci#Errors|CANTIMEOUT]]&lt;br /&gt;
|-&lt;br /&gt;
|soc&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|0&lt;br /&gt;
|Battery SoC for display on charger (volatile)&lt;br /&gt;
|-&lt;br /&gt;
|BatteryVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
| 1000&lt;br /&gt;
|0&lt;br /&gt;
| Present battery voltage for precharge state (volatile)&lt;br /&gt;
|-&lt;br /&gt;
|enable &lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|When 0 charging is stopped/not started (volatile) - must be written at least once per second to prevent [[Foccci#Errors|CANTIMEOUT]]&lt;br /&gt;
|-&lt;br /&gt;
|AcObcState &lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|15 &lt;br /&gt;
|0&lt;br /&gt;
|Feedback from OBC&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Testing&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|DemoVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|500&lt;br /&gt;
|0&lt;br /&gt;
|Voltage for light bulb demo. To use the board without CAN, to get an constant voltage. Is ignored as long democtrl is not STANDALONE. Only values between 150V and 250V are accepted, others are treated as zero. &lt;br /&gt;
|-&lt;br /&gt;
|DemoControl&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|511&lt;br /&gt;
|0&lt;br /&gt;
|Enables the standalone demo mode if value is set to STANDALONE. In this mode, no CAN is required and the target voltages for precharge and charging loop are taken from demovtg.&lt;br /&gt;
|-&lt;br /&gt;
|ActuatorTest&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|7&lt;br /&gt;
|0&lt;br /&gt;
|Tests various outputs&lt;br /&gt;
|-&lt;br /&gt;
|logging&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2047&lt;br /&gt;
|&lt;br /&gt;
|Selects which modules log to the serial console&lt;br /&gt;
|}&lt;br /&gt;
==Spot values ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|opmode&lt;br /&gt;
|&lt;br /&gt;
|State of the CCS state machine&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|lasterr&lt;br /&gt;
|&lt;br /&gt;
|Last detected error&lt;br /&gt;
|-&lt;br /&gt;
|EvseVoltage&lt;br /&gt;
|V&lt;br /&gt;
|Outlet voltage reported by EVSE&lt;br /&gt;
|-&lt;br /&gt;
|EvseCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Outlet current reported by EVSE&lt;br /&gt;
|-&lt;br /&gt;
|TempLimitedCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Current limit calculated based on the inlet temperature&lt;br /&gt;
|-&lt;br /&gt;
|EVTargetCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Current demand which is communicated to the DC charging station. Is the minimum of TempLimitedCurrent and ChargeCurrent. &lt;br /&gt;
|-&lt;br /&gt;
|LimitationReason&lt;br /&gt;
|&lt;br /&gt;
|Shows the reason why charge power is limited&lt;br /&gt;
|-&lt;br /&gt;
|InletVoltage&lt;br /&gt;
|V&lt;br /&gt;
|Charge port voltage&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Maximum current the EVSE can deliver&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxVoltage&lt;br /&gt;
|V&lt;br /&gt;
|Maximum voltage the EVSE can deliver&lt;br /&gt;
|-&lt;br /&gt;
|ControlPilotDuty&lt;br /&gt;
|%&lt;br /&gt;
|The PWM ratio of the CP line. This is normally 5% for DC chargers, and between 10% and 90% for analog AC chargers.&lt;br /&gt;
Typical values are explained here: [https://de.wikipedia.org/wiki/IEC_62196_Typ_2 IEC 62196 Typ 2 – Wikipedia]&lt;br /&gt;
|-&lt;br /&gt;
|temp1, 2, 3&lt;br /&gt;
|°C&lt;br /&gt;
|Temperatures of the temperature sensors. Requires correct calibration values depending on the used NTC types.&lt;br /&gt;
|-&lt;br /&gt;
|MaxTemp&lt;br /&gt;
|°C&lt;br /&gt;
|Maximum of the above&lt;br /&gt;
|-&lt;br /&gt;
|ContactorDuty&lt;br /&gt;
|%&lt;br /&gt;
|Duty cycle of charge port contactor driver&lt;br /&gt;
|-&lt;br /&gt;
|AdcLockFeedback&lt;br /&gt;
|digit&lt;br /&gt;
|Feedback value from charge port lock&lt;br /&gt;
|-&lt;br /&gt;
|AdcProximityPilot&lt;br /&gt;
|digit&lt;br /&gt;
|Analog value of the PP line. This is the raw value of the analog-to-digital-converter in range 0 to 4095.&lt;br /&gt;
|-&lt;br /&gt;
|ResistanceProximityPilot&lt;br /&gt;
|ohm&lt;br /&gt;
|Measured resistance between PP line and ground. Requires correct setting of the parameter ppvariant.&lt;br /&gt;
|-&lt;br /&gt;
|CableCurrentLimit&lt;br /&gt;
|A&lt;br /&gt;
|Based on the PP resistance. The current limit of the charging cable for AC charging.&lt;br /&gt;
|-&lt;br /&gt;
|EvseCurrentLimit&lt;br /&gt;
|A&lt;br /&gt;
|Based on the CP PWM. The current limit of the charging station for AC charging.&lt;br /&gt;
|-&lt;br /&gt;
|AdcHwVariant&lt;br /&gt;
|digit&lt;br /&gt;
|raw AD value of the hardware variant coding input. Used to detect which variant of Foccci the software runs on.&lt;br /&gt;
|-&lt;br /&gt;
|AdcIpropi&lt;br /&gt;
|digit&lt;br /&gt;
|raw AD value of the current sensor for the charge port lock motor driver.&lt;br /&gt;
|-&lt;br /&gt;
|LockState&lt;br /&gt;
|&lt;br /&gt;
|State of charge port lock&lt;br /&gt;
|-&lt;br /&gt;
|StopReason&lt;br /&gt;
|&lt;br /&gt;
|shows the reason why the charging session stopped&lt;br /&gt;
|-&lt;br /&gt;
|checkpoint&lt;br /&gt;
|&lt;br /&gt;
|shows the progress of the charging session in detail. Explanation here: https://github.com/uhi22/pyPLC?tab=readme-ov-file#example-flow&lt;br /&gt;
|-&lt;br /&gt;
|CanWatchdog&lt;br /&gt;
|100 ms&lt;br /&gt;
|Time since last ChargeCurrent update. When it reaches 30 (3s) the charge session is stopped&lt;br /&gt;
|-&lt;br /&gt;
|cpuload&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
==Errors==&lt;br /&gt;
The spot value &amp;quot;lasterr&amp;quot; displays the last detected error that lead to a cancellation of charging or to not starting in the first place&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Error&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|CANTIMEOUT&lt;br /&gt;
|The ChargeCurrent or enable hasn&#039;t been updated via CAN for more than 2s&lt;br /&gt;
|-&lt;br /&gt;
|PLCTIMEOUT&lt;br /&gt;
|PLC communication with charger timed out&lt;br /&gt;
|-&lt;br /&gt;
|PRECTIMEOUT&lt;br /&gt;
|Precharging the EVSE output to specified voltage timed out or battery voltage is below minimum EVSE output voltage&lt;br /&gt;
|-&lt;br /&gt;
|LOCKTIMEOUT&lt;br /&gt;
|The connector lock didn&#039;t reach the desired position in time&lt;br /&gt;
|-&lt;br /&gt;
|EVSEFAULT&lt;br /&gt;
|The EVSE reported an error and stopped&lt;br /&gt;
|-&lt;br /&gt;
|RELAYWELDED&lt;br /&gt;
|A welded charge port relay was detected&lt;br /&gt;
|}&lt;br /&gt;
== Making Foccci talk CHAdeMO on the CAN side ==&lt;br /&gt;
A pretty straightforward way to integrate CCS charging into your vehicle is to use the existing CHAdeMO (let&#039;s call it CDM from here on) CAN messaging. CDM has pretty much all data items we need to initiate a CCS charging session, so rather than defining a new set of messages we might as well adopt it. For example, Orion BMS or Zombieverter VCU natively support CHAdeMO anyway.[[File:Can mapping chademo.png|thumb|Screenshot of CAN mapping to interface Foccci CCS with CHAdeMO]]Let&#039;s go over the items in the screenshot one by one. Note that the IDs are decimal! (256=0x100, 258=0x102, 264=0x108, 265=0x109)&lt;br /&gt;
*&#039;&#039;&#039;UdcDivider&#039;&#039;&#039; - Actually, here we just select some dummy item as the important bit is in the Offset field: the version. In this case I signal non-existent CDM version 10. This tells the CDM module in my car that it talks to Foccci. It then includes the battery voltage in some unused message bytes - see below.&lt;br /&gt;
*&#039;&#039;&#039;EvseVoltage&#039;&#039;&#039; - Transmits the charger&#039;s present output voltage back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;EvseCurrent&#039;&#039;&#039; - Transmits the charger&#039;s present output current back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;opmode&#039;&#039;&#039; - Observe the weird gain - this is forged to map Foccci state &amp;quot;CurrentDemand (13)&amp;quot; to CDM state &amp;quot;ConnectorLocked (4)&amp;quot;. In my car&#039;s CDM module this is sufficient to initiate the charging progress. You may need to change it so that the ChargeEnable flag together with ConnectorLocked is forged (numerical value 5).&lt;br /&gt;
*&#039;&#039;&#039;EvseMaxVoltage&#039;&#039;&#039; - Transmits the EVSE&#039;s maximum output voltage back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;EvseMaxCurrent&#039;&#039;&#039; - Transmits the EVSE&#039;s maximum output current back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;BatteryVoltage&#039;&#039;&#039; - Transmits the present battery voltage to the EVSE.  This is the special item that normally doesn&#039;t exist in CDM and that unfortunately will prevent you from using this solution with an OEM car in a safe manner. Of course, you could manually set this to some medium battery voltage like 360V, but if you arrive with a really low battery at, say, 300V this might weld your charge port contactors.  You could also manually enter the battery voltage before each charging session.&lt;br /&gt;
*&#039;&#039;&#039;TargetVoltage&#039;&#039;&#039; - Transmits the charge end voltage to the EVSE.&lt;br /&gt;
*&#039;&#039;&#039;ChargeCurrent&#039;&#039;&#039; - By far the most important data item: the charge current request.&lt;br /&gt;
*&#039;&#039;&#039;soc&#039;&#039;&#039; - In CDM this isn&#039;t normally a percentage value but some encoded kWh value.  In my car&#039;s CDM module I specify a full battery as &amp;quot;200&amp;quot; (no idea what this actually means in kWh) and thereby can just output the SoC in 0.5% steps.&lt;br /&gt;
*&#039;&#039;&#039;enable&#039;&#039;&#039; - The car&#039;s charge enable flag.  When 0 will stop the CCS session.&lt;br /&gt;
As an additional safety measure you could connect CDM pin 4 (charge enable) to Foccci&#039;s button input (at least once we added an active low mode for it).  It might also be worthwhile to connect pin 7 (connection check) to the PP input for drive away protection when CDM is plugged in but not charging (again, once we have actually implemented this).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s list the CHAdeMO pin mapping one by one as well:&lt;br /&gt;
*Pin 1 - GND&lt;br /&gt;
*Pin 2 (12V, charger start/stop) - 12V (I take it from cigarette lighter)&lt;br /&gt;
*Pin 4 (charging enable) - Foccci BUTTON&lt;br /&gt;
*Pin 5, 6 - Power pins, triple check correct polarity!&lt;br /&gt;
*Pin 7 (Connection check) - Foccci PP&lt;br /&gt;
*Pin 8, 9 (CAN) - Foccci CANL, CANH&lt;br /&gt;
*Pin 10 (charger start/stop 2) - Foccci SW1_LS&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;u&amp;gt;Attention:&amp;lt;/u&amp;gt;&#039;&#039;&#039; with this mapping the error flags are ignored, e.g. voltage or current mismatch.&lt;br /&gt;
&lt;br /&gt;
==Making Foccci talk to boostech BMS==&lt;br /&gt;
The boostech BMS has a fixed CAN mapping. It doesn&#039;t expect any feedback from the CCS controller so we just keep the CHAdeMO mapping from above in case the info is needed elsewhere in the car.&lt;br /&gt;
&lt;br /&gt;
The BMS sends out big endian messages hence why the length fields are negative. It does not send out a charge end voltage so we simply multiply the charge enable flag with the voltage we want. In the example 368V.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Item&lt;br /&gt;
!Direction&lt;br /&gt;
!ID&lt;br /&gt;
!Position&lt;br /&gt;
!Length&lt;br /&gt;
!Gain&lt;br /&gt;
!Offset&lt;br /&gt;
!Extended&lt;br /&gt;
!Remark&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxVoltage&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x108 / 264&lt;br /&gt;
|8&lt;br /&gt;
|16&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxCurrent&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x108 / 264&lt;br /&gt;
|24&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EvseVoltage&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x109 / 265&lt;br /&gt;
|8&lt;br /&gt;
|16&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EvseCurrent&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x109 / 265&lt;br /&gt;
|24&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|enable&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|48&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BatteryVoltage&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|15&lt;br /&gt;
| -16&lt;br /&gt;
|0.1&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|soc&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|47&lt;br /&gt;
| -16&lt;br /&gt;
|0.1&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TargetVoltage&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|48&lt;br /&gt;
|1&lt;br /&gt;
|368&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|Put your desired TargetVoltage into gain&lt;br /&gt;
|-&lt;br /&gt;
|ChargeCurrent&lt;br /&gt;
|Receive&lt;br /&gt;
|0x313 / 787&lt;br /&gt;
|31&lt;br /&gt;
| -16&lt;br /&gt;
|0.097&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|This value is static, more below&lt;br /&gt;
|}&lt;br /&gt;
The boostech BMS &#039;&#039;&#039;lacks one critical feature&#039;&#039;&#039; for rapid charging: a dynamic charge limit. That means ChargeCurrent it always a fixed value that you program into the BMS. It will not cut back when cells are getting full, hot or cold. It can be somewhat mitigated by setting a sane target voltage (e.g. 4.1V x NumberOfCells). The rapid charger will then start to cut back charge current as this voltage is approached. Also by mapping the enable flag the BMS has the possibility to abort the charging session if one single cell voltage or module temperature rises above the safe threshold. In winter you will need to dial back your maximum charge current manually or heat you cells to avoid dendrites.&lt;br /&gt;
&lt;br /&gt;
== Hardware detection ==&lt;br /&gt;
[[File:3.3v Addressing Voltage Divider.png|thumb]]&lt;br /&gt;
To allow software to reliably detect which version hardware it runs on, in HW version 4.1 a version indication resistor was added. As opposed to some other boards that run at 5.3V, the voltage here is 3.3V.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Variant&lt;br /&gt;
!R1&lt;br /&gt;
!R2&lt;br /&gt;
!voltage&lt;br /&gt;
!ADC&lt;br /&gt;
!-3%&lt;br /&gt;
!+3%&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|2,7&lt;br /&gt;
|0,179&lt;br /&gt;
|222&lt;br /&gt;
|216&lt;br /&gt;
|229&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|3,3&lt;br /&gt;
|0,217&lt;br /&gt;
|269&lt;br /&gt;
|261&lt;br /&gt;
|277&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|3,9&lt;br /&gt;
|0,253&lt;br /&gt;
|314&lt;br /&gt;
|304&lt;br /&gt;
|323&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|4,7&lt;br /&gt;
|0,300&lt;br /&gt;
|372&lt;br /&gt;
|361&lt;br /&gt;
|383&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|5,1&lt;br /&gt;
|0,323&lt;br /&gt;
|401&lt;br /&gt;
|389&lt;br /&gt;
|413&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|5,6&lt;br /&gt;
|0,351&lt;br /&gt;
|436&lt;br /&gt;
|423&lt;br /&gt;
|449&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|6,8&lt;br /&gt;
|0,417&lt;br /&gt;
|518&lt;br /&gt;
|502&lt;br /&gt;
|533&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|7,5&lt;br /&gt;
|0,454&lt;br /&gt;
|564&lt;br /&gt;
|547&lt;br /&gt;
|580&lt;br /&gt;
|-&lt;br /&gt;
|4.0 with economizer&lt;br /&gt;
|47&lt;br /&gt;
|8,2&lt;br /&gt;
|0,490&lt;br /&gt;
|608&lt;br /&gt;
|590&lt;br /&gt;
|627&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|9,1&lt;br /&gt;
|0,535&lt;br /&gt;
|664&lt;br /&gt;
|644&lt;br /&gt;
|684&lt;br /&gt;
|-&lt;br /&gt;
|4.2&lt;br /&gt;
|47&lt;br /&gt;
|10&lt;br /&gt;
|0,579&lt;br /&gt;
|718&lt;br /&gt;
|697&lt;br /&gt;
|740&lt;br /&gt;
|-&lt;br /&gt;
|4.3&lt;br /&gt;
|47&lt;br /&gt;
|12&lt;br /&gt;
|0,671&lt;br /&gt;
|833&lt;br /&gt;
|808&lt;br /&gt;
|858&lt;br /&gt;
|-&lt;br /&gt;
|4.4&lt;br /&gt;
|47&lt;br /&gt;
|15&lt;br /&gt;
|0,798&lt;br /&gt;
|991&lt;br /&gt;
|961&lt;br /&gt;
|1020&lt;br /&gt;
|-&lt;br /&gt;
|4.5 - 5.2&lt;br /&gt;
|47&lt;br /&gt;
|18&lt;br /&gt;
|0,914&lt;br /&gt;
|1134&lt;br /&gt;
|1100&lt;br /&gt;
|1168&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|22&lt;br /&gt;
|1,052&lt;br /&gt;
|1306&lt;br /&gt;
|1266&lt;br /&gt;
|1345&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|27&lt;br /&gt;
|1,204&lt;br /&gt;
|1494&lt;br /&gt;
|1449&lt;br /&gt;
|1539&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|33&lt;br /&gt;
|1,361&lt;br /&gt;
|1689&lt;br /&gt;
|1639&lt;br /&gt;
|1740&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|39&lt;br /&gt;
|1,497&lt;br /&gt;
|1857&lt;br /&gt;
|1801&lt;br /&gt;
|1913&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|47&lt;br /&gt;
|1,650&lt;br /&gt;
|2048&lt;br /&gt;
|1986&lt;br /&gt;
|2109&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|56&lt;br /&gt;
|1,794&lt;br /&gt;
|2226&lt;br /&gt;
|2160&lt;br /&gt;
|2293&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Category:ChaDeMo‏‎]] [[Category:CCS]] [[Category:Rapid Charging]]&lt;br /&gt;
[[Category:Charger]]&lt;br /&gt;
[[Category:OpenInverter]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Foccci&amp;diff=5189</id>
		<title>Foccci</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Foccci&amp;diff=5189"/>
		<updated>2024-12-12T18:18:46Z</updated>

		<summary type="html">&lt;p&gt;Johu: /* Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Disclaimer: This Page is still work in progress! Any information written here is a draft only and should be handled as such. Contributions more then welcome. If you have questions please ask them in the discussion section of the page or in the OpenInvert Forum.&lt;br /&gt;
[[File:Foccci pinout.svg|thumb|Foccci (v4.5) pinout]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Foccci 4.5b pinout.png|thumb|Foccci 4.5b / 5 / 5.1 pinout]]&lt;br /&gt;
This page is about FOCCCI. FOCCCI is an open source CCS Charge Interface started by Uhi and developed by the OpenInverter Community.&lt;br /&gt;
&lt;br /&gt;
Foccci is the hardware part, and on it runs the software Clara.&lt;br /&gt;
&lt;br /&gt;
Here you will find documentation on the Hardware (and Clara software), where to get it (or how to build it yourself), News regarding the development and many more great things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=79 Foccci for sale on OpenInverter Shop]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/uhi22/foccci Foccci on Github.]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/uhi22/ccs32clara Clara on Github.] &lt;br /&gt;
&lt;br /&gt;
[https://openinverter.org/forum/viewtopic.php?t=3727 Foccci in the OpenInverter Forum.]&lt;br /&gt;
&lt;br /&gt;
== Pin description ==&lt;br /&gt;
&lt;br /&gt;
=== External connector (&amp;quot;Deutsch Header&amp;quot;) ===&lt;br /&gt;
Starting version 4.5b the pins were reshuffled to allow one wiring loom going to the charge port and one to the car side. Changed pins are &#039;&#039;&#039;bold&#039;&#039;&#039;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Short name&lt;br /&gt;
!Pin up to version 4.5a&lt;br /&gt;
!Pin for version 4.5b, 5, 5.1&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|TEMP1&lt;br /&gt;
|A1&lt;br /&gt;
|A1&lt;br /&gt;
|Power pin temperature sensor. It is pulled up to 3.3V with 10k and the sensor must pull down to GND. Sensor characteristics are configurable in software&lt;br /&gt;
|-&lt;br /&gt;
|TEMP2&lt;br /&gt;
|A2&lt;br /&gt;
|A2&lt;br /&gt;
|As above&lt;br /&gt;
|-&lt;br /&gt;
|TEMP3&lt;br /&gt;
|A3&lt;br /&gt;
|A3&lt;br /&gt;
|As Above&lt;br /&gt;
|-&lt;br /&gt;
|LOCKFB&lt;br /&gt;
|A4&lt;br /&gt;
|A4&lt;br /&gt;
|Feedback signal from connector lock. Pulled up to 3.3V with 10k, so feedback must pull down to GND. Thresholds configurable in software&lt;br /&gt;
|-&lt;br /&gt;
|IN_U_HV&lt;br /&gt;
|A5&lt;br /&gt;
|&#039;&#039;&#039;B10&#039;&#039;&#039;&lt;br /&gt;
|Analog input 0 to 5V, with pull-down-resistor. Can be used to measure the charge port voltage, using a converter board, e.g. the &amp;quot;muehlpower board&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|CP&lt;br /&gt;
|A6&lt;br /&gt;
|A6&lt;br /&gt;
|CP (Control Pilot) pin from charge port&lt;br /&gt;
|-&lt;br /&gt;
|SW2(_LS)&lt;br /&gt;
|A7&lt;br /&gt;
|&#039;&#039;&#039;B4&#039;&#039;&#039;&lt;br /&gt;
|Output for charge port contactor 2. Low side switch until Foccci 4.4, high side switch starting 4.5&lt;br /&gt;
Controls one of the contactors to make the connection between the HV battery and the vehicle inlet.&lt;br /&gt;
&lt;br /&gt;
The output can drive inductive load without additional circuits. It will clamp the turn-off voltage to ~40V. The driver has protection against shortcut and thermal overload.&lt;br /&gt;
&lt;br /&gt;
The output can be configured to be just digital on/off, and can also be configured to use PWM. BUT: In Foccci versions 4.2 and 4.3 (maybe more) the output driver is only capable of slow PWM, which is hearable and may cause trouble with the contactors. So it is recommended to NOT use the PWM feature, and instead use contactors which do not require economizing or use external economizers. In case you want the PWM nevertheless, you need a external freewheeling diode.&lt;br /&gt;
&lt;br /&gt;
Starting Foccci 4.5 PWM is working as intended at 18 kHz. It is a high side output starting v4.5, so the other side of the contactor must be connected to GND. Before v4.5 it is a low side output so the other side must be connected to 12V&lt;br /&gt;
|-&lt;br /&gt;
|LOCK_MOT2&lt;br /&gt;
|A8&lt;br /&gt;
|A8&lt;br /&gt;
|Motor driver output for charge port lock servo&lt;br /&gt;
|-&lt;br /&gt;
|LOCK_MOT1&lt;br /&gt;
|A9&lt;br /&gt;
|A9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PP&lt;br /&gt;
|A10&lt;br /&gt;
|&#039;&#039;&#039;A5&#039;&#039;&#039;&lt;br /&gt;
|PP (Proximity Pilot) pin from charge port. If you want Foccci to wake up when an unpowered charge cord is plugged in you must close JP3 to pin 1 (towards R7). There mustn&#039;t be a pull-down resistor in the charge port in this case as that would permanently keep Foccci awake&lt;br /&gt;
|-&lt;br /&gt;
|5V&lt;br /&gt;
|A11&lt;br /&gt;
|&#039;&#039;&#039;B11&#039;&#039;&#039;&lt;br /&gt;
|5V, 500mA e.g. for supplying voltage sense board. This is an OUTPUT of Foccci. Do not apply an external voltage source here. Foccci contains a step-down-converter from the 12V supply to this 5V output.&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|A12&lt;br /&gt;
|&#039;&#039;&#039;B12&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CANH&lt;br /&gt;
|B1&lt;br /&gt;
|B1&lt;br /&gt;
|CAN communication&lt;br /&gt;
|-&lt;br /&gt;
|CANL&lt;br /&gt;
|B2&lt;br /&gt;
|B2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n.c.&lt;br /&gt;
|B3&lt;br /&gt;
|&lt;br /&gt;
|Unused pins were assigned GND in 4.5b&lt;br /&gt;
|-&lt;br /&gt;
|n.c.&lt;br /&gt;
|B4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|B5&lt;br /&gt;
|B5, &#039;&#039;&#039;B3&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SW1(_LS)&lt;br /&gt;
|B6&lt;br /&gt;
|B6&lt;br /&gt;
|Output for the charge port contactor 1. See description of SW2(_LS).&lt;br /&gt;
|-&lt;br /&gt;
|WAKEUP&lt;br /&gt;
|B7&lt;br /&gt;
|B7&lt;br /&gt;
|Wakeup bus. Momentarily (or constantly) applying 12V wakes up the board. In the other direction Foccci can wake up (or supply with up to 1A) other devices via a 12V high side switch&lt;br /&gt;
|-&lt;br /&gt;
|12V&lt;br /&gt;
|B8&lt;br /&gt;
|B8&lt;br /&gt;
|Supply voltage, always on. 9 to 24V are fine.&lt;br /&gt;
|-&lt;br /&gt;
|LED_RED&lt;br /&gt;
|B9&lt;br /&gt;
|&#039;&#039;&#039;A12&#039;&#039;&#039;&lt;br /&gt;
|Status LEDs&lt;br /&gt;
|-&lt;br /&gt;
|LED_GREEN&lt;br /&gt;
|B10&lt;br /&gt;
|&#039;&#039;&#039;A11&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LED_BLUE&lt;br /&gt;
|B11&lt;br /&gt;
|&#039;&#039;&#039;A10&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BUTTON&lt;br /&gt;
|B12&lt;br /&gt;
|&#039;&#039;&#039;A7&#039;&#039;&#039;&lt;br /&gt;
|Wakes up Foccci or stops an ongoing charging session&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Internal connectors ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!short name&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|UART TX&lt;br /&gt;
|Provides logging information, 921600 Baud. See also https://github.com/uhi22/ccs32clara/blob/main/doc/clara_user_manual.md#serial-logging&lt;br /&gt;
|-&lt;br /&gt;
|UART RX&lt;br /&gt;
|Not used&lt;br /&gt;
|-&lt;br /&gt;
|SWCLK&lt;br /&gt;
|for flashing with STLINK&lt;br /&gt;
|-&lt;br /&gt;
|SWDIO&lt;br /&gt;
|for flashing with STLINK&lt;br /&gt;
|}&lt;br /&gt;
== Integrating Foccci with your car/BMS==&lt;br /&gt;
[[File:Foccci CCS2.png|thumb|Foccci with (Orion) BMS]]&lt;br /&gt;
Depending on your use case Foccci has to communicate with one or more components in your car. All in-car communication happens via a single CAN bus.&lt;br /&gt;
===Basic communication considerations ===&lt;br /&gt;
Foccci can be configured to run at various baud rates and defaults to 500k. The Wifi interface mentioned below is hard coded to 500k. So when configuring a different baud rate you will loose communication with the Wifi interface. This might be fixed in the future by allowing variable baud rates for the wifi interface. Bottom line: &#039;&#039;&#039;keep it at 500k.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Apart from that it is mostly sufficient if Foccci can communicate, or more precisely, listen to the BMS. Foccci uses the flexible [[CAN communication|CAN mapping]] known from other OI firmware. There are 5 key parameters that need to be received via CAN:&lt;br /&gt;
*&#039;&#039;&#039;ChargeCurrent&#039;&#039;&#039;: this is the single most important item. It is directly relayed to the charger and specifies the current the battery can accept at the given moment. This depends on battery voltage, temperature and other things to be determined by the BMS. &#039;&#039;Foccci itself does no battery monitoring of any kind, it is completely down to the BMS to specify a safe charge current&#039;&#039;&#039;&#039;&#039;.&#039;&#039;&#039; When this value is not updated for more than 2 seconds the charging session is terminated.&lt;br /&gt;
* &#039;&#039;&#039;BatteryVoltage&#039;&#039;&#039;: this item is important for precharging the CCS chargers output to the momentary battery voltage. Most BMSes output the total pack voltage in a CAN message&lt;br /&gt;
* &#039;&#039;&#039;TargetVoltage&#039;&#039;&#039;: In theory this is the maximum voltage you want the battery to be charged to. In practise the maximum battery voltage MUST be governed by specifying an appropriate ChargeCurrent. More importantly many chargers cut back charge power when &#039;&#039;approaching&#039;&#039; this voltage resulting in poor charging performance towards the top end. So in practise you want to set this to a voltage about 10V above charge end voltage of your battery.&lt;br /&gt;
*&#039;&#039;&#039;soc&#039;&#039;&#039;: This is purely informative as far as we know. It displays the batteries state of charge on the chargers display&lt;br /&gt;
*&#039;&#039;&#039;enable&#039;&#039;&#039;: this is optional as it defaults to always enabled. It can be used to completely terminate the charging session by setting it to 0.&lt;br /&gt;
===Using Foccci as a charge coordinator===&lt;br /&gt;
This topic is still work in progress. The CCS connector, as its name suggests, combines both AC and DC charging in one socket. As long as we use the socket only for DC charging it is very easy to wire up. But once we also use the AC functionality we have to spend further thought on this.&lt;br /&gt;
&lt;br /&gt;
The two pins PP and CP communicate information about the cable limit and the momentary current limit of the AC outlet. PP is a simple resistor between PE and PP that is evaluated by putting a test current onto it. This concludes that this signal can only be used by one device. CP is a bit more complex. When plugging in it communicates with a 2k7 resistor to PE that the cable is now connected to a car. From this simple fact we can again conclude that CP is a peer-to-peer signal only. Once the car is ready to charge it switches another 1k3 resistor in parallel to the 2k7 resistor. Only then the AC voltage is switched to the power pins. Lastly, the AC outlet encodes the momentary current limit in a PWM duty cycle.&lt;br /&gt;
&lt;br /&gt;
Foccci does all the evaluation and makes the result available as spot values that can in turn be mapped to CAN:&lt;br /&gt;
*EvseAcCurrentLimit&lt;br /&gt;
*CableCurrentLimit&lt;br /&gt;
To activate the 1k3 resistor aka activating the AC outlet we map AcObcState. It must be set to 2 for activation.&lt;br /&gt;
&lt;br /&gt;
Some chargers want to evaluate the CP (and perhaps PP) signal themselves. This issue can be solved with a change over switch that disconnects Foccci from CP while AC charging. Alternatively the CP signal can be spoofed and the charge current controlled by CAN to satisfy the limits of the AC outlet (EVSE).&lt;br /&gt;
== Wakeup ==&lt;br /&gt;
For charging it is particularly interesting to wake up Foccci itself and necessary subsystems &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?p=66547#p66547&amp;lt;/ref&amp;gt; when plugging in a charge cord. To allow for this, Foccci has various wakeup sources and also can wake up other devices. For wakeup to work, Foccci must be permanently supplied with 12V (it will draw no current when asleep). &#039;&#039;&#039;Hardware version V4.5 and above required for wakeup.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Here are the sources:&lt;br /&gt;
&lt;br /&gt;
# Wakeup pin - bidirectional - level triggered (12V)&lt;br /&gt;
# Button - level triggered (GND)&lt;br /&gt;
# PP - optional via solder bridge - level triggered&lt;br /&gt;
# CP - Edge triggered&lt;br /&gt;
&lt;br /&gt;
So the first 3 inputs will force the Foccci on. It can&#039;t turn itself off as long as that wakeup source is active. The last input will only trigger when transitioning from invalid to valid PWM and then Foccci can decide how long to stay awake. All modes always work regardless of software settings - except PP wakeup which can be turned off in hardware (JP3).&lt;br /&gt;
&lt;br /&gt;
The wakeup output on the other hand is software-defined. Foccci offers the following options&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Level&#039;&#039;&#039; - as long as the Foccci doesn&#039;t decide to turn off, we keep Wakeup on as well&lt;br /&gt;
# &#039;&#039;&#039;Pulse&#039;&#039;&#039; - When Foccci boots generate a 1s wakeup pulse&lt;br /&gt;
# &#039;&#039;&#039;LevelOnValidCp&#039;&#039;&#039; - As long as CP is pulsing we keep wakeup on&lt;br /&gt;
# &#039;&#039;&#039;PulseOnValidCp&#039;&#039;&#039; - Whenever we transition from non-pulsing to pulsing CP we generate a 1s pulse&lt;br /&gt;
# &#039;&#039;&#039;LevelOnValidPp&#039;&#039;&#039; - As long as PP is valid keep wakeup on&lt;br /&gt;
&lt;br /&gt;
The output can supply about 1A and 12V. When running loads larger than that (e.g. a pump) use a relay to amplify the current capability.&lt;br /&gt;
&lt;br /&gt;
It depends on your vehicle architecture how you organize the wakeup. Here are some examples:&lt;br /&gt;
&lt;br /&gt;
=== Basic wakeup ===&lt;br /&gt;
wakeup via PP enabled, WakeupPinFunc=LevelOnValidPp&lt;br /&gt;
&lt;br /&gt;
# Foccci turns on as soon as even a non-powered charging cable is plugged in&lt;br /&gt;
# Wakeup signal is turned on&lt;br /&gt;
# BMS, VCU etc. is turned on (directly powered from wakeup as it can supply about 1A)&lt;br /&gt;
# VCU can detect via the level of the wakeup signal that a cable is plugged in and inhibit drive&lt;br /&gt;
# When charging cable is unplugged (as in PP lost), Wakeup is turned off and the VCU can allow driving&lt;br /&gt;
# If we wanted to report e.g. welded charge port relays Foccci would have to keep itself running until the car is started in drive mode again. Then something can be displayed on the instrument cluster. Of course this will time out eventually. Should be fine as you at least have to pull away from the rapid charger after charging.&lt;br /&gt;
# When charging is paused all ECUs stay on and consume 12V power (or HV power via DC/DC)&lt;br /&gt;
&lt;br /&gt;
=== Advanced Wakeup ===&lt;br /&gt;
wakeup via PP disabled, WakeupPinFunc=PulseOnValidCp. Here we have a bidirectional wakeup bus. Any ECU connected to it can send or receive wakeup events and the individual ECUs can decide whether they are needed for a particular task or not.&lt;br /&gt;
&lt;br /&gt;
# Foccci turns on as soon as CP PWM starts. So either a cable is being plugged in or is already plugged in and now wants to charge&lt;br /&gt;
# It then turns on the wakeup output for 1s and wakes up all other ECUs&lt;br /&gt;
# The relevant ECUs will detect that we want to charge and stay on, the other ones turn off&lt;br /&gt;
# If we turn on ignition the VCU is already on and in charge mode and can inhibit drive&lt;br /&gt;
# If charging is paused (i.e. cable plugged in but no CP PWM) and we turn on ignition the VCU wakes up the Foccci and queries PP status. If something is plugged in drive is inhbited&lt;br /&gt;
# If Foccci detects an error e.g. welded relays, it stores that error to flash. When woken up by the VCU it report its non-zero error code&lt;br /&gt;
# When charging is paused, ALL ECUs can turn off and no 12V power is consumed. When CP comes back, the cycle restarts&lt;br /&gt;
&lt;br /&gt;
The second approach is more versatile but it also means all devices need to support this method.&lt;br /&gt;
&lt;br /&gt;
So I think there can be an intermediate approach:&lt;br /&gt;
&lt;br /&gt;
=== Semi-advanced wakeup ===&lt;br /&gt;
Here we only have a wakeup bus between VCU and Foccci. All other devices are powered up by other means, like VCU controlled relays. Wakeup via PP is disabled, WakeupPinFunc=LevelOnValidCp&lt;br /&gt;
&lt;br /&gt;
# Foccci turns on as soon as CP PWM starts. So either a cable is being plugged in or is already plugged in and now wants to charge&lt;br /&gt;
# It then turns on the wakeup output this waking up the VCU&lt;br /&gt;
# The VCU determines via CAN message from Foccci whether we want to AC or DC charge and turns on needed components. Components needed in both cases that have low power consumption (e.g. BMS) can also be driven from the wakeup signal directly&lt;br /&gt;
# If we turn on ignition the VCU is already on and in charge mode and can inhibit drive&lt;br /&gt;
# If charging is paused (i.e. cable plugged in but no CP PWM) and we turn on ignition the VCU wakes up the Foccci and queries PP status. If something is plugged in drive is inhbited&lt;br /&gt;
# If Foccci detects an error e.g. welded relays, it stores that error to flash. When woken up by the VCU it report its non-zero error code&lt;br /&gt;
# When charging is paused, ALL ECUs will turn off and no 12V power is consumed. When CP comes back, the cycle restarts&lt;br /&gt;
&lt;br /&gt;
== Configuring Foccci via CAN ==&lt;br /&gt;
Foccci exposes only one single CAN interface for vehicle communication and initial configuration. So we need a CAN counterpart to talk to it.&lt;br /&gt;
&lt;br /&gt;
There are two main approaches to this: a) use a command line tool &amp;lt;ref&amp;gt;OIC https://openinverter.org/forum/viewtopic.php?t=2907&amp;lt;/ref&amp;gt; or b) use an ESP based CAN module &amp;lt;ref&amp;gt;ESP32 CAN Web Interface https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=59&amp;amp;product_id=78&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both ways require knowing Focccis so called Node Id (similar to an IP address on a local network). By default this is 22. You can enter this node id on the bottom left navigation bar.&lt;br /&gt;
== Parameters==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Unit&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Min&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Max&#039;&#039;&#039; &lt;br /&gt;
|&#039;&#039;&#039;Default&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Hardware Config&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|UdcDivider&lt;br /&gt;
|dig/V &lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|10 &lt;br /&gt;
|Division factor from ADC digits to V of external voltage measurement board.&lt;br /&gt;
In other words: The UdcDivider is the configuration parameter which defines the scaling of the physical inlet voltage measurement circuit. That&#039;s why it is only relevant if a physical inlet voltage measurement circuit is present, and if the parameter InletVtgSrc is 1, means the Foccci will measure the inlet voltage with the analog input. CAN mapping makes no sense for the UdcDivider, because it is a fix value. It is the ratio between the voltage on the inlet and the digital value on the AD converter.&lt;br /&gt;
|-&lt;br /&gt;
|EconomizerDuty&lt;br /&gt;
|%&lt;br /&gt;
| 0&lt;br /&gt;
|100&lt;br /&gt;
| 100&lt;br /&gt;
|Contactor economizer duty cycle. Contactors are always turned on with 12V for 1s then drop to this value. Set to 100% if your contactor has a built-in economizer &lt;br /&gt;
|-&lt;br /&gt;
|InletVtgSrc&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
| 0&lt;br /&gt;
|Inlet Voltage Source. There are three option where Foccci gets the CCS inlet voltage from:&lt;br /&gt;
0 - Charger output voltage (EVSEPresentVoltage) is considered equal to charge port inlet voltage 1 - Analog input U_IN_HV is used for measuring charge port inlet voltage&lt;br /&gt;
&lt;br /&gt;
2 - Charge port inlet voltage is provided via CAN - don&#039;t forget to map something to InletVoltage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The InletVoltage is important for precharging, while the contactors are still open. The car (Foccci) will close the contactors, if the inlet voltage is near to the battery voltage. After closing the contactors, it is the battery voltage (besides some cable losses), and out of interest. The most straight forward solution to measure the inlet voltage is to rely on what the charging station tells us. It reports the voltage on the CCS plug in EVSEPresentVoltage. With configuring InletVtgSrc=0 we tell Foccci to use the EVSEPresentVoltage. In this case, neither an analog inlet voltage measuring circuit nor a separate gadget which provides the inlet voltage via CAN is necessary. For most users this will be fine (even OEM cars use this approach).&lt;br /&gt;
|-&lt;br /&gt;
|LockDuty&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
| 100&lt;br /&gt;
|30&lt;br /&gt;
|H-bridge duty cycle for operating the lock. Use negative value if lock polarity is swapped&lt;br /&gt;
|-&lt;br /&gt;
| LockRunTime&lt;br /&gt;
|ms &lt;br /&gt;
|0&lt;br /&gt;
|10000&lt;br /&gt;
|1000&lt;br /&gt;
|Timeout for lock operation&lt;br /&gt;
|-&lt;br /&gt;
|LockClosedThresh&lt;br /&gt;
| dig&lt;br /&gt;
| 0&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
| Lock feedback value for closed&lt;br /&gt;
|-&lt;br /&gt;
|LockOpenThresh&lt;br /&gt;
| dig&lt;br /&gt;
| 0&lt;br /&gt;
|4095 &lt;br /&gt;
| 0&lt;br /&gt;
| Lock feedback value for open - if equal to lockclosethr no feedback is assumed and lock is operated timed &lt;br /&gt;
|-&lt;br /&gt;
| ppvariant&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|9&lt;br /&gt;
|0&lt;br /&gt;
|Various circuit variations exist for PP resistor measurement.&lt;br /&gt;
&amp;quot;0&amp;quot; is for the variant with 1k pull-up to 3.3V, like old the old Foccci 4.1&lt;br /&gt;
&amp;quot;1&amp;quot; is for the variant with 330 ohm pull-up to 5V and 3k pull-down.&lt;br /&gt;
&amp;quot;2&amp;quot; is for the variant with 330 ohm pull-up to 5V and NO pull-down.&lt;br /&gt;
Foccci 4.5 ususally has NO pulldown, except the related solder jumper was closed.&lt;br /&gt;
|-&lt;br /&gt;
|WakeupPinFunc&lt;br /&gt;
|&lt;br /&gt;
| 0&lt;br /&gt;
|4&lt;br /&gt;
|0&lt;br /&gt;
| Configure what the wakeup pin does. See [[Foccci#Wakeup|Wakeup]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Communication&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|NodeId&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|63&lt;br /&gt;
|22&lt;br /&gt;
|CANOpen node id for SDO requests &lt;br /&gt;
|-&lt;br /&gt;
|CanSpeed&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
| 4&lt;br /&gt;
|2&lt;br /&gt;
|Baud rate of CAN interface 0=125k, 1=250k, 2=500k, 3=800k, 4=1M - &#039;&#039;&#039;when configuring this != 500k you have to change it also for your ESP web interface!&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Charge Parameters&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|MaxPower&lt;br /&gt;
|kW&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
| 100&lt;br /&gt;
|Absolute maximum charge power. Foccci will announce this value in the ChargeParameterDiscoveryRequest message in the element EVMaximumPowerLimit. The charger may or may not respect this limitation. &lt;br /&gt;
|-&lt;br /&gt;
|MaxVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|410&lt;br /&gt;
|Over voltage threshold. Always set about 10-20V higher then desired battery full voltage. Foccci will announce this value in the ChargeParameterDiscoveryRequest message to the charger, in the element EVMaximumVoltageLimit. The charger may or may not respect this limitation. Some chargers shut down, if this limit is reached. That&#039;s why it is recommended to set it some volts higher than the voltage which is used during normal charging. &lt;br /&gt;
|-&lt;br /&gt;
|MaxCurrent &lt;br /&gt;
|A&lt;br /&gt;
|0&lt;br /&gt;
|500 &lt;br /&gt;
|125&lt;br /&gt;
| Absolute maximum charge current. Foccci will announce this value in the ChargeParameterDiscoveryRequest, in the element EVMaximumCurrentLimit. The charger may or may not respect this limitation.&lt;br /&gt;
|-&lt;br /&gt;
|MaxAllowedPinTemperature&lt;br /&gt;
|°C&lt;br /&gt;
|0&lt;br /&gt;
|120&lt;br /&gt;
|70&lt;br /&gt;
|Temperature of the CCS inlet which leads to fully reduced charge current. If the maximum of temp1, temp2, temp3 reaches this value, the charge current is cut down. Before reaching this limit, the charge current decreases linearily. If the temperature still rises and reaches 10 Kelvin more than parametrized, the charge session will be terminated.&lt;br /&gt;
For information purpose, the current limit caused by the temperature is visible in the spot value TempLimitedCurrent. If the limitation is effective, which means, that the BMS would have requested a higher current than the limitation, the spot value LimitationReason shows &amp;quot;InletHot&amp;quot;.&lt;br /&gt;
In case of massive overheat (10K more than parametrized), the spotvalue StopReason will show &amp;quot;InletOverheat&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|TargetVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
| 0&lt;br /&gt;
|Charge target voltage (volatile)&lt;br /&gt;
|-&lt;br /&gt;
|ChargeCurrent&lt;br /&gt;
|A&lt;br /&gt;
|0&lt;br /&gt;
|500 &lt;br /&gt;
|0&lt;br /&gt;
| Instantaneous current setpoint (volatile) - must be written at least once per second to prevent [[Foccci#Errors|CANTIMEOUT]]&lt;br /&gt;
|-&lt;br /&gt;
|soc&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|0&lt;br /&gt;
|Battery SoC for display on charger (volatile)&lt;br /&gt;
|-&lt;br /&gt;
|BatteryVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
| 1000&lt;br /&gt;
|0&lt;br /&gt;
| Present battery voltage for precharge state (volatile)&lt;br /&gt;
|-&lt;br /&gt;
|enable &lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|When 0 charging is stopped/not started (volatile) - must be written at least once per second to prevent [[Foccci#Errors|CANTIMEOUT]]&lt;br /&gt;
|-&lt;br /&gt;
|AcObcState &lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|15 &lt;br /&gt;
|0&lt;br /&gt;
|Feedback from OBC&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Testing&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|DemoVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|500&lt;br /&gt;
|0&lt;br /&gt;
|Voltage for light bulb demo. To use the board without CAN, to get an constant voltage. Is ignored as long democtrl is not STANDALONE. Only values between 150V and 250V are accepted, others are treated as zero. &lt;br /&gt;
|-&lt;br /&gt;
|DemoControl&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|511&lt;br /&gt;
|0&lt;br /&gt;
|Enables the standalone demo mode if value is set to STANDALONE. In this mode, no CAN is required and the target voltages for precharge and charging loop are taken from demovtg.&lt;br /&gt;
|-&lt;br /&gt;
|ActuatorTest&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|7&lt;br /&gt;
|0&lt;br /&gt;
|Tests various outputs&lt;br /&gt;
|-&lt;br /&gt;
|logging&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2047&lt;br /&gt;
|&lt;br /&gt;
|Selects which modules log to the serial console&lt;br /&gt;
|}&lt;br /&gt;
==Spot values ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|opmode&lt;br /&gt;
|&lt;br /&gt;
|State of the CCS state machine&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|lasterr&lt;br /&gt;
|&lt;br /&gt;
|Last detected error&lt;br /&gt;
|-&lt;br /&gt;
|EvseVoltage&lt;br /&gt;
|V&lt;br /&gt;
|Outlet voltage reported by EVSE&lt;br /&gt;
|-&lt;br /&gt;
|EvseCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Outlet current reported by EVSE&lt;br /&gt;
|-&lt;br /&gt;
|TempLimitedCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Current limit calculated based on the inlet temperature&lt;br /&gt;
|-&lt;br /&gt;
|EVTargetCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Current demand which is communicated to the DC charging station. Is the minimum of TempLimitedCurrent and ChargeCurrent. &lt;br /&gt;
|-&lt;br /&gt;
|LimitationReason&lt;br /&gt;
|&lt;br /&gt;
|Shows the reason why charge power is limited&lt;br /&gt;
|-&lt;br /&gt;
|InletVoltage&lt;br /&gt;
|V&lt;br /&gt;
|Charge port voltage&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Maximum current the EVSE can deliver&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxVoltage&lt;br /&gt;
|V&lt;br /&gt;
|Maximum voltage the EVSE can deliver&lt;br /&gt;
|-&lt;br /&gt;
|ControlPilotDuty&lt;br /&gt;
|%&lt;br /&gt;
|The PWM ratio of the CP line. This is normally 5% for DC chargers, and between 10% and 90% for analog AC chargers.&lt;br /&gt;
Typical values are explained here: [https://de.wikipedia.org/wiki/IEC_62196_Typ_2 IEC 62196 Typ 2 – Wikipedia]&lt;br /&gt;
|-&lt;br /&gt;
|temp1, 2, 3&lt;br /&gt;
|°C&lt;br /&gt;
|Temperatures of the temperature sensors. Requires correct calibration values depending on the used NTC types.&lt;br /&gt;
|-&lt;br /&gt;
|MaxTemp&lt;br /&gt;
|°C&lt;br /&gt;
|Maximum of the above&lt;br /&gt;
|-&lt;br /&gt;
|ContactorDuty&lt;br /&gt;
|%&lt;br /&gt;
|Duty cycle of charge port contactor driver&lt;br /&gt;
|-&lt;br /&gt;
|AdcLockFeedback&lt;br /&gt;
|digit&lt;br /&gt;
|Feedback value from charge port lock&lt;br /&gt;
|-&lt;br /&gt;
|AdcProximityPilot&lt;br /&gt;
|digit&lt;br /&gt;
|Analog value of the PP line. This is the raw value of the analog-to-digital-converter in range 0 to 4095.&lt;br /&gt;
|-&lt;br /&gt;
|ResistanceProximityPilot&lt;br /&gt;
|ohm&lt;br /&gt;
|Measured resistance between PP line and ground. Requires correct setting of the parameter ppvariant.&lt;br /&gt;
|-&lt;br /&gt;
|CableCurrentLimit&lt;br /&gt;
|A&lt;br /&gt;
|Based on the PP resistance. The current limit of the charging cable for AC charging.&lt;br /&gt;
|-&lt;br /&gt;
|EvseCurrentLimit&lt;br /&gt;
|A&lt;br /&gt;
|Based on the CP PWM. The current limit of the charging station for AC charging.&lt;br /&gt;
|-&lt;br /&gt;
|AdcHwVariant&lt;br /&gt;
|digit&lt;br /&gt;
|raw AD value of the hardware variant coding input. Used to detect which variant of Foccci the software runs on.&lt;br /&gt;
|-&lt;br /&gt;
|AdcIpropi&lt;br /&gt;
|digit&lt;br /&gt;
|raw AD value of the current sensor for the charge port lock motor driver.&lt;br /&gt;
|-&lt;br /&gt;
|LockState&lt;br /&gt;
|&lt;br /&gt;
|State of charge port lock&lt;br /&gt;
|-&lt;br /&gt;
|StopReason&lt;br /&gt;
|&lt;br /&gt;
|shows the reason why the charging session stopped&lt;br /&gt;
|-&lt;br /&gt;
|checkpoint&lt;br /&gt;
|&lt;br /&gt;
|shows the progress of the charging session in detail. Explanation here: https://github.com/uhi22/pyPLC?tab=readme-ov-file#example-flow&lt;br /&gt;
|-&lt;br /&gt;
|CanWatchdog&lt;br /&gt;
|100 ms&lt;br /&gt;
|Time since last ChargeCurrent update. When it reaches 30 (3s) the charge session is stopped&lt;br /&gt;
|-&lt;br /&gt;
|cpuload&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
==Errors==&lt;br /&gt;
The spot value &amp;quot;lasterr&amp;quot; displays the last detected error that lead to a cancellation of charging or to not starting in the first place&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Error&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|CANTIMEOUT&lt;br /&gt;
|The ChargeCurrent hasn&#039;t been updated via CAN for more than 2s&lt;br /&gt;
|-&lt;br /&gt;
|PLCTIMEOUT&lt;br /&gt;
|PLC communication with charger timed out&lt;br /&gt;
|-&lt;br /&gt;
|PRECTIMEOUT&lt;br /&gt;
|Precharging the EVSE output to specified voltage timed out or battery voltage is below minimum EVSE output voltage&lt;br /&gt;
|-&lt;br /&gt;
|LOCKTIMEOUT&lt;br /&gt;
|The connector lock didn&#039;t reach the desired position in time&lt;br /&gt;
|-&lt;br /&gt;
|EVSEFAULT&lt;br /&gt;
|The EVSE reported an error and stopped&lt;br /&gt;
|-&lt;br /&gt;
|RELAYWELDED&lt;br /&gt;
|A welded charge port relay was detected&lt;br /&gt;
|}&lt;br /&gt;
== Making Foccci talk CHAdeMO on the CAN side ==&lt;br /&gt;
A pretty straightforward way to integrate CCS charging into your vehicle is to use the existing CHAdeMO (let&#039;s call it CDM from here on) CAN messaging. CDM has pretty much all data items we need to initiate a CCS charging session, so rather than defining a new set of messages we might as well adopt it. For example, Orion BMS or Zombieverter VCU natively support CHAdeMO anyway.[[File:Can mapping chademo.png|thumb|Screenshot of CAN mapping to interface Foccci CCS with CHAdeMO]]Let&#039;s go over the items in the screenshot one by one. Note that the IDs are decimal! (256=0x100, 258=0x102, 264=0x108, 265=0x109)&lt;br /&gt;
*&#039;&#039;&#039;UdcDivider&#039;&#039;&#039; - Actually, here we just select some dummy item as the important bit is in the Offset field: the version. In this case I signal non-existent CDM version 10. This tells the CDM module in my car that it talks to Foccci. It then includes the battery voltage in some unused message bytes - see below.&lt;br /&gt;
*&#039;&#039;&#039;EvseVoltage&#039;&#039;&#039; - Transmits the charger&#039;s present output voltage back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;EvseCurrent&#039;&#039;&#039; - Transmits the charger&#039;s present output current back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;opmode&#039;&#039;&#039; - Observe the weird gain - this is forged to map Foccci state &amp;quot;CurrentDemand (13)&amp;quot; to CDM state &amp;quot;ConnectorLocked (4)&amp;quot;. In my car&#039;s CDM module this is sufficient to initiate the charging progress. You may need to change it so that the ChargeEnable flag together with ConnectorLocked is forged (numerical value 5).&lt;br /&gt;
*&#039;&#039;&#039;EvseMaxVoltage&#039;&#039;&#039; - Transmits the EVSE&#039;s maximum output voltage back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;EvseMaxCurrent&#039;&#039;&#039; - Transmits the EVSE&#039;s maximum output current back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;BatteryVoltage&#039;&#039;&#039; - Transmits the present battery voltage to the EVSE.  This is the special item that normally doesn&#039;t exist in CDM and that unfortunately will prevent you from using this solution with an OEM car in a safe manner. Of course, you could manually set this to some medium battery voltage like 360V, but if you arrive with a really low battery at, say, 300V this might weld your charge port contactors.  You could also manually enter the battery voltage before each charging session.&lt;br /&gt;
*&#039;&#039;&#039;TargetVoltage&#039;&#039;&#039; - Transmits the charge end voltage to the EVSE.&lt;br /&gt;
*&#039;&#039;&#039;ChargeCurrent&#039;&#039;&#039; - By far the most important data item: the charge current request.&lt;br /&gt;
*&#039;&#039;&#039;soc&#039;&#039;&#039; - In CDM this isn&#039;t normally a percentage value but some encoded kWh value.  In my car&#039;s CDM module I specify a full battery as &amp;quot;200&amp;quot; (no idea what this actually means in kWh) and thereby can just output the SoC in 0.5% steps.&lt;br /&gt;
*&#039;&#039;&#039;enable&#039;&#039;&#039; - The car&#039;s charge enable flag.  When 0 will stop the CCS session.&lt;br /&gt;
As an additional safety measure you could connect CDM pin 4 (charge enable) to Foccci&#039;s button input (at least once we added an active low mode for it).  It might also be worthwhile to connect pin 7 (connection check) to the PP input for drive away protection when CDM is plugged in but not charging (again, once we have actually implemented this).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s list the CHAdeMO pin mapping one by one as well:&lt;br /&gt;
*Pin 1 - GND&lt;br /&gt;
*Pin 2 (12V, charger start/stop) - 12V (I take it from cigarette lighter)&lt;br /&gt;
*Pin 4 (charging enable) - Foccci BUTTON&lt;br /&gt;
*Pin 5, 6 - Power pins, triple check correct polarity!&lt;br /&gt;
*Pin 7 (Connection check) - Foccci PP&lt;br /&gt;
*Pin 8, 9 (CAN) - Foccci CANL, CANH&lt;br /&gt;
*Pin 10 (charger start/stop 2) - Foccci SW1_LS&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;u&amp;gt;Attention:&amp;lt;/u&amp;gt;&#039;&#039;&#039; with this mapping the error flags are ignored, e.g. voltage or current mismatch.&lt;br /&gt;
&lt;br /&gt;
==Making Foccci talk to boostech BMS==&lt;br /&gt;
The boostech BMS has a fixed CAN mapping. It doesn&#039;t expect any feedback from the CCS controller so we just keep the CHAdeMO mapping from above in case the info is needed elsewhere in the car.&lt;br /&gt;
&lt;br /&gt;
The BMS sends out big endian messages hence why the length fields are negative. It does not send out a charge end voltage so we simply multiply the charge enable flag with the voltage we want. In the example 368V.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Item&lt;br /&gt;
!Direction&lt;br /&gt;
!ID&lt;br /&gt;
!Position&lt;br /&gt;
!Length&lt;br /&gt;
!Gain&lt;br /&gt;
!Offset&lt;br /&gt;
!Extended&lt;br /&gt;
!Remark&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxVoltage&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x108 / 264&lt;br /&gt;
|8&lt;br /&gt;
|16&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxCurrent&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x108 / 264&lt;br /&gt;
|24&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EvseVoltage&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x109 / 265&lt;br /&gt;
|8&lt;br /&gt;
|16&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EvseCurrent&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x109 / 265&lt;br /&gt;
|24&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|enable&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|48&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BatteryVoltage&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|15&lt;br /&gt;
| -16&lt;br /&gt;
|0.1&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|soc&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|47&lt;br /&gt;
| -16&lt;br /&gt;
|0.1&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TargetVoltage&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|48&lt;br /&gt;
|1&lt;br /&gt;
|368&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|Put your desired TargetVoltage into gain&lt;br /&gt;
|-&lt;br /&gt;
|ChargeCurrent&lt;br /&gt;
|Receive&lt;br /&gt;
|0x313 / 787&lt;br /&gt;
|31&lt;br /&gt;
| -16&lt;br /&gt;
|0.097&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|This value is static, more below&lt;br /&gt;
|}&lt;br /&gt;
The boostech BMS &#039;&#039;&#039;lacks one critical feature&#039;&#039;&#039; for rapid charging: a dynamic charge limit. That means ChargeCurrent it always a fixed value that you program into the BMS. It will not cut back when cells are getting full, hot or cold. It can be somewhat mitigated by setting a sane target voltage (e.g. 4.1V x NumberOfCells). The rapid charger will then start to cut back charge current as this voltage is approached. Also by mapping the enable flag the BMS has the possibility to abort the charging session if one single cell voltage or module temperature rises above the safe threshold. In winter you will need to dial back your maximum charge current manually or heat you cells to avoid dendrites.&lt;br /&gt;
&lt;br /&gt;
== Hardware detection ==&lt;br /&gt;
[[File:3.3v Addressing Voltage Divider.png|thumb]]&lt;br /&gt;
To allow software to reliably detect which version hardware it runs on, in HW version 4.1 a version indication resistor was added. As opposed to some other boards that run at 5.3V, the voltage here is 3.3V.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Variant&lt;br /&gt;
!R1&lt;br /&gt;
!R2&lt;br /&gt;
!voltage&lt;br /&gt;
!ADC&lt;br /&gt;
!-3%&lt;br /&gt;
!+3%&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|2,7&lt;br /&gt;
|0,179&lt;br /&gt;
|222&lt;br /&gt;
|216&lt;br /&gt;
|229&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|3,3&lt;br /&gt;
|0,217&lt;br /&gt;
|269&lt;br /&gt;
|261&lt;br /&gt;
|277&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|3,9&lt;br /&gt;
|0,253&lt;br /&gt;
|314&lt;br /&gt;
|304&lt;br /&gt;
|323&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|4,7&lt;br /&gt;
|0,300&lt;br /&gt;
|372&lt;br /&gt;
|361&lt;br /&gt;
|383&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|5,1&lt;br /&gt;
|0,323&lt;br /&gt;
|401&lt;br /&gt;
|389&lt;br /&gt;
|413&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|5,6&lt;br /&gt;
|0,351&lt;br /&gt;
|436&lt;br /&gt;
|423&lt;br /&gt;
|449&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|6,8&lt;br /&gt;
|0,417&lt;br /&gt;
|518&lt;br /&gt;
|502&lt;br /&gt;
|533&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|7,5&lt;br /&gt;
|0,454&lt;br /&gt;
|564&lt;br /&gt;
|547&lt;br /&gt;
|580&lt;br /&gt;
|-&lt;br /&gt;
|4.0 with economizer&lt;br /&gt;
|47&lt;br /&gt;
|8,2&lt;br /&gt;
|0,490&lt;br /&gt;
|608&lt;br /&gt;
|590&lt;br /&gt;
|627&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|9,1&lt;br /&gt;
|0,535&lt;br /&gt;
|664&lt;br /&gt;
|644&lt;br /&gt;
|684&lt;br /&gt;
|-&lt;br /&gt;
|4.2&lt;br /&gt;
|47&lt;br /&gt;
|10&lt;br /&gt;
|0,579&lt;br /&gt;
|718&lt;br /&gt;
|697&lt;br /&gt;
|740&lt;br /&gt;
|-&lt;br /&gt;
|4.3&lt;br /&gt;
|47&lt;br /&gt;
|12&lt;br /&gt;
|0,671&lt;br /&gt;
|833&lt;br /&gt;
|808&lt;br /&gt;
|858&lt;br /&gt;
|-&lt;br /&gt;
|4.4&lt;br /&gt;
|47&lt;br /&gt;
|15&lt;br /&gt;
|0,798&lt;br /&gt;
|991&lt;br /&gt;
|961&lt;br /&gt;
|1020&lt;br /&gt;
|-&lt;br /&gt;
|4.5 - 5.2&lt;br /&gt;
|47&lt;br /&gt;
|18&lt;br /&gt;
|0,914&lt;br /&gt;
|1134&lt;br /&gt;
|1100&lt;br /&gt;
|1168&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|22&lt;br /&gt;
|1,052&lt;br /&gt;
|1306&lt;br /&gt;
|1266&lt;br /&gt;
|1345&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|27&lt;br /&gt;
|1,204&lt;br /&gt;
|1494&lt;br /&gt;
|1449&lt;br /&gt;
|1539&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|33&lt;br /&gt;
|1,361&lt;br /&gt;
|1689&lt;br /&gt;
|1639&lt;br /&gt;
|1740&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|39&lt;br /&gt;
|1,497&lt;br /&gt;
|1857&lt;br /&gt;
|1801&lt;br /&gt;
|1913&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|47&lt;br /&gt;
|1,650&lt;br /&gt;
|2048&lt;br /&gt;
|1986&lt;br /&gt;
|2109&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|56&lt;br /&gt;
|1,794&lt;br /&gt;
|2226&lt;br /&gt;
|2160&lt;br /&gt;
|2293&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Category:ChaDeMo‏‎]] [[Category:CCS]] [[Category:Rapid Charging]]&lt;br /&gt;
[[Category:Charger]]&lt;br /&gt;
[[Category:OpenInverter]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Foccci&amp;diff=5188</id>
		<title>Foccci</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Foccci&amp;diff=5188"/>
		<updated>2024-12-12T18:18:08Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added hint about CANTIMEOUT&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Disclaimer: This Page is still work in progress! Any information written here is a draft only and should be handled as such. Contributions more then welcome. If you have questions please ask them in the discussion section of the page or in the OpenInvert Forum.&lt;br /&gt;
[[File:Foccci pinout.svg|thumb|Foccci (v4.5) pinout]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Foccci 4.5b pinout.png|thumb|Foccci 4.5b / 5 / 5.1 pinout]]&lt;br /&gt;
This page is about FOCCCI. FOCCCI is an open source CCS Charge Interface started by Uhi and developed by the OpenInverter Community.&lt;br /&gt;
&lt;br /&gt;
Foccci is the hardware part, and on it runs the software Clara.&lt;br /&gt;
&lt;br /&gt;
Here you will find documentation on the Hardware (and Clara software), where to get it (or how to build it yourself), News regarding the development and many more great things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=79 Foccci for sale on OpenInverter Shop]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/uhi22/foccci Foccci on Github.]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/uhi22/ccs32clara Clara on Github.] &lt;br /&gt;
&lt;br /&gt;
[https://openinverter.org/forum/viewtopic.php?t=3727 Foccci in the OpenInverter Forum.]&lt;br /&gt;
&lt;br /&gt;
== Pin description ==&lt;br /&gt;
&lt;br /&gt;
=== External connector (&amp;quot;Deutsch Header&amp;quot;) ===&lt;br /&gt;
Starting version 4.5b the pins were reshuffled to allow one wiring loom going to the charge port and one to the car side. Changed pins are &#039;&#039;&#039;bold&#039;&#039;&#039;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Short name&lt;br /&gt;
!Pin up to version 4.5a&lt;br /&gt;
!Pin for version 4.5b, 5, 5.1&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|TEMP1&lt;br /&gt;
|A1&lt;br /&gt;
|A1&lt;br /&gt;
|Power pin temperature sensor. It is pulled up to 3.3V with 10k and the sensor must pull down to GND. Sensor characteristics are configurable in software&lt;br /&gt;
|-&lt;br /&gt;
|TEMP2&lt;br /&gt;
|A2&lt;br /&gt;
|A2&lt;br /&gt;
|As above&lt;br /&gt;
|-&lt;br /&gt;
|TEMP3&lt;br /&gt;
|A3&lt;br /&gt;
|A3&lt;br /&gt;
|As Above&lt;br /&gt;
|-&lt;br /&gt;
|LOCKFB&lt;br /&gt;
|A4&lt;br /&gt;
|A4&lt;br /&gt;
|Feedback signal from connector lock. Pulled up to 3.3V with 10k, so feedback must pull down to GND. Thresholds configurable in software&lt;br /&gt;
|-&lt;br /&gt;
|IN_U_HV&lt;br /&gt;
|A5&lt;br /&gt;
|&#039;&#039;&#039;B10&#039;&#039;&#039;&lt;br /&gt;
|Analog input 0 to 5V, with pull-down-resistor. Can be used to measure the charge port voltage, using a converter board, e.g. the &amp;quot;muehlpower board&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|CP&lt;br /&gt;
|A6&lt;br /&gt;
|A6&lt;br /&gt;
|CP (Control Pilot) pin from charge port&lt;br /&gt;
|-&lt;br /&gt;
|SW2(_LS)&lt;br /&gt;
|A7&lt;br /&gt;
|&#039;&#039;&#039;B4&#039;&#039;&#039;&lt;br /&gt;
|Output for charge port contactor 2. Low side switch until Foccci 4.4, high side switch starting 4.5&lt;br /&gt;
Controls one of the contactors to make the connection between the HV battery and the vehicle inlet.&lt;br /&gt;
&lt;br /&gt;
The output can drive inductive load without additional circuits. It will clamp the turn-off voltage to ~40V. The driver has protection against shortcut and thermal overload.&lt;br /&gt;
&lt;br /&gt;
The output can be configured to be just digital on/off, and can also be configured to use PWM. BUT: In Foccci versions 4.2 and 4.3 (maybe more) the output driver is only capable of slow PWM, which is hearable and may cause trouble with the contactors. So it is recommended to NOT use the PWM feature, and instead use contactors which do not require economizing or use external economizers. In case you want the PWM nevertheless, you need a external freewheeling diode.&lt;br /&gt;
&lt;br /&gt;
Starting Foccci 4.5 PWM is working as intended at 18 kHz. It is a high side output starting v4.5, so the other side of the contactor must be connected to GND. Before v4.5 it is a low side output so the other side must be connected to 12V&lt;br /&gt;
|-&lt;br /&gt;
|LOCK_MOT2&lt;br /&gt;
|A8&lt;br /&gt;
|A8&lt;br /&gt;
|Motor driver output for charge port lock servo&lt;br /&gt;
|-&lt;br /&gt;
|LOCK_MOT1&lt;br /&gt;
|A9&lt;br /&gt;
|A9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PP&lt;br /&gt;
|A10&lt;br /&gt;
|&#039;&#039;&#039;A5&#039;&#039;&#039;&lt;br /&gt;
|PP (Proximity Pilot) pin from charge port. If you want Foccci to wake up when an unpowered charge cord is plugged in you must close JP3 to pin 1 (towards R7). There mustn&#039;t be a pull-down resistor in the charge port in this case as that would permanently keep Foccci awake&lt;br /&gt;
|-&lt;br /&gt;
|5V&lt;br /&gt;
|A11&lt;br /&gt;
|&#039;&#039;&#039;B11&#039;&#039;&#039;&lt;br /&gt;
|5V, 500mA e.g. for supplying voltage sense board. This is an OUTPUT of Foccci. Do not apply an external voltage source here. Foccci contains a step-down-converter from the 12V supply to this 5V output.&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|A12&lt;br /&gt;
|&#039;&#039;&#039;B12&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|CANH&lt;br /&gt;
|B1&lt;br /&gt;
|B1&lt;br /&gt;
|CAN communication&lt;br /&gt;
|-&lt;br /&gt;
|CANL&lt;br /&gt;
|B2&lt;br /&gt;
|B2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|n.c.&lt;br /&gt;
|B3&lt;br /&gt;
|&lt;br /&gt;
|Unused pins were assigned GND in 4.5b&lt;br /&gt;
|-&lt;br /&gt;
|n.c.&lt;br /&gt;
|B4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|B5&lt;br /&gt;
|B5, &#039;&#039;&#039;B3&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SW1(_LS)&lt;br /&gt;
|B6&lt;br /&gt;
|B6&lt;br /&gt;
|Output for the charge port contactor 1. See description of SW2(_LS).&lt;br /&gt;
|-&lt;br /&gt;
|WAKEUP&lt;br /&gt;
|B7&lt;br /&gt;
|B7&lt;br /&gt;
|Wakeup bus. Momentarily (or constantly) applying 12V wakes up the board. In the other direction Foccci can wake up (or supply with up to 1A) other devices via a 12V high side switch&lt;br /&gt;
|-&lt;br /&gt;
|12V&lt;br /&gt;
|B8&lt;br /&gt;
|B8&lt;br /&gt;
|Supply voltage, always on. 9 to 24V are fine.&lt;br /&gt;
|-&lt;br /&gt;
|LED_RED&lt;br /&gt;
|B9&lt;br /&gt;
|&#039;&#039;&#039;A12&#039;&#039;&#039;&lt;br /&gt;
|Status LEDs&lt;br /&gt;
|-&lt;br /&gt;
|LED_GREEN&lt;br /&gt;
|B10&lt;br /&gt;
|&#039;&#039;&#039;A11&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LED_BLUE&lt;br /&gt;
|B11&lt;br /&gt;
|&#039;&#039;&#039;A10&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BUTTON&lt;br /&gt;
|B12&lt;br /&gt;
|&#039;&#039;&#039;A7&#039;&#039;&#039;&lt;br /&gt;
|Wakes up Foccci or stops an ongoing charging session&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Internal connectors ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!short name&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|UART TX&lt;br /&gt;
|Provides logging information, 921600 Baud. See also https://github.com/uhi22/ccs32clara/blob/main/doc/clara_user_manual.md#serial-logging&lt;br /&gt;
|-&lt;br /&gt;
|UART RX&lt;br /&gt;
|Not used&lt;br /&gt;
|-&lt;br /&gt;
|SWCLK&lt;br /&gt;
|for flashing with STLINK&lt;br /&gt;
|-&lt;br /&gt;
|SWDIO&lt;br /&gt;
|for flashing with STLINK&lt;br /&gt;
|}&lt;br /&gt;
== Integrating Foccci with your car/BMS==&lt;br /&gt;
[[File:Foccci CCS2.png|thumb|Foccci with (Orion) BMS]]&lt;br /&gt;
Depending on your use case Foccci has to communicate with one or more components in your car. All in-car communication happens via a single CAN bus.&lt;br /&gt;
===Basic communication considerations ===&lt;br /&gt;
Foccci can be configured to run at various baud rates and defaults to 500k. The Wifi interface mentioned below is hard coded to 500k. So when configuring a different baud rate you will loose communication with the Wifi interface. This might be fixed in the future by allowing variable baud rates for the wifi interface. Bottom line: &#039;&#039;&#039;keep it at 500k.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Apart from that it is mostly sufficient if Foccci can communicate, or more precisely, listen to the BMS. Foccci uses the flexible [[CAN communication|CAN mapping]] known from other OI firmware. There are 5 key parameters that need to be received via CAN:&lt;br /&gt;
*&#039;&#039;&#039;ChargeCurrent&#039;&#039;&#039;: this is the single most important item. It is directly relayed to the charger and specifies the current the battery can accept at the given moment. This depends on battery voltage, temperature and other things to be determined by the BMS. &#039;&#039;Foccci itself does no battery monitoring of any kind, it is completely down to the BMS to specify a safe charge current&#039;&#039;&#039;&#039;&#039;.&#039;&#039;&#039; When this value is not updated for more than 2 seconds the charging session is terminated.&lt;br /&gt;
* &#039;&#039;&#039;BatteryVoltage&#039;&#039;&#039;: this item is important for precharging the CCS chargers output to the momentary battery voltage. Most BMSes output the total pack voltage in a CAN message&lt;br /&gt;
* &#039;&#039;&#039;TargetVoltage&#039;&#039;&#039;: In theory this is the maximum voltage you want the battery to be charged to. In practise the maximum battery voltage MUST be governed by specifying an appropriate ChargeCurrent. More importantly many chargers cut back charge power when &#039;&#039;approaching&#039;&#039; this voltage resulting in poor charging performance towards the top end. So in practise you want to set this to a voltage about 10V above charge end voltage of your battery.&lt;br /&gt;
*&#039;&#039;&#039;soc&#039;&#039;&#039;: This is purely informative as far as we know. It displays the batteries state of charge on the chargers display&lt;br /&gt;
*&#039;&#039;&#039;enable&#039;&#039;&#039;: this is optional as it defaults to always enabled. It can be used to completely terminate the charging session by setting it to 0.&lt;br /&gt;
===Using Foccci as a charge coordinator===&lt;br /&gt;
This topic is still work in progress. The CCS connector, as its name suggests, combines both AC and DC charging in one socket. As long as we use the socket only for DC charging it is very easy to wire up. But once we also use the AC functionality we have to spend further thought on this.&lt;br /&gt;
&lt;br /&gt;
The two pins PP and CP communicate information about the cable limit and the momentary current limit of the AC outlet. PP is a simple resistor between PE and PP that is evaluated by putting a test current onto it. This concludes that this signal can only be used by one device. CP is a bit more complex. When plugging in it communicates with a 2k7 resistor to PE that the cable is now connected to a car. From this simple fact we can again conclude that CP is a peer-to-peer signal only. Once the car is ready to charge it switches another 1k3 resistor in parallel to the 2k7 resistor. Only then the AC voltage is switched to the power pins. Lastly, the AC outlet encodes the momentary current limit in a PWM duty cycle.&lt;br /&gt;
&lt;br /&gt;
Foccci does all the evaluation and makes the result available as spot values that can in turn be mapped to CAN:&lt;br /&gt;
*EvseAcCurrentLimit&lt;br /&gt;
*CableCurrentLimit&lt;br /&gt;
To activate the 1k3 resistor aka activating the AC outlet we map AcObcState. It must be set to 2 for activation.&lt;br /&gt;
&lt;br /&gt;
Some chargers want to evaluate the CP (and perhaps PP) signal themselves. This issue can be solved with a change over switch that disconnects Foccci from CP while AC charging. Alternatively the CP signal can be spoofed and the charge current controlled by CAN to satisfy the limits of the AC outlet (EVSE).&lt;br /&gt;
== Wakeup ==&lt;br /&gt;
For charging it is particularly interesting to wake up Foccci itself and necessary subsystems &amp;lt;ref&amp;gt;https://openinverter.org/forum/viewtopic.php?p=66547#p66547&amp;lt;/ref&amp;gt; when plugging in a charge cord. To allow for this, Foccci has various wakeup sources and also can wake up other devices. For wakeup to work, Foccci must be permanently supplied with 12V (it will draw no current when asleep). &#039;&#039;&#039;Hardware version V4.5 and above required for wakeup.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Here are the sources:&lt;br /&gt;
&lt;br /&gt;
# Wakeup pin - bidirectional - level triggered (12V)&lt;br /&gt;
# Button - level triggered (GND)&lt;br /&gt;
# PP - optional via solder bridge - level triggered&lt;br /&gt;
# CP - Edge triggered&lt;br /&gt;
&lt;br /&gt;
So the first 3 inputs will force the Foccci on. It can&#039;t turn itself off as long as that wakeup source is active. The last input will only trigger when transitioning from invalid to valid PWM and then Foccci can decide how long to stay awake. All modes always work regardless of software settings - except PP wakeup which can be turned off in hardware (JP3).&lt;br /&gt;
&lt;br /&gt;
The wakeup output on the other hand is software-defined. Foccci offers the following options&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Level&#039;&#039;&#039; - as long as the Foccci doesn&#039;t decide to turn off, we keep Wakeup on as well&lt;br /&gt;
# &#039;&#039;&#039;Pulse&#039;&#039;&#039; - When Foccci boots generate a 1s wakeup pulse&lt;br /&gt;
# &#039;&#039;&#039;LevelOnValidCp&#039;&#039;&#039; - As long as CP is pulsing we keep wakeup on&lt;br /&gt;
# &#039;&#039;&#039;PulseOnValidCp&#039;&#039;&#039; - Whenever we transition from non-pulsing to pulsing CP we generate a 1s pulse&lt;br /&gt;
# &#039;&#039;&#039;LevelOnValidPp&#039;&#039;&#039; - As long as PP is valid keep wakeup on&lt;br /&gt;
&lt;br /&gt;
The output can supply about 1A and 12V. When running loads larger than that (e.g. a pump) use a relay to amplify the current capability.&lt;br /&gt;
&lt;br /&gt;
It depends on your vehicle architecture how you organize the wakeup. Here are some examples:&lt;br /&gt;
&lt;br /&gt;
=== Basic wakeup ===&lt;br /&gt;
wakeup via PP enabled, WakeupPinFunc=LevelOnValidPp&lt;br /&gt;
&lt;br /&gt;
# Foccci turns on as soon as even a non-powered charging cable is plugged in&lt;br /&gt;
# Wakeup signal is turned on&lt;br /&gt;
# BMS, VCU etc. is turned on (directly powered from wakeup as it can supply about 1A)&lt;br /&gt;
# VCU can detect via the level of the wakeup signal that a cable is plugged in and inhibit drive&lt;br /&gt;
# When charging cable is unplugged (as in PP lost), Wakeup is turned off and the VCU can allow driving&lt;br /&gt;
# If we wanted to report e.g. welded charge port relays Foccci would have to keep itself running until the car is started in drive mode again. Then something can be displayed on the instrument cluster. Of course this will time out eventually. Should be fine as you at least have to pull away from the rapid charger after charging.&lt;br /&gt;
# When charging is paused all ECUs stay on and consume 12V power (or HV power via DC/DC)&lt;br /&gt;
&lt;br /&gt;
=== Advanced Wakeup ===&lt;br /&gt;
wakeup via PP disabled, WakeupPinFunc=PulseOnValidCp. Here we have a bidirectional wakeup bus. Any ECU connected to it can send or receive wakeup events and the individual ECUs can decide whether they are needed for a particular task or not.&lt;br /&gt;
&lt;br /&gt;
# Foccci turns on as soon as CP PWM starts. So either a cable is being plugged in or is already plugged in and now wants to charge&lt;br /&gt;
# It then turns on the wakeup output for 1s and wakes up all other ECUs&lt;br /&gt;
# The relevant ECUs will detect that we want to charge and stay on, the other ones turn off&lt;br /&gt;
# If we turn on ignition the VCU is already on and in charge mode and can inhibit drive&lt;br /&gt;
# If charging is paused (i.e. cable plugged in but no CP PWM) and we turn on ignition the VCU wakes up the Foccci and queries PP status. If something is plugged in drive is inhbited&lt;br /&gt;
# If Foccci detects an error e.g. welded relays, it stores that error to flash. When woken up by the VCU it report its non-zero error code&lt;br /&gt;
# When charging is paused, ALL ECUs can turn off and no 12V power is consumed. When CP comes back, the cycle restarts&lt;br /&gt;
&lt;br /&gt;
The second approach is more versatile but it also means all devices need to support this method.&lt;br /&gt;
&lt;br /&gt;
So I think there can be an intermediate approach:&lt;br /&gt;
&lt;br /&gt;
=== Semi-advanced wakeup ===&lt;br /&gt;
Here we only have a wakeup bus between VCU and Foccci. All other devices are powered up by other means, like VCU controlled relays. Wakeup via PP is disabled, WakeupPinFunc=LevelOnValidCp&lt;br /&gt;
&lt;br /&gt;
# Foccci turns on as soon as CP PWM starts. So either a cable is being plugged in or is already plugged in and now wants to charge&lt;br /&gt;
# It then turns on the wakeup output this waking up the VCU&lt;br /&gt;
# The VCU determines via CAN message from Foccci whether we want to AC or DC charge and turns on needed components. Components needed in both cases that have low power consumption (e.g. BMS) can also be driven from the wakeup signal directly&lt;br /&gt;
# If we turn on ignition the VCU is already on and in charge mode and can inhibit drive&lt;br /&gt;
# If charging is paused (i.e. cable plugged in but no CP PWM) and we turn on ignition the VCU wakes up the Foccci and queries PP status. If something is plugged in drive is inhbited&lt;br /&gt;
# If Foccci detects an error e.g. welded relays, it stores that error to flash. When woken up by the VCU it report its non-zero error code&lt;br /&gt;
# When charging is paused, ALL ECUs will turn off and no 12V power is consumed. When CP comes back, the cycle restarts&lt;br /&gt;
&lt;br /&gt;
== Configuring Foccci via CAN ==&lt;br /&gt;
Foccci exposes only one single CAN interface for vehicle communication and initial configuration. So we need a CAN counterpart to talk to it.&lt;br /&gt;
&lt;br /&gt;
There are two main approaches to this: a) use a command line tool &amp;lt;ref&amp;gt;OIC https://openinverter.org/forum/viewtopic.php?t=2907&amp;lt;/ref&amp;gt; or b) use an ESP based CAN module &amp;lt;ref&amp;gt;ESP32 CAN Web Interface https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=59&amp;amp;product_id=78&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both ways require knowing Focccis so called Node Id (similar to an IP address on a local network). By default this is 22. You can enter this node id on the bottom left navigation bar.&lt;br /&gt;
== Parameters==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Unit&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Min&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Max&#039;&#039;&#039; &lt;br /&gt;
|&#039;&#039;&#039;Default&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Hardware Config&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|UdcDivider&lt;br /&gt;
|dig/V &lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|10 &lt;br /&gt;
|Division factor from ADC digits to V of external voltage measurement board.&lt;br /&gt;
In other words: The UdcDivider is the configuration parameter which defines the scaling of the physical inlet voltage measurement circuit. That&#039;s why it is only relevant if a physical inlet voltage measurement circuit is present, and if the parameter InletVtgSrc is 1, means the Foccci will measure the inlet voltage with the analog input. CAN mapping makes no sense for the UdcDivider, because it is a fix value. It is the ratio between the voltage on the inlet and the digital value on the AD converter.&lt;br /&gt;
|-&lt;br /&gt;
|EconomizerDuty&lt;br /&gt;
|%&lt;br /&gt;
| 0&lt;br /&gt;
|100&lt;br /&gt;
| 100&lt;br /&gt;
|Contactor economizer duty cycle. Contactors are always turned on with 12V for 1s then drop to this value. Set to 100% if your contactor has a built-in economizer &lt;br /&gt;
|-&lt;br /&gt;
|InletVtgSrc&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
| 0&lt;br /&gt;
|Inlet Voltage Source. There are three option where Foccci gets the CCS inlet voltage from:&lt;br /&gt;
0 - Charger output voltage (EVSEPresentVoltage) is considered equal to charge port inlet voltage 1 - Analog input U_IN_HV is used for measuring charge port inlet voltage&lt;br /&gt;
&lt;br /&gt;
2 - Charge port inlet voltage is provided via CAN - don&#039;t forget to map something to InletVoltage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The InletVoltage is important for precharging, while the contactors are still open. The car (Foccci) will close the contactors, if the inlet voltage is near to the battery voltage. After closing the contactors, it is the battery voltage (besides some cable losses), and out of interest. The most straight forward solution to measure the inlet voltage is to rely on what the charging station tells us. It reports the voltage on the CCS plug in EVSEPresentVoltage. With configuring InletVtgSrc=0 we tell Foccci to use the EVSEPresentVoltage. In this case, neither an analog inlet voltage measuring circuit nor a separate gadget which provides the inlet voltage via CAN is necessary. For most users this will be fine (even OEM cars use this approach).&lt;br /&gt;
|-&lt;br /&gt;
|LockDuty&lt;br /&gt;
|%&lt;br /&gt;
| -100&lt;br /&gt;
| 100&lt;br /&gt;
|30&lt;br /&gt;
|H-bridge duty cycle for operating the lock. Use negative value if lock polarity is swapped&lt;br /&gt;
|-&lt;br /&gt;
| LockRunTime&lt;br /&gt;
|ms &lt;br /&gt;
|0&lt;br /&gt;
|10000&lt;br /&gt;
|1000&lt;br /&gt;
|Timeout for lock operation&lt;br /&gt;
|-&lt;br /&gt;
|LockClosedThresh&lt;br /&gt;
| dig&lt;br /&gt;
| 0&lt;br /&gt;
|4095&lt;br /&gt;
|0&lt;br /&gt;
| Lock feedback value for closed&lt;br /&gt;
|-&lt;br /&gt;
|LockOpenThresh&lt;br /&gt;
| dig&lt;br /&gt;
| 0&lt;br /&gt;
|4095 &lt;br /&gt;
| 0&lt;br /&gt;
| Lock feedback value for open - if equal to lockclosethr no feedback is assumed and lock is operated timed &lt;br /&gt;
|-&lt;br /&gt;
| ppvariant&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|9&lt;br /&gt;
|0&lt;br /&gt;
|Various circuit variations exist for PP resistor measurement.&lt;br /&gt;
&amp;quot;0&amp;quot; is for the variant with 1k pull-up to 3.3V, like old the old Foccci 4.1&lt;br /&gt;
&amp;quot;1&amp;quot; is for the variant with 330 ohm pull-up to 5V and 3k pull-down.&lt;br /&gt;
&amp;quot;2&amp;quot; is for the variant with 330 ohm pull-up to 5V and NO pull-down.&lt;br /&gt;
Foccci 4.5 ususally has NO pulldown, except the related solder jumper was closed.&lt;br /&gt;
|-&lt;br /&gt;
|WakeupPinFunc&lt;br /&gt;
|&lt;br /&gt;
| 0&lt;br /&gt;
|4&lt;br /&gt;
|0&lt;br /&gt;
| Configure what the wakeup pin does. See [[Foccci#Wakeup|Wakeup]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Communication&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|NodeId&lt;br /&gt;
|&lt;br /&gt;
|1&lt;br /&gt;
|63&lt;br /&gt;
|22&lt;br /&gt;
|CANOpen node id for SDO requests &lt;br /&gt;
|-&lt;br /&gt;
|CanSpeed&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
| 4&lt;br /&gt;
|2&lt;br /&gt;
|Baud rate of CAN interface 0=125k, 1=250k, 2=500k, 3=800k, 4=1M - &#039;&#039;&#039;when configuring this != 500k you have to change it also for your ESP web interface!&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Charge Parameters&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|MaxPower&lt;br /&gt;
|kW&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
| 100&lt;br /&gt;
|Absolute maximum charge power. Foccci will announce this value in the ChargeParameterDiscoveryRequest message in the element EVMaximumPowerLimit. The charger may or may not respect this limitation. &lt;br /&gt;
|-&lt;br /&gt;
|MaxVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
|410&lt;br /&gt;
|Over voltage threshold. Always set about 10-20V higher then desired battery full voltage. Foccci will announce this value in the ChargeParameterDiscoveryRequest message to the charger, in the element EVMaximumVoltageLimit. The charger may or may not respect this limitation. Some chargers shut down, if this limit is reached. That&#039;s why it is recommended to set it some volts higher than the voltage which is used during normal charging. &lt;br /&gt;
|-&lt;br /&gt;
|MaxCurrent &lt;br /&gt;
|A&lt;br /&gt;
|0&lt;br /&gt;
|500 &lt;br /&gt;
|125&lt;br /&gt;
| Absolute maximum charge current. Foccci will announce this value in the ChargeParameterDiscoveryRequest, in the element EVMaximumCurrentLimit. The charger may or may not respect this limitation.&lt;br /&gt;
|-&lt;br /&gt;
|MaxAllowedPinTemperature&lt;br /&gt;
|°C&lt;br /&gt;
|0&lt;br /&gt;
|120&lt;br /&gt;
|70&lt;br /&gt;
|Temperature of the CCS inlet which leads to fully reduced charge current. If the maximum of temp1, temp2, temp3 reaches this value, the charge current is cut down. Before reaching this limit, the charge current decreases linearily. If the temperature still rises and reaches 10 Kelvin more than parametrized, the charge session will be terminated.&lt;br /&gt;
For information purpose, the current limit caused by the temperature is visible in the spot value TempLimitedCurrent. If the limitation is effective, which means, that the BMS would have requested a higher current than the limitation, the spot value LimitationReason shows &amp;quot;InletHot&amp;quot;.&lt;br /&gt;
In case of massive overheat (10K more than parametrized), the spotvalue StopReason will show &amp;quot;InletOverheat&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|TargetVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|1000&lt;br /&gt;
| 0&lt;br /&gt;
|Charge target voltage (volatile)&lt;br /&gt;
|-&lt;br /&gt;
|ChargeCurrent&lt;br /&gt;
|A&lt;br /&gt;
|0&lt;br /&gt;
|500 &lt;br /&gt;
|0&lt;br /&gt;
| Instantaneous current setpoint (volatile) - must be written at least once per second to prevent [[Foccci#CANTIMEOUT|CANTIMEOUT]]&lt;br /&gt;
|-&lt;br /&gt;
|soc&lt;br /&gt;
|%&lt;br /&gt;
|0&lt;br /&gt;
|100&lt;br /&gt;
|0&lt;br /&gt;
|Battery SoC for display on charger (volatile)&lt;br /&gt;
|-&lt;br /&gt;
|BatteryVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
| 1000&lt;br /&gt;
|0&lt;br /&gt;
| Present battery voltage for precharge state (volatile)&lt;br /&gt;
|-&lt;br /&gt;
|enable &lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|When 0 charging is stopped/not started (volatile) - must be written at least once per second to prevent [[Foccci#CANTIMEOUT|CANTIMEOUT]]&lt;br /&gt;
|-&lt;br /&gt;
|AcObcState &lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|15 &lt;br /&gt;
|0&lt;br /&gt;
|Feedback from OBC&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; |&#039;&#039;&#039;Testing&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|DemoVoltage&lt;br /&gt;
|V&lt;br /&gt;
|0&lt;br /&gt;
|500&lt;br /&gt;
|0&lt;br /&gt;
|Voltage for light bulb demo. To use the board without CAN, to get an constant voltage. Is ignored as long democtrl is not STANDALONE. Only values between 150V and 250V are accepted, others are treated as zero. &lt;br /&gt;
|-&lt;br /&gt;
|DemoControl&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|511&lt;br /&gt;
|0&lt;br /&gt;
|Enables the standalone demo mode if value is set to STANDALONE. In this mode, no CAN is required and the target voltages for precharge and charging loop are taken from demovtg.&lt;br /&gt;
|-&lt;br /&gt;
|ActuatorTest&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|7&lt;br /&gt;
|0&lt;br /&gt;
|Tests various outputs&lt;br /&gt;
|-&lt;br /&gt;
|logging&lt;br /&gt;
|&lt;br /&gt;
|0&lt;br /&gt;
|2047&lt;br /&gt;
|&lt;br /&gt;
|Selects which modules log to the serial console&lt;br /&gt;
|}&lt;br /&gt;
==Spot values ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Unit&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|opmode&lt;br /&gt;
|&lt;br /&gt;
|State of the CCS state machine&lt;br /&gt;
|-&lt;br /&gt;
|version&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|lasterr&lt;br /&gt;
|&lt;br /&gt;
|Last detected error&lt;br /&gt;
|-&lt;br /&gt;
|EvseVoltage&lt;br /&gt;
|V&lt;br /&gt;
|Outlet voltage reported by EVSE&lt;br /&gt;
|-&lt;br /&gt;
|EvseCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Outlet current reported by EVSE&lt;br /&gt;
|-&lt;br /&gt;
|TempLimitedCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Current limit calculated based on the inlet temperature&lt;br /&gt;
|-&lt;br /&gt;
|EVTargetCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Current demand which is communicated to the DC charging station. Is the minimum of TempLimitedCurrent and ChargeCurrent. &lt;br /&gt;
|-&lt;br /&gt;
|LimitationReason&lt;br /&gt;
|&lt;br /&gt;
|Shows the reason why charge power is limited&lt;br /&gt;
|-&lt;br /&gt;
|InletVoltage&lt;br /&gt;
|V&lt;br /&gt;
|Charge port voltage&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxCurrent&lt;br /&gt;
|A&lt;br /&gt;
|Maximum current the EVSE can deliver&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxVoltage&lt;br /&gt;
|V&lt;br /&gt;
|Maximum voltage the EVSE can deliver&lt;br /&gt;
|-&lt;br /&gt;
|ControlPilotDuty&lt;br /&gt;
|%&lt;br /&gt;
|The PWM ratio of the CP line. This is normally 5% for DC chargers, and between 10% and 90% for analog AC chargers.&lt;br /&gt;
Typical values are explained here: [https://de.wikipedia.org/wiki/IEC_62196_Typ_2 IEC 62196 Typ 2 – Wikipedia]&lt;br /&gt;
|-&lt;br /&gt;
|temp1, 2, 3&lt;br /&gt;
|°C&lt;br /&gt;
|Temperatures of the temperature sensors. Requires correct calibration values depending on the used NTC types.&lt;br /&gt;
|-&lt;br /&gt;
|MaxTemp&lt;br /&gt;
|°C&lt;br /&gt;
|Maximum of the above&lt;br /&gt;
|-&lt;br /&gt;
|ContactorDuty&lt;br /&gt;
|%&lt;br /&gt;
|Duty cycle of charge port contactor driver&lt;br /&gt;
|-&lt;br /&gt;
|AdcLockFeedback&lt;br /&gt;
|digit&lt;br /&gt;
|Feedback value from charge port lock&lt;br /&gt;
|-&lt;br /&gt;
|AdcProximityPilot&lt;br /&gt;
|digit&lt;br /&gt;
|Analog value of the PP line. This is the raw value of the analog-to-digital-converter in range 0 to 4095.&lt;br /&gt;
|-&lt;br /&gt;
|ResistanceProximityPilot&lt;br /&gt;
|ohm&lt;br /&gt;
|Measured resistance between PP line and ground. Requires correct setting of the parameter ppvariant.&lt;br /&gt;
|-&lt;br /&gt;
|CableCurrentLimit&lt;br /&gt;
|A&lt;br /&gt;
|Based on the PP resistance. The current limit of the charging cable for AC charging.&lt;br /&gt;
|-&lt;br /&gt;
|EvseCurrentLimit&lt;br /&gt;
|A&lt;br /&gt;
|Based on the CP PWM. The current limit of the charging station for AC charging.&lt;br /&gt;
|-&lt;br /&gt;
|AdcHwVariant&lt;br /&gt;
|digit&lt;br /&gt;
|raw AD value of the hardware variant coding input. Used to detect which variant of Foccci the software runs on.&lt;br /&gt;
|-&lt;br /&gt;
|AdcIpropi&lt;br /&gt;
|digit&lt;br /&gt;
|raw AD value of the current sensor for the charge port lock motor driver.&lt;br /&gt;
|-&lt;br /&gt;
|LockState&lt;br /&gt;
|&lt;br /&gt;
|State of charge port lock&lt;br /&gt;
|-&lt;br /&gt;
|StopReason&lt;br /&gt;
|&lt;br /&gt;
|shows the reason why the charging session stopped&lt;br /&gt;
|-&lt;br /&gt;
|checkpoint&lt;br /&gt;
|&lt;br /&gt;
|shows the progress of the charging session in detail. Explanation here: https://github.com/uhi22/pyPLC?tab=readme-ov-file#example-flow&lt;br /&gt;
|-&lt;br /&gt;
|CanWatchdog&lt;br /&gt;
|100 ms&lt;br /&gt;
|Time since last ChargeCurrent update. When it reaches 30 (3s) the charge session is stopped&lt;br /&gt;
|-&lt;br /&gt;
|cpuload&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
==Errors==&lt;br /&gt;
The spot value &amp;quot;lasterr&amp;quot; displays the last detected error that lead to a cancellation of charging or to not starting in the first place&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Error&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|CANTIMEOUT&lt;br /&gt;
|The ChargeCurrent hasn&#039;t been updated via CAN for more than 2s&lt;br /&gt;
|-&lt;br /&gt;
|PLCTIMEOUT&lt;br /&gt;
|PLC communication with charger timed out&lt;br /&gt;
|-&lt;br /&gt;
|PRECTIMEOUT&lt;br /&gt;
|Precharging the EVSE output to specified voltage timed out or battery voltage is below minimum EVSE output voltage&lt;br /&gt;
|-&lt;br /&gt;
|LOCKTIMEOUT&lt;br /&gt;
|The connector lock didn&#039;t reach the desired position in time&lt;br /&gt;
|-&lt;br /&gt;
|EVSEFAULT&lt;br /&gt;
|The EVSE reported an error and stopped&lt;br /&gt;
|-&lt;br /&gt;
|RELAYWELDED&lt;br /&gt;
|A welded charge port relay was detected&lt;br /&gt;
|}&lt;br /&gt;
== Making Foccci talk CHAdeMO on the CAN side ==&lt;br /&gt;
A pretty straightforward way to integrate CCS charging into your vehicle is to use the existing CHAdeMO (let&#039;s call it CDM from here on) CAN messaging. CDM has pretty much all data items we need to initiate a CCS charging session, so rather than defining a new set of messages we might as well adopt it. For example, Orion BMS or Zombieverter VCU natively support CHAdeMO anyway.[[File:Can mapping chademo.png|thumb|Screenshot of CAN mapping to interface Foccci CCS with CHAdeMO]]Let&#039;s go over the items in the screenshot one by one. Note that the IDs are decimal! (256=0x100, 258=0x102, 264=0x108, 265=0x109)&lt;br /&gt;
*&#039;&#039;&#039;UdcDivider&#039;&#039;&#039; - Actually, here we just select some dummy item as the important bit is in the Offset field: the version. In this case I signal non-existent CDM version 10. This tells the CDM module in my car that it talks to Foccci. It then includes the battery voltage in some unused message bytes - see below.&lt;br /&gt;
*&#039;&#039;&#039;EvseVoltage&#039;&#039;&#039; - Transmits the charger&#039;s present output voltage back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;EvseCurrent&#039;&#039;&#039; - Transmits the charger&#039;s present output current back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;opmode&#039;&#039;&#039; - Observe the weird gain - this is forged to map Foccci state &amp;quot;CurrentDemand (13)&amp;quot; to CDM state &amp;quot;ConnectorLocked (4)&amp;quot;. In my car&#039;s CDM module this is sufficient to initiate the charging progress. You may need to change it so that the ChargeEnable flag together with ConnectorLocked is forged (numerical value 5).&lt;br /&gt;
*&#039;&#039;&#039;EvseMaxVoltage&#039;&#039;&#039; - Transmits the EVSE&#039;s maximum output voltage back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;EvseMaxCurrent&#039;&#039;&#039; - Transmits the EVSE&#039;s maximum output current back to the vehicle.&lt;br /&gt;
*&#039;&#039;&#039;BatteryVoltage&#039;&#039;&#039; - Transmits the present battery voltage to the EVSE.  This is the special item that normally doesn&#039;t exist in CDM and that unfortunately will prevent you from using this solution with an OEM car in a safe manner. Of course, you could manually set this to some medium battery voltage like 360V, but if you arrive with a really low battery at, say, 300V this might weld your charge port contactors.  You could also manually enter the battery voltage before each charging session.&lt;br /&gt;
*&#039;&#039;&#039;TargetVoltage&#039;&#039;&#039; - Transmits the charge end voltage to the EVSE.&lt;br /&gt;
*&#039;&#039;&#039;ChargeCurrent&#039;&#039;&#039; - By far the most important data item: the charge current request.&lt;br /&gt;
*&#039;&#039;&#039;soc&#039;&#039;&#039; - In CDM this isn&#039;t normally a percentage value but some encoded kWh value.  In my car&#039;s CDM module I specify a full battery as &amp;quot;200&amp;quot; (no idea what this actually means in kWh) and thereby can just output the SoC in 0.5% steps.&lt;br /&gt;
*&#039;&#039;&#039;enable&#039;&#039;&#039; - The car&#039;s charge enable flag.  When 0 will stop the CCS session.&lt;br /&gt;
As an additional safety measure you could connect CDM pin 4 (charge enable) to Foccci&#039;s button input (at least once we added an active low mode for it).  It might also be worthwhile to connect pin 7 (connection check) to the PP input for drive away protection when CDM is plugged in but not charging (again, once we have actually implemented this).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s list the CHAdeMO pin mapping one by one as well:&lt;br /&gt;
*Pin 1 - GND&lt;br /&gt;
*Pin 2 (12V, charger start/stop) - 12V (I take it from cigarette lighter)&lt;br /&gt;
*Pin 4 (charging enable) - Foccci BUTTON&lt;br /&gt;
*Pin 5, 6 - Power pins, triple check correct polarity!&lt;br /&gt;
*Pin 7 (Connection check) - Foccci PP&lt;br /&gt;
*Pin 8, 9 (CAN) - Foccci CANL, CANH&lt;br /&gt;
*Pin 10 (charger start/stop 2) - Foccci SW1_LS&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;u&amp;gt;Attention:&amp;lt;/u&amp;gt;&#039;&#039;&#039; with this mapping the error flags are ignored, e.g. voltage or current mismatch.&lt;br /&gt;
&lt;br /&gt;
==Making Foccci talk to boostech BMS==&lt;br /&gt;
The boostech BMS has a fixed CAN mapping. It doesn&#039;t expect any feedback from the CCS controller so we just keep the CHAdeMO mapping from above in case the info is needed elsewhere in the car.&lt;br /&gt;
&lt;br /&gt;
The BMS sends out big endian messages hence why the length fields are negative. It does not send out a charge end voltage so we simply multiply the charge enable flag with the voltage we want. In the example 368V.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Item&lt;br /&gt;
!Direction&lt;br /&gt;
!ID&lt;br /&gt;
!Position&lt;br /&gt;
!Length&lt;br /&gt;
!Gain&lt;br /&gt;
!Offset&lt;br /&gt;
!Extended&lt;br /&gt;
!Remark&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxVoltage&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x108 / 264&lt;br /&gt;
|8&lt;br /&gt;
|16&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EvseMaxCurrent&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x108 / 264&lt;br /&gt;
|24&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EvseVoltage&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x109 / 265&lt;br /&gt;
|8&lt;br /&gt;
|16&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|EvseCurrent&lt;br /&gt;
|Transmit&lt;br /&gt;
|0x109 / 265&lt;br /&gt;
|24&lt;br /&gt;
|8&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|no&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|enable&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|48&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|BatteryVoltage&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|15&lt;br /&gt;
| -16&lt;br /&gt;
|0.1&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|soc&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|47&lt;br /&gt;
| -16&lt;br /&gt;
|0.1&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TargetVoltage&lt;br /&gt;
|Receive&lt;br /&gt;
|0x310 / 784&lt;br /&gt;
|48&lt;br /&gt;
|1&lt;br /&gt;
|368&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|Put your desired TargetVoltage into gain&lt;br /&gt;
|-&lt;br /&gt;
|ChargeCurrent&lt;br /&gt;
|Receive&lt;br /&gt;
|0x313 / 787&lt;br /&gt;
|31&lt;br /&gt;
| -16&lt;br /&gt;
|0.097&lt;br /&gt;
|0&lt;br /&gt;
|yes&lt;br /&gt;
|This value is static, more below&lt;br /&gt;
|}&lt;br /&gt;
The boostech BMS &#039;&#039;&#039;lacks one critical feature&#039;&#039;&#039; for rapid charging: a dynamic charge limit. That means ChargeCurrent it always a fixed value that you program into the BMS. It will not cut back when cells are getting full, hot or cold. It can be somewhat mitigated by setting a sane target voltage (e.g. 4.1V x NumberOfCells). The rapid charger will then start to cut back charge current as this voltage is approached. Also by mapping the enable flag the BMS has the possibility to abort the charging session if one single cell voltage or module temperature rises above the safe threshold. In winter you will need to dial back your maximum charge current manually or heat you cells to avoid dendrites.&lt;br /&gt;
&lt;br /&gt;
== Hardware detection ==&lt;br /&gt;
[[File:3.3v Addressing Voltage Divider.png|thumb]]&lt;br /&gt;
To allow software to reliably detect which version hardware it runs on, in HW version 4.1 a version indication resistor was added. As opposed to some other boards that run at 5.3V, the voltage here is 3.3V.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Variant&lt;br /&gt;
!R1&lt;br /&gt;
!R2&lt;br /&gt;
!voltage&lt;br /&gt;
!ADC&lt;br /&gt;
!-3%&lt;br /&gt;
!+3%&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|2,7&lt;br /&gt;
|0,179&lt;br /&gt;
|222&lt;br /&gt;
|216&lt;br /&gt;
|229&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|3,3&lt;br /&gt;
|0,217&lt;br /&gt;
|269&lt;br /&gt;
|261&lt;br /&gt;
|277&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|3,9&lt;br /&gt;
|0,253&lt;br /&gt;
|314&lt;br /&gt;
|304&lt;br /&gt;
|323&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|4,7&lt;br /&gt;
|0,300&lt;br /&gt;
|372&lt;br /&gt;
|361&lt;br /&gt;
|383&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|5,1&lt;br /&gt;
|0,323&lt;br /&gt;
|401&lt;br /&gt;
|389&lt;br /&gt;
|413&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|5,6&lt;br /&gt;
|0,351&lt;br /&gt;
|436&lt;br /&gt;
|423&lt;br /&gt;
|449&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|6,8&lt;br /&gt;
|0,417&lt;br /&gt;
|518&lt;br /&gt;
|502&lt;br /&gt;
|533&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|7,5&lt;br /&gt;
|0,454&lt;br /&gt;
|564&lt;br /&gt;
|547&lt;br /&gt;
|580&lt;br /&gt;
|-&lt;br /&gt;
|4.0 with economizer&lt;br /&gt;
|47&lt;br /&gt;
|8,2&lt;br /&gt;
|0,490&lt;br /&gt;
|608&lt;br /&gt;
|590&lt;br /&gt;
|627&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|47&lt;br /&gt;
|9,1&lt;br /&gt;
|0,535&lt;br /&gt;
|664&lt;br /&gt;
|644&lt;br /&gt;
|684&lt;br /&gt;
|-&lt;br /&gt;
|4.2&lt;br /&gt;
|47&lt;br /&gt;
|10&lt;br /&gt;
|0,579&lt;br /&gt;
|718&lt;br /&gt;
|697&lt;br /&gt;
|740&lt;br /&gt;
|-&lt;br /&gt;
|4.3&lt;br /&gt;
|47&lt;br /&gt;
|12&lt;br /&gt;
|0,671&lt;br /&gt;
|833&lt;br /&gt;
|808&lt;br /&gt;
|858&lt;br /&gt;
|-&lt;br /&gt;
|4.4&lt;br /&gt;
|47&lt;br /&gt;
|15&lt;br /&gt;
|0,798&lt;br /&gt;
|991&lt;br /&gt;
|961&lt;br /&gt;
|1020&lt;br /&gt;
|-&lt;br /&gt;
|4.5 - 5.2&lt;br /&gt;
|47&lt;br /&gt;
|18&lt;br /&gt;
|0,914&lt;br /&gt;
|1134&lt;br /&gt;
|1100&lt;br /&gt;
|1168&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|22&lt;br /&gt;
|1,052&lt;br /&gt;
|1306&lt;br /&gt;
|1266&lt;br /&gt;
|1345&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|27&lt;br /&gt;
|1,204&lt;br /&gt;
|1494&lt;br /&gt;
|1449&lt;br /&gt;
|1539&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|33&lt;br /&gt;
|1,361&lt;br /&gt;
|1689&lt;br /&gt;
|1639&lt;br /&gt;
|1740&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|39&lt;br /&gt;
|1,497&lt;br /&gt;
|1857&lt;br /&gt;
|1801&lt;br /&gt;
|1913&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|47&lt;br /&gt;
|1,650&lt;br /&gt;
|2048&lt;br /&gt;
|1986&lt;br /&gt;
|2109&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|47&lt;br /&gt;
|56&lt;br /&gt;
|1,794&lt;br /&gt;
|2226&lt;br /&gt;
|2160&lt;br /&gt;
|2293&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Category:ChaDeMo‏‎]] [[Category:CCS]] [[Category:Rapid Charging]]&lt;br /&gt;
[[Category:Charger]]&lt;br /&gt;
[[Category:OpenInverter]]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=File:Electric-car.jpg&amp;diff=5158</id>
		<title>File:Electric-car.jpg</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=File:Electric-car.jpg&amp;diff=5158"/>
		<updated>2024-12-04T08:56:02Z</updated>

		<summary type="html">&lt;p&gt;Johu: Johu uploaded a new version of File:Electric-car.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Overview of EV systems, source https://www.newkidscar.com/&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5153</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5153"/>
		<updated>2024-12-03T11:14:34Z</updated>

		<summary type="html">&lt;p&gt;Johu: /* Rapid Charging */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Did you know you can convert your existing fossil powered vehicle to use electricity instead? And that you can even produce that electricity yourself?&lt;br /&gt;
&lt;br /&gt;
Open Inverter is a [[Main Page#Who we are|community of people]] and projects focused on open source solutions for EV conversions.  Founded in 2008 by Johannes Huebner as an open source inverter control firmware, the project has since expended to include the reuse of components from production EVs and hybrids, including inverters, motors, batteries, on-board chargers, and DC-DC converters, as well as the open source implementation of other necessary systems for EV conversions such as DC Fast Charging controllers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:Electric-car.jpg|none|frame|Click on the captions to learn more about the respective system! Image source: https://www.newkidscar.com/&lt;br /&gt;
&lt;br /&gt;
poly 248 166 542 166 542 217 248 217 248 166 [[#Reusing motors and inverters - aka drive trains]]&lt;br /&gt;
poly 1041 455 1336 455 1336 506 1041 506 1041 455 [[#Reusing Batteries]]&lt;br /&gt;
poly 147 344 428 344 428 391 147 391 147 344 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 844 624 1118 624 1118 673 844 673 844 624 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 935 539 1200 539 1200 586 935 586 935 539 [[#Rapid Charging]]&lt;br /&gt;
poly 134 435 394 435 394 483 134 483 134 435 [[#Auxiliary Parts]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by the wider community. &#039;&#039;&#039;Please update this wiki&#039;&#039;&#039;. For example if your question has been clarified on the [https://openinverter.org/forum forum] and the new information can not be found here, please add it! The credentials are the same as for the forum.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Main Page#Who we are|Developers]] time is best spent developing;&#039;&#039;&#039; &#039;&#039;&#039;Support is best found in the forums&#039;&#039;&#039; - Developers of various projects are often bombarded with private messages and emails. Managing these emails and questions is a extremely large undertaking. Please read, and take the time to understand the information available here and across the web if you don&#039;t understand a topic. Developers are not your personal support team, unless you want to [[Application Support|pay them directly]] for their time. To keep developers independent please consider donating - donation links can be found [[Main Page#Who we are|down below]].&lt;br /&gt;
&lt;br /&gt;
==Reusing motors and inverters - aka drive trains==&lt;br /&gt;
[[File:Tesla_LDU.jpg|thumb]]&lt;br /&gt;
The drive train is one of the defining building blocks of your conversion as it defines how well your vehicle picks up speed. Over the years we have reverse engineered many popular drive trains from [[:Category:OEM|production cars]] such as Teslas. As a bonus using such complete drive trains facilitates getting the vehicle [[Legalities|road legal]] in many countries. By now you have a choice of low to medium power drive trains that only cost a few 100€ up to high performance ones at many 1000€. &lt;br /&gt;
&lt;br /&gt;
We have established two methods of running these [[:Category:OEM|OEM]] systems: reverse-engineering their communication protocol and making the drive train &amp;quot;think&amp;quot; it is still in its original vehicle OR swapping out the control electronics for our own open source motor controller. The latter method gives your more control and power but also a steeper learning curve. &lt;br /&gt;
&lt;br /&gt;
Nearly all drive trains are targeted at 400V battery voltage. Run at a lower voltage they will produce proportionally less power. &lt;br /&gt;
Here is what we have done so far and how we&#039;ve done it. Some is still work in progress (WIP) &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Drive Train&lt;br /&gt;
!Control Method&lt;br /&gt;
! Approximate Power Output&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model S/X Large Drive Unit (&amp;quot;LDU&amp;quot;)|Large Drive Unit]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=64 Board Swap]&lt;br /&gt;
|335-475 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model S/X Small Drive Unit (&amp;quot;SDU&amp;quot;)|Small Drive Unit]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=62 Board Swap]&lt;br /&gt;
|180 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Rear Drive Unit|Model 3/Y Rear Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|239 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Front Drive Unit|Model 3/Y Front Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|121 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Nissan]]&lt;br /&gt;
|[[Nissan Leaf Motors|Gen1]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]&lt;br /&gt;
|80 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| [[Nissan Leaf Gen2 Board|Gen2]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/[https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=57 Board Swap]&lt;br /&gt;
|80 kW / 130 kW (board swap)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Nissan Leaf Gen 3 (2018 up EM57)|Gen3]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap [WIP]&lt;br /&gt;
|110 - 160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Toyota|Toyota]]&lt;br /&gt;
|[[Lexus GS450h Drivetrain|Lexus GS 450h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|250 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus GS300h CVT|Lexus GS 300h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|105 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter|Prius Gen2]]&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter Controller|External Control Board]] ([https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=68 Buy here])&lt;br /&gt;
|40-70 kW &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen3 Board|Prius Gen3]]&lt;br /&gt;
|[https://evbmw.com/index.php/evbmw-webshop/toyota-built-and-tested-boards Board Swap]/[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|100 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus MGR Rear Transaxle Motor|MGR]]&lt;br /&gt;
|Prius Gen2 or Gen3 inverter&lt;br /&gt;
|18-50 kW (various models)&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander Rear Drive Unit|Rear Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Mitsubishi Outlander Front Transaxle|Front Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:BMW|BMW]]&lt;br /&gt;
|[[BMW i3 Inverter|i3]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=72 Board Swap]&lt;br /&gt;
|125-135 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Chevrolet|Chevy/Opel]]&lt;br /&gt;
|[[Chevrolet Volt Inverter|Volt/Ampera]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Ford|Ford]]&lt;br /&gt;
|[[Ford Ranger TIM Controller|Ranger]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| Renault&lt;br /&gt;
|[https://openinverter.org/forum/viewtopic.php?t=4749 Zoe]&lt;br /&gt;
|Board Swap [WIP]&lt;br /&gt;
|Unknown &lt;br /&gt;
|-&lt;br /&gt;
|MG&lt;br /&gt;
|[https://github.com/damienmaguire/MG-EV-Inverter ZS EV]&lt;br /&gt;
|Board Swap [WIP] &lt;br /&gt;
|Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reusing Batteries==&lt;br /&gt;
[[File:A09A7634.jpg|thumb]]&lt;br /&gt;
The most expensive and probably equally defining component is the [[Batteries|battery]] that stores all the energy for running your car. Batteries are usually assembled from a number of modules that in turn contain a number of cells. Usually batteries are reused on a module level. In rare cases the battery can be [https://youtu.be/_7l0Y1GsNJ4 reused as is in its original battery] box.&lt;br /&gt;
&lt;br /&gt;
While there are also various [[16-cell BMS|open source implementations]] of [https://www.youtube.com/watch?v=_QsMoCrSTYc battery management systems] (BMS) we generally recommend using as much of the OEM BMS as possible. Sometimes the [[:Category:OEM|OEM]] BMS comes as an all-in-one solution that measures cell data and spits out state of charge and power limit information. In other cases the BMS is split into module units that measure the physical data (voltages, temperatures) and a central unit that calculates the high level information.&lt;br /&gt;
&lt;br /&gt;
Sometimes we managed to reuse the complete system which is generally the safest as you can rely on the manufacturers well tested charge and discharge limits as well as reliable state of charge information (i.e. how much energy is left in the battery at any given time). In other cases we only managed to reuse the module units. This adds the convenience of having a well tested piece of hardware with the matching connector but required us to calculate all high level battery data ourselves. This also incudes [https://www.youtube.com/watch?v=RGYLPOlT45A cell balancing].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!BMS usability&lt;br /&gt;
!Energy Content&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model 3 Battery|Model 3]]&lt;br /&gt;
|Module and high level [WIP]&lt;br /&gt;
|60-80 kWh ?&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Batteries#OEM modules|Model S]]&lt;br /&gt;
|Unknown&lt;br /&gt;
|85-100 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Nissan|Nissan]]&lt;br /&gt;
|[[Nissan Leaf BMS|Leaf/NV200]]&lt;br /&gt;
|High Level&lt;br /&gt;
|24-40 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:VAG|VW]]&lt;br /&gt;
|[[VW Hybrid Battery Packs|Passat/Golf]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|8.7-36 kWh&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[MEB Batteries|MEB]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|52-77 kwh &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Onboard chargers and DC/DC converters ==&lt;br /&gt;
[[File:PXL_20241020_024043714.jpg|thumb|Onboard charger]]&lt;br /&gt;
The DC/DC converter takes energy from your HV traction battery and sends it to the cars 12V systems and 12V battery. It is basically a 1:1 replacement of the former alternator. An onboard charger (OBC) takes AC current from the grid and converts it into DC current to charge the battery. These two devices are often combined in one common enclosure hence why we treat them as one.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!OBC&lt;br /&gt;
!DC/DC&lt;br /&gt;
!OBC power&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN2 Charger|Model S and X]] (Gen2)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN3 Charger|Model S and X]] (Gen3)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|22 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]] &lt;br /&gt;
|[[Tesla Model S/X DC/DC Converter|Model S and X]] (DC/DC)&lt;br /&gt;
|no&lt;br /&gt;
|yes &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model 3 Charger/DCDC (&amp;quot;PCS&amp;quot;)|Model 3]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt Charger|Volt]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt 2 Charger|Volt 2]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Dilong/Cascadia Chargers|Dilong]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Eltek chargers|Eltek]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander DCDC OBC|Outlander / iMiev]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes &lt;br /&gt;
|3.3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:MG|MG]]&lt;br /&gt;
|[[MG ZS Charger|ZS / MG4 / MG5]] &lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 - 11 kW&lt;br /&gt;
|}&lt;br /&gt;
There are more chargers under investigation, only the proven working ones are listed here. See our [[:Category:Charger|charger listing]] for more.&lt;br /&gt;
&lt;br /&gt;
== Rapid Charging==&lt;br /&gt;
[[File:Ccs-socket.jpg|thumb|CCS2 rapid charging socket]]&lt;br /&gt;
The above mentioned onboard chargers always have limited power as the space requirements and cost rise with power. To overcome this limitation modern EVs offer external access to their HV battery via a so called [[:Category:Rapid Charging|rapid charging]] port. This allows to charge the battery with a much more powerful external charger. As a bonus it also allows [[Bidirectional Charging|taking energy from the HV battery]] and powering appliances with it.&lt;br /&gt;
&lt;br /&gt;
There are 2 rapid charging protocols and 5 connector flavours world wide&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Communication&lt;br /&gt;
!Prevalent countries&lt;br /&gt;
!Open Source solutions&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:ChaDeMo|CHAdeMO]]&lt;br /&gt;
|CAN&lt;br /&gt;
|Japan, world wide&lt;br /&gt;
|[[Chademo with ESP32-Chademo|ESP32]], [[Chademo With Arduino Due|Arduino,]] [[Chademo with Zombieverter|ZombieVerter]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo1&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo2&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|Europe&lt;br /&gt;
|[[Foccci]], [[pyPLC]], [[BMW I3 Fast Charging LIM Module|I3LIM]]&lt;br /&gt;
|-&lt;br /&gt;
|NACS&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|GB/T&lt;br /&gt;
|CAN&lt;br /&gt;
|China&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Auxiliary Parts ==&lt;br /&gt;
We have now treated all the major building blocks of an EV, but there are many other components to complete the vehicle such as heaters, gear shifters and so on. We will summarize them here.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:HVJB|HV Junction Box]]&lt;br /&gt;
* [[:Category:HVAC|HVAC]] (Heating, Air conditioning)&lt;br /&gt;
* [[Vacuum Pumps]]&lt;br /&gt;
* [[:Category:Power Steering|Power Steering]]&lt;br /&gt;
* [[VCU Comparison|VCU]] (Vehicle Control Unit)&lt;br /&gt;
* [[Shift Controllers]]&lt;br /&gt;
&lt;br /&gt;
== Additional Reading ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Legalities|Legalities]] - Getting a vehicle road legal in your country&lt;br /&gt;
* [[Glossary of Terms]]&lt;br /&gt;
* [[Common Inverter FAQ]] - questions common to all hardware variants&lt;br /&gt;
* [[Tesla Inverter FAQ]] - questions regarding Tesla Large Drive Units and Small Drive Units&lt;br /&gt;
* [[Electronics Basics]] - general advice for troubleshooting electronic circuits&lt;br /&gt;
* [[I want a cheap ev conversion|cheap EV conversions]] - this entry point for the penny pinchers&lt;br /&gt;
* [[I want a powerful ev conversion|performant EV conversions]]  - where torque trumps money&lt;br /&gt;
* [[Mechanical design database]] - here you will find measurements, models, files, etc for a variety of components such as adapter plates and drive shaft flanges&lt;br /&gt;
* [[:Category:OpenInverter|Documentation of all OpenInverter Projects]]&lt;br /&gt;
* [[:Category:Tutorials|Tutorials]]&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
There is no static team or openinverter company but here we list the most active community members with links to donation or information sites:&lt;br /&gt;
&lt;br /&gt;
*Johannes Hübner, openinverter founder and developer - [https://www.patreon.com/openinverter support on patreon] follow on [https://www.youtube.com/user/EngineersFear youtube] and [https://github.com/jsphuebner/ github]&lt;br /&gt;
*Damien Maguire, developer and most active vehicle converter - [https://evbmw.com/index.php/evbmw-webshop visit shop] [https://www.patreon.com/evbmw support on patreon] follow on [https://www.youtube.com/@Evbmw youtube] and [https://github.com/damienmaguire/ github]&lt;br /&gt;
*Tom de Bree, active member and developer - [https://github.com/Tom-evnut github] and [https://citini.com/ shop]&lt;br /&gt;
*Uwe Hennig, master of CCS - [https://www.patreon.com/uhi22 support on patreon] follow on [https://github.com/uhi22/ github]&lt;br /&gt;
*celeron55, developer - support via [https://www.paypal.com/paypalme/celeron55 paypal] follow on [https://www.youtube.com/user/celeron55 youtube] and [https://github.com/celeron55 github]&lt;br /&gt;
*Dave Fiddes, active member and developer - Follow on [https://github.com/davefiddes/ github]&lt;br /&gt;
*Arber Kramar, long term member and developer - [https://leafdriveblog.wordpress.com/ Follow on blogspot]&lt;br /&gt;
*Janosch Oppermann, active member, developer and producer - follow on [https://www.youtube.com/@foxev-content youtube]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5152</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5152"/>
		<updated>2024-12-03T11:12:29Z</updated>

		<summary type="html">&lt;p&gt;Johu: forum link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Did you know you can convert your existing fossil powered vehicle to use electricity instead? And that you can even produce that electricity yourself?&lt;br /&gt;
&lt;br /&gt;
Open Inverter is a [[Main Page#Who we are|community of people]] and projects focused on open source solutions for EV conversions.  Founded in 2008 by Johannes Huebner as an open source inverter control firmware, the project has since expended to include the reuse of components from production EVs and hybrids, including inverters, motors, batteries, on-board chargers, and DC-DC converters, as well as the open source implementation of other necessary systems for EV conversions such as DC Fast Charging controllers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:Electric-car.jpg|none|frame|Click on the captions to learn more about the respective system! Image source: https://www.newkidscar.com/&lt;br /&gt;
&lt;br /&gt;
poly 248 166 542 166 542 217 248 217 248 166 [[#Reusing motors and inverters - aka drive trains]]&lt;br /&gt;
poly 1041 455 1336 455 1336 506 1041 506 1041 455 [[#Reusing Batteries]]&lt;br /&gt;
poly 147 344 428 344 428 391 147 391 147 344 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 844 624 1118 624 1118 673 844 673 844 624 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 935 539 1200 539 1200 586 935 586 935 539 [[#Rapid Charging]]&lt;br /&gt;
poly 134 435 394 435 394 483 134 483 134 435 [[#Auxiliary Parts]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by the wider community. &#039;&#039;&#039;Please update this wiki&#039;&#039;&#039;. For example if your question has been clarified on the [https://openinverter.org/forum forum] and the new information can not be found here, please add it! The credentials are the same as for the forum.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Main Page#Who we are|Developers]] time is best spent developing;&#039;&#039;&#039; &#039;&#039;&#039;Support is best found in the forums&#039;&#039;&#039; - Developers of various projects are often bombarded with private messages and emails. Managing these emails and questions is a extremely large undertaking. Please read, and take the time to understand the information available here and across the web if you don&#039;t understand a topic. Developers are not your personal support team, unless you want to [[Application Support|pay them directly]] for their time. To keep developers independent please consider donating - donation links can be found [[Main Page#Who we are|down below]].&lt;br /&gt;
&lt;br /&gt;
==Reusing motors and inverters - aka drive trains==&lt;br /&gt;
[[File:Tesla_LDU.jpg|thumb]]&lt;br /&gt;
The drive train is one of the defining building blocks of your conversion as it defines how well your vehicle picks up speed. Over the years we have reverse engineered many popular drive trains from [[:Category:OEM|production cars]] such as Teslas. As a bonus using such complete drive trains facilitates getting the vehicle [[Legalities|road legal]] in many countries. By now you have a choice of low to medium power drive trains that only cost a few 100€ up to high performance ones at many 1000€. &lt;br /&gt;
&lt;br /&gt;
We have established two methods of running these [[:Category:OEM|OEM]] systems: reverse-engineering their communication protocol and making the drive train &amp;quot;think&amp;quot; it is still in its original vehicle OR swapping out the control electronics for our own open source motor controller. The latter method gives your more control and power but also a steeper learning curve. &lt;br /&gt;
&lt;br /&gt;
Nearly all drive trains are targeted at 400V battery voltage. Run at a lower voltage they will produce proportionally less power. &lt;br /&gt;
Here is what we have done so far and how we&#039;ve done it. Some is still work in progress (WIP) &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Drive Train&lt;br /&gt;
!Control Method&lt;br /&gt;
! Approximate Power Output&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model S/X Large Drive Unit (&amp;quot;LDU&amp;quot;)|Large Drive Unit]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=64 Board Swap]&lt;br /&gt;
|335-475 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model S/X Small Drive Unit (&amp;quot;SDU&amp;quot;)|Small Drive Unit]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=62 Board Swap]&lt;br /&gt;
|180 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Rear Drive Unit|Model 3/Y Rear Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|239 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Front Drive Unit|Model 3/Y Front Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|121 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Nissan]]&lt;br /&gt;
|[[Nissan Leaf Motors|Gen1]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]&lt;br /&gt;
|80 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| [[Nissan Leaf Gen2 Board|Gen2]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/[https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=57 Board Swap]&lt;br /&gt;
|80 kW / 130 kW (board swap)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Nissan Leaf Gen 3 (2018 up EM57)|Gen3]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap [WIP]&lt;br /&gt;
|110 - 160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Toyota|Toyota]]&lt;br /&gt;
|[[Lexus GS450h Drivetrain|Lexus GS 450h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|250 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus GS300h CVT|Lexus GS 300h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|105 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter|Prius Gen2]]&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter Controller|External Control Board]] ([https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=68 Buy here])&lt;br /&gt;
|40-70 kW &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen3 Board|Prius Gen3]]&lt;br /&gt;
|[https://evbmw.com/index.php/evbmw-webshop/toyota-built-and-tested-boards Board Swap]/[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|100 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus MGR Rear Transaxle Motor|MGR]]&lt;br /&gt;
|Prius Gen2 or Gen3 inverter&lt;br /&gt;
|18-50 kW (various models)&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander Rear Drive Unit|Rear Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Mitsubishi Outlander Front Transaxle|Front Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:BMW|BMW]]&lt;br /&gt;
|[[BMW i3 Inverter|i3]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=72 Board Swap]&lt;br /&gt;
|125-135 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Chevrolet|Chevy/Opel]]&lt;br /&gt;
|[[Chevrolet Volt Inverter|Volt/Ampera]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Ford|Ford]]&lt;br /&gt;
|[[Ford Ranger TIM Controller|Ranger]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| Renault&lt;br /&gt;
|[https://openinverter.org/forum/viewtopic.php?t=4749 Zoe]&lt;br /&gt;
|Board Swap [WIP]&lt;br /&gt;
|Unknown &lt;br /&gt;
|-&lt;br /&gt;
|MG&lt;br /&gt;
|[https://github.com/damienmaguire/MG-EV-Inverter ZS EV]&lt;br /&gt;
|Board Swap [WIP] &lt;br /&gt;
|Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reusing Batteries==&lt;br /&gt;
[[File:A09A7634.jpg|thumb]]&lt;br /&gt;
The most expensive and probably equally defining component is the [[Batteries|battery]] that stores all the energy for running your car. Batteries are usually assembled from a number of modules that in turn contain a number of cells. Usually batteries are reused on a module level. In rare cases the battery can be [https://youtu.be/_7l0Y1GsNJ4 reused as is in its original battery] box.&lt;br /&gt;
&lt;br /&gt;
While there are also various [[16-cell BMS|open source implementations]] of [https://www.youtube.com/watch?v=_QsMoCrSTYc battery management systems] (BMS) we generally recommend using as much of the OEM BMS as possible. Sometimes the [[:Category:OEM|OEM]] BMS comes as an all-in-one solution that measures cell data and spits out state of charge and power limit information. In other cases the BMS is split into module units that measure the physical data (voltages, temperatures) and a central unit that calculates the high level information.&lt;br /&gt;
&lt;br /&gt;
Sometimes we managed to reuse the complete system which is generally the safest as you can rely on the manufacturers well tested charge and discharge limits as well as reliable state of charge information (i.e. how much energy is left in the battery at any given time). In other cases we only managed to reuse the module units. This adds the convenience of having a well tested piece of hardware with the matching connector but required us to calculate all high level battery data ourselves. This also incudes [https://www.youtube.com/watch?v=RGYLPOlT45A cell balancing].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!BMS usability&lt;br /&gt;
!Energy Content&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model 3 Battery|Model 3]]&lt;br /&gt;
|Module and high level [WIP]&lt;br /&gt;
|60-80 kWh ?&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Batteries#OEM modules|Model S]]&lt;br /&gt;
|Unknown&lt;br /&gt;
|85-100 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Nissan|Nissan]]&lt;br /&gt;
|[[Nissan Leaf BMS|Leaf/NV200]]&lt;br /&gt;
|High Level&lt;br /&gt;
|24-40 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:VAG|VW]]&lt;br /&gt;
|[[VW Hybrid Battery Packs|Passat/Golf]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|8.7-36 kWh&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[MEB Batteries|MEB]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|52-77 kwh &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Onboard chargers and DC/DC converters ==&lt;br /&gt;
[[File:PXL_20241020_024043714.jpg|thumb|Onboard charger]]&lt;br /&gt;
The DC/DC converter takes energy from your HV traction battery and sends it to the cars 12V systems and 12V battery. It is basically a 1:1 replacement of the former alternator. An onboard charger (OBC) takes AC current from the grid and converts it into DC current to charge the battery. These two devices are often combined in one common enclosure hence why we treat them as one.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!OBC&lt;br /&gt;
!DC/DC&lt;br /&gt;
!OBC power&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN2 Charger|Model S and X]] (Gen2)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN3 Charger|Model S and X]] (Gen3)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|22 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]] &lt;br /&gt;
|[[Tesla Model S/X DC/DC Converter|Model S and X]] (DC/DC)&lt;br /&gt;
|no&lt;br /&gt;
|yes &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model 3 Charger/DCDC (&amp;quot;PCS&amp;quot;)|Model 3]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt Charger|Volt]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt 2 Charger|Volt 2]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Dilong/Cascadia Chargers|Dilong]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Eltek chargers|Eltek]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander DCDC OBC|Outlander / iMiev]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes &lt;br /&gt;
|3.3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:MG|MG]]&lt;br /&gt;
|[[MG ZS Charger|ZS / MG4 / MG5]] &lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 - 11 kW&lt;br /&gt;
|}&lt;br /&gt;
There are more chargers under investigation, only the proven working ones are listed here. See our [[:Category:Charger|charger listing]] for more.&lt;br /&gt;
&lt;br /&gt;
== Rapid Charging==&lt;br /&gt;
[[File:Ccs-socket.jpg|thumb|CCS2 rapid charging socket]]&lt;br /&gt;
The above mentioned onboard chargers always have limited power as they space requirements and cost rise with charger power. To overcome this limitation modern EVs offer external access to their HV battery via a so called [[:Category:Rapid Charging|rapid charging]] port. This allows to charge the battery with a much more powerful external charger. As a bonus it also allows [[Bidirectional Charging|taking energy from the HV battery]] and powering appliances with it.&lt;br /&gt;
&lt;br /&gt;
There are 2 rapid charging protocols and 5 connector flavours world wide&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Communication&lt;br /&gt;
!Prevalent countries&lt;br /&gt;
!Open Source solutions&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:ChaDeMo|CHAdeMO]]&lt;br /&gt;
|CAN&lt;br /&gt;
|Japan, world wide&lt;br /&gt;
|[[Chademo with ESP32-Chademo|ESP32]], [[Chademo With Arduino Due|Arduino,]] [[Chademo with Zombieverter|ZombieVerter]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo1&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo2&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|Europe&lt;br /&gt;
|[[Foccci]], [[pyPLC]], [[BMW I3 Fast Charging LIM Module|I3LIM]]&lt;br /&gt;
|-&lt;br /&gt;
|NACS&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|GB/T&lt;br /&gt;
|CAN&lt;br /&gt;
|China&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Auxiliary Parts ==&lt;br /&gt;
We have now treated all the major building blocks of an EV, but there are many other components to complete the vehicle such as heaters, gear shifters and so on. We will summarize them here.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:HVJB|HV Junction Box]]&lt;br /&gt;
* [[:Category:HVAC|HVAC]] (Heating, Air conditioning)&lt;br /&gt;
* [[Vacuum Pumps]]&lt;br /&gt;
* [[:Category:Power Steering|Power Steering]]&lt;br /&gt;
* [[VCU Comparison|VCU]] (Vehicle Control Unit)&lt;br /&gt;
* [[Shift Controllers]]&lt;br /&gt;
&lt;br /&gt;
== Additional Reading ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Legalities|Legalities]] - Getting a vehicle road legal in your country&lt;br /&gt;
* [[Glossary of Terms]]&lt;br /&gt;
* [[Common Inverter FAQ]] - questions common to all hardware variants&lt;br /&gt;
* [[Tesla Inverter FAQ]] - questions regarding Tesla Large Drive Units and Small Drive Units&lt;br /&gt;
* [[Electronics Basics]] - general advice for troubleshooting electronic circuits&lt;br /&gt;
* [[I want a cheap ev conversion|cheap EV conversions]] - this entry point for the penny pinchers&lt;br /&gt;
* [[I want a powerful ev conversion|performant EV conversions]]  - where torque trumps money&lt;br /&gt;
* [[Mechanical design database]] - here you will find measurements, models, files, etc for a variety of components such as adapter plates and drive shaft flanges&lt;br /&gt;
* [[:Category:OpenInverter|Documentation of all OpenInverter Projects]]&lt;br /&gt;
* [[:Category:Tutorials|Tutorials]]&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
There is no static team or openinverter company but here we list the most active community members with links to donation or information sites:&lt;br /&gt;
&lt;br /&gt;
*Johannes Hübner, openinverter founder and developer - [https://www.patreon.com/openinverter support on patreon] follow on [https://www.youtube.com/user/EngineersFear youtube] and [https://github.com/jsphuebner/ github]&lt;br /&gt;
*Damien Maguire, developer and most active vehicle converter - [https://evbmw.com/index.php/evbmw-webshop visit shop] [https://www.patreon.com/evbmw support on patreon] follow on [https://www.youtube.com/@Evbmw youtube] and [https://github.com/damienmaguire/ github]&lt;br /&gt;
*Tom de Bree, active member and developer - [https://github.com/Tom-evnut github] and [https://citini.com/ shop]&lt;br /&gt;
*Uwe Hennig, master of CCS - [https://www.patreon.com/uhi22 support on patreon] follow on [https://github.com/uhi22/ github]&lt;br /&gt;
*celeron55, developer - support via [https://www.paypal.com/paypalme/celeron55 paypal] follow on [https://www.youtube.com/user/celeron55 youtube] and [https://github.com/celeron55 github]&lt;br /&gt;
*Dave Fiddes, active member and developer - Follow on [https://github.com/davefiddes/ github]&lt;br /&gt;
*Arber Kramar, long term member and developer - [https://leafdriveblog.wordpress.com/ Follow on blogspot]&lt;br /&gt;
*Janosch Oppermann, active member, developer and producer - follow on [https://www.youtube.com/@foxev-content youtube]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5151</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5151"/>
		<updated>2024-12-03T11:10:11Z</updated>

		<summary type="html">&lt;p&gt;Johu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Did you know you can convert your existing fossil powered vehicle to use electricity instead? And that you can even produce that electricity yourself?&lt;br /&gt;
&lt;br /&gt;
Open Inverter is a [[Main Page#Who we are|community of people]] and projects focused on open source solutions for EV conversions.  Founded in 2008 by Johannes Huebner as an open source inverter control firmware, the project has since expended to include the reuse of components from production EVs and hybrids, including inverters, motors, batteries, on-board chargers, and DC-DC converters, as well as the open source implementation of other necessary systems for EV conversions such as DC Fast Charging controllers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:Electric-car.jpg|none|frame|Click on the captions to learn more about the respective system! Image source: https://www.newkidscar.com/&lt;br /&gt;
&lt;br /&gt;
poly 248 166 542 166 542 217 248 217 248 166 [[#Reusing motors and inverters - aka drive trains]]&lt;br /&gt;
poly 1041 455 1336 455 1336 506 1041 506 1041 455 [[#Reusing Batteries]]&lt;br /&gt;
poly 147 344 428 344 428 391 147 391 147 344 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 844 624 1118 624 1118 673 844 673 844 624 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 935 539 1200 539 1200 586 935 586 935 539 [[#Rapid Charging]]&lt;br /&gt;
poly 134 435 394 435 394 483 134 483 134 435 [[#Auxiliary Parts]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by the wider community. &#039;&#039;&#039;Please update this wiki&#039;&#039;&#039;. For example if your question has been clarified on the forum and the new information can not be found here, please add it! The credentials are the same as for the forum.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Main Page#Who we are|Developers]] time is best spent developing;&#039;&#039;&#039; &#039;&#039;&#039;Support is best found in the forums&#039;&#039;&#039; - Developers of various projects are often bombarded with private messages and emails. Managing these emails and questions is a extremely large undertaking. Please read, and take the time to understand the information available here and across the web if you don&#039;t understand a topic. Developers are not your personal support team, unless you want to [[Application Support|pay them directly]] for their time. To keep developers independent please consider donating - donation links can be found [[Main Page#Who we are|down below]].&lt;br /&gt;
&lt;br /&gt;
==Reusing motors and inverters - aka drive trains==&lt;br /&gt;
[[File:Tesla_LDU.jpg|thumb]]&lt;br /&gt;
The drive train is one of the defining building blocks of your conversion as it defines how well your vehicle picks up speed. Over the years we have reverse engineered many popular drive trains from [[:Category:OEM|production cars]] such as Teslas. As a bonus using such complete drive trains facilitates getting the vehicle [[Legalities|road legal]] in many countries. By now you have a choice of low to medium power drive trains that only cost a few 100€ up to high performance ones at many 1000€. &lt;br /&gt;
&lt;br /&gt;
We have established two methods of running these [[:Category:OEM|OEM]] systems: reverse-engineering their communication protocol and making the drive train &amp;quot;think&amp;quot; it is still in its original vehicle OR swapping out the control electronics for our own open source motor controller. The latter method gives your more control and power but also a steeper learning curve. &lt;br /&gt;
&lt;br /&gt;
Nearly all drive trains are targeted at 400V battery voltage. Run at a lower voltage they will produce proportionally less power. &lt;br /&gt;
Here is what we have done so far and how we&#039;ve done it. Some is still work in progress (WIP) &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Drive Train&lt;br /&gt;
!Control Method&lt;br /&gt;
! Approximate Power Output&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model S/X Large Drive Unit (&amp;quot;LDU&amp;quot;)|Large Drive Unit]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=64 Board Swap]&lt;br /&gt;
|335-475 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model S/X Small Drive Unit (&amp;quot;SDU&amp;quot;)|Small Drive Unit]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=62 Board Swap]&lt;br /&gt;
|180 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Rear Drive Unit|Model 3/Y Rear Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|239 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Front Drive Unit|Model 3/Y Front Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|121 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Nissan]]&lt;br /&gt;
|[[Nissan Leaf Motors|Gen1]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]&lt;br /&gt;
|80 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| [[Nissan Leaf Gen2 Board|Gen2]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/[https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=57 Board Swap]&lt;br /&gt;
|80 kW / 130 kW (board swap)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Nissan Leaf Gen 3 (2018 up EM57)|Gen3]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap [WIP]&lt;br /&gt;
|110 - 160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Toyota|Toyota]]&lt;br /&gt;
|[[Lexus GS450h Drivetrain|Lexus GS 450h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|250 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus GS300h CVT|Lexus GS 300h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|105 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter|Prius Gen2]]&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter Controller|External Control Board]] ([https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=68 Buy here])&lt;br /&gt;
|40-70 kW &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen3 Board|Prius Gen3]]&lt;br /&gt;
|[https://evbmw.com/index.php/evbmw-webshop/toyota-built-and-tested-boards Board Swap]/[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|100 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus MGR Rear Transaxle Motor|MGR]]&lt;br /&gt;
|Prius Gen2 or Gen3 inverter&lt;br /&gt;
|18-50 kW (various models)&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander Rear Drive Unit|Rear Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Mitsubishi Outlander Front Transaxle|Front Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:BMW|BMW]]&lt;br /&gt;
|[[BMW i3 Inverter|i3]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=72 Board Swap]&lt;br /&gt;
|125-135 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Chevrolet|Chevy/Opel]]&lt;br /&gt;
|[[Chevrolet Volt Inverter|Volt/Ampera]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Ford|Ford]]&lt;br /&gt;
|[[Ford Ranger TIM Controller|Ranger]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| Renault&lt;br /&gt;
|[https://openinverter.org/forum/viewtopic.php?t=4749 Zoe]&lt;br /&gt;
|Board Swap [WIP]&lt;br /&gt;
|Unknown &lt;br /&gt;
|-&lt;br /&gt;
|MG&lt;br /&gt;
|[https://github.com/damienmaguire/MG-EV-Inverter ZS EV]&lt;br /&gt;
|Board Swap [WIP] &lt;br /&gt;
|Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reusing Batteries==&lt;br /&gt;
[[File:A09A7634.jpg|thumb]]&lt;br /&gt;
The most expensive and probably equally defining component is the [[Batteries|battery]] that stores all the energy for running your car. Batteries are usually assembled from a number of modules that in turn contain a number of cells. Usually batteries are reused on a module level. In rare cases the battery can be [https://youtu.be/_7l0Y1GsNJ4 reused as is in its original battery] box.&lt;br /&gt;
&lt;br /&gt;
While there are also various [[16-cell BMS|open source implementations]] of [https://www.youtube.com/watch?v=_QsMoCrSTYc battery management systems] (BMS) we generally recommend using as much of the OEM BMS as possible. Sometimes the [[:Category:OEM|OEM]] BMS comes as an all-in-one solution that measures cell data and spits out state of charge and power limit information. In other cases the BMS is split into module units that measure the physical data (voltages, temperatures) and a central unit that calculates the high level information.&lt;br /&gt;
&lt;br /&gt;
Sometimes we managed to reuse the complete system which is generally the safest as you can rely on the manufacturers well tested charge and discharge limits as well as reliable state of charge information (i.e. how much energy is left in the battery at any given time). In other cases we only managed to reuse the module units. This adds the convenience of having a well tested piece of hardware with the matching connector but required us to calculate all high level battery data ourselves. This also incudes [https://www.youtube.com/watch?v=RGYLPOlT45A cell balancing].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!BMS usability&lt;br /&gt;
!Energy Content&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model 3 Battery|Model 3]]&lt;br /&gt;
|Module and high level [WIP]&lt;br /&gt;
|60-80 kWh ?&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Batteries#OEM modules|Model S]]&lt;br /&gt;
|Unknown&lt;br /&gt;
|85-100 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Nissan|Nissan]]&lt;br /&gt;
|[[Nissan Leaf BMS|Leaf/NV200]]&lt;br /&gt;
|High Level&lt;br /&gt;
|24-40 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:VAG|VW]]&lt;br /&gt;
|[[VW Hybrid Battery Packs|Passat/Golf]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|8.7-36 kWh&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[MEB Batteries|MEB]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|52-77 kwh &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Onboard chargers and DC/DC converters ==&lt;br /&gt;
[[File:PXL_20241020_024043714.jpg|thumb|Onboard charger]]&lt;br /&gt;
The DC/DC converter takes energy from your HV traction battery and sends it to the cars 12V systems and 12V battery. It is basically a 1:1 replacement of the former alternator. An onboard charger (OBC) takes AC current from the grid and converts it into DC current to charge the battery. These two devices are often combined in one common enclosure hence why we treat them as one.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!OBC&lt;br /&gt;
!DC/DC&lt;br /&gt;
!OBC power&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN2 Charger|Model S and X]] (Gen2)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN3 Charger|Model S and X]] (Gen3)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|22 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]] &lt;br /&gt;
|[[Tesla Model S/X DC/DC Converter|Model S and X]] (DC/DC)&lt;br /&gt;
|no&lt;br /&gt;
|yes &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model 3 Charger/DCDC (&amp;quot;PCS&amp;quot;)|Model 3]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt Charger|Volt]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt 2 Charger|Volt 2]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Dilong/Cascadia Chargers|Dilong]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Eltek chargers|Eltek]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander DCDC OBC|Outlander / iMiev]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes &lt;br /&gt;
|3.3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:MG|MG]]&lt;br /&gt;
|[[MG ZS Charger|ZS / MG4 / MG5]] &lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 - 11 kW&lt;br /&gt;
|}&lt;br /&gt;
There are more chargers under investigation, only the proven working ones are listed here. See our [[:Category:Charger|charger listing]] for more.&lt;br /&gt;
&lt;br /&gt;
== Rapid Charging==&lt;br /&gt;
[[File:Ccs-socket.jpg|thumb|CCS2 rapid charging socket]]&lt;br /&gt;
The above mentioned onboard chargers always have limited power as they space requirements and cost rise with charger power. To overcome this limitation modern EVs offer external access to their HV battery via a so called [[:Category:Rapid Charging|rapid charging]] port. This allows to charge the battery with a much more powerful external charger. As a bonus it also allows [[Bidirectional Charging|taking energy from the HV battery]] and powering appliances with it.&lt;br /&gt;
&lt;br /&gt;
There are 2 rapid charging protocols and 5 connector flavours world wide&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Communication&lt;br /&gt;
!Prevalent countries&lt;br /&gt;
!Open Source solutions&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:ChaDeMo|CHAdeMO]]&lt;br /&gt;
|CAN&lt;br /&gt;
|Japan, world wide&lt;br /&gt;
|[[Chademo with ESP32-Chademo|ESP32]], [[Chademo With Arduino Due|Arduino,]] [[Chademo with Zombieverter|ZombieVerter]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo1&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo2&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|Europe&lt;br /&gt;
|[[Foccci]], [[pyPLC]], [[BMW I3 Fast Charging LIM Module|I3LIM]]&lt;br /&gt;
|-&lt;br /&gt;
|NACS&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|GB/T&lt;br /&gt;
|CAN&lt;br /&gt;
|China&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Auxiliary Parts ==&lt;br /&gt;
We have now treated all the major building blocks of an EV, but there are many other components to complete the vehicle such as heaters, gear shifters and so on. We will summarize them here.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:HVJB|HV Junction Box]]&lt;br /&gt;
* [[:Category:HVAC|HVAC]] (Heating, Air conditioning)&lt;br /&gt;
* [[Vacuum Pumps]]&lt;br /&gt;
* [[:Category:Power Steering|Power Steering]]&lt;br /&gt;
* [[VCU Comparison|VCU]] (Vehicle Control Unit)&lt;br /&gt;
* [[Shift Controllers]]&lt;br /&gt;
&lt;br /&gt;
== Additional Reading ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Legalities|Legalities]] - Getting a vehicle road legal in your country&lt;br /&gt;
* [[Glossary of Terms]]&lt;br /&gt;
* [[Common Inverter FAQ]] - questions common to all hardware variants&lt;br /&gt;
* [[Tesla Inverter FAQ]] - questions regarding Tesla Large Drive Units and Small Drive Units&lt;br /&gt;
* [[Electronics Basics]] - general advice for troubleshooting electronic circuits&lt;br /&gt;
* [[I want a cheap ev conversion|cheap EV conversions]] - this entry point for the penny pinchers&lt;br /&gt;
* [[I want a powerful ev conversion|performant EV conversions]]  - where torque trumps money&lt;br /&gt;
* [[Mechanical design database]] - here you will find measurements, models, files, etc for a variety of components such as adapter plates and drive shaft flanges&lt;br /&gt;
* [[:Category:OpenInverter|Documentation of all OpenInverter Projects]]&lt;br /&gt;
* [[:Category:Tutorials|Tutorials]]&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
There is no static team or openinverter company but here we list the most active community members with links to donation or information sites:&lt;br /&gt;
&lt;br /&gt;
*Johannes Hübner, openinverter founder and developer - [https://www.patreon.com/openinverter support on patreon] follow on [https://www.youtube.com/user/EngineersFear youtube] and [https://github.com/jsphuebner/ github]&lt;br /&gt;
*Damien Maguire, developer and most active vehicle converter - [https://evbmw.com/index.php/evbmw-webshop visit shop] [https://www.patreon.com/evbmw support on patreon] follow on [https://www.youtube.com/@Evbmw youtube] and [https://github.com/damienmaguire/ github]&lt;br /&gt;
*Tom de Bree, active member and developer - [https://github.com/Tom-evnut github] and [https://citini.com/ shop]&lt;br /&gt;
*Uwe Hennig, master of CCS - [https://www.patreon.com/uhi22 support on patreon] follow on [https://github.com/uhi22/ github]&lt;br /&gt;
*celeron55, developer - support via [https://www.paypal.com/paypalme/celeron55 paypal] follow on [https://www.youtube.com/user/celeron55 youtube] and [https://github.com/celeron55 github]&lt;br /&gt;
*Dave Fiddes, active member and developer - Follow on [https://github.com/davefiddes/ github]&lt;br /&gt;
*Arber Kramar, long term member and developer - [https://leafdriveblog.wordpress.com/ Follow on blogspot]&lt;br /&gt;
*Janosch Oppermann, active member, developer and producer - follow on [https://www.youtube.com/@foxev-content youtube]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5150</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5150"/>
		<updated>2024-12-03T11:07:58Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added shop links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Did you know you can convert your existing fossil powered vehicle to use electricity instead? And that you can even produce that electricity yourself?&lt;br /&gt;
&lt;br /&gt;
Open Inverter is a [[Main Page#Who we are|community of people]] and projects focused on open source solutions for EV conversions.  Founded in 2008 by Johannes Huebner as an open source inverter control firmware, the project has since expended to include the reuse of components from production EVs and hybrids, including inverters, motors, batteries, on-board chargers, and DC-DC converters, as well as the open source implementation of other necessary systems for EV conversions such as DC Fast Charging controllers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:Electric-car.jpg|none|frame|Click on the captions to learn more about the respective system! Image source: https://www.newkidscar.com/&lt;br /&gt;
&lt;br /&gt;
poly 248 166 542 166 542 217 248 217 248 166 [[#Reusing motors and inverters - aka drive trains]]&lt;br /&gt;
poly 1041 455 1336 455 1336 506 1041 506 1041 455 [[#Reusing Batteries]]&lt;br /&gt;
poly 147 344 428 344 428 391 147 391 147 344 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 844 624 1118 624 1118 673 844 673 844 624 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 935 539 1200 539 1200 586 935 586 935 539 [[#Rapid Charging]]&lt;br /&gt;
poly 134 435 394 435 394 483 134 483 134 435 [[#Auxiliary Parts]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by the wider community. &#039;&#039;&#039;Please update this wiki&#039;&#039;&#039;. For example if your question has been clarified on the forum and the new information can not be found here, please add it! The credentials are the same as for the forum.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Main Page#Who we are|Developers]] time is best spent developing;&#039;&#039;&#039; &#039;&#039;&#039;Support is best found in the forums&#039;&#039;&#039; - Developers of various projects are often bombarded with private messages and emails. Managing these emails and questions is a extremely large undertaking. Please read, and take the time to understand the information available here and across the web if you don&#039;t understand a topic. Developers are not your personal support team, unless you want to pay them directly for their time. To keep developers independent please consider donating - donation links can be found [[Main Page#Who we are|down below]].&lt;br /&gt;
&lt;br /&gt;
Read more about [[Application Support]]&lt;br /&gt;
&lt;br /&gt;
==Reusing motors and inverters - aka drive trains==&lt;br /&gt;
[[File:Tesla_LDU.jpg|thumb]]&lt;br /&gt;
The drive train is one of the defining building blocks of your conversion as it defines how well your vehicle picks up speed. Over the years we have reverse engineered many popular drive trains from [[:Category:OEM|production cars]] such as Teslas. As a bonus using such complete drive trains facilitates getting the vehicle [[Legalities|road legal]] in many countries. By now you have a choice of low to medium power drive trains that only cost a few 100€ up to high performance ones at many 1000€. &lt;br /&gt;
&lt;br /&gt;
We have established two methods of running these [[:Category:OEM|OEM]] systems: reverse-engineering their communication protocol and making the drive train &amp;quot;think&amp;quot; it is still in its original vehicle OR swapping out the control electronics for our own open source motor controller. The latter method gives your more control and power but also a steeper learning curve. &lt;br /&gt;
&lt;br /&gt;
Nearly all drive trains are targeted at 400V battery voltage. Run at a lower voltage they will produce proportionally less power. &lt;br /&gt;
Here is what we have done so far and how we&#039;ve done it. Some is still work in progress (WIP) &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Drive Train&lt;br /&gt;
!Control Method&lt;br /&gt;
! Approximate Power Output&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model S/X Large Drive Unit (&amp;quot;LDU&amp;quot;)|Large Drive Unit]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=64 Board Swap]&lt;br /&gt;
|335-475 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model S/X Small Drive Unit (&amp;quot;SDU&amp;quot;)|Small Drive Unit]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=62 Board Swap]&lt;br /&gt;
|180 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Rear Drive Unit|Model 3/Y Rear Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|239 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Front Drive Unit|Model 3/Y Front Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|121 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Nissan]]&lt;br /&gt;
|[[Nissan Leaf Motors|Gen1]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]&lt;br /&gt;
|80 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| [[Nissan Leaf Gen2 Board|Gen2]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/[https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=57 Board Swap]&lt;br /&gt;
|80 kW / 130 kW (board swap)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Nissan Leaf Gen 3 (2018 up EM57)|Gen3]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap [WIP]&lt;br /&gt;
|110 - 160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Toyota|Toyota]]&lt;br /&gt;
|[[Lexus GS450h Drivetrain|Lexus GS 450h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|250 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus GS300h CVT|Lexus GS 300h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|105 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter|Prius Gen2]]&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter Controller|External Control Board]] ([https://openinverter.org/shop/index.php?route=product/product&amp;amp;product_id=68 Buy here])&lt;br /&gt;
|40-70 kW &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen3 Board|Prius Gen3]]&lt;br /&gt;
|[https://evbmw.com/index.php/evbmw-webshop/toyota-built-and-tested-boards Board Swap]/[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|100 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus MGR Rear Transaxle Motor|MGR]]&lt;br /&gt;
|Prius Gen2 or Gen3 inverter&lt;br /&gt;
|18-50 kW (various models)&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander Rear Drive Unit|Rear Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Mitsubishi Outlander Front Transaxle|Front Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:BMW|BMW]]&lt;br /&gt;
|[[BMW i3 Inverter|i3]]&lt;br /&gt;
|[https://openinverter.org/shop/index.php?route=product/product&amp;amp;path=61&amp;amp;product_id=72 Board Swap]&lt;br /&gt;
|125-135 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Chevrolet|Chevy/Opel]]&lt;br /&gt;
|[[Chevrolet Volt Inverter|Volt/Ampera]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Ford|Ford]]&lt;br /&gt;
|[[Ford Ranger TIM Controller|Ranger]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| Renault&lt;br /&gt;
|[https://openinverter.org/forum/viewtopic.php?t=4749 Zoe]&lt;br /&gt;
|Board Swap [WIP]&lt;br /&gt;
|Unknown &lt;br /&gt;
|-&lt;br /&gt;
|MG&lt;br /&gt;
|[https://github.com/damienmaguire/MG-EV-Inverter ZS EV]&lt;br /&gt;
|Board Swap [WIP] &lt;br /&gt;
|Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reusing Batteries==&lt;br /&gt;
[[File:A09A7634.jpg|thumb]]&lt;br /&gt;
The most expensive and probably equally defining component is the [[Batteries|battery]] that stores all the energy for running your car. Batteries are usually assembled from a number of modules that in turn contain a number of cells. Usually batteries are reused on a module level. In rare cases the battery can be [https://youtu.be/_7l0Y1GsNJ4 reused as is in its original battery] box.&lt;br /&gt;
&lt;br /&gt;
While there are also various [[16-cell BMS|open source implementations]] of [https://www.youtube.com/watch?v=_QsMoCrSTYc battery management systems] (BMS) we generally recommend using as much of the OEM BMS as possible. Sometimes the [[:Category:OEM|OEM]] BMS comes as an all-in-one solution that measures cell data and spits out state of charge and power limit information. In other cases the BMS is split into module units that measure the physical data (voltages, temperatures) and a central unit that calculates the high level information.&lt;br /&gt;
&lt;br /&gt;
Sometimes we managed to reuse the complete system which is generally the safest as you can rely on the manufacturers well tested charge and discharge limits as well as reliable state of charge information (i.e. how much energy is left in the battery at any given time). In other cases we only managed to reuse the module units. This adds the convenience of having a well tested piece of hardware with the matching connector but required us to calculate all high level battery data ourselves. This also incudes [https://www.youtube.com/watch?v=RGYLPOlT45A cell balancing].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!BMS usability&lt;br /&gt;
!Energy Content&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model 3 Battery|Model 3]]&lt;br /&gt;
|Module and high level [WIP]&lt;br /&gt;
|60-80 kWh ?&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Batteries#OEM modules|Model S]]&lt;br /&gt;
|Unknown&lt;br /&gt;
|85-100 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Nissan|Nissan]]&lt;br /&gt;
|[[Nissan Leaf BMS|Leaf/NV200]]&lt;br /&gt;
|High Level&lt;br /&gt;
|24-40 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:VAG|VW]]&lt;br /&gt;
|[[VW Hybrid Battery Packs|Passat/Golf]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|8.7-36 kWh&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[MEB Batteries|MEB]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|52-77 kwh &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Onboard chargers and DC/DC converters ==&lt;br /&gt;
[[File:PXL_20241020_024043714.jpg|thumb|Onboard charger]]&lt;br /&gt;
The DC/DC converter takes energy from your HV traction battery and sends it to the cars 12V systems and 12V battery. It is basically a 1:1 replacement of the former alternator. An onboard charger (OBC) takes AC current from the grid and converts it into DC current to charge the battery. These two devices are often combined in one common enclosure hence why we treat them as one.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!OBC&lt;br /&gt;
!DC/DC&lt;br /&gt;
!OBC power&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN2 Charger|Model S and X]] (Gen2)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN3 Charger|Model S and X]] (Gen3)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|22 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]] &lt;br /&gt;
|[[Tesla Model S/X DC/DC Converter|Model S and X]] (DC/DC)&lt;br /&gt;
|no&lt;br /&gt;
|yes &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model 3 Charger/DCDC (&amp;quot;PCS&amp;quot;)|Model 3]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt Charger|Volt]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt 2 Charger|Volt 2]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Dilong/Cascadia Chargers|Dilong]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Eltek chargers|Eltek]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander DCDC OBC|Outlander / iMiev]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes &lt;br /&gt;
|3.3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:MG|MG]]&lt;br /&gt;
|[[MG ZS Charger|ZS / MG4 / MG5]] &lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 - 11 kW&lt;br /&gt;
|}&lt;br /&gt;
There are more chargers under investigation, only the proven working ones are listed here. See our [[:Category:Charger|charger listing]] for more.&lt;br /&gt;
&lt;br /&gt;
== Rapid Charging==&lt;br /&gt;
[[File:Ccs-socket.jpg|thumb|CCS2 rapid charging socket]]&lt;br /&gt;
The above mentioned onboard chargers always have limited power as they space requirements and cost rise with charger power. To overcome this limitation modern EVs offer external access to their HV battery via a so called [[:Category:Rapid Charging|rapid charging]] port. This allows to charge the battery with a much more powerful external charger. As a bonus it also allows [[Bidirectional Charging|taking energy from the HV battery]] and powering appliances with it.&lt;br /&gt;
&lt;br /&gt;
There are 2 rapid charging protocols and 5 connector flavours world wide&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Communication&lt;br /&gt;
!Prevalent countries&lt;br /&gt;
!Open Source solutions&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:ChaDeMo|CHAdeMO]]&lt;br /&gt;
|CAN&lt;br /&gt;
|Japan, world wide&lt;br /&gt;
|[[Chademo with ESP32-Chademo|ESP32]], [[Chademo With Arduino Due|Arduino,]] [[Chademo with Zombieverter|ZombieVerter]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo1&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo2&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|Europe&lt;br /&gt;
|[[Foccci]], [[pyPLC]], [[BMW I3 Fast Charging LIM Module|I3LIM]]&lt;br /&gt;
|-&lt;br /&gt;
|NACS&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|GB/T&lt;br /&gt;
|CAN&lt;br /&gt;
|China&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Auxiliary Parts ==&lt;br /&gt;
We have now treated all the major building blocks of an EV, but there are many other components to complete the vehicle such as heaters, gear shifters and so on. We will summarize them here.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:HVJB|HV Junction Box]]&lt;br /&gt;
* [[:Category:HVAC|HVAC]] (Heating, Air conditioning)&lt;br /&gt;
* [[Vacuum Pumps]]&lt;br /&gt;
* [[:Category:Power Steering|Power Steering]]&lt;br /&gt;
* [[VCU Comparison|VCU]] (Vehicle Control Unit)&lt;br /&gt;
* [[Shift Controllers]]&lt;br /&gt;
&lt;br /&gt;
== Additional Reading ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Legalities|Legalities]] - Getting a vehicle road legal in your country&lt;br /&gt;
* [[Glossary of Terms]]&lt;br /&gt;
* [[Common Inverter FAQ]] - questions common to all hardware variants&lt;br /&gt;
* [[Tesla Inverter FAQ]] - questions regarding Tesla Large Drive Units and Small Drive Units&lt;br /&gt;
* [[Electronics Basics]] - general advice for troubleshooting electronic circuits&lt;br /&gt;
* [[I want a cheap ev conversion|cheap EV conversions]] - this entry point for the penny pinchers&lt;br /&gt;
* [[I want a powerful ev conversion|performant EV conversions]]  - where torque trumps money&lt;br /&gt;
* [[Mechanical design database]] - here you will find measurements, models, files, etc for a variety of components such as adapter plates and drive shaft flanges&lt;br /&gt;
* [[:Category:OpenInverter|Documentation of all OpenInverter Projects]]&lt;br /&gt;
* [[:Category:Tutorials|Tutorials]]&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
There is no static team or openinverter company but here we list the most active community members with links to donation or information sites:&lt;br /&gt;
&lt;br /&gt;
*Johannes Hübner, openinverter founder and developer - [https://www.patreon.com/openinverter support on patreon] follow on [https://www.youtube.com/user/EngineersFear youtube] and [https://github.com/jsphuebner/ github]&lt;br /&gt;
*Damien Maguire, developer and most active vehicle converter - [https://evbmw.com/index.php/evbmw-webshop visit shop] [https://www.patreon.com/evbmw support on patreon] follow on [https://www.youtube.com/@Evbmw youtube] and [https://github.com/damienmaguire/ github]&lt;br /&gt;
*Tom de Bree, active member and developer - [https://github.com/Tom-evnut github] and [https://citini.com/ shop]&lt;br /&gt;
*Uwe Hennig, master of CCS - [https://www.patreon.com/uhi22 support on patreon] follow on [https://github.com/uhi22/ github]&lt;br /&gt;
*celeron55, developer - support via [https://www.paypal.com/paypalme/celeron55 paypal] follow on [https://www.youtube.com/user/celeron55 youtube] and [https://github.com/celeron55 github]&lt;br /&gt;
*Dave Fiddes, active member and developer - Follow on [https://github.com/davefiddes/ github]&lt;br /&gt;
*Arber Kramar, long term member and developer - [https://leafdriveblog.wordpress.com/ Follow on blogspot]&lt;br /&gt;
*Janosch Oppermann, active member, developer and producer - follow on [https://www.youtube.com/@foxev-content youtube]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5149</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5149"/>
		<updated>2024-12-03T11:02:58Z</updated>

		<summary type="html">&lt;p&gt;Johu: Removed list of systems, seems redundant. Transferred parts of &amp;quot;before you begin&amp;quot; to the space&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Did you know you can convert your existing fossil powered vehicle to use electricity instead? And that you can even produce that electricity yourself?&lt;br /&gt;
&lt;br /&gt;
Open Inverter is a [[Main Page#Who we are|community of people]] and projects focused on open source solutions for EV conversions.  Founded in 2008 by Johannes Huebner as an open source inverter control firmware, the project has since expended to include the reuse of components from production EVs and hybrids, including inverters, motors, batteries, on-board chargers, and DC-DC converters, as well as the open source implementation of other necessary systems for EV conversions such as DC Fast Charging controllers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:Electric-car.jpg|none|frame|Click on the captions to learn more about the respective system! Image source: https://www.newkidscar.com/&lt;br /&gt;
&lt;br /&gt;
poly 248 166 542 166 542 217 248 217 248 166 [[#Reusing motors and inverters - aka drive trains]]&lt;br /&gt;
poly 1041 455 1336 455 1336 506 1041 506 1041 455 [[#Reusing Batteries]]&lt;br /&gt;
poly 147 344 428 344 428 391 147 391 147 344 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 844 624 1118 624 1118 673 844 673 844 624 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 935 539 1200 539 1200 586 935 586 935 539 [[#Rapid Charging]]&lt;br /&gt;
poly 134 435 394 435 394 483 134 483 134 435 [[#Auxiliary Parts]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by the wider community. &#039;&#039;&#039;Please update this wiki&#039;&#039;&#039;. For example if your question has been clarified on the forum and the new information can not be found here, please add it! The credentials are the same as for the forum.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Main Page#Who we are|Developers]] time is best spent developing;&#039;&#039;&#039; &#039;&#039;&#039;Support is best found in the forums&#039;&#039;&#039; - Developers of various projects are often bombarded with private messages and emails. Managing these emails and questions is a extremely large undertaking. Please read, and take the time to understand the information available here and across the web if you don&#039;t understand a topic. Developers are not your personal support team, unless you want to pay them directly for their time. To keep developers independent please consider donating - donation links can be found [[Main Page#Who we are|down below]].&lt;br /&gt;
&lt;br /&gt;
Read more about [[Application Support]]&lt;br /&gt;
&lt;br /&gt;
==Reusing motors and inverters - aka drive trains==&lt;br /&gt;
[[File:Tesla_LDU.jpg|thumb]]&lt;br /&gt;
The drive train is one of the defining building blocks of your conversion as it defines how well your vehicle picks up speed. Over the years we have reverse engineered many popular drive trains from [[:Category:OEM|production cars]] such as Teslas. As a bonus using such complete drive trains facilitates getting the vehicle [[Legalities|road legal]] in many countries. By now you have a choice of low to medium power drive trains that only cost a few 100€ up to high performance ones at many 1000€. &lt;br /&gt;
&lt;br /&gt;
We have established two methods of running these [[:Category:OEM|OEM]] systems: reverse-engineering their communication protocol and making the drive train &amp;quot;think&amp;quot; it is still in its original vehicle OR swapping out the control electronics for our own open source motor controller. The latter method gives your more control and power but also a steeper learning curve. &lt;br /&gt;
&lt;br /&gt;
Nearly all drive trains are targeted at 400V battery voltage. Run at a lower voltage they will produce proportionally less power. &lt;br /&gt;
Here is what we have done so far and how we&#039;ve done it. Some is still work in progress (WIP) &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Drive Train&lt;br /&gt;
!Control Method&lt;br /&gt;
! Approximate Power Output&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model S/X Large Drive Unit (&amp;quot;LDU&amp;quot;)|Large Drive Unit]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|335-475 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model S/X Small Drive Unit (&amp;quot;SDU&amp;quot;)|Small Drive Unit]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|180 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Rear Drive Unit|Model 3/Y Rear Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|239 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Front Drive Unit|Model 3/Y Front Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|121 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Nissan]]&lt;br /&gt;
|[[Nissan Leaf Motors|Gen1]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]&lt;br /&gt;
|80 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| [[Nissan Leaf Gen2 Board|Gen2]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap&lt;br /&gt;
|80 kW / 130 kW (board swap)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Nissan Leaf Gen 3 (2018 up EM57)|Gen3]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap [WIP]&lt;br /&gt;
|110 - 160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Toyota|Toyota]]&lt;br /&gt;
|[[Lexus GS450h Drivetrain|Lexus GS 450h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|250 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus GS300h CVT|Lexus GS 300h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|105 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter|Prius Gen2]]&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter Controller|External Control Board]]&lt;br /&gt;
|40-70 kW &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen3 Board|Prius Gen3]]&lt;br /&gt;
|Board Swap/[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|100 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus MGR Rear Transaxle Motor|MGR]]&lt;br /&gt;
|Prius Gen2 or Gen3 inverter&lt;br /&gt;
|18-50 kW (various models)&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander Rear Drive Unit|Rear Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Mitsubishi Outlander Front Transaxle|Front Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:BMW|BMW]]&lt;br /&gt;
|[[BMW i3 Inverter|i3]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|125-135 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Chevrolet|Chevy/Opel]]&lt;br /&gt;
|[[Chevrolet Volt Inverter|Volt/Ampera]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Ford|Ford]]&lt;br /&gt;
|[[Ford Ranger TIM Controller|Ranger]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| Renault&lt;br /&gt;
|[https://openinverter.org/forum/viewtopic.php?t=4749 Zoe]&lt;br /&gt;
|Board Swap [WIP]&lt;br /&gt;
|Unknown &lt;br /&gt;
|-&lt;br /&gt;
|MG&lt;br /&gt;
|[https://github.com/damienmaguire/MG-EV-Inverter ZS EV]&lt;br /&gt;
|Board Swap [WIP] &lt;br /&gt;
|Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reusing Batteries==&lt;br /&gt;
[[File:A09A7634.jpg|thumb]]&lt;br /&gt;
The most expensive and probably equally defining component is the [[Batteries|battery]] that stores all the energy for running your car. Batteries are usually assembled from a number of modules that in turn contain a number of cells. Usually batteries are reused on a module level. In rare cases the battery can be [https://youtu.be/_7l0Y1GsNJ4 reused as is in its original battery] box.&lt;br /&gt;
&lt;br /&gt;
While there are also various [[16-cell BMS|open source implementations]] of [https://www.youtube.com/watch?v=_QsMoCrSTYc battery management systems] (BMS) we generally recommend using as much of the OEM BMS as possible. Sometimes the [[:Category:OEM|OEM]] BMS comes as an all-in-one solution that measures cell data and spits out state of charge and power limit information. In other cases the BMS is split into module units that measure the physical data (voltages, temperatures) and a central unit that calculates the high level information.&lt;br /&gt;
&lt;br /&gt;
Sometimes we managed to reuse the complete system which is generally the safest as you can rely on the manufacturers well tested charge and discharge limits as well as reliable state of charge information (i.e. how much energy is left in the battery at any given time). In other cases we only managed to reuse the module units. This adds the convenience of having a well tested piece of hardware with the matching connector but required us to calculate all high level battery data ourselves. This also incudes [https://www.youtube.com/watch?v=RGYLPOlT45A cell balancing].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!BMS usability&lt;br /&gt;
!Energy Content&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model 3 Battery|Model 3]]&lt;br /&gt;
|Module and high level [WIP]&lt;br /&gt;
|60-80 kWh ?&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Batteries#OEM modules|Model S]]&lt;br /&gt;
|Unknown&lt;br /&gt;
|85-100 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Nissan|Nissan]]&lt;br /&gt;
|[[Nissan Leaf BMS|Leaf/NV200]]&lt;br /&gt;
|High Level&lt;br /&gt;
|24-40 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:VAG|VW]]&lt;br /&gt;
|[[VW Hybrid Battery Packs|Passat/Golf]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|8.7-36 kWh&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[MEB Batteries|MEB]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|52-77 kwh &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Onboard chargers and DC/DC converters ==&lt;br /&gt;
[[File:PXL_20241020_024043714.jpg|thumb|Onboard charger]]&lt;br /&gt;
The DC/DC converter takes energy from your HV traction battery and sends it to the cars 12V systems and 12V battery. It is basically a 1:1 replacement of the former alternator. An onboard charger (OBC) takes AC current from the grid and converts it into DC current to charge the battery. These two devices are often combined in one common enclosure hence why we treat them as one.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!OBC&lt;br /&gt;
!DC/DC&lt;br /&gt;
!OBC power&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN2 Charger|Model S and X]] (Gen2)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN3 Charger|Model S and X]] (Gen3)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|22 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]] &lt;br /&gt;
|[[Tesla Model S/X DC/DC Converter|Model S and X]] (DC/DC)&lt;br /&gt;
|no&lt;br /&gt;
|yes &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model 3 Charger/DCDC (&amp;quot;PCS&amp;quot;)|Model 3]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt Charger|Volt]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt 2 Charger|Volt 2]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Dilong/Cascadia Chargers|Dilong]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Eltek chargers|Eltek]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander DCDC OBC|Outlander / iMiev]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes &lt;br /&gt;
|3.3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:MG|MG]]&lt;br /&gt;
|[[MG ZS Charger|ZS / MG4 / MG5]] &lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 - 11 kW&lt;br /&gt;
|}&lt;br /&gt;
There are more chargers under investigation, only the proven working ones are listed here. See our [[:Category:Charger|charger listing]] for more.&lt;br /&gt;
&lt;br /&gt;
== Rapid Charging==&lt;br /&gt;
[[File:Ccs-socket.jpg|thumb|CCS2 rapid charging socket]]&lt;br /&gt;
The above mentioned onboard chargers always have limited power as they space requirements and cost rise with charger power. To overcome this limitation modern EVs offer external access to their HV battery via a so called [[:Category:Rapid Charging|rapid charging]] port. This allows to charge the battery with a much more powerful external charger. As a bonus it also allows [[Bidirectional Charging|taking energy from the HV battery]] and powering appliances with it.&lt;br /&gt;
&lt;br /&gt;
There are 2 rapid charging protocols and 5 connector flavours world wide&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Communication&lt;br /&gt;
!Prevalent countries&lt;br /&gt;
!Open Source solutions&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:ChaDeMo|CHAdeMO]]&lt;br /&gt;
|CAN&lt;br /&gt;
|Japan, world wide&lt;br /&gt;
|[[Chademo with ESP32-Chademo|ESP32]], [[Chademo With Arduino Due|Arduino,]] [[Chademo with Zombieverter|ZombieVerter]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo1&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo2&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|Europe&lt;br /&gt;
|[[Foccci]], [[pyPLC]], [[BMW I3 Fast Charging LIM Module|I3LIM]]&lt;br /&gt;
|-&lt;br /&gt;
|NACS&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|GB/T&lt;br /&gt;
|CAN&lt;br /&gt;
|China&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Auxiliary Parts ==&lt;br /&gt;
We have now treated all the major building blocks of an EV, but there are many other components to complete the vehicle such as heaters, gear shifters and so on. We will summarize them here.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:HVJB|HV Junction Box]]&lt;br /&gt;
* [[:Category:HVAC|HVAC]] (Heating, Air conditioning)&lt;br /&gt;
* [[Vacuum Pumps]]&lt;br /&gt;
* [[:Category:Power Steering|Power Steering]]&lt;br /&gt;
* [[VCU Comparison|VCU]] (Vehicle Control Unit)&lt;br /&gt;
* [[Shift Controllers]]&lt;br /&gt;
&lt;br /&gt;
== Additional Reading ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Legalities|Legalities]] - Getting a vehicle road legal in your country&lt;br /&gt;
* [[Glossary of Terms]]&lt;br /&gt;
* [[Common Inverter FAQ]] - questions common to all hardware variants&lt;br /&gt;
* [[Tesla Inverter FAQ]] - questions regarding Tesla Large Drive Units and Small Drive Units&lt;br /&gt;
* [[Electronics Basics]] - general advice for troubleshooting electronic circuits&lt;br /&gt;
* [[I want a cheap ev conversion|cheap EV conversions]] - this entry point for the penny pinchers&lt;br /&gt;
* [[I want a powerful ev conversion|performant EV conversions]]  - where torque trumps money&lt;br /&gt;
* [[Mechanical design database]] - here you will find measurements, models, files, etc for a variety of components such as adapter plates and drive shaft flanges&lt;br /&gt;
* [[:Category:OpenInverter|Documentation of all OpenInverter Projects]]&lt;br /&gt;
* [[:Category:Tutorials|Tutorials]]&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
There is no static team or openinverter company but here we list the most active community members with links to donation or information sites:&lt;br /&gt;
&lt;br /&gt;
*Johannes Hübner, openinverter founder and developer - [https://www.patreon.com/openinverter support on patreon] follow on [https://www.youtube.com/user/EngineersFear youtube] and [https://github.com/jsphuebner/ github]&lt;br /&gt;
*Damien Maguire, developer and most active vehicle converter - [https://evbmw.com/index.php/evbmw-webshop visit shop] [https://www.patreon.com/evbmw support on patreon] follow on [https://www.youtube.com/@Evbmw youtube] and [https://github.com/damienmaguire/ github]&lt;br /&gt;
*Tom de Bree, active member and developer - [https://github.com/Tom-evnut github] and [https://citini.com/ shop]&lt;br /&gt;
*Uwe Hennig, master of CCS - [https://www.patreon.com/uhi22 support on patreon] follow on [https://github.com/uhi22/ github]&lt;br /&gt;
*celeron55, developer - support via [https://www.paypal.com/paypalme/celeron55 paypal] follow on [https://www.youtube.com/user/celeron55 youtube] and [https://github.com/celeron55 github]&lt;br /&gt;
*Dave Fiddes, active member and developer - Follow on [https://github.com/davefiddes/ github]&lt;br /&gt;
*Arber Kramar, long term member and developer - [https://leafdriveblog.wordpress.com/ Follow on blogspot]&lt;br /&gt;
*Janosch Oppermann, active member, developer and producer - follow on [https://www.youtube.com/@foxev-content youtube]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=MediaWiki:Sitenotice&amp;diff=5148</id>
		<title>MediaWiki:Sitenotice</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=MediaWiki:Sitenotice&amp;diff=5148"/>
		<updated>2024-12-03T10:49:48Z</updated>

		<summary type="html">&lt;p&gt;Johu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;You undertake your project at your own risk.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Converting a vehicle to electric drive is likely to be difficult. Users should satisfy themselves that they are physically able to perform any mechanical work on their vehicle, safely install and troubleshoot electrical systems, and satisfy any legal requirements they may be subject to before beginning their conversion. Read [[High Voltage Safety]]&lt;br /&gt;
&lt;br /&gt;
The information provided on this wiki and the support forums is intended as information only. The Open Inverter project and contributors to the forums and this wiki take no responsibility for how you use the information on this site, nor any liability for injuries, or death, that may result from your actions.&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=MediaWiki:Sitenotice&amp;diff=5147</id>
		<title>MediaWiki:Sitenotice</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=MediaWiki:Sitenotice&amp;diff=5147"/>
		<updated>2024-12-03T10:44:53Z</updated>

		<summary type="html">&lt;p&gt;Johu: Added link to High_Voltage_Safety&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;You undertake your project at your own risk.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Converting a vehicle to electric drive is likely to be difficult. Users should satisfy themselves that they are physically able to perform any mechanical work on their vehicle, safely install and troubleshoot electrical systems, and satisfy any legal requirements they may be subject to before beginning their conversion. Read [[High_Voltage_Safety]]&lt;br /&gt;
&lt;br /&gt;
The information provided on this wiki and the support forums is intended as information only. The Open Inverter project and contributors to the forums and this wiki take no responsibility for how you use the information on this site, nor any liability for injuries, or death, that may result from your actions.&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5146</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5146"/>
		<updated>2024-12-03T10:40:52Z</updated>

		<summary type="html">&lt;p&gt;Johu: /* Who we are */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Did you know you can convert your existing fossil powered vehicle to use electricity instead? And that you can even produce that electricity yourself?&lt;br /&gt;
&lt;br /&gt;
Open Inverter is a [[Main Page#Who we are|community of people]] and projects focused on open source solutions for EV conversions.  Founded in 2008 by Johannes Huebner as an open source inverter control firmware, the project has since expended to include the reuse of components from production EVs and hybrids, including inverters, motors, batteries, on-board chargers, and DC-DC converters, as well as the open source implementation of other necessary systems for EV conversions such as DC Fast Charging controllers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:Electric-car.jpg|none|frame|Click on the captions to learn more about the respective system! Image source: https://www.newkidscar.com/&lt;br /&gt;
&lt;br /&gt;
poly 248 166 542 166 542 217 248 217 248 166 [[#Reusing motors and inverters - aka drive trains]]&lt;br /&gt;
poly 1041 455 1336 455 1336 506 1041 506 1041 455 [[#Reusing Batteries]]&lt;br /&gt;
poly 147 344 428 344 428 391 147 391 147 344 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 844 624 1118 624 1118 673 844 673 844 624 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 935 539 1200 539 1200 586 935 586 935 539 [[#Rapid Charging]]&lt;br /&gt;
poly 134 435 394 435 394 483 134 483 134 435 [[#Auxiliary Parts]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While the project, as the name suggests, started out as an open source implementation of a traction motor inverter it now comprises many other topics as well:&lt;br /&gt;
&lt;br /&gt;
*Reusing complete drive trains&lt;br /&gt;
* Reusing batteries including the management electronics (BMS)&lt;br /&gt;
*Reusing on board chargers to charge your vehicle from AC outlets&lt;br /&gt;
*Reusing DC/DC converters to run your 12V system from the high voltage traction battery&lt;br /&gt;
*Reusing A/C compressors and cabin heaters&lt;br /&gt;
*Fast charging your vehicle on public rapid charging infrastructure&lt;br /&gt;
*Tying all components together with a vehicle control unit (VCU)&lt;br /&gt;
* Building small scale PV systems including storage&lt;br /&gt;
More on these topics in the detailed sections below. Happy reading!&lt;br /&gt;
&lt;br /&gt;
==Reusing motors and inverters - aka drive trains==&lt;br /&gt;
[[File:Tesla_LDU.jpg|thumb]]&lt;br /&gt;
The drive train is one of the defining building blocks of your conversion as it defines how well your vehicle picks up speed. Over the years we have reverse engineered many popular drive trains from [[:Category:OEM|production cars]] such as Teslas. As a bonus using such complete drive trains facilitates getting the vehicle [[Legalities|road legal]] in many countries. By now you have a choice of low to medium power drive trains that only cost a few 100€ up to high performance ones at many 1000€. &lt;br /&gt;
&lt;br /&gt;
We have established two methods of running these [[:Category:OEM|OEM]] systems: reverse-engineering their communication protocol and making the drive train &amp;quot;think&amp;quot; it is still in its original vehicle OR swapping out the control electronics for our own open source motor controller. The latter method gives your more control and power but also a steeper learning curve. &lt;br /&gt;
&lt;br /&gt;
Nearly all drive trains are targeted at 400V battery voltage. Run at a lower voltage they will produce proportionally less power. &lt;br /&gt;
Here is what we have done so far and how we&#039;ve done it. Some is still work in progress (WIP) &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Drive Train&lt;br /&gt;
!Control Method&lt;br /&gt;
! Approximate Power Output&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model S/X Large Drive Unit (&amp;quot;LDU&amp;quot;)|Large Drive Unit]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|335-475 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model S/X Small Drive Unit (&amp;quot;SDU&amp;quot;)|Small Drive Unit]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|180 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Rear Drive Unit|Model 3/Y Rear Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|239 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Front Drive Unit|Model 3/Y Front Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|121 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Nissan]]&lt;br /&gt;
|[[Nissan Leaf Motors|Gen1]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]&lt;br /&gt;
|80 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| [[Nissan Leaf Gen2 Board|Gen2]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap&lt;br /&gt;
|80 kW / 130 kW (board swap)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Nissan Leaf Gen 3 (2018 up EM57)|Gen3]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap [WIP]&lt;br /&gt;
|110 - 160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Toyota|Toyota]]&lt;br /&gt;
|[[Lexus GS450h Drivetrain|Lexus GS 450h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|250 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus GS300h CVT|Lexus GS 300h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|105 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter|Prius Gen2]]&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter Controller|External Control Board]]&lt;br /&gt;
|40-70 kW &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen3 Board|Prius Gen3]]&lt;br /&gt;
|Board Swap/[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|100 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus MGR Rear Transaxle Motor|MGR]]&lt;br /&gt;
|Prius Gen2 or Gen3 inverter&lt;br /&gt;
|18-50 kW (various models)&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander Rear Drive Unit|Rear Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Mitsubishi Outlander Front Transaxle|Front Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:BMW|BMW]]&lt;br /&gt;
|[[BMW i3 Inverter|i3]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|125-135 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Chevrolet|Chevy/Opel]]&lt;br /&gt;
|[[Chevrolet Volt Inverter|Volt/Ampera]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Ford|Ford]]&lt;br /&gt;
|[[Ford Ranger TIM Controller|Ranger]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| Renault&lt;br /&gt;
|[https://openinverter.org/forum/viewtopic.php?t=4749 Zoe]&lt;br /&gt;
|Board Swap [WIP]&lt;br /&gt;
|Unknown &lt;br /&gt;
|-&lt;br /&gt;
|MG&lt;br /&gt;
|[https://github.com/damienmaguire/MG-EV-Inverter ZS EV]&lt;br /&gt;
|Board Swap [WIP] &lt;br /&gt;
|Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reusing Batteries==&lt;br /&gt;
[[File:A09A7634.jpg|thumb]]&lt;br /&gt;
The most expensive and probably equally defining component is the [[Batteries|battery]] that stores all the energy for running your car. Batteries are usually assembled from a number of modules that in turn contain a number of cells. Usually batteries are reused on a module level. In rare cases the battery can be [https://youtu.be/_7l0Y1GsNJ4 reused as is in its original battery] box.&lt;br /&gt;
&lt;br /&gt;
While there are also various [[16-cell BMS|open source implementations]] of [https://www.youtube.com/watch?v=_QsMoCrSTYc battery management systems] (BMS) we generally recommend using as much of the OEM BMS as possible. Sometimes the [[:Category:OEM|OEM]] BMS comes as an all-in-one solution that measures cell data and spits out state of charge and power limit information. In other cases the BMS is split into module units that measure the physical data (voltages, temperatures) and a central unit that calculates the high level information.&lt;br /&gt;
&lt;br /&gt;
Sometimes we managed to reuse the complete system which is generally the safest as you can rely on the manufacturers well tested charge and discharge limits as well as reliable state of charge information (i.e. how much energy is left in the battery at any given time). In other cases we only managed to reuse the module units. This adds the convenience of having a well tested piece of hardware with the matching connector but required us to calculate all high level battery data ourselves. This also incudes [https://www.youtube.com/watch?v=RGYLPOlT45A cell balancing].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!BMS usability&lt;br /&gt;
!Energy Content&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model 3 Battery|Model 3]]&lt;br /&gt;
|Module and high level [WIP]&lt;br /&gt;
|60-80 kWh ?&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Batteries#OEM modules|Model S]]&lt;br /&gt;
|Unknown&lt;br /&gt;
|85-100 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Nissan|Nissan]]&lt;br /&gt;
|[[Nissan Leaf BMS|Leaf/NV200]]&lt;br /&gt;
|High Level&lt;br /&gt;
|24-40 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:VAG|VW]]&lt;br /&gt;
|[[VW Hybrid Battery Packs|Passat/Golf]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|8.7-36 kWh&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[MEB Batteries|MEB]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|52-77 kwh &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Onboard chargers and DC/DC converters ==&lt;br /&gt;
[[File:PXL_20241020_024043714.jpg|thumb|Onboard charger]]&lt;br /&gt;
The DC/DC converter takes energy from your HV traction battery and sends it to the cars 12V systems and 12V battery. It is basically a 1:1 replacement of the former alternator. An onboard charger (OBC) takes AC current from the grid and converts it into DC current to charge the battery. These two devices are often combined in one common enclosure hence why we treat them as one.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!OBC&lt;br /&gt;
!DC/DC&lt;br /&gt;
!OBC power&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN2 Charger|Model S and X]] (Gen2)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN3 Charger|Model S and X]] (Gen3)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|22 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]] &lt;br /&gt;
|[[Tesla Model S/X DC/DC Converter|Model S and X]] (DC/DC)&lt;br /&gt;
|no&lt;br /&gt;
|yes &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model 3 Charger/DCDC (&amp;quot;PCS&amp;quot;)|Model 3]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt Charger|Volt]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt 2 Charger|Volt 2]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Dilong/Cascadia Chargers|Dilong]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Eltek chargers|Eltek]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander DCDC OBC|Outlander / iMiev]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes &lt;br /&gt;
|3.3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:MG|MG]]&lt;br /&gt;
|[[MG ZS Charger|ZS / MG4 / MG5]] &lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 - 11 kW&lt;br /&gt;
|}&lt;br /&gt;
There are more chargers under investigation, only the proven working ones are listed here. See our [[:Category:Charger|charger listing]] for more.&lt;br /&gt;
&lt;br /&gt;
== Rapid Charging==&lt;br /&gt;
[[File:Ccs-socket.jpg|thumb|CCS2 rapid charging socket]]&lt;br /&gt;
The above mentioned onboard chargers always have limited power as they space requirements and cost rise with charger power. To overcome this limitation modern EVs offer external access to their HV battery via a so called [[:Category:Rapid Charging|rapid charging]] port. This allows to charge the battery with a much more powerful external charger. As a bonus it also allows [[Bidirectional Charging|taking energy from the HV battery]] and powering appliances with it.&lt;br /&gt;
&lt;br /&gt;
There are 2 rapid charging protocols and 5 connector flavours world wide&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Communication&lt;br /&gt;
!Prevalent countries&lt;br /&gt;
!Open Source solutions&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:ChaDeMo|CHAdeMO]]&lt;br /&gt;
|CAN&lt;br /&gt;
|Japan, world wide&lt;br /&gt;
|[[Chademo with ESP32-Chademo|ESP32]], [[Chademo With Arduino Due|Arduino,]] [[Chademo with Zombieverter|ZombieVerter]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo1&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo2&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|Europe&lt;br /&gt;
|[[Foccci]], [[pyPLC]], [[BMW I3 Fast Charging LIM Module|I3LIM]]&lt;br /&gt;
|-&lt;br /&gt;
|NACS&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|GB/T&lt;br /&gt;
|CAN&lt;br /&gt;
|China&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Auxiliary Parts ==&lt;br /&gt;
We have now treated all the major building blocks of an EV, but there are many other components to complete the vehicle such as heaters, gear shifters and so on. We will summarize them here.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:HVJB|HV Junction Box]]&lt;br /&gt;
* [[:Category:HVAC|HVAC]] (Heating, Air conditioning)&lt;br /&gt;
* [[Vacuum Pumps]]&lt;br /&gt;
* [[:Category:Power Steering|Power Steering]]&lt;br /&gt;
* [[VCU Comparison|VCU]] (Vehicle Control Unit)&lt;br /&gt;
* [[Shift Controllers]]&lt;br /&gt;
&lt;br /&gt;
== Additional Reading ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Legalities|Legalities]] - Getting a vehicle road legal in your country&lt;br /&gt;
* [[Glossary of Terms]]&lt;br /&gt;
* [[Common Inverter FAQ]] - questions common to all hardware variants&lt;br /&gt;
* [[Tesla Inverter FAQ]] - questions regarding Tesla Large Drive Units and Small Drive Units&lt;br /&gt;
* [[Electronics Basics]] - general advice for troubleshooting electronic circuits&lt;br /&gt;
* [[I want a cheap ev conversion|cheap EV conversions]] - this entry point for the penny pinchers&lt;br /&gt;
* [[I want a powerful ev conversion|performant EV conversions]]  - where torque trumps money&lt;br /&gt;
* [[Mechanical design database]] - here you will find measurements, models, files, etc for a variety of components such as adapter plates and drive shaft flanges&lt;br /&gt;
* [[:Category:OpenInverter|Documentation of all OpenInverter Projects]]&lt;br /&gt;
* [[:Category:Tutorials|Tutorials]]&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
There is no static team or openinverter company but here we list the most active community members with links to donation or information sites:&lt;br /&gt;
&lt;br /&gt;
*Johannes Hübner, openinverter founder and developer - [https://www.patreon.com/openinverter support on patreon] follow on [https://www.youtube.com/user/EngineersFear youtube] and [https://github.com/jsphuebner/ github]&lt;br /&gt;
*Damien Maguire, developer and most active vehicle converter - [https://evbmw.com/index.php/evbmw-webshop visit shop] [https://www.patreon.com/evbmw support on patreon] follow on [https://www.youtube.com/@Evbmw youtube] and [https://github.com/damienmaguire/ github]&lt;br /&gt;
*Tom de Bree, active member and developer - [https://github.com/Tom-evnut github] and [https://citini.com/ shop]&lt;br /&gt;
*Uwe Hennig, master of CCS - [https://www.patreon.com/uhi22 support on patreon] follow on [https://github.com/uhi22/ github]&lt;br /&gt;
*celeron55, developer - support via [https://www.paypal.com/paypalme/celeron55 paypal] follow on [https://www.youtube.com/user/celeron55 youtube] and [https://github.com/celeron55 github]&lt;br /&gt;
*Dave Fiddes, active member and developer - Follow on [https://github.com/davefiddes/ github]&lt;br /&gt;
*Arber Kramar, long term member and developer - [https://leafdriveblog.wordpress.com/ Follow on blogspot]&lt;br /&gt;
*Janosch Oppermann, active member, developer and producer - follow on [https://www.youtube.com/@foxev-content youtube]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5144</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5144"/>
		<updated>2024-12-02T13:21:54Z</updated>

		<summary type="html">&lt;p&gt;Johu: /* Who we are */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Did you know you can convert your existing fossil powered vehicle to use electricity instead? And that you can even produce that electricity yourself?&lt;br /&gt;
&lt;br /&gt;
Open Inverter is a [[Main Page#Who we are|community of people]] and projects focused on open source solutions for EV conversions.  Founded in 2008 by Johannes Huebner as an open source inverter control firmware, the project has since expended to include the reuse of components from production EVs and hybrids, including inverters, motors, batteries, on-board chargers, and DC-DC converters, as well as the open source implementation of other necessary systems for EV conversions such as DC Fast Charging controllers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:Electric-car.jpg|none|frame|Click on the captions to learn more about the respective system! Image source: https://www.newkidscar.com/&lt;br /&gt;
&lt;br /&gt;
poly 248 166 542 166 542 217 248 217 248 166 [[#Reusing motors and inverters - aka drive trains]]&lt;br /&gt;
poly 1041 455 1336 455 1336 506 1041 506 1041 455 [[#Reusing Batteries]]&lt;br /&gt;
poly 147 344 428 344 428 391 147 391 147 344 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 844 624 1118 624 1118 673 844 673 844 624 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 935 539 1200 539 1200 586 935 586 935 539 [[#Rapid Charging]]&lt;br /&gt;
poly 134 435 394 435 394 483 134 483 134 435 [[#Auxiliary Parts]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While the project, as the name suggests, started out as an open source implementation of a traction motor inverter it now comprises many other topics as well:&lt;br /&gt;
&lt;br /&gt;
*Reusing complete drive trains&lt;br /&gt;
* Reusing batteries including the management electronics (BMS)&lt;br /&gt;
*Reusing on board chargers to charge your vehicle from AC outlets&lt;br /&gt;
*Reusing DC/DC converters to run your 12V system from the high voltage traction battery&lt;br /&gt;
*Reusing A/C compressors and cabin heaters&lt;br /&gt;
*Fast charging your vehicle on public rapid charging infrastructure&lt;br /&gt;
*Tying all components together with a vehicle control unit (VCU)&lt;br /&gt;
* Building small scale PV systems including storage&lt;br /&gt;
More on these topics in the detailed sections below. Happy reading!&lt;br /&gt;
&lt;br /&gt;
==Reusing motors and inverters - aka drive trains==&lt;br /&gt;
[[File:Tesla_LDU.jpg|thumb]]&lt;br /&gt;
The drive train is one of the defining building blocks of your conversion as it defines how well your vehicle picks up speed. Over the years we have reverse engineered many popular drive trains from [[:Category:OEM|production cars]] such as Teslas. As a bonus using such complete drive trains facilitates getting the vehicle [[Legalities|road legal]] in many countries. By now you have a choice of low to medium power drive trains that only cost a few 100€ up to high performance ones at many 1000€. &lt;br /&gt;
&lt;br /&gt;
We have established two methods of running these [[:Category:OEM|OEM]] systems: reverse-engineering their communication protocol and making the drive train &amp;quot;think&amp;quot; it is still in its original vehicle OR swapping out the control electronics for our own open source motor controller. The latter method gives your more control and power but also a steeper learning curve. &lt;br /&gt;
&lt;br /&gt;
Nearly all drive trains are targeted at 400V battery voltage. Run at a lower voltage they will produce proportionally less power. &lt;br /&gt;
Here is what we have done so far and how we&#039;ve done it. Some is still work in progress (WIP) &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Drive Train&lt;br /&gt;
!Control Method&lt;br /&gt;
! Approximate Power Output&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model S/X Large Drive Unit (&amp;quot;LDU&amp;quot;)|Large Drive Unit]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|335-475 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model S/X Small Drive Unit (&amp;quot;SDU&amp;quot;)|Small Drive Unit]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|180 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Rear Drive Unit|Model 3/Y Rear Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|239 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Front Drive Unit|Model 3/Y Front Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|121 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Nissan]]&lt;br /&gt;
|[[Nissan Leaf Motors|Gen1]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]&lt;br /&gt;
|80 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| [[Nissan Leaf Gen2 Board|Gen2]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap&lt;br /&gt;
|80 kW / 130 kW (board swap)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Nissan Leaf Gen 3 (2018 up EM57)|Gen3]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap [WIP]&lt;br /&gt;
|110 - 160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Toyota|Toyota]]&lt;br /&gt;
|[[Lexus GS450h Drivetrain|Lexus GS 450h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|250 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus GS300h CVT|Lexus GS 300h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|105 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter|Prius Gen2]]&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter Controller|External Control Board]]&lt;br /&gt;
|40-70 kW &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen3 Board|Prius Gen3]]&lt;br /&gt;
|Board Swap/[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|100 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus MGR Rear Transaxle Motor|MGR]]&lt;br /&gt;
|Prius Gen2 or Gen3 inverter&lt;br /&gt;
|18-50 kW (various models)&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander Rear Drive Unit|Rear Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Mitsubishi Outlander Front Transaxle|Front Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:BMW|BMW]]&lt;br /&gt;
|[[BMW i3 Inverter|i3]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|125-135 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Chevrolet|Chevy/Opel]]&lt;br /&gt;
|[[Chevrolet Volt Inverter|Volt/Ampera]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Ford|Ford]]&lt;br /&gt;
|[[Ford Ranger TIM Controller|Ranger]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| Renault&lt;br /&gt;
|[https://openinverter.org/forum/viewtopic.php?t=4749 Zoe]&lt;br /&gt;
|Board Swap [WIP]&lt;br /&gt;
|Unknown &lt;br /&gt;
|-&lt;br /&gt;
|MG&lt;br /&gt;
|[https://github.com/damienmaguire/MG-EV-Inverter ZS EV]&lt;br /&gt;
|Board Swap [WIP] &lt;br /&gt;
|Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reusing Batteries==&lt;br /&gt;
[[File:A09A7634.jpg|thumb]]&lt;br /&gt;
The most expensive and probably equally defining component is the [[Batteries|battery]] that stores all the energy for running your car. Batteries are usually assembled from a number of modules that in turn contain a number of cells. Usually batteries are reused on a module level. In rare cases the battery can be [https://youtu.be/_7l0Y1GsNJ4 reused as is in its original battery] box.&lt;br /&gt;
&lt;br /&gt;
While there are also various [[16-cell BMS|open source implementations]] of [https://www.youtube.com/watch?v=_QsMoCrSTYc battery management systems] (BMS) we generally recommend using as much of the OEM BMS as possible. Sometimes the [[:Category:OEM|OEM]] BMS comes as an all-in-one solution that measures cell data and spits out state of charge and power limit information. In other cases the BMS is split into module units that measure the physical data (voltages, temperatures) and a central unit that calculates the high level information.&lt;br /&gt;
&lt;br /&gt;
Sometimes we managed to reuse the complete system which is generally the safest as you can rely on the manufacturers well tested charge and discharge limits as well as reliable state of charge information (i.e. how much energy is left in the battery at any given time). In other cases we only managed to reuse the module units. This adds the convenience of having a well tested piece of hardware with the matching connector but required us to calculate all high level battery data ourselves. This also incudes [https://www.youtube.com/watch?v=RGYLPOlT45A cell balancing].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!BMS usability&lt;br /&gt;
!Energy Content&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model 3 Battery|Model 3]]&lt;br /&gt;
|Module and high level [WIP]&lt;br /&gt;
|60-80 kWh ?&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Batteries#OEM modules|Model S]]&lt;br /&gt;
|Unknown&lt;br /&gt;
|85-100 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Nissan|Nissan]]&lt;br /&gt;
|[[Nissan Leaf BMS|Leaf/NV200]]&lt;br /&gt;
|High Level&lt;br /&gt;
|24-40 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:VAG|VW]]&lt;br /&gt;
|[[VW Hybrid Battery Packs|Passat/Golf]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|8.7-36 kWh&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[MEB Batteries|MEB]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|52-77 kwh &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Onboard chargers and DC/DC converters ==&lt;br /&gt;
[[File:PXL_20241020_024043714.jpg|thumb|Onboard charger]]&lt;br /&gt;
The DC/DC converter takes energy from your HV traction battery and sends it to the cars 12V systems and 12V battery. It is basically a 1:1 replacement of the former alternator. An onboard charger (OBC) takes AC current from the grid and converts it into DC current to charge the battery. These two devices are often combined in one common enclosure hence why we treat them as one.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!OBC&lt;br /&gt;
!DC/DC&lt;br /&gt;
!OBC power&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN2 Charger|Model S and X]] (Gen2)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN3 Charger|Model S and X]] (Gen3)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|22 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]] &lt;br /&gt;
|[[Tesla Model S/X DC/DC Converter|Model S and X]] (DC/DC)&lt;br /&gt;
|no&lt;br /&gt;
|yes &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model 3 Charger/DCDC (&amp;quot;PCS&amp;quot;)|Model 3]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt Charger|Volt]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt 2 Charger|Volt 2]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Dilong/Cascadia Chargers|Dilong]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Eltek chargers|Eltek]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander DCDC OBC|Outlander / iMiev]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes &lt;br /&gt;
|3.3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:MG|MG]]&lt;br /&gt;
|[[MG ZS Charger|ZS / MG4 / MG5]] &lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 - 11 kW&lt;br /&gt;
|}&lt;br /&gt;
There are more chargers under investigation, only the proven working ones are listed here. See our [[:Category:Charger|charger listing]] for more.&lt;br /&gt;
&lt;br /&gt;
== Rapid Charging==&lt;br /&gt;
[[File:Ccs-socket.jpg|thumb|CCS2 rapid charging socket]]&lt;br /&gt;
The above mentioned onboard chargers always have limited power as they space requirements and cost rise with charger power. To overcome this limitation modern EVs offer external access to their HV battery via a so called [[:Category:Rapid Charging|rapid charging]] port. This allows to charge the battery with a much more powerful external charger. As a bonus it also allows [[Bidirectional Charging|taking energy from the HV battery]] and powering appliances with it.&lt;br /&gt;
&lt;br /&gt;
There are 2 rapid charging protocols and 5 connector flavours world wide&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Communication&lt;br /&gt;
!Prevalent countries&lt;br /&gt;
!Open Source solutions&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:ChaDeMo|CHAdeMO]]&lt;br /&gt;
|CAN&lt;br /&gt;
|Japan, world wide&lt;br /&gt;
|[[Chademo with ESP32-Chademo|ESP32]], [[Chademo With Arduino Due|Arduino,]] [[Chademo with Zombieverter|ZombieVerter]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo1&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo2&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|Europe&lt;br /&gt;
|[[Foccci]], [[pyPLC]], [[BMW I3 Fast Charging LIM Module|I3LIM]]&lt;br /&gt;
|-&lt;br /&gt;
|NACS&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|GB/T&lt;br /&gt;
|CAN&lt;br /&gt;
|China&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Auxiliary Parts ==&lt;br /&gt;
We have now treated all the major building blocks of an EV, but there are many other components to complete the vehicle such as heaters, gear shifters and so on. We will summarize them here.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:HVJB|HV Junction Box]]&lt;br /&gt;
* [[:Category:HVAC|HVAC]] (Heating, Air conditioning)&lt;br /&gt;
* [[Vacuum Pumps]]&lt;br /&gt;
* [[:Category:Power Steering|Power Steering]]&lt;br /&gt;
* [[VCU Comparison|VCU]] (Vehicle Control Unit)&lt;br /&gt;
* [[Shift Controllers]]&lt;br /&gt;
&lt;br /&gt;
== Additional Reading ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Legalities|Legalities]] - Getting a vehicle road legal in your country&lt;br /&gt;
* [[Glossary of Terms]]&lt;br /&gt;
* [[Common Inverter FAQ]] - questions common to all hardware variants&lt;br /&gt;
* [[Tesla Inverter FAQ]] - questions regarding Tesla Large Drive Units and Small Drive Units&lt;br /&gt;
* [[Electronics Basics]] - general advice for troubleshooting electronic circuits&lt;br /&gt;
* [[I want a cheap ev conversion|cheap EV conversions]] - this entry point for the penny pinchers&lt;br /&gt;
* [[I want a powerful ev conversion|performant EV conversions]]  - where torque trumps money&lt;br /&gt;
* [[Mechanical design database]] - here you will find measurements, models, files, etc for a variety of components such as adapter plates and drive shaft flanges&lt;br /&gt;
* [[:Category:OpenInverter|Documentation of all OpenInverter Projects]]&lt;br /&gt;
* [[:Category:Tutorials|Tutorials]]&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
There is no static team or openinverter company but here we list the most active community members with links to donation or information sites:&lt;br /&gt;
&lt;br /&gt;
*Johannes Hübner, openinverter founder and developer - [https://www.patreon.com/openinverter support on patreon] follow on [https://www.youtube.com/user/EngineersFear youtube] and [https://github.com/jsphuebner/ github]&lt;br /&gt;
*Damien Maguire, developer and most active vehicle converter - [https://www.patreon.com/evbmw support on patreon] follow on [https://www.youtube.com/@Evbmw youtube] and [https://github.com/damienmaguire/ github]&lt;br /&gt;
*Uwe Hennig, master of CCS - [https://www.patreon.com/uhi22 support on patreon] follow on [https://github.com/uhi22/ github]&lt;br /&gt;
*celeron55, developer - support via [https://www.paypal.com/paypalme/celeron55 paypal] follow on [https://www.youtube.com/user/celeron55 youtube] and [https://github.com/celeron55 github]&lt;br /&gt;
*Dave Fiddes, active member and developer - Follow on [https://github.com/davefiddes/ github]&lt;br /&gt;
*Arber Kramar, long term member and developer - [https://leafdriveblog.wordpress.com/ Follow on blogspot]&lt;br /&gt;
*Janosch Oppermann, active member, developer and producer - follow on [https://www.youtube.com/@foxev-content youtube]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5143</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5143"/>
		<updated>2024-12-02T13:21:39Z</updated>

		<summary type="html">&lt;p&gt;Johu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Did you know you can convert your existing fossil powered vehicle to use electricity instead? And that you can even produce that electricity yourself?&lt;br /&gt;
&lt;br /&gt;
Open Inverter is a [[Main Page#Who we are|community of people]] and projects focused on open source solutions for EV conversions.  Founded in 2008 by Johannes Huebner as an open source inverter control firmware, the project has since expended to include the reuse of components from production EVs and hybrids, including inverters, motors, batteries, on-board chargers, and DC-DC converters, as well as the open source implementation of other necessary systems for EV conversions such as DC Fast Charging controllers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:Electric-car.jpg|none|frame|Click on the captions to learn more about the respective system! Image source: https://www.newkidscar.com/&lt;br /&gt;
&lt;br /&gt;
poly 248 166 542 166 542 217 248 217 248 166 [[#Reusing motors and inverters - aka drive trains]]&lt;br /&gt;
poly 1041 455 1336 455 1336 506 1041 506 1041 455 [[#Reusing Batteries]]&lt;br /&gt;
poly 147 344 428 344 428 391 147 391 147 344 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 844 624 1118 624 1118 673 844 673 844 624 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 935 539 1200 539 1200 586 935 586 935 539 [[#Rapid Charging]]&lt;br /&gt;
poly 134 435 394 435 394 483 134 483 134 435 [[#Auxiliary Parts]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While the project, as the name suggests, started out as an open source implementation of a traction motor inverter it now comprises many other topics as well:&lt;br /&gt;
&lt;br /&gt;
*Reusing complete drive trains&lt;br /&gt;
* Reusing batteries including the management electronics (BMS)&lt;br /&gt;
*Reusing on board chargers to charge your vehicle from AC outlets&lt;br /&gt;
*Reusing DC/DC converters to run your 12V system from the high voltage traction battery&lt;br /&gt;
*Reusing A/C compressors and cabin heaters&lt;br /&gt;
*Fast charging your vehicle on public rapid charging infrastructure&lt;br /&gt;
*Tying all components together with a vehicle control unit (VCU)&lt;br /&gt;
* Building small scale PV systems including storage&lt;br /&gt;
More on these topics in the detailed sections below. Happy reading!&lt;br /&gt;
&lt;br /&gt;
==Reusing motors and inverters - aka drive trains==&lt;br /&gt;
[[File:Tesla_LDU.jpg|thumb]]&lt;br /&gt;
The drive train is one of the defining building blocks of your conversion as it defines how well your vehicle picks up speed. Over the years we have reverse engineered many popular drive trains from [[:Category:OEM|production cars]] such as Teslas. As a bonus using such complete drive trains facilitates getting the vehicle [[Legalities|road legal]] in many countries. By now you have a choice of low to medium power drive trains that only cost a few 100€ up to high performance ones at many 1000€. &lt;br /&gt;
&lt;br /&gt;
We have established two methods of running these [[:Category:OEM|OEM]] systems: reverse-engineering their communication protocol and making the drive train &amp;quot;think&amp;quot; it is still in its original vehicle OR swapping out the control electronics for our own open source motor controller. The latter method gives your more control and power but also a steeper learning curve. &lt;br /&gt;
&lt;br /&gt;
Nearly all drive trains are targeted at 400V battery voltage. Run at a lower voltage they will produce proportionally less power. &lt;br /&gt;
Here is what we have done so far and how we&#039;ve done it. Some is still work in progress (WIP) &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Drive Train&lt;br /&gt;
!Control Method&lt;br /&gt;
! Approximate Power Output&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model S/X Large Drive Unit (&amp;quot;LDU&amp;quot;)|Large Drive Unit]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|335-475 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model S/X Small Drive Unit (&amp;quot;SDU&amp;quot;)|Small Drive Unit]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|180 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Rear Drive Unit|Model 3/Y Rear Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|239 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Front Drive Unit|Model 3/Y Front Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|121 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Nissan]]&lt;br /&gt;
|[[Nissan Leaf Motors|Gen1]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]&lt;br /&gt;
|80 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| [[Nissan Leaf Gen2 Board|Gen2]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap&lt;br /&gt;
|80 kW / 130 kW (board swap)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Nissan Leaf Gen 3 (2018 up EM57)|Gen3]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap [WIP]&lt;br /&gt;
|110 - 160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Toyota|Toyota]]&lt;br /&gt;
|[[Lexus GS450h Drivetrain|Lexus GS 450h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|250 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus GS300h CVT|Lexus GS 300h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|105 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter|Prius Gen2]]&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter Controller|External Control Board]]&lt;br /&gt;
|40-70 kW &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen3 Board|Prius Gen3]]&lt;br /&gt;
|Board Swap/[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|100 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus MGR Rear Transaxle Motor|MGR]]&lt;br /&gt;
|Prius Gen2 or Gen3 inverter&lt;br /&gt;
|18-50 kW (various models)&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander Rear Drive Unit|Rear Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Mitsubishi Outlander Front Transaxle|Front Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:BMW|BMW]]&lt;br /&gt;
|[[BMW i3 Inverter|i3]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|125-135 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Chevrolet|Chevy/Opel]]&lt;br /&gt;
|[[Chevrolet Volt Inverter|Volt/Ampera]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Ford|Ford]]&lt;br /&gt;
|[[Ford Ranger TIM Controller|Ranger]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| Renault&lt;br /&gt;
|[https://openinverter.org/forum/viewtopic.php?t=4749 Zoe]&lt;br /&gt;
|Board Swap [WIP]&lt;br /&gt;
|Unknown &lt;br /&gt;
|-&lt;br /&gt;
|MG&lt;br /&gt;
|[https://github.com/damienmaguire/MG-EV-Inverter ZS EV]&lt;br /&gt;
|Board Swap [WIP] &lt;br /&gt;
|Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reusing Batteries==&lt;br /&gt;
[[File:A09A7634.jpg|thumb]]&lt;br /&gt;
The most expensive and probably equally defining component is the [[Batteries|battery]] that stores all the energy for running your car. Batteries are usually assembled from a number of modules that in turn contain a number of cells. Usually batteries are reused on a module level. In rare cases the battery can be [https://youtu.be/_7l0Y1GsNJ4 reused as is in its original battery] box.&lt;br /&gt;
&lt;br /&gt;
While there are also various [[16-cell BMS|open source implementations]] of [https://www.youtube.com/watch?v=_QsMoCrSTYc battery management systems] (BMS) we generally recommend using as much of the OEM BMS as possible. Sometimes the [[:Category:OEM|OEM]] BMS comes as an all-in-one solution that measures cell data and spits out state of charge and power limit information. In other cases the BMS is split into module units that measure the physical data (voltages, temperatures) and a central unit that calculates the high level information.&lt;br /&gt;
&lt;br /&gt;
Sometimes we managed to reuse the complete system which is generally the safest as you can rely on the manufacturers well tested charge and discharge limits as well as reliable state of charge information (i.e. how much energy is left in the battery at any given time). In other cases we only managed to reuse the module units. This adds the convenience of having a well tested piece of hardware with the matching connector but required us to calculate all high level battery data ourselves. This also incudes [https://www.youtube.com/watch?v=RGYLPOlT45A cell balancing].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!BMS usability&lt;br /&gt;
!Energy Content&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model 3 Battery|Model 3]]&lt;br /&gt;
|Module and high level [WIP]&lt;br /&gt;
|60-80 kWh ?&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Batteries#OEM modules|Model S]]&lt;br /&gt;
|Unknown&lt;br /&gt;
|85-100 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Nissan|Nissan]]&lt;br /&gt;
|[[Nissan Leaf BMS|Leaf/NV200]]&lt;br /&gt;
|High Level&lt;br /&gt;
|24-40 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:VAG|VW]]&lt;br /&gt;
|[[VW Hybrid Battery Packs|Passat/Golf]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|8.7-36 kWh&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[MEB Batteries|MEB]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|52-77 kwh &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Onboard chargers and DC/DC converters ==&lt;br /&gt;
[[File:PXL_20241020_024043714.jpg|thumb|Onboard charger]]&lt;br /&gt;
The DC/DC converter takes energy from your HV traction battery and sends it to the cars 12V systems and 12V battery. It is basically a 1:1 replacement of the former alternator. An onboard charger (OBC) takes AC current from the grid and converts it into DC current to charge the battery. These two devices are often combined in one common enclosure hence why we treat them as one.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!OBC&lt;br /&gt;
!DC/DC&lt;br /&gt;
!OBC power&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN2 Charger|Model S and X]] (Gen2)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN3 Charger|Model S and X]] (Gen3)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|22 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]] &lt;br /&gt;
|[[Tesla Model S/X DC/DC Converter|Model S and X]] (DC/DC)&lt;br /&gt;
|no&lt;br /&gt;
|yes &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model 3 Charger/DCDC (&amp;quot;PCS&amp;quot;)|Model 3]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt Charger|Volt]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt 2 Charger|Volt 2]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Dilong/Cascadia Chargers|Dilong]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Eltek chargers|Eltek]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander DCDC OBC|Outlander / iMiev]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes &lt;br /&gt;
|3.3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:MG|MG]]&lt;br /&gt;
|[[MG ZS Charger|ZS / MG4 / MG5]] &lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 - 11 kW&lt;br /&gt;
|}&lt;br /&gt;
There are more chargers under investigation, only the proven working ones are listed here. See our [[:Category:Charger|charger listing]] for more.&lt;br /&gt;
&lt;br /&gt;
== Rapid Charging==&lt;br /&gt;
[[File:Ccs-socket.jpg|thumb|CCS2 rapid charging socket]]&lt;br /&gt;
The above mentioned onboard chargers always have limited power as they space requirements and cost rise with charger power. To overcome this limitation modern EVs offer external access to their HV battery via a so called [[:Category:Rapid Charging|rapid charging]] port. This allows to charge the battery with a much more powerful external charger. As a bonus it also allows [[Bidirectional Charging|taking energy from the HV battery]] and powering appliances with it.&lt;br /&gt;
&lt;br /&gt;
There are 2 rapid charging protocols and 5 connector flavours world wide&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Communication&lt;br /&gt;
!Prevalent countries&lt;br /&gt;
!Open Source solutions&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:ChaDeMo|CHAdeMO]]&lt;br /&gt;
|CAN&lt;br /&gt;
|Japan, world wide&lt;br /&gt;
|[[Chademo with ESP32-Chademo|ESP32]], [[Chademo With Arduino Due|Arduino,]] [[Chademo with Zombieverter|ZombieVerter]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo1&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo2&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|Europe&lt;br /&gt;
|[[Foccci]], [[pyPLC]], [[BMW I3 Fast Charging LIM Module|I3LIM]]&lt;br /&gt;
|-&lt;br /&gt;
|NACS&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|GB/T&lt;br /&gt;
|CAN&lt;br /&gt;
|China&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Auxiliary Parts ==&lt;br /&gt;
We have now treated all the major building blocks of an EV, but there are many other components to complete the vehicle such as heaters, gear shifters and so on. We will summarize them here.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:HVJB|HV Junction Box]]&lt;br /&gt;
* [[:Category:HVAC|HVAC]] (Heating, Air conditioning)&lt;br /&gt;
* [[Vacuum Pumps]]&lt;br /&gt;
* [[:Category:Power Steering|Power Steering]]&lt;br /&gt;
* [[VCU Comparison|VCU]] (Vehicle Control Unit)&lt;br /&gt;
* [[Shift Controllers]]&lt;br /&gt;
&lt;br /&gt;
== Additional Reading ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Legalities|Legalities]] - Getting a vehicle road legal in your country&lt;br /&gt;
* [[Glossary of Terms]]&lt;br /&gt;
* [[Common Inverter FAQ]] - questions common to all hardware variants&lt;br /&gt;
* [[Tesla Inverter FAQ]] - questions regarding Tesla Large Drive Units and Small Drive Units&lt;br /&gt;
* [[Electronics Basics]] - general advice for troubleshooting electronic circuits&lt;br /&gt;
* [[I want a cheap ev conversion|cheap EV conversions]] - this entry point for the penny pinchers&lt;br /&gt;
* [[I want a powerful ev conversion|performant EV conversions]]  - where torque trumps money&lt;br /&gt;
* [[Mechanical design database]] - here you will find measurements, models, files, etc for a variety of components such as adapter plates and drive shaft flanges&lt;br /&gt;
* [[:Category:OpenInverter|Documentation of all OpenInverter Projects]]&lt;br /&gt;
* [[:Category:Tutorials|Tutorials]]&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
There is not static team or openinverter company but here we list the most active community members with links to donation or information sites:&lt;br /&gt;
&lt;br /&gt;
*Johannes Hübner, openinverter founder and developer - [https://www.patreon.com/openinverter support on patreon] follow on [https://www.youtube.com/user/EngineersFear youtube] and [https://github.com/jsphuebner/ github]&lt;br /&gt;
*Damien Maguire, developer and most active vehicle converter - [https://www.patreon.com/evbmw support on patreon] follow on [https://www.youtube.com/@Evbmw youtube] and [https://github.com/damienmaguire/ github]&lt;br /&gt;
*Uwe Hennig, master of CCS - [https://www.patreon.com/uhi22 support on patreon] follow on [https://github.com/uhi22/ github]&lt;br /&gt;
*celeron55, developer - support via [https://www.paypal.com/paypalme/celeron55 paypal] follow on [https://www.youtube.com/user/celeron55 youtube] and [https://github.com/celeron55 github]&lt;br /&gt;
*Dave Fiddes, active member and developer - Follow on [https://github.com/davefiddes/ github]&lt;br /&gt;
*Arber Kramar, long term member and developer - [https://leafdriveblog.wordpress.com/ Follow on blogspot]&lt;br /&gt;
*Janosch Oppermann, active member, developer and producer - follow on [https://www.youtube.com/@foxev-content youtube]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5142</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5142"/>
		<updated>2024-12-02T13:11:55Z</updated>

		<summary type="html">&lt;p&gt;Johu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Did you know you can convert your existing fossil powered vehicle to use electricity instead? And that you can even produce that electricity yourself?&lt;br /&gt;
&lt;br /&gt;
Open Inverter is a community of people and projects focused on open source solutions for EV conversions.  Founded in 2008 by Johannes Huebner as an open source inverter control firmware, the project has since expended to include the reuse of components from production EVs and hybrids, including inverters, motors, batteries, on-board chargers, and DC-DC converters, as well as the open source implementation of other necessary systems for EV conversions such as DC Fast Charging controllers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:Electric-car.jpg|none|frame|Click on the captions to learn more about the respective system! Image source: https://www.newkidscar.com/&lt;br /&gt;
&lt;br /&gt;
poly 248 166 542 166 542 217 248 217 248 166 [[#Reusing motors and inverters - aka drive trains]]&lt;br /&gt;
poly 1041 455 1336 455 1336 506 1041 506 1041 455 [[#Reusing Batteries]]&lt;br /&gt;
poly 147 344 428 344 428 391 147 391 147 344 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 844 624 1118 624 1118 673 844 673 844 624 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 935 539 1200 539 1200 586 935 586 935 539 [[#Rapid Charging]]&lt;br /&gt;
poly 134 435 394 435 394 483 134 483 134 435 [[#Auxiliary Parts]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While the project, as the name suggests, started out as an open source implementation of a traction motor inverter it now comprises many other topics as well:&lt;br /&gt;
&lt;br /&gt;
*Reusing complete drive trains&lt;br /&gt;
* Reusing batteries including the management electronics (BMS)&lt;br /&gt;
*Reusing on board chargers to charge your vehicle from AC outlets&lt;br /&gt;
*Reusing DC/DC converters to run your 12V system from the high voltage traction battery&lt;br /&gt;
*Reusing A/C compressors and cabin heaters&lt;br /&gt;
*Fast charging your vehicle on public rapid charging infrastructure&lt;br /&gt;
*Tying all components together with a vehicle control unit (VCU)&lt;br /&gt;
* Building small scale PV systems including storage&lt;br /&gt;
More on these topics in the detailed sections below. Happy reading!&lt;br /&gt;
&lt;br /&gt;
==Reusing motors and inverters - aka drive trains==&lt;br /&gt;
[[File:Tesla_LDU.jpg|thumb]]&lt;br /&gt;
The drive train is one of the defining building blocks of your conversion as it defines how well your vehicle picks up speed. Over the years we have reverse engineered many popular drive trains from [[:Category:OEM|production cars]] such as Teslas. As a bonus using such complete drive trains facilitates getting the vehicle [[Legalities|road legal]] in many countries. By now you have a choice of low to medium power drive trains that only cost a few 100€ up to high performance ones at many 1000€. &lt;br /&gt;
&lt;br /&gt;
We have established two methods of running these [[:Category:OEM|OEM]] systems: reverse-engineering their communication protocol and making the drive train &amp;quot;think&amp;quot; it is still in its original vehicle OR swapping out the control electronics for our own open source motor controller. The latter method gives your more control and power but also a steeper learning curve. &lt;br /&gt;
&lt;br /&gt;
Nearly all drive trains are targeted at 400V battery voltage. Run at a lower voltage they will produce proportionally less power. &lt;br /&gt;
Here is what we have done so far and how we&#039;ve done it. Some is still work in progress (WIP) &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Drive Train&lt;br /&gt;
!Control Method&lt;br /&gt;
! Approximate Power Output&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model S/X Large Drive Unit (&amp;quot;LDU&amp;quot;)|Large Drive Unit]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|335-475 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model S/X Small Drive Unit (&amp;quot;SDU&amp;quot;)|Small Drive Unit]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|180 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Rear Drive Unit|Model 3/Y Rear Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|239 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Front Drive Unit|Model 3/Y Front Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|121 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Nissan]]&lt;br /&gt;
|[[Nissan Leaf Motors|Gen1]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]&lt;br /&gt;
|80 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| [[Nissan Leaf Gen2 Board|Gen2]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap&lt;br /&gt;
|80 kW / 130 kW (board swap)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Nissan Leaf Gen 3 (2018 up EM57)|Gen3]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap [WIP]&lt;br /&gt;
|110 - 160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Toyota|Toyota]]&lt;br /&gt;
|[[Lexus GS450h Drivetrain|Lexus GS 450h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|250 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus GS300h CVT|Lexus GS 300h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|105 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter|Prius Gen2]]&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter Controller|External Control Board]]&lt;br /&gt;
|40-70 kW &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen3 Board|Prius Gen3]]&lt;br /&gt;
|Board Swap/[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|100 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus MGR Rear Transaxle Motor|MGR]]&lt;br /&gt;
|Prius Gen2 or Gen3 inverter&lt;br /&gt;
|18-50 kW (various models)&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander Rear Drive Unit|Rear Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Mitsubishi Outlander Front Transaxle|Front Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:BMW|BMW]]&lt;br /&gt;
|[[BMW i3 Inverter|i3]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|125-135 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Chevrolet|Chevy/Opel]]&lt;br /&gt;
|[[Chevrolet Volt Inverter|Volt/Ampera]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Ford|Ford]]&lt;br /&gt;
|[[Ford Ranger TIM Controller|Ranger]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| Renault&lt;br /&gt;
|[https://openinverter.org/forum/viewtopic.php?t=4749 Zoe]&lt;br /&gt;
|Board Swap [WIP]&lt;br /&gt;
|Unknown &lt;br /&gt;
|-&lt;br /&gt;
|MG&lt;br /&gt;
|[https://github.com/damienmaguire/MG-EV-Inverter ZS EV]&lt;br /&gt;
|Board Swap [WIP] &lt;br /&gt;
|Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reusing Batteries==&lt;br /&gt;
[[File:A09A7634.jpg|thumb]]&lt;br /&gt;
The most expensive and probably equally defining component is the [[Batteries|battery]] that stores all the energy for running your car. Batteries are usually assembled from a number of modules that in turn contain a number of cells. Usually batteries are reused on a module level. In rare cases the battery can be [https://youtu.be/_7l0Y1GsNJ4 reused as is in its original battery] box.&lt;br /&gt;
&lt;br /&gt;
While there are also various [[16-cell BMS|open source implementations]] of [https://www.youtube.com/watch?v=_QsMoCrSTYc battery management systems] (BMS) we generally recommend using as much of the OEM BMS as possible. Sometimes the [[:Category:OEM|OEM]] BMS comes as an all-in-one solution that measures cell data and spits out state of charge and power limit information. In other cases the BMS is split into module units that measure the physical data (voltages, temperatures) and a central unit that calculates the high level information.&lt;br /&gt;
&lt;br /&gt;
Sometimes we managed to reuse the complete system which is generally the safest as you can rely on the manufacturers well tested charge and discharge limits as well as reliable state of charge information (i.e. how much energy is left in the battery at any given time). In other cases we only managed to reuse the module units. This adds the convenience of having a well tested piece of hardware with the matching connector but required us to calculate all high level battery data ourselves. This also incudes [https://www.youtube.com/watch?v=RGYLPOlT45A cell balancing].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!BMS usability&lt;br /&gt;
!Energy Content&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model 3 Battery|Model 3]]&lt;br /&gt;
|Module and high level [WIP]&lt;br /&gt;
|60-80 kWh ?&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Batteries#OEM modules|Model S]]&lt;br /&gt;
|Unknown&lt;br /&gt;
|85-100 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Nissan|Nissan]]&lt;br /&gt;
|[[Nissan Leaf BMS|Leaf/NV200]]&lt;br /&gt;
|High Level&lt;br /&gt;
|24-40 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:VAG|VW]]&lt;br /&gt;
|[[VW Hybrid Battery Packs|Passat/Golf]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|8.7-36 kWh&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[MEB Batteries|MEB]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|52-77 kwh &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Onboard chargers and DC/DC converters ==&lt;br /&gt;
[[File:PXL_20241020_024043714.jpg|thumb|Onboard charger]]&lt;br /&gt;
The DC/DC converter takes energy from your HV traction battery and sends it to the cars 12V systems and 12V battery. It is basically a 1:1 replacement of the former alternator. An onboard charger (OBC) takes AC current from the grid and converts it into DC current to charge the battery. These two devices are often combined in one common enclosure hence why we treat them as one.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!OBC&lt;br /&gt;
!DC/DC&lt;br /&gt;
!OBC power&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN2 Charger|Model S and X]] (Gen2)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN3 Charger|Model S and X]] (Gen3)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|22 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]] &lt;br /&gt;
|[[Tesla Model S/X DC/DC Converter|Model S and X]] (DC/DC)&lt;br /&gt;
|no&lt;br /&gt;
|yes &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model 3 Charger/DCDC (&amp;quot;PCS&amp;quot;)|Model 3]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt Charger|Volt]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt 2 Charger|Volt 2]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Dilong/Cascadia Chargers|Dilong]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Eltek chargers|Eltek]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander DCDC OBC|Outlander / iMiev]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes &lt;br /&gt;
|3.3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:MG|MG]]&lt;br /&gt;
|[[MG ZS Charger|ZS / MG4 / MG5]] &lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 - 11 kW&lt;br /&gt;
|}&lt;br /&gt;
There are more chargers under investigation, only the proven working ones are listed here. See our [[:Category:Charger|charger listing]] for more.&lt;br /&gt;
&lt;br /&gt;
== Rapid Charging==&lt;br /&gt;
[[File:Ccs-socket.jpg|thumb|CCS2 rapid charging socket]]&lt;br /&gt;
The above mentioned onboard chargers always have limited power as they space requirements and cost rise with charger power. To overcome this limitation modern EVs offer external access to their HV battery via a so called [[:Category:Rapid Charging|rapid charging]] port. This allows to charge the battery with a much more powerful external charger. As a bonus it also allows [[Bidirectional Charging|taking energy from the HV battery]] and powering appliances with it.&lt;br /&gt;
&lt;br /&gt;
There are 2 rapid charging protocols and 5 connector flavours world wide&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Communication&lt;br /&gt;
!Prevalent countries&lt;br /&gt;
!Open Source solutions&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:ChaDeMo|CHAdeMO]]&lt;br /&gt;
|CAN&lt;br /&gt;
|Japan, world wide&lt;br /&gt;
|[[Chademo with ESP32-Chademo|ESP32]], [[Chademo With Arduino Due|Arduino,]] [[Chademo with Zombieverter|ZombieVerter]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo1&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo2&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|Europe&lt;br /&gt;
|[[Foccci]], [[pyPLC]], [[BMW I3 Fast Charging LIM Module|I3LIM]]&lt;br /&gt;
|-&lt;br /&gt;
|NACS&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|GB/T&lt;br /&gt;
|CAN&lt;br /&gt;
|China&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Auxiliary Parts ==&lt;br /&gt;
We have now treated all the major building blocks of an EV, but there are many other components to complete the vehicle such as heaters, gear shifters and so on. We will summarize them here.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:HVJB|HV Junction Box]]&lt;br /&gt;
* [[:Category:HVAC|HVAC]] (Heating, Air conditioning)&lt;br /&gt;
* [[Vacuum Pumps]]&lt;br /&gt;
* [[:Category:Power Steering|Power Steering]]&lt;br /&gt;
* [[VCU Comparison|VCU]] (Vehicle Control Unit)&lt;br /&gt;
* [[Shift Controllers]]&lt;br /&gt;
&lt;br /&gt;
== Additional Reading ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Legalities|Legalities]] - Getting a vehicle road legal in your country&lt;br /&gt;
* [[Glossary of Terms]]&lt;br /&gt;
* [[Common Inverter FAQ]] - questions common to all hardware variants&lt;br /&gt;
* [[Tesla Inverter FAQ]] - questions regarding Tesla Large Drive Units and Small Drive Units&lt;br /&gt;
* [[Electronics Basics]] - general advice for troubleshooting electronic circuits&lt;br /&gt;
* [[I want a cheap ev conversion|cheap EV conversions]] - this entry point for the penny pinchers&lt;br /&gt;
* [[I want a powerful ev conversion|performant EV conversions]]  - where torque trumps money&lt;br /&gt;
* [[Mechanical design database]] - here you will find measurements, models, files, etc for a variety of components such as adapter plates and drive shaft flanges&lt;br /&gt;
* [[:Category:OpenInverter|Documentation of all OpenInverter Projects]]&lt;br /&gt;
* [[:Category:Tutorials|Tutorials]]&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
There is not static team or openinverter company but here we list the most active community members with links to donation or information sites:&lt;br /&gt;
&lt;br /&gt;
*Johannes Hübner, openinverter founder and developer - [https://www.patreon.com/openinverter support on patreon] follow on [https://www.youtube.com/user/EngineersFear youtube] and [https://github.com/jsphuebner/ github]&lt;br /&gt;
*Damien Maguire, developer and most active vehicle converter - [https://www.patreon.com/evbmw support on patreon] follow on [https://www.youtube.com/@Evbmw youtube] and [https://github.com/damienmaguire/ github]&lt;br /&gt;
*Uwe Hennig, master of CCS - [https://www.patreon.com/uhi22 support on patreon] follow on [https://github.com/uhi22/ github]&lt;br /&gt;
*celeron55, developer - support via [https://www.paypal.com/paypalme/celeron55 paypal] follow on [https://www.youtube.com/user/celeron55 youtube] and [https://github.com/celeron55 github]&lt;br /&gt;
*Dave Fiddes, active member and developer - Follow on [https://github.com/davefiddes/ github]&lt;br /&gt;
*Arber Kramar, long term member and developer - [https://leafdriveblog.wordpress.com/ Follow on blogspot]&lt;br /&gt;
*Janosch Oppermann, active member, developer and producer - follow on [https://www.youtube.com/@foxev-content youtube]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5141</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Main_Page&amp;diff=5141"/>
		<updated>2024-12-02T13:08:09Z</updated>

		<summary type="html">&lt;p&gt;Johu: Johu moved page Main Page New to Main Page without leaving a redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Did you know you can convert your existing fossil powered vehicle to use electricity instead? And that you can even produce that electricity yourself?&lt;br /&gt;
&lt;br /&gt;
Open Inverter is a community of people and projects focused on open source solutions for EV conversions.  Founded in 2008 by Johannes Huebner as an open source inverter control firmware, the project has since expended to include the reuse of components from production EVs and hybrids, including inverters, motors, batteries, on-board chargers, and DC-DC converters, as well as the open source implementation of other necessary systems for EV conversions such as DC Fast Charging controllers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:Electric-car.jpg|none|frame|Click on the captions to learn more about the respective system! Image source: https://www.newkidscar.com/&lt;br /&gt;
&lt;br /&gt;
poly 248 166 542 166 542 217 248 217 248 166 [[#Reusing motors and inverters - aka drive trains]]&lt;br /&gt;
poly 1041 455 1336 455 1336 506 1041 506 1041 455 [[#Reusing Batteries]]&lt;br /&gt;
poly 147 344 428 344 428 391 147 391 147 344 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 844 624 1118 624 1118 673 844 673 844 624 [[#Onboard chargers and DC/DC converters]]&lt;br /&gt;
poly 935 539 1200 539 1200 586 935 586 935 539 [[#Rapid Charging]]&lt;br /&gt;
poly 134 435 394 435 394 483 134 483 134 435 [[#Auxiliary Parts]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While the project, as the name suggests, started out as an open source implementation of a traction motor inverter it now comprises many other topics as well:&lt;br /&gt;
&lt;br /&gt;
*Reusing complete drive trains&lt;br /&gt;
* Reusing batteries including the management electronics (BMS)&lt;br /&gt;
*Reusing on board chargers to charge your vehicle from AC outlets&lt;br /&gt;
*Reusing DC/DC converters to run your 12V system from the high voltage traction battery&lt;br /&gt;
*Reusing A/C compressors and cabin heaters&lt;br /&gt;
*Fast charging your vehicle on public rapid charging infrastructure&lt;br /&gt;
*Tying all components together with a vehicle control unit (VCU)&lt;br /&gt;
* Building small scale PV systems including storage&lt;br /&gt;
More on these topics in the detailed sections below. Happy reading!&lt;br /&gt;
&lt;br /&gt;
==Reusing motors and inverters - aka drive trains==&lt;br /&gt;
[[File:Tesla_LDU.jpg|thumb]]&lt;br /&gt;
The drive train is one of the defining building blocks of your conversion as it defines how well your vehicle picks up speed. Over the years we have reverse engineered many popular drive trains from [[:Category:OEM|production cars]] such as Teslas. As a bonus using such complete drive trains facilitates getting the vehicle [[Legalities|road legal]] in many countries. By now you have a choice of low to medium power drive trains that only cost a few 100€ up to high performance ones at many 1000€. &lt;br /&gt;
&lt;br /&gt;
We have established two methods of running these [[:Category:OEM|OEM]] systems: reverse-engineering their communication protocol and making the drive train &amp;quot;think&amp;quot; it is still in its original vehicle OR swapping out the control electronics for our own open source motor controller. The latter method gives your more control and power but also a steeper learning curve. &lt;br /&gt;
&lt;br /&gt;
Nearly all drive trains are targeted at 400V battery voltage. Run at a lower voltage they will produce proportionally less power. &lt;br /&gt;
Here is what we have done so far and how we&#039;ve done it. Some is still work in progress (WIP) &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Drive Train&lt;br /&gt;
!Control Method&lt;br /&gt;
! Approximate Power Output&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model S/X Large Drive Unit (&amp;quot;LDU&amp;quot;)|Large Drive Unit]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|335-475 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model S/X Small Drive Unit (&amp;quot;SDU&amp;quot;)|Small Drive Unit]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|180 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Rear Drive Unit|Model 3/Y Rear Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|239 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Tesla Model 3 Front Drive Unit|Model 3/Y Front Drive Unit]]&lt;br /&gt;
|Board Swap/Board reprogramming [WIP]&lt;br /&gt;
|121 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Nissan]]&lt;br /&gt;
|[[Nissan Leaf Motors|Gen1]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]&lt;br /&gt;
|80 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| [[Nissan Leaf Gen2 Board|Gen2]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap&lt;br /&gt;
|80 kW / 130 kW (board swap)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Nissan Leaf Gen 3 (2018 up EM57)|Gen3]]&lt;br /&gt;
|[[ZombieVerter VCU|CAN spoofing]]/Board Swap [WIP]&lt;br /&gt;
|110 - 160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Toyota|Toyota]]&lt;br /&gt;
|[[Lexus GS450h Drivetrain|Lexus GS 450h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|250 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus GS300h CVT|Lexus GS 300h]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|105 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter|Prius Gen2]]&lt;br /&gt;
|[[Toyota Prius Gen2 Inverter Controller|External Control Board]]&lt;br /&gt;
|40-70 kW &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota Prius Gen3 Board|Prius Gen3]]&lt;br /&gt;
|Board Swap/[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|100 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Toyota/Lexus MGR Rear Transaxle Motor|MGR]]&lt;br /&gt;
|Prius Gen2 or Gen3 inverter&lt;br /&gt;
|18-50 kW (various models)&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander Rear Drive Unit|Rear Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Mitsubishi Outlander Front Transaxle|Front Drive Unit]]&lt;br /&gt;
|[[ZombieVerter VCU|Communication spoofing]]&lt;br /&gt;
|60-70 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:BMW|BMW]]&lt;br /&gt;
|[[BMW i3 Inverter|i3]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|125-135 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Chevrolet|Chevy/Opel]]&lt;br /&gt;
|[[Chevrolet Volt Inverter|Volt/Ampera]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
|160 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Ford|Ford]]&lt;br /&gt;
|[[Ford Ranger TIM Controller|Ranger]]&lt;br /&gt;
|Board Swap&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| Renault&lt;br /&gt;
|[https://openinverter.org/forum/viewtopic.php?t=4749 Zoe]&lt;br /&gt;
|Board Swap [WIP]&lt;br /&gt;
|Unknown &lt;br /&gt;
|-&lt;br /&gt;
|MG&lt;br /&gt;
|[https://github.com/damienmaguire/MG-EV-Inverter ZS EV]&lt;br /&gt;
|Board Swap [WIP] &lt;br /&gt;
|Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reusing Batteries==&lt;br /&gt;
[[File:A09A7634.jpg|thumb]]&lt;br /&gt;
The most expensive and probably equally defining component is the [[Batteries|battery]] that stores all the energy for running your car. Batteries are usually assembled from a number of modules that in turn contain a number of cells. Usually batteries are reused on a module level. In rare cases the battery can be [https://youtu.be/_7l0Y1GsNJ4 reused as is in its original battery] box.&lt;br /&gt;
&lt;br /&gt;
While there are also various [[16-cell BMS|open source implementations]] of [https://www.youtube.com/watch?v=_QsMoCrSTYc battery management systems] (BMS) we generally recommend using as much of the OEM BMS as possible. Sometimes the [[:Category:OEM|OEM]] BMS comes as an all-in-one solution that measures cell data and spits out state of charge and power limit information. In other cases the BMS is split into module units that measure the physical data (voltages, temperatures) and a central unit that calculates the high level information.&lt;br /&gt;
&lt;br /&gt;
Sometimes we managed to reuse the complete system which is generally the safest as you can rely on the manufacturers well tested charge and discharge limits as well as reliable state of charge information (i.e. how much energy is left in the battery at any given time). In other cases we only managed to reuse the module units. This adds the convenience of having a well tested piece of hardware with the matching connector but required us to calculate all high level battery data ourselves. This also incudes [https://www.youtube.com/watch?v=RGYLPOlT45A cell balancing].&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!BMS usability&lt;br /&gt;
!Energy Content&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
|[[Tesla Model 3 Battery|Model 3]]&lt;br /&gt;
|Module and high level [WIP]&lt;br /&gt;
|60-80 kWh ?&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[Batteries#OEM modules|Model S]]&lt;br /&gt;
|Unknown&lt;br /&gt;
|85-100 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Nissan|Nissan]]&lt;br /&gt;
|[[Nissan Leaf BMS|Leaf/NV200]]&lt;br /&gt;
|High Level&lt;br /&gt;
|24-40 kWh&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:VAG|VW]]&lt;br /&gt;
|[[VW Hybrid Battery Packs|Passat/Golf]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|8.7-36 kWh&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[[MEB Batteries|MEB]]&lt;br /&gt;
|Module Level&lt;br /&gt;
|52-77 kwh &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Onboard chargers and DC/DC converters ==&lt;br /&gt;
[[File:PXL_20241020_024043714.jpg|thumb|Onboard charger]]&lt;br /&gt;
The DC/DC converter takes energy from your HV traction battery and sends it to the cars 12V systems and 12V battery. It is basically a 1:1 replacement of the former alternator. An onboard charger (OBC) takes AC current from the grid and converts it into DC current to charge the battery. These two devices are often combined in one common enclosure hence why we treat them as one.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Manufacturer&lt;br /&gt;
!Model&lt;br /&gt;
!OBC&lt;br /&gt;
!DC/DC&lt;br /&gt;
!OBC power&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN2 Charger|Model S and X]] (Gen2)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model S/X GEN3 Charger|Model S and X]] (Gen3)&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|22 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Tesla|Tesla]] &lt;br /&gt;
|[[Tesla Model S/X DC/DC Converter|Model S and X]] (DC/DC)&lt;br /&gt;
|no&lt;br /&gt;
|yes &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[:Category:Tesla|Tesla]]&lt;br /&gt;
| [[Tesla Model 3 Charger/DCDC (&amp;quot;PCS&amp;quot;)|Model 3]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|11 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt Charger|Volt]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
|[[Chevrolet Volt 2 Charger|Volt 2]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|3.7 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Dilong/Cascadia Chargers|Dilong]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[Eltek chargers|Eltek]]&lt;br /&gt;
|&lt;br /&gt;
|yes&lt;br /&gt;
|no&lt;br /&gt;
|3 kW&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
|[[Mitsubishi Outlander DCDC OBC|Outlander / iMiev]]&lt;br /&gt;
|yes&lt;br /&gt;
|yes &lt;br /&gt;
|3.3 kW&lt;br /&gt;
|-&lt;br /&gt;
|MG&lt;br /&gt;
|[[MG ZS Charger|ZS / MG4 / MG5]] &lt;br /&gt;
|yes&lt;br /&gt;
|yes&lt;br /&gt;
|6.6 - 11 kW&lt;br /&gt;
|}&lt;br /&gt;
There are more chargers under investigation, only the proven working ones are listed here. See our [[:Category:Charger|charger listing]] for more.&lt;br /&gt;
&lt;br /&gt;
== Rapid Charging==&lt;br /&gt;
[[File:Ccs-socket.jpg|thumb|CCS2 rapid charging socket]]&lt;br /&gt;
The above mentioned onboard chargers always have limited power as they space requirements and cost rise with charger power. To overcome this limitation modern EVs offer external access to their HV battery via a so called [[:Category:Rapid Charging|rapid charging]] port. This allows to charge the battery with a much more powerful external charger. As a bonus it also allows [[Bidirectional Charging|taking energy from the HV battery]] and powering appliances with it.&lt;br /&gt;
&lt;br /&gt;
There are 2 rapid charging protocols and 5 connector flavours world wide&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Connector&lt;br /&gt;
!Communication&lt;br /&gt;
!Prevalent countries&lt;br /&gt;
!Open Source solutions&lt;br /&gt;
|-&lt;br /&gt;
|[[:Category:ChaDeMo|CHAdeMO]]&lt;br /&gt;
|CAN&lt;br /&gt;
|Japan, world wide&lt;br /&gt;
|[[Chademo with ESP32-Chademo|ESP32]], [[Chademo With Arduino Due|Arduino,]] [[Chademo with Zombieverter|ZombieVerter]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo1&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|CCS Combo2&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|Europe&lt;br /&gt;
|[[Foccci]], [[pyPLC]], [[BMW I3 Fast Charging LIM Module|I3LIM]]&lt;br /&gt;
|-&lt;br /&gt;
|NACS&lt;br /&gt;
|[[Foccci|PLC]]&lt;br /&gt;
|US&lt;br /&gt;
|[[Foccci]], [[pyPLC]]&lt;br /&gt;
|-&lt;br /&gt;
|GB/T&lt;br /&gt;
|CAN&lt;br /&gt;
|China&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Auxiliary Parts ==&lt;br /&gt;
We have now treated all the major building blocks of an EV, but there are many other components to complete the vehicle such as heaters, gear shifters and so on. We will summarize them here.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:HVJB|HV Junction Box]]&lt;br /&gt;
* [[:Category:HVAC|HVAC]] (Heating, Air conditioning)&lt;br /&gt;
* [[Vacuum Pumps]]&lt;br /&gt;
* [[:Category:Power Steering|Power Steering]]&lt;br /&gt;
* [[VCU Comparison|VCU]] (Vehicle Control Unit)&lt;br /&gt;
* [[Shift Controllers]]&lt;br /&gt;
&lt;br /&gt;
== Additional Reading ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Legalities|Legalities]] - Getting a vehicle road legal in your country&lt;br /&gt;
* [[Glossary of Terms]]&lt;br /&gt;
* [[Common Inverter FAQ]] - questions common to all hardware variants&lt;br /&gt;
* [[Tesla Inverter FAQ]] - questions regarding Tesla Large Drive Units and Small Drive Units&lt;br /&gt;
* [[Electronics Basics]] - general advice for troubleshooting electronic circuits&lt;br /&gt;
* [[I want a cheap ev conversion|cheap EV conversions]] - this entry point for the penny pinchers&lt;br /&gt;
* [[I want a powerful ev conversion|performant EV conversions]]  - where torque trumps money&lt;br /&gt;
* [[Mechanical design database]] - here you will find measurements, models, files, etc for a variety of components such as adapter plates and drive shaft flanges&lt;br /&gt;
* [[:Category:OpenInverter|Documentation of all OpenInverter Projects]]&lt;br /&gt;
* [[:Category:Tutorials|Tutorials]]&lt;br /&gt;
&lt;br /&gt;
==Who we are==&lt;br /&gt;
There is not static team or openinverter company but here we list the most active community members with links to donation or information sites:&lt;br /&gt;
&lt;br /&gt;
*Johannes Hübner, openinverter founder and developer - [https://www.patreon.com/openinverter support on patreon] follow on [https://www.youtube.com/user/EngineersFear youtube] and [https://github.com/jsphuebner/ github]&lt;br /&gt;
*Damien Maguire, developer and most active vehicle converter - [https://www.patreon.com/evbmw support on patreon] follow on [https://www.youtube.com/@Evbmw youtube] and [https://github.com/damienmaguire/ github]&lt;br /&gt;
*Uwe Hennig, master of CCS - [https://www.patreon.com/uhi22 support on patreon] follow on [https://github.com/uhi22/ github]&lt;br /&gt;
*celeron55, developer - support via [https://www.paypal.com/paypalme/celeron55 paypal] follow on [https://www.youtube.com/user/celeron55 youtube] and [https://github.com/celeron55 github]&lt;br /&gt;
*Arber Kramar, long term member and developer - [https://leafdriveblog.wordpress.com/ Follow on blogspot]&lt;br /&gt;
*Janosch Oppermann, active member, developer and producer - follow on [https://www.youtube.com/@foxev-content youtube]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
	<entry>
		<id>https://openinverter.org/wiki/index.php?title=Main_Page_Old&amp;diff=5140</id>
		<title>Main Page Old</title>
		<link rel="alternate" type="text/html" href="https://openinverter.org/wiki/index.php?title=Main_Page_Old&amp;diff=5140"/>
		<updated>2024-12-02T13:07:58Z</updated>

		<summary type="html">&lt;p&gt;Johu: Johu moved page Main Page to Main Page Old without leaving a redirect: superseded, this is a backup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The openinverter project mainly aims to reuse existing components from production electric vehicles. We also aim to give some general guidelines on how to convert a vehicle to electric drive.&lt;br /&gt;
&lt;br /&gt;
= Before you begin: =&lt;br /&gt;
&#039;&#039;&#039;Please take the time to read.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You undertake &#039;&#039;&#039;your&#039;&#039;&#039; project at &#039;&#039;&#039;your own risk.&#039;&#039;&#039; Make sure you&#039;re aware of the risks of working with high voltage and [[HighVoltageSafety]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Developers&#039;s time is best spent developing;&#039;&#039;&#039; &#039;&#039;&#039;Support is best found in the forums&#039;&#039;&#039; - Developers of various projects are often bombarded with private messages and emails. Managing these emails and questions is a extremely large undertaking. Please read, and take the time to understand the information available here and across the web if you don&#039;t understand a topic. Developers are not your personal support team, unless you want to pay them directly for their time.   &lt;br /&gt;
&lt;br /&gt;
Read more about [[Application Support]].     &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Consider donating to the many developers&#039;&#039;&#039; that have made all this possible and to help keep making things possible: &lt;br /&gt;
&lt;br /&gt;
[https://www.patreon.com/openinverter www.patreon.com/openinverter], &lt;br /&gt;
&lt;br /&gt;
https://www.evbmw.com/, &lt;br /&gt;
&lt;br /&gt;
https://www.paypal.com/paypalme/celeron55    &lt;br /&gt;
&lt;br /&gt;
[https://openinverter.org/forum/index.php &#039;&#039;&#039;Always check the forums&#039;&#039;&#039;], new developments and solutions are coming along every day, questions being answered, or perhaps you can answer. we work better as a community sharing our knowledge...    &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;...update this wiki.&#039;&#039;&#039; Answers and solutions should find their way here so they don&#039;t remain buried in a 30 page long support thread. To edit the wiki, login with your forum credentials.    &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Welcome to the open inverter community&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Legalities=&lt;br /&gt;
*[[Legalities|Legalities around conversion projects]]&lt;br /&gt;
Different countries have different legislation, if you want your car to certified for the road in your country please take the time to review this section. It might save you going down the wrong direction and creating something that can never be driven, or incur costs.&lt;br /&gt;
= Introduction =&lt;br /&gt;
The open inverter started as a scratch built inverter and control board led by Johannes Hübner who designed and built his open open source AC motor controller dubbed the &amp;quot;open inverter&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Since then, the community has established and documented hardware and software approaches to reuse OEM inverters with the Open control board, and has more recently started on controlling OEM inverters over CAN, a process which doesn&#039;t require replacing any internal parts. &lt;br /&gt;
&lt;br /&gt;
The main goal of the open inverter community is to reverse engineer many of these components for use in a variety of projects such as: &lt;br /&gt;
&lt;br /&gt;
* EV conversion&lt;br /&gt;
* Energy storage&lt;br /&gt;
* Power generation&lt;br /&gt;
* Charging infrastructure&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
Open inverter projects now span over many different areas surrounding PEV, HEV, and PHEV components, such as: &lt;br /&gt;
* Motor Controllers&lt;br /&gt;
* 1-3 phase power converters&lt;br /&gt;
* DC/DC converters&lt;br /&gt;
* buck/boost converters&lt;br /&gt;
* Battery Management Systems (BMS)&lt;br /&gt;
* Vehicle integration&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
As a result, there is a growing collection of open source software and hardware designed for the never ending list of OEM parts.  &lt;br /&gt;
&lt;br /&gt;
There&#039;s a variety of methods of repurposing these OEM components. Methods here are generally chosen with future proofing in mind , reducing chances of firmware or software updates from the manufacture &amp;quot;bricking&amp;quot; or blocking the open source control efforts.  &lt;br /&gt;
&lt;br /&gt;
such efforts include:  &lt;br /&gt;
&lt;br /&gt;
* Mainboard/brain replacement&lt;br /&gt;
*[[Getting started with CAN bus|CANBUS/LINBUS]]&lt;br /&gt;
*[[wikipedia:Synchronous_serial_communication|Sync serial]]&lt;br /&gt;
*[[wikipedia:FlexRay|FlexRay]]&lt;br /&gt;
*[[wikipedia:Pulse-width_modulation|PWM]]&lt;br /&gt;
* Sirmware/software reprogramming&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
Resulting in many bespoke boards running the main open inverter software or other open/semi-open source code designed to ether replace OEM motherboards or VCUs.  &lt;br /&gt;
&lt;br /&gt;
This has lead to a large collection of different boards and software, many with redundant features.  To unify many of these development projects, the community at large is focused on making a set of standard VCUs and replacement control boards which handle the ever growing list of OEM components.    &lt;br /&gt;
&lt;br /&gt;
=== Many of the VCU and replacement boards consist of these 3 main parts: ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Hardware&lt;br /&gt;
!Firmware&lt;br /&gt;
!Web Interface&lt;br /&gt;
|-&lt;br /&gt;
|The design and development of the [[Main Board Version 3|control hardware]] based around an STM32F103 chip. This provides the control signals to the power stage and on to the attached components.&lt;br /&gt;
|The development of the code that goes on the STM32F103 chips and determines, amongst other things what signals are sent to the power stage and the attached components.&lt;br /&gt;
|Using an ESP8266 chip, the development of a simple [[Web Interface|web based interface]] to adjust the parameters on the firmware chip and to display values returned from the chip, for example motor speed (RPM).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Getting Started =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note:&#039;&#039;&#039; Performing a &#039;full&#039; EV conversion can often be more straight forward than trying to make small modifications to OEM vehicles - an OEM system will normally require a set of components all talking to each other and keeping each other happy! Trying to, for example, add a different battery charger, or bypassing certain restrictions will often require significant reverse engineering of the existing system to ensure that the new component(s) do not cause errors or problems in the system which can avalanche into significant problems! A full EV conversion, in comparison, can usually focus on just keeping one component happy at a time (although integrating these different components can still require a lot of work).&lt;br /&gt;
&lt;br /&gt;
The Community is focused on the electrical systems required for an EV, and may not be best placed to assist with mechanical issues specific to your vehicle.&lt;br /&gt;
&lt;br /&gt;
===Glossary of Terms===&lt;br /&gt;
It is recommended you read the &#039;&#039;&#039;[[Glossary of Terms]]&#039;&#039;&#039; before you begin. Often you&#039;ll find TLAs (three letter acronyms) peppered through the support forum and on this wiki, take the time to familiarise yourself with them before hand, remember this exists, or bookmark/favourite it so you can referent back to it.&lt;br /&gt;
&lt;br /&gt;
===EV conversions:===&lt;br /&gt;
A few main parts are needed for an EV conversion, such as:&lt;br /&gt;
*[[Motors]]&lt;br /&gt;
*[[:Category:Inverter|Inverter]]&lt;br /&gt;
**(&#039;&#039;&#039;Note:&#039;&#039;&#039; [[ZombieVerter VCU|ZombieVerter]] projects require a matched pair of Inverter and Motor as they would have come out of a vehicle)&lt;br /&gt;
*[[Batteries]]&lt;br /&gt;
*[[:Category:Charger|Chargers / Charge Controllers]]&lt;br /&gt;
*[[:Category:DC/DC|DC/DC Converters]]&lt;br /&gt;
*[[:Category:HVJB|HV Junction Box]]&lt;br /&gt;
*[[Heaters]]&lt;br /&gt;
*[[:Category:HVAC|HVAC]]&lt;br /&gt;
*Brake Assist &lt;br /&gt;
**[[Vacuum Pumps]]&lt;br /&gt;
**Electronic Brake Boosters&lt;br /&gt;
*[[:Category:Power Steering|Power Steering]]&lt;br /&gt;
*[[Rapid Charging]]&lt;br /&gt;
*[[VCU Comparison]]&lt;br /&gt;
*[[Shift Controlers]]&lt;br /&gt;
&lt;br /&gt;
Existing information on these items can be found on the &amp;lt;u&amp;gt;[[EV Conversion Parts]]&amp;lt;/u&amp;gt; page.&lt;br /&gt;
&lt;br /&gt;
A collection of various connector part numbers can be found here: [[Connector Part Numbers]]&lt;br /&gt;
&lt;br /&gt;
===OEM Parts: ===&lt;br /&gt;
A variety of [[:Category:OEM|OEM]] parts members of the community have reversed engineered for custom use cases:&lt;br /&gt;
*[[:Category:BMW|BMW]]&lt;br /&gt;
*[[:Category:Chevrolet|Chevrolet]]&lt;br /&gt;
*[[:Category:Ford|Ford]]&lt;br /&gt;
*[[:Category:Hyundai|Hyundai]]&lt;br /&gt;
*[[Isabellenhütte Heusler]]&lt;br /&gt;
*[[:Category:Land Rover|Land Rover/Jaguar]]&lt;br /&gt;
*[[:Category:Mercedes-Benz|Mercedes-Benz]]&lt;br /&gt;
*[[:Category:MG|MG]]&lt;br /&gt;
*[[:Category:Mitsubishi|Mitsubishi]]&lt;br /&gt;
*[[Nissan]]&lt;br /&gt;
*[[:Category:Opel|Opel/Vauxhall]]&lt;br /&gt;
*[[:Category:Peugeot|Peugeot]]&lt;br /&gt;
*[[Renault]]&lt;br /&gt;
*[[:Category:Tesla|Tesla]]&lt;br /&gt;
*[[Toyota|Toyota/Lexus]]&lt;br /&gt;
*[[:Category:VAG|VAG (VW, Audi, Skoda, Seat, Porsche, ...)]]&lt;br /&gt;
*[[:Category:Volvo|Volvo]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required skills/Knowledge===&lt;br /&gt;
[[Category:Request_for_Review]]&lt;br /&gt;
To perform a successful EV conversion, you may require the following skills and/or knowledge (this is not an exhaustive list)&lt;br /&gt;
&lt;br /&gt;
* You will need to have the skills, knowledge and tools required to perform significant mechanical work on your vehicle. A service or workshop manual will be useful.&lt;br /&gt;
*Basic DC electrical knowledge, such as using a multimeter, soldering, identifying components.&lt;br /&gt;
*A willingness and ability to troubleshoot problems (mechanical, electrical, code...).&lt;br /&gt;
* Safety in relation to high voltage DC systems. &#039;&#039;&#039;HV DC can be more dangerous than AC mains voltages!&#039;&#039;&#039;&lt;br /&gt;
*Basic understanding on the purposes of various EV components (motor, inverter, DC-DC...)&lt;br /&gt;
*A grasp of 3 phase motor control concepts can be useful (especially if using an openinverter control board)&lt;br /&gt;
*An understanding of CAN (and other digital communication systems) will be very useful&lt;br /&gt;
*The legal restrictions and requirements for your country/state&lt;br /&gt;
&lt;br /&gt;
===FAQ===&lt;br /&gt;
&lt;br /&gt;
*[[Common Inverter FAQ]] - questions common to all hardware variants&lt;br /&gt;
*[[Tesla Inverter FAQ]] - questions regarding Tesla Large Drive Units and Small Drive Units&lt;br /&gt;
*[[Electronics Basics]] - general advice for troubleshooting electronic circuits&lt;br /&gt;
*[[I want a cheap ev conversion|cheap EV conversions]] - this entry point for the penny pinchers&lt;br /&gt;
*[[I want a powerful ev conversion|performant EV conversions]]  - where torque trumps money&lt;br /&gt;
&lt;br /&gt;
= Mechanical Design Database =&lt;br /&gt;
[[Mechanical design database|&#039;&#039;&#039;&amp;lt;u&amp;gt;Mechanical design database&amp;lt;/u&amp;gt;&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
here you will find measurements, models, files, etc for a variety of components  such as:&lt;br /&gt;
&lt;br /&gt;
* adapter plates&lt;br /&gt;
* motor couplers&lt;br /&gt;
*drive shaft flanges&lt;br /&gt;
*battery mounts&lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Cooling System Components =&lt;br /&gt;
&lt;br /&gt;
=== Water Pumps ===&lt;br /&gt;
[[Water Pumps|https://openinverter.org/wiki/Water_Pumps]] &lt;br /&gt;
&lt;br /&gt;
=== Coolant Fittings ===&lt;br /&gt;
[[Coolant Fittings|https://openinverter.org/wiki/Coolant_Fittings]]&lt;br /&gt;
&lt;br /&gt;
=== Coolant Valves ===&lt;br /&gt;
[[Coolant Valves|https://openinverter.org/wiki/Coolant_Valves]]&lt;br /&gt;
&lt;br /&gt;
=Open Inverter Projects=&lt;br /&gt;
&lt;br /&gt;
===Open Inverter (Core Project/s)===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
!Description  / Notes &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;ZombieVerter VCU&#039;&#039;&#039;&lt;br /&gt;
*[[ZombieVerter VCU]]&lt;br /&gt;
*[[Web Interface (ZombieVerter VCU)|Web Interface]]&lt;br /&gt;
*[[OEM component compatibility]]&lt;br /&gt;
|Designed around a matched pair of Inverter and Motor taken from the original OEM vehicle the ZombieVerter is there to make those two components believe they are still in the original vehicle and are fed necessary commands to act as if they still are and interpret and responses back from the equipment for feedback (regen / rpm / etc)&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Open Inverter Hardware&#039;&#039;&#039; &lt;br /&gt;
*[[Hardware Theory of Operation]]&lt;br /&gt;
*[[Schematics and Instructions]] - for the &amp;quot;vanilla&amp;quot; inverter kit.&lt;br /&gt;
*[[Mini Mainboard]]&lt;br /&gt;
*[[Foccci]] (CCS interface)&lt;br /&gt;
*[[Main Board Version 3]]&lt;br /&gt;
*[[Main Board Version 2]]&lt;br /&gt;
*[[Main Board Version 1]]&lt;br /&gt;
*[[Sense Boards]]&lt;br /&gt;
*[[Gate Driver]]&lt;br /&gt;
*[[Sensor Board|Legacy Sensor Board]]&lt;br /&gt;
*[[OEM Repurposing]]&lt;br /&gt;
| Quite flexible in its application. The Open Inverter can be used to build a custom inverter itself where you supply the high power and high voltage components to create your own inverter, or to be used as the basis to take over control of OEM inverters so that they can drive nearly any attached motor to that inverter.&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; |&#039;&#039;&#039;Open Inverter Software&#039;&#039;&#039;&lt;br /&gt;
*[[Using FOC Software]]&lt;br /&gt;
*[[Downloads]]&lt;br /&gt;
*[[Features]]&lt;br /&gt;
*[[Web Interface]]&lt;br /&gt;
*[[Battery Charging]]&lt;br /&gt;
*[[Errors]]&lt;br /&gt;
*[[CAN communication]]&lt;br /&gt;
*[[Parameters]] (Tune your inverter)&lt;br /&gt;
*[[Configuration Files]]&lt;br /&gt;
*[[Software Theory of Operation]]&lt;br /&gt;
*[[Open Inverter Testing]]&lt;br /&gt;
|Two of the more important software aspects to master are below.&amp;lt;!-- Just repurposed the can comms and parameters text. didn&#039;t want to get rid, but also perhaps more from the left column could be here? --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;CAN communication&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Common across boards is the ability to communicate with a CAN Bus, which is a &#039;control area network&#039; or a technical way of saying how various components, sensors, controls, etc communicate with one another within the car. &#039;&#039;&#039;Read more about [[CAN communication|CAN Communication]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There is also a project to standardise the messages across the various control boards, [[Introduction CAN STD|read more]]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The openinverter firmware uses a set of about 70 parameters to adapt it to different inverter power stages, motors and position feedback systems. Also it lets you calibrate the throttle pedal, change regenerative braking settings and so on. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Parameter definitions can be found here: [[Parameters]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Working parameter sets can be found in the [https://openinverter.org/parameters openinverter parameter database]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Open Inverter Related Projects (Control Boards/VCUs)===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! Project&lt;br /&gt;
!Description  / Notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Tesla|Tesla Small Drive and Large Drive Units:]]&#039;&#039;&#039;&lt;br /&gt;
|Commonly there is a large drive unit and small drive unit available from the Model S. &amp;lt;!-- Model 3 options? --&amp;gt;&lt;br /&gt;
These combine the inverter and motor into a single package.  &lt;br /&gt;
&lt;br /&gt;
The control boards for these replace the existing control board within them. &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Lexus GS450h Drivetrain]]:&#039;&#039;&#039;&lt;br /&gt;
| The GS450h contains a gearbox (where the motors are located).&lt;br /&gt;
Using the [[ZombieVerter VCU]], the inverter and the gearbox itself provide  &lt;br /&gt;
&lt;br /&gt;
a powerful set up suitable for rear wheel drive set ups, replacing the existing longitudinally mounted gearbox.  &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Toyota Prius Gen3 Board|Prius Generation 3 Inverter:]]&#039;&#039;&#039;&lt;br /&gt;
|A cheap available inverter from the popular Prius hybrid, this&lt;br /&gt;
board goes inside that inverter and allows you to control the features of it.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Auris/Yaris Inverter:]]&#039;&#039;&#039;&lt;br /&gt;
|Similar to the Prius board, there&#039;s subtle differences between them&lt;br /&gt;
and therefore the need for a separate board. &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Nissan Leaf Gen2 Board]]&#039;&#039;&#039;&lt;br /&gt;
|Replaces the nissan OEM logic board with a rev 3 openiverter main board&lt;br /&gt;
|-&lt;br /&gt;
|[[Ford ranger ev board|&#039;&#039;&#039;Ford ranger ev board&#039;&#039;&#039;]]&lt;br /&gt;
|openinverter kit for the ford ranger ev&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |[[OEM Repurposing|&#039;&#039;&#039;All Control Boards / OEM Inverters&#039;&#039;&#039;]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Use inverter as a battery Charger===&lt;br /&gt;
Both the open inverter and some OEM inverters can be used as a battery charger, further saving on component costs. You can read more about how the open inverter and the theory of charging [[Battery Charging|here]].&lt;br /&gt;
&lt;br /&gt;
===Open Inverter Renewables Projects===&lt;br /&gt;
Recently added to the forums are projects and discussions around turning the Open Inverter project towards capturing, storing and using renewable energy.&amp;lt;!--&amp;gt;&lt;br /&gt;
If you need help with your EV conversion check out my &amp;lt;u&amp;gt;consulting offers&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to support the project &amp;lt;u&amp;gt;visit the shop&amp;lt;/u&amp;gt;, become a &amp;lt;u&amp;gt;Patron&amp;lt;/u&amp;gt; or send donations to paypal &#039;at&#039; johanneshuebner.com .&lt;br /&gt;
&amp;lt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Open Inverter CAN std.=&lt;br /&gt;
*[[Introduction CAN STD|Introduction]]&lt;br /&gt;
*[[CAN table CAN STD|CAN table]]&lt;br /&gt;
*[[Getting started with CAN bus]]&lt;br /&gt;
*[[CAN communication|Setting up Open Inverter CAN Communication]]&lt;br /&gt;
&lt;br /&gt;
=Conversion Projects=&lt;br /&gt;
*[[VW Polo 86C Conversion]]&lt;br /&gt;
*[[Touran Conversion]]&lt;br /&gt;
*[[Audi A2 Conversion]]&lt;br /&gt;
*[https://openinverter.org/forum/viewtopic.php?f=11&amp;amp;t=326&amp;amp;hilit=gt86 toyota gt86 nissan leaf motor]&lt;br /&gt;
*[https://openinverter.org/forum/viewtopic.php?f=11&amp;amp;t=210 Porsche Boxster 986 Tesla conversion]&lt;br /&gt;
*[[VW Beetle 2003 Budget Conversion]]&lt;br /&gt;
*[https://openinverter.org/forum/viewforum.php?f=11 Further Projects on the forum]&lt;/div&gt;</summary>
		<author><name>Johu</name></author>
	</entry>
</feed>