Workshop: repairs and experiments

A DIY car jump starter: Li-ion 3S, LiFePO4 4S and supercapacitors

Published 10.11.2026

How to build your own car jump starter (a jump pack or booster). This article covers:

  • how much current the starter of a petrol or diesel engine from 1.3 to 6 L draws, with tables and charts;
  • why a start means a few seconds at hundreds of amps, not minutes, and so why a small battery can handle it;
  • part 1: a Li-ion 3S jump pack with USB-C charging: why 3S and not 4S, which cells will do, what "C" rating to look for, where to get them, the schematic, contactor, diodes, controller and code;
  • part 2: a LiFePO4 4S pack with a 200 A BMS that helps a flat car battery: a pre-charge through a resistor first, then the start;
  • whether a car can be started with no lead-acid battery at all;
  • which is better for starting: Li-ion or LiFePO4;
  • starting from supercapacitors, and how to charge them.

draft — under discussion and being expanded

⚠ Before you start. A battery that turns a starter delivers hundreds of amps, and thousands into a short circuit. Clamps touched together weld and melt, and a damaged or overheated Li-ion cell burns in a way you cannot put out. Use insulated tools, take off rings and watches, put the fuse right at the battery, and keep the clamps covered when the pack is not in use.

How much current a starter draws

The starter is the most powerful load in a car: from 0.8 kW on a small petrol engine to 3–4.5 kW on a big diesel. But it only runs for seconds. At the first instant, while the armature is not yet turning, the current jumps to several hundred amps (the inrush); within a few tenths of a second it falls, and then it pulses with every compression stroke. A diesel needs more than a petrol engine of the same size because of its higher compression ratio.

Petrol engines, +20 °C:

Petrol, LStarter, kWCranking, AInrush at the first instant, ACranking at −18 °C, A
1.30.8–1.0100–150300–400150–300
1.60.9–1.1120–170330–450180–340
2.01.0–1.4140–200380–520210–400
2.51.2–1.7160–220420–580240–440
3.01.4–1.7170–240450–620260–480
4.01.4–2.0190–260480–680290–520
5.01.6–2.2200–280500–720300–560
6.01.7–2.5220–300550–800330–600

Diesel engines, +20 °C:

Diesel, LStarter, kWCranking, AInrush at the first instant, ACranking at −18 °C, A
1.31.4–1.8170–230450–650260–460
1.61.6–2.0190–260500–720290–520
2.01.8–2.2220–320580–820330–640
2.52.0–2.5240–340620–880360–680
3.02.2–3.0260–370650–920390–740
4.02.7–3.2270–390680–950410–780
5.03.0–4.0280–410700–980420–820
6.03.0–4.5290–430700–1000440–860

These are typical ranges, not measurements of a particular car: they are estimated from starter power ratings in manufacturers' catalogues and checked against published measurements. For example, on 6.2 L diesels the measured inrush was 715–925 A and the cranking current 280–460 A. Your car's current depends on the starter (direct-drive or gear-reduction), the oil, the state of the engine and the battery itself. In freezing weather the oil thickens and cranking current rises 1.5–2 times; that is the last column.

Starter current of a passenger car by engine size, +20 °C: cranking and the inrush at the first instant, from–to; petrol and diesel separatelycranking — the current while the starter turns the engine over (1–5 s)inrush at the first instant — a short surge at the first instant, while the starter is still at rest (tens of milliseconds)Petrol engines020040060080010001.3 Lpetrol 1.3 L, cranking: 100–150 Apetrol 1.3 L, inrush at the first instant: 300–400 A1.6 Lpetrol 1.6 L, cranking: 120–170 Apetrol 1.6 L, inrush at the first instant: 330–450 A2.0 Lpetrol 2 L, cranking: 140–200 A140–200petrol 2 L, inrush at the first instant: 380–520 A380–5202.5 Lpetrol 2.5 L, cranking: 160–220 Apetrol 2.5 L, inrush at the first instant: 420–580 A3.0 Lpetrol 3 L, cranking: 170–240 A170–240petrol 3 L, inrush at the first instant: 450–620 A450–6204.0 Lpetrol 4 L, cranking: 190–260 Apetrol 4 L, inrush at the first instant: 480–680 A5.0 Lpetrol 5 L, cranking: 200–280 Apetrol 5 L, inrush at the first instant: 500–720 A6.0 Lpetrol 6 L, cranking: 220–300 Apetrol 6 L, inrush at the first instant: 550–800 AADiesel engines020040060080010001.3 Ldiesel 1.3 L, cranking: 170–230 Adiesel 1.3 L, inrush at the first instant: 450–650 A1.6 Ldiesel 1.6 L, cranking: 190–260 Adiesel 1.6 L, inrush at the first instant: 500–720 A2.0 Ldiesel 2 L, cranking: 220–320 Adiesel 2 L, inrush at the first instant: 580–820 A2.5 Ldiesel 2.5 L, cranking: 240–340 Adiesel 2.5 L, inrush at the first instant: 620–880 A3.0 Ldiesel 3 L, cranking: 260–370 Adiesel 3 L, inrush at the first instant: 650–920 A4.0 Ldiesel 4 L, cranking: 270–390 Adiesel 4 L, inrush at the first instant: 680–950 A5.0 Ldiesel 5 L, cranking: 280–410 Adiesel 5 L, inrush at the first instant: 700–980 A6.0 Ldiesel 6 L, cranking: 290–430 Adiesel 6 L, inrush at the first instant: 700–1000 AAengine size, L · bar: from–to, +20 °C; in frost cranking is 1.5–2 times higher
Starter current by engine size: bar is cranking (average, whisker is the range), dot is the inrush at the first instant. Estimate for +20 °C.
How the current changes over the seconds of a start: 1.6 L petrol and 2.0 L diesel (with glow plugs), +20 °C0200400600800−4−3−2−10123time, s (0 is turning the key to "start")current, Aglow plugs ≈ 45–70 Ainrush 750 Ainrush 450 Aripple: every compression strokeengine firesengine fires1.6 L petrol2.0 L dieselEnergy per start: petrol ≈ 0.7 Wh, diesel ≈ 3.0 Wh (including glow plugs). A 3S 10 Ah power bank holds ≈ 110 Wh.
How the current changes over the seconds of a start. The diesel first heats its glow plugs for a few seconds (45–70 A), then comes the inrush and the ripple until the engine fires. The shape of the curve is modelled on oscilloscope measurements; the figures are typical for these engines.

Seconds, not minutes

One start takes very little energy: under 1 Wh for a warm 1.6 L petrol engine, about 3 Wh for a 2.0 L diesel including the glow plugs. A 3S 10 Ah power bank holds about 110 Wh, enough for dozens of attempts.

The hard part is not energy but current: for a few seconds the battery has to deliver 150–400 A without sagging below ~9 V, or the control units reset and the starter turns too slowly. So what matters in a jump starter is not capacity but how much current the cells can deliver. And that is why a small power bank copes: it works for seconds, not minutes.

Wait 30–60 s between attempts: a few seconds at that current noticeably heats both the starter and the cells.

Part 1. Li-ion 3S with USB-C charging

A compact unit that lives in the boot or glovebox and charges from a phone or laptop charger. Nearly all ready-made jump packs are built this way.

Why 3S and not 4S

Li-ion packFull, VNominal, VUnder the starter, VFor a 12 V car
3S12.610.8–11.1≈ 9–10.5yes: a lead-acid battery also sags to 9.6–10.5 V under the starter
4S16.814.4–14.8≈ 12–14no: 16.8 V when full is above the 15–16 V that the car's control units, bulbs and relays are built for
  • In voltage, a 3S pack behaves like a lead-acid battery during a start. It is 12.6 V full and sags to 9–10 V under the starter, just like lead-acid.
  • A 4S Li-ion pack is too high. The car's electronics are not built to sit at 16.8 V for long, and while the clamps are connected, that is the voltage the car's wiring sits at; the alternator cannot bring it down.
  • But a 3S pack must not stay connected to a running alternator. The alternator holds 14.2–14.6 V (up to 14.8 V on some cars), while a full 3S pack is 12.6 V. If the clamps stay on after the start, the alternator charges the 3S pack beyond 4.2 V per cell, which is dangerous. So the controller opens the circuit as soon as the engine is running (code below).
  • LiFePO4 is a different chemistry: for 12 V the right configuration is 4S (14.4 V full, 13.2 V nominal); that is part 2.

Which cells will do

You need high-drain cells. Capacity is secondary; what matters is the continuous discharge current in the datasheet.

TypeExamplesContinuous current per cellSuitable?
high-drain 21700Molicel P42A (4.2 Ah), Molicel P45B (4.5 Ah), Samsung 40T (4 Ah)35–50 Ayes, the best choice among cylindrical cells
high-drain 18650Samsung 25R (2.5 Ah), LG HG2 (3 Ah), Sony/Murata VTC6 (3 Ah)15–20 Ayes, but you need more in parallel
3S LiPo packs (pouch, for models)packs with a "C" rating on the label (section below)"C" × capacityyes, ready-made jump packs are built from these
from laptops or phone power banksany3–10 Ano: they cannot supply starter current
unknown "9900 mAh" cellscheap fakesunknownno

How many in parallel. The continuous currents of the cells in one parallel group must add up to at least your engine's cranking current. The inrush at the first instant lasts a fraction of a second and is covered by the cells' short-term output, which for high-drain cells is 1.5–2 times their continuous rating.

  • 1.3–1.6 L petrol (cranking 100–170 A, inrush up to 450 A): 3S4P of Molicel P42A, 12 cells, 16.8 Ah, ≈ 180 A continuous; 2.0 L petrol (140–200 A): 3S5P;
  • 2.0 L diesel (220–320 A, inrush up to 800 A): 3S8P of P42A, ≈ 360 A continuous;
  • with 15–20 A 18650s, twice as many in parallel.

Cells in one parallel group must be identical, from one batch, at the same voltage before you connect them. Join them by spot-welding nickel or copper strip, not by soldering onto the can.

What "C" rating to look for

The "C" rating on a LiPo pack tells you how many times the permitted current in amps exceeds the capacity in amp-hours: 5000 mAh × 50C = 250 A. Work out what you need like this:

required C = starting current (A) ÷ capacity (Ah)

3S pack capacity200 A (petrol, cranking)400 A (inrush, diesel)
5 Ah40C80C
10 Ah20C40C
20 Ah10C20C
  • Buy twice what the table gives. The "C" on hobby packs is often inflated; the real figure is about half of what is printed.
  • Two numbers on the label (say, "50C / 100C") are the continuous and the burst (a few seconds) rating. Go by the continuous one: the burst rating on hobby packs is the most optimistic figure, and at that current the cells heat up and age faster.
  • LiPo delivers noticeably less in the cold. In winter keep the pack in the warm cabin or inside your coat before a start.
  • Cylindrical cells do not carry a "C" rating; the continuous current in amps is in the datasheet.

Where to get them

  • New 18650 / 21700 cells from sellers of batteries for e-bikes, torches and vapes who show the cell datasheet. Check them on arrival: weight (P42A ≈ 70 g), capacity with a tester, and internal resistance (a good high-drain 21700 is up to ~15 mΩ).
  • 3S LiPo packs with a high "C" rating from shops for radio-controlled models and FPV drones: high-"C" 3S and 4S packs are always on sale there.
  • Avoid cells from laptop batteries and phone power banks (low current), salvaged cells with an unknown history, and "18650 9900 mAh" cells: real ones like that do not exist.

Schematic

Li-ion 3S jump starter: power path through a fuse and a contactor, controller, reversed-clamp protection, USB-C chargingLi-ion 3S3S4P–3S6P, 2170010.8–12.6 VF1250–300 AK1contactor12 V, ≥ 200 ATVS5KP18CAreversed?PC817 + 1N4148+ 2.2 kΩ+ clamp (red)− clamp (black)to the carbattery1N5408 diode across the coilController — Arduino NanoA0 ← battery voltage (47k / 10k)A1 ← clamp voltage (47k / 10k)D3 ← "reversed" optocouplerD2 ← "force" buttonD8 → IRLZ44N → K1 coilD5 / D6 → LEDs, D9 → buzzerS1 switch → 1N5819 → MP1584 (5 V) → NanoUSB-C PDtrigger set to 20 VXL4015CC/CV: 12.6 V, 3 ASS54stops the moduledraining the pack3S BMScharge + balanceC− portbalance leadsUSB-C charging ("Charging" section)
Li-ion 3S jump pack. Power path: pack "+" → fuse F1 → contactor K1 → red clamp; pack "−" straight to the black clamp. The controller closes K1 only when the polarity is right and opens it after the start. USB-C charging goes through the BMS, which balances the cells.

Why the power current does not go through the BMS. There are hardly any 3S BMS boards rated for 400 A, and those that exist are large and expensive. So, as in ready-made jump packs, the BMS here sits only in the charging and balancing path, and the discharge is protected by fuse F1 and the controller: it will not close K1 if the pack is flat, and opens it if the pack sags under load.

Parts: contactor, diodes, fuse, cables

RefWhatWhy
K1DC contactor, 12 V coil, ≥ 200 A continuous, ≥ 500 A short-termconnects the pack to the clamps only for the start. Best with a rated DC breaking capacity (for example, TE Kilovac LEV200, 500 A)
F1MEGA or ANL fuse, 250–300 A, rated for ≥ 32 V DCagainst a short circuit (thousands of amps), not against starter current: it carries the starting current
D11N5408 (3 A, 1000 V) across the K1 coil, cathode to "+"absorbs the voltage spike when the coil switches off; without it the MOSFET dies
D25KP18CA bidirectional TVS diode across the clampsabsorbs voltage spikes when the contactor opens and while the alternator runs; its 18 V stand-off is above the pack's 12.6 V. It must be bidirectional: a unidirectional one would conduct with the clamps reversed and short the car battery
D31N4148 in series with the PC817 optocoupler LED and a 2.2 kΩ resistor, across the clampsthe optocoupler lights only when the clamps are reversed; the 1N4148 takes the reverse voltage the LED could not withstand on its own (≈ 5 V)
D4SS54 (5 A, 40 V) at the charger module outputan unpowered XL4015 module slowly drains the pack through its output; the diode blocks that
D51N5819 in the controller supplyprotects the buck module if the pack polarity is reversed during assembly
Q1IRLZ44N logic-level MOSFET, 220 Ω to the gate, 100 kΩ gate to GNDswitches the K1 coil from a controller pin; the 100 kΩ keeps it off while the controller boots
dividers47 kΩ / 10 kΩ + 100 nF and a BZX55C5V1 zener on each of A0, A1turn 15 V into 2.6 V for the ADC; the zener protects the input from spikes and from the negative voltage when the clamps are reversed
supplyswitch S1 → D5 → MP1584 module set to 5 V → the Nano's 5V pinwithout a switch, a Nano with its LEDs draws ~20 mA and would drain a 3S4P (16.8 Ah) pack almost completely in a month
cables25–35 mm² copper, up to 1 m per clampat 300 A every extra milliohm costs 0.3 V
clampscopper, rated 400–600 Acheap plated-brass clamps heat up and add a lot of resistance

If the contactor coil has built-in electronics (an economiser, as on some LEV200 contactors), fit D1 only as the datasheet allows.

Why there is no diode in the power path. A diode would stop the alternator pushing current back into the pack, but at 300 A even a Schottky diode drops 0.5–0.6 V: that is 150–180 W of heat and half a volt lost from an already sagging 9–10 V. So the power path is switched by the contactor, and the "no backfeed" job is done by the controller: it opens K1 once the engine is running.

How the controller works

  • Clamps reversed → the optocoupler signals it, K1 stays open, the red LED flashes and the buzzer warns.
  • Pack flat (below 10.2 V) → K1 stays open, the red LED is on.
  • A battery on the clamps, polarity right → after half a second K1 closes and the green LED lights. Now turn the key.
  • The car battery is completely flat and shows no voltage on the clamps → check the polarity by eye and hold the "force" button for 3 s. ⚠ On a completely flat battery the reversed-clamp optocoupler cannot react, so in this mode only fuse F1 protects against a mistake.
  • Engine running (voltage above 13.3 V for more than 2 s) → K1 opens.
  • 30 s have passed, or the pack has sagged below 7.5 V for more than a second → K1 opens.
  • After opening, the controller will not close K1 again until the clamps are taken off the battery. While it waits, the green LED blinks once a second; the red one is on if the circuit was opened because the pack sagged.

Controller code

The board is an Arduino Nano. Before the first use, measure the voltage on the 5V pin with a multimeter and enter it in VREF, then check the voltages the controller reads against the multimeter.

// Li-ion 3S jump starter: the controller closes contactor K1 only when it is safe,
// and opens it after the engine starts, on a timeout, or if the pack sags too far.
// Board: Arduino Nano (ATmega328P), powered with 5 V from a buck module.

const uint8_t PIN_VPACK   = A0;  // pack voltage through a 47 k / 10 k divider
const uint8_t PIN_VCLAMP  = A1;  // clamp voltage (red relative to black)
const uint8_t PIN_FORCE   = 2;   // "force" button to GND
const uint8_t PIN_REVERSE = 3;   // optocoupler output: LOW = clamps reversed
const uint8_t PIN_LED_OK  = 5;   // green: contactor closed
const uint8_t PIN_LED_ERR = 6;   // red: error or flat pack
const uint8_t PIN_K1      = 8;   // IRLZ44N gate → contactor K1 coil
const uint8_t PIN_BUZZER  = 9;   // piezo buzzer

const float DIV  = (47.0 + 10.0) / 10.0;  // divider ratio
const float VREF = 5.0;                   // measure your board's 5V rail and enter it here

const float PACK_MIN_START = 10.2;  // below this (≈ 3.4 V per cell) do not close: the pack is flat
const float PACK_MIN_LOAD  = 7.5;   // 2.5 V per cell under load for longer than LOW_MS: open
const float CLAMP_PRESENT  = 2.0;   // some battery is present on the clamps
const float CLAMP_RUNNING  = 13.3;  // above this the alternator is charging, so the engine is running

const unsigned long MAX_ON_MS     = 30000;  // contactor closed for 30 s at most
const unsigned long LOW_MS        = 1000;
const unsigned long RUN_MS        = 2000;
const unsigned long PRESENT_MS    = 500;
const unsigned long FORCE_HOLD_MS = 3000;   // hold the button 3 s to close with no battery voltage on the clamps
const unsigned long REMOVED_MS    = 2000;

enum State { IDLE, ON, WAIT_REMOVE };
State state = IDLE;
unsigned long tOn = 0, tLow = 0, tRun = 0, tForce = 0, tPresent = 0, tRemoved = 0;

float readVolts(uint8_t pin) {
  long sum = 0;
  for (uint8_t i = 0; i < 8; i++) {
    sum += analogRead(pin);
  }
  return sum / 8.0 * VREF / 1023.0 * DIV;
}

void relay(bool on) {
  digitalWrite(PIN_K1, on ? HIGH : LOW);
  digitalWrite(PIN_LED_OK, on ? HIGH : LOW);
}

// Condition timer: true once the condition has held continuously for ms.
bool heldFor(bool cond, unsigned long &since, unsigned long ms, unsigned long now) {
  if (!cond) {
    since = 0;
    return false;
  }
  if (since == 0) {
    since = now;
  }
  return now - since >= ms;
}

void turnOn(unsigned long now) {
  relay(true);
  state = ON;
  tOn = now;
  tLow = 0;
  tRun = 0;
  tone(PIN_BUZZER, 2000, 150);
}

void turnOff(bool error) {
  relay(false);
  state = WAIT_REMOVE;
  tRemoved = 0;
  digitalWrite(PIN_LED_ERR, error ? HIGH : LOW);
  tone(PIN_BUZZER, error ? 800 : 2000, error ? 800 : 300);
}

void setup() {
  pinMode(PIN_K1, OUTPUT);
  pinMode(PIN_LED_OK, OUTPUT);
  pinMode(PIN_LED_ERR, OUTPUT);
  relay(false);
  pinMode(PIN_FORCE, INPUT_PULLUP);
  pinMode(PIN_REVERSE, INPUT_PULLUP);
}

void loop() {
  unsigned long now = millis();
  float vPack  = readVolts(PIN_VPACK);
  float vClamp = readVolts(PIN_VCLAMP);
  bool reversed = digitalRead(PIN_REVERSE) == LOW;
  bool force    = digitalRead(PIN_FORCE) == LOW;

  // Reversed clamps: open in any state and wait until they are removed.
  if (reversed) {
    relay(false);
    state = WAIT_REMOVE;
    tRemoved = 0;
    digitalWrite(PIN_LED_ERR, (now / 200) % 2);
    if ((now / 200) % 10 == 0) {
      tone(PIN_BUZZER, 800, 100);
    }
    return;
  }

  switch (state) {
    case IDLE:
      digitalWrite(PIN_LED_ERR, vPack < PACK_MIN_START ? HIGH : LOW);
      if (vPack < PACK_MIN_START || vClamp > CLAMP_RUNNING) {
        tPresent = 0;
        tForce = 0;
        break;  // pack flat or engine already running: do not close
      }
      if (heldFor(vClamp > CLAMP_PRESENT, tPresent, PRESENT_MS, now)) {
        turnOn(now);  // battery on the clamps, polarity correct
      } else if (heldFor(force, tForce, FORCE_HOLD_MS, now)) {
        turnOn(now);  // battery completely flat: close on the button
      }
      break;

    case ON:
      if (now - tOn > MAX_ON_MS) {
        turnOff(false);  // time is up: the starter must not crank any longer
      } else if (heldFor(vPack < PACK_MIN_LOAD, tLow, LOW_MS, now)) {
        turnOff(true);   // the pack sagged below 2.5 V per cell
      } else if (heldFor(vClamp > CLAMP_RUNNING, tRun, RUN_MS, now)) {
        turnOff(false);  // engine running: the alternator must not charge a 3S pack to 14.4 V
      }
      break;

    case WAIT_REMOVE:
      // Do not close again until the clamps are taken off the battery.
      digitalWrite(PIN_LED_OK, (now / 1000) % 2);
      if (heldFor(vClamp < 1.0, tRemoved, REMOVED_MS, now)) {
        digitalWrite(PIN_LED_OK, LOW);
        digitalWrite(PIN_LED_ERR, LOW);
        state = IDLE;
      }
      break;
  }
}

USB-C charging

StageWhatSetting
USB-C PD triggera small "decoy" board (CH224K or similar) that asks the charger for 20 Vpick 20 V with a jumper or resistor; a 45–60 W charger or more
buck moduleXL4015 with current and voltage limiting (CC/CV)with no pack connected set 12.6 V, then 2–3 A
D4SS54after the module, anode to the module
3S BMSwith balancing and a separate charge portcuts off charging if any cell reaches 4.25 V
  • Set the voltage with no pack connected. A module connected to the pack before the voltage is set can overcharge it within minutes.
  • Because of diode D4, the pack ends the charge slightly below 12.6 V, at about 12.4–12.5 V. That is ≈ 95 % charge, and the cells last longer that way.
  • Time: a 3S4P 16.8 Ah pack at 3 A takes about 6 hours.
  • A slower option is a ready-made 3S charge module running from 5 V USB (10–15 W): it takes a day.
  • Charge at 0–45 °C, not in a car in the sun and not unattended.

Part 2. LiFePO4 4S with a 200 A BMS: helping a flat battery

The same idea, but with LiFePO4 and without its own charger: you charge this pack with an ordinary 14.2–14.4 V LiFePO4 charger. Its job is not to start the car instead of the battery but to help a flat battery: first top it up a little, then connect directly to it for the start.

Why LiFePO4 4S fits without tricks

  • LiFePO4 4S: 14.4 V full, 13.2–13.4 V at rest, 11–12.5 V under the starter. Much like a healthy lead-acid battery.
  • The alternator holds 14.2–14.6 V (up to 14.8 V on some cars), which is a full charge for LiFePO4 4S or slightly above. Any overcharge from the alternator is small, and the BMS limits it: it cuts off charging at 3.65 V per cell.
  • LiFePO4 tolerates overheating and damage better than Li-ion.

A 200 A BMS with a 400 A peak: is it enough?

  • 200 A continuous is enough on its own to crank petrol engines up to about 2.0–2.5 L and diesels up to 1.3–1.6 L (tables above). For bigger engines the pack helps together with the lead-acid battery, connected in parallel: the current is shared between the two.
  • The inrush of 450–900 A lasts tens of milliseconds, but it can trip the BMS short-circuit protection: on many boards it acts within hundreds of microseconds. The BMS then cuts its output in the middle of the start. That is exactly why the pack is connected in parallel with the car battery, not instead of it: the lead-acid battery takes the inrush, and the LiFePO4 holds the voltage up while cranking.
  • Check the over-current and short-circuit thresholds and delays in the settings of a smart BMS, or the datasheet of a plain one.
  • The cells must cope too. Look for the pulse current in the datasheet: for example, A123 ANR26650 cylindrical cells (2.5 Ah) give 70 A continuous and 120 A for up to 10 s, so a 4S4P pack (10 Ah) gives 280 A continuous and about 480 A as a pulse. Large 200–300 Ah prismatic cells will also do; a 4S pack of 50–100 Ah cells rated at 1C (50–100 A) will not.

How it works: pre-charge, then start

The idea of "a relay that only partly clicks and partly closes the circuit" will not work, and here is why:

IdeaWhat really happens
a relay switching on and off quickly to close the circuit "partly"the contacts of a mechanical relay are either closed or open. While closed, the full current flows, so the BMS sees the same surges, and every opening under hundreds of amps draws an arc: the contacts burn and weld
limiting the current smoothly with semiconductors (PWM on MOSFETs)possible, but it takes dozens of parallel MOSFETs, a driver, an inductor and cooling: a project of its own
✔ step 1: pre-charge through a resistorrelay K2 connects the batteries through a 0.22 Ω resistor. The current is 5–15 A for 5–15 min. The lead-acid battery gets 1–2 Ah and "comes back to life"
✔ step 2: start through the contactoron the START button, contactor K1 connects the batteries directly only while cranking; the controller watches the current and the time

Why not connect the batteries directly straight away. LiFePO4 at rest is 13.3 V, a flat lead-acid battery 11.5 V, and a completely flat one 10 V. The resistance of both batteries and the cables together is 10–20 mΩ, so 100–300 A would flow at once: at the limit of the BMS, and a charging current like that harms the lead-acid battery. Through a 0.22 Ω resistor the current is (13.3 − 11.5) / 0.22 ≈ 8 A, and up to ~15 A with a completely flat battery. The resistor dissipates 15–50 W, so use a 100 W aluminium-clad one bolted to a heatsink.

Schematic

LiFePO4 4S jump pack with a 200 A BMS: pre-charging the flat battery through a resistor, then starting through a contactorLiFePO4 4S12.8–14.4 Vcells rated 400 A pulseF1250–300 AK1contactor12 V, ≥ 200 AK240 A relayR0.22 Ω 100 W4S BMS200 A, 400 A peakB− P−shunt500 A / 50 mV+ INA226TVS5KP18CAreversed?PC817 + 1N4148+ 2.2 kΩ+ clamp (red)− clamp (black)to the carbatterystep 2: start through K1 (up to 15 s)step 1: pre-charge through R (5–15 min)Controller — Arduino NanoA0, A1 ← battery and clamps (47k / 10k)A4 / A5 ↔ INA226 (current)D3 ← "reversed" optocouplerD2 ← "START" buttonD7 → IRLZ44N → K2 coilD8 → IRLZ44N → K1 coil1N5408 diode across the coil (K1, K2)S1 switch → 1N5819 → MP1584 (5 V) → Nanocharging: a separate LiFePO4 charger (14.2–14.4 V)
LiFePO4 4S jump pack with a 200 A BMS. Step 1: relay K2 and resistor R pre-charge the flat car battery. Step 2: contactor K1 connects the batteries directly for the start. The shunt with an INA226 measures the current; the controller opens the circuit after the start or if the current stays too high for too long.

Parts

RefWhatWhy
batteryLiFePO4 4S of cells rated for a 400 A pulse (see above)supplies the starting current and holds the voltage up
BMS4S, 200 A continuous, 400 A peakprotects the cells from overcharge, deep discharge and short circuit
K112 V contactor, ≥ 200 A continuous (as in part 1)the direct connection for the start
K212 V 40 A automotive relayswitches on the pre-charge through the resistor
R0.22 Ω, 100 W, aluminium-clad, on a heatsinklimits the pre-charge current to 5–15 A
shunt + INA226500 A / 50 mV shunt and an INA226 module (I²C)measures current both ways up to ~800 A: with 50 mV / 500 A the INA226 range (±81.9 mV) is ±819 A
F1MEGA or ANL, 250–300 A, rated for ≥ 32 V DCagainst a short circuit
diodes1N5408 across K1, 1N4007 across K2, 5KP18CA TVS, 1N4148 + PC817, 1N5819as in part 1
Q1, Q2IRLZ44N, 220 Ω to the gate, 100 kΩ gate to GNDswitch the K1 and K2 coils

Controller code

Put the shunt in the negative after the BMS, and wire the shunt leads to the INA226 so that discharge current from our pack reads positive. Check this with a headlight bulb before the first start.

// LiFePO4 4S jump pack + 200 A BMS: two steps.
// Step 1: pre-charge the flat car battery through a resistor (relay K2).
// Step 2: on the START button, contactor K1 connects the batteries directly while cranking.
// Current is measured by an INA226 on a 500 A / 50 mV shunt; positive means our pack is supplying.

#include <Wire.h>

const uint8_t PIN_VPACK   = A0;  // pack voltage through a 47 k / 10 k divider
const uint8_t PIN_VCLAMP  = A1;  // clamp voltage
const uint8_t PIN_START   = 2;   // START button to GND
const uint8_t PIN_REVERSE = 3;   // optocoupler: LOW = clamps reversed
const uint8_t PIN_LED_OK  = 5;
const uint8_t PIN_LED_ERR = 6;
const uint8_t PIN_K2      = 7;   // pre-charge relay (through the 0.22 ohm resistor)
const uint8_t PIN_K1      = 8;   // start contactor
const uint8_t PIN_BUZZER  = 9;

const uint8_t INA_ADDR = 0x40;     // INA226 address (module A0, A1 to GND)
const float   R_SHUNT  = 0.0001;   // 50 mV / 500 A = 0.1 milliohm
const float   DIV      = (47.0 + 10.0) / 10.0;
const float   VREF     = 5.0;      // measure your board's 5V rail

const float PACK_MIN_START = 12.9;  // ≈ 3.22 V per cell: below this the pack is nearly empty
const float PACK_MIN_LOAD  = 10.0;  // 2.5 V per cell under load
const float CLAMP_PRESENT  = 2.0;
const float CLAMP_RUNNING  = 13.6;  // before connecting: above this the engine is already running
const float I_PRE_DONE     = 3.0;   // pre-charge current fell below this: the battery has caught up
const float I_PEAK_MAX     = 380.0; // longer than I_PEAK_MS: open, the BMS is not rated for this for long
                                    // (against a short circuit its own protection is faster than ours)
const float I_LONG_MAX     = 250.0; // longer than I_LONG_MS: open as well
const float I_BACK         = -5.0;  // current flowing INTO our pack: the alternator is running
const float I_PRE_SHORT    = 40.0;  // more than this during pre-charge: the clamps are touching
const float I_PRE_NONE     = 0.3;   // less than this for a minute during pre-charge: clamps removed

const unsigned long PRE_MAX_MS   = 30UL * 60 * 1000;  // pre-charge for 15 min at most
const unsigned long CRANK_MAX_MS = 15000;             // K1 closed for 15 s at most
const unsigned long I_PEAK_MS    = 300;
const unsigned long PRE_SHORT_MS = 1000;
const unsigned long PRE_NONE_MS  = 60000;
const unsigned long I_LONG_MS    = 5000;
const unsigned long RUN_MS       = 2000;
const unsigned long LOW_MS       = 1000;
const unsigned long PRESENT_MS   = 500;
const unsigned long REMOVED_MS   = 2000;

enum State { IDLE, PRECHARGE, CRANK, WAIT_REMOVE };
State state = IDLE;
unsigned long tState = 0, tPresent = 0, tPeak = 0, tLong = 0, tRun = 0, tLow = 0, tDone = 0, tRemoved = 0;
unsigned long tShort = 0, tNone = 0;
bool lastStart = false;

float readVolts(uint8_t pin) {
  long sum = 0;
  for (uint8_t i = 0; i < 8; i++) {
    sum += analogRead(pin);
  }
  return sum / 8.0 * VREF / 1023.0 * DIV;
}

// INA226 register 0x01: signed shunt voltage, 2.5 uV per bit.
float readAmps() {
  Wire.beginTransmission(INA_ADDR);
  Wire.write(0x01);
  if (Wire.endTransmission() != 0) {
    return NAN;
  }
  if (Wire.requestFrom(INA_ADDR, (uint8_t) 2) != 2) {
    return NAN;
  }
  uint8_t hi = Wire.read();  // two separate reads: the order inside one expression is not guaranteed
  uint8_t lo = Wire.read();
  int16_t raw = (int16_t) ((hi << 8) | lo);
  return raw * 2.5e-6 / R_SHUNT;
}

bool heldFor(bool cond, unsigned long &since, unsigned long ms, unsigned long now) {
  if (!cond) {
    since = 0;
    return false;
  }
  if (since == 0) {
    since = now;
  }
  return now - since >= ms;
}

void setRelays(bool k2, bool k1) {
  digitalWrite(PIN_K2, k2 ? HIGH : LOW);
  digitalWrite(PIN_K1, k1 ? HIGH : LOW);
}

void go(State s, unsigned long now) {
  state = s;
  tState = now;
  tPeak = tLong = tRun = tLow = tDone = tRemoved = tShort = tNone = 0;
}

void stopAll(bool error, unsigned long now) {
  setRelays(false, false);
  digitalWrite(PIN_LED_ERR, error ? HIGH : LOW);
  tone(PIN_BUZZER, error ? 800 : 2000, error ? 800 : 300);
  go(WAIT_REMOVE, now);
}

void setup() {
  pinMode(PIN_K1, OUTPUT);
  pinMode(PIN_K2, OUTPUT);
  setRelays(false, false);
  pinMode(PIN_LED_OK, OUTPUT);
  pinMode(PIN_LED_ERR, OUTPUT);
  pinMode(PIN_START, INPUT_PULLUP);
  pinMode(PIN_REVERSE, INPUT_PULLUP);
  Wire.begin();
}

void loop() {
  unsigned long now = millis();
  float vPack  = readVolts(PIN_VPACK);
  float vClamp = readVolts(PIN_VCLAMP);
  float amps   = readAmps();
  bool reversed = digitalRead(PIN_REVERSE) == LOW;

  // INA226 not responding: without a current reading there is no protection and no start detection, so open everything.
  if (isnan(amps)) {
    setRelays(false, false);
    if (state != WAIT_REMOVE) {
      go(WAIT_REMOVE, now);
    }
    digitalWrite(PIN_LED_ERR, (now / 500) % 2);
    return;
  }
  bool startNow = digitalRead(PIN_START) == LOW;
  bool startPressed = startNow && !lastStart;  // only the moment of pressing
  lastStart = startNow;

  if (reversed) {
    setRelays(false, false);
    if (state != WAIT_REMOVE) {
      go(WAIT_REMOVE, now);
    }
    digitalWrite(PIN_LED_ERR, (now / 200) % 2);
    return;
  }

  switch (state) {
    case IDLE:
      digitalWrite(PIN_LED_ERR, vPack < PACK_MIN_START ? HIGH : LOW);
      if (vPack >= PACK_MIN_START && vClamp < CLAMP_RUNNING
          && heldFor(vClamp > CLAMP_PRESENT, tPresent, PRESENT_MS, now)) {
        setRelays(true, false);  // step 1: pre-charge through the resistor
        tone(PIN_BUZZER, 2000, 150);
        go(PRECHARGE, now);
      }
      break;

    case PRECHARGE:
      // Blinking: pre-charging; steady: the current has dropped, ready to start.
      if (heldFor(amps < I_PRE_DONE, tDone, 5000, now)) {
        digitalWrite(PIN_LED_OK, HIGH);
      } else {
        digitalWrite(PIN_LED_OK, (now / 500) % 2);
      }
      if (startPressed) {
        setRelays(false, true);  // step 2: direct connection while cranking
        tone(PIN_BUZZER, 2500, 200);
        go(CRANK, now);
      } else if (heldFor(amps > I_PRE_SHORT, tShort, PRE_SHORT_MS, now)) {
        stopAll(true, now);   // clamps touching: too much current through the resistor
      } else if (heldFor(amps < I_PRE_NONE, tNone, PRE_NONE_MS, now)) {
        stopAll(false, now);  // clamps removed: do not keep them live
      } else if (now - tState > PRE_MAX_MS || vPack < PACK_MIN_START - 0.4) {
        stopAll(false, now);
      }
      break;

    case CRANK:
      digitalWrite(PIN_LED_OK, HIGH);
      if (now - tState > CRANK_MAX_MS) {
        setRelays(true, false);  // did not start: back to pre-charge, another attempt is allowed
        go(PRECHARGE, now);
      } else if (heldFor(amps > I_PEAK_MAX, tPeak, I_PEAK_MS, now)
                 || heldFor(amps > I_LONG_MAX, tLong, I_LONG_MS, now)) {
        stopAll(true, now);   // current too high for too long
      } else if (heldFor(vPack < PACK_MIN_LOAD, tLow, LOW_MS, now)) {
        stopAll(true, now);   // the pack sagged
      } else if (heldFor(amps < I_BACK, tRun, RUN_MS, now)) {
        stopAll(false, now);  // the alternator is charging us: the engine is running
      }
      break;

    case WAIT_REMOVE:
      digitalWrite(PIN_LED_OK, (now / 1000) % 2);
      if (heldFor(vClamp < 1.0, tRemoved, REMOVED_MS, now)) {
        digitalWrite(PIN_LED_OK, LOW);
        digitalWrite(PIN_LED_ERR, LOW);
        go(IDLE, now);
      }
      break;
  }
}

How to use it:

  1. Clamps on the battery: red to "+", black to "−". The green LED flashes: pre-charging.
  2. Wait 5–15 min. When the green LED is steady, the pre-charge current has dropped below 3 A.
  3. Press START and turn the key within 15 s. Crank for no more than 5–10 s.
  4. The engine is running: the controller opens the circuit by itself. Not running: after 15 s the controller returns to pre-charging; wait 30–60 s and repeat from step 3.

If the clamps touch during the pre-charge, the current through the resistor exceeds 40 A and the controller opens the circuit within a second. If the clamps are taken off, the current drops to zero and within a minute the controller opens K2 as well. The pre-charge lasts 30 min at most.
5. Take the clamps off: black first\, then red.

Can a car be started with no lead-acid battery at all?

In short: you can turn the starter, but you cannot drive like that.

WhatWhat happens
starting the engine from a jump pack with no battery in the carthe starter turns and the engine starts. But the jump pack disconnects after the start (our controller does too)
driving with no batterythe alternator has nothing to lean on: the voltage jumps about, and when a load is switched off suddenly there can be a spike of tens of volts. On old cars with a simple alternator this often does no harm; on modern ones it puts the control units at risk
a modern car with a battery sensor on "−" and stop-startno battery means fault codes and disabled functions; after replacing the battery it often has to be "registered" with a diagnostic tool
a LiFePO4 4S starter battery as a permanent replacement for lead-acidpossible, ready-made ones exist. But below 0 °C the BMS will not allow charging (so it does not charge in winter), the engine bay is hot, and if the BMS disconnects the battery while driving you get the same voltage spike. The car maker never designed for this
Li-ion 3S as a permanent replacement for lead-acidno: the alternator would overcharge it to 14.4 V, which is 4.8 V per cell

So a jump pack helps a battery for a few seconds, or gives an emergency start to get you to a battery replacement. It does not replace the battery.

Li-ion or LiFePO4

WhatLi-ion 3S (NMC, LiPo)LiFePO4 4S
voltage for a 12 V car9–12.6 V, sags more under the starter10–14.4 V, almost like lead-acid
connected to a running alternatornot allowed: overcharge, must disconnect after the startfine: 14.4 V is a full charge for it
energy per kilogram≈ 150–250 Wh≈ 90–160 Wh
cell weight for 10 Ah≈ 0.6 kg≈ 1 kg
output in the coldbetterweaker: sags more at −10…−20 °C
safety when damaged or overheatedcan catch fire and is hard to put outfar more stable
summer in a parked car (60–70 °C)risky, ages fastcopes better, but also ages
service lifehundreds of cyclesthousands of cycles

Verdict: for a unit that rides in the car all the time or is connected in parallel with the battery, LiFePO4 4S is better. For a compact pack in the glovebox that charges from USB-C and goes with you, Li-ion or LiPo 3S, but only with a controller that disconnects after the start, and not in the sun in summer.

Supercapacitors

Supercapacitors store little energy but deliver enormous current: the internal resistance of a module is a few milliohms. Cold hardly bothers them (they work down to −40 °C), and they last hundreds of thousands of cycles. The downside is fast self-discharge, over days or weeks, so you charge them just before the start.

What to build it from: six 2.7 V 3000 F cells in series (16.2 V, 500 F in total) with balancing boards, or a ready-made 16 V 500 F module (for example, Maxwell BMOD0500 P016).

Is there enough energy? A capacitor holds ½·C·U². Going from 15 to 9 V, a 500 F module delivers ½ × 500 × (15² − 9²) = 36 kJ ≈ 10 Wh, while a start takes 0.7–3 Wh. Plenty. But a bank of six 500 F cells (83 F in total) gives only ≈ 1.7 Wh, enough for one start of a warm petrol engine.

How to charge supercapacitors

FromHowTime (500 F)
the flat car battery itselfthrough a 0.5–1 Ω resistor: to a battery an empty capacitor is a short circuit. It charges to the battery voltage, 11–12 V10–25 min
another car's cigarette lighter socketthrough a CC/CV module: 14.5–15 V, 5–10 A≈ 15 min
USB-C PD at 20 Va 20 V trigger and an XL4015 module: 15 V, 3–5 A, as in part 125–40 min
  • Never above 2.7 V per cell (16.2 V for six), and only with balancing boards: without them one cell charges higher than the others and fails.
  • A module charged to 11 V from a weak battery delivers only ½ × 500 × (11² − 9²) = 10 kJ ≈ 2.8 Wh down to 9 V, nearly four times less than one charged to 15 V. That is often enough for a warm engine, but it is why ready-made supercapacitor jump starters have a boost converter: it charges the module above the battery voltage.
  • Connect the charged module just before you turn the key. Otherwise within minutes it discharges into the flat lead-acid battery, and the energy goes there instead of to the starter.
  • A charged module delivers hundreds of amps into a short circuit, so keep the terminals covered. Discharge it through a resistor for storage.

Testing and safety

  • Test it first without a car. Connect a headlight bulb (55–60 W) to the clamps and make sure K1 closes and that the voltages and current the controller reads match a multimeter.
  • Test the reversed-clamp protection on a healthy battery with the K1 coil disconnected: the red LED should flash and the green one should stay off (it shows the command to close K1).
  • Crank for no more than 5–10 s, with 30–60 s between attempts.
  • Red clamp to "+", black to "−" on the battery or to engine ground. Never touch the clamps together.
  • Do not leave Li-ion in a car in the summer sun or charge it unattended. Do not charge either Li-ion or LiFePO4 below 0 °C.
  • If a cell has swollen, gets warm with no load, or smells, take it out of service.

[TO ADD: what we have built from this, photos, current measurements on our car]

Article changelog

  • 2026-11-10 — first draft: starter current by engine size (tables, charts), a Li-ion 3S jump pack with USB-C charging, a LiFePO4 4S pack with a 200 A BMS and pre-charge, starting without a lead-acid battery, Li-ion or LiFePO4, supercapacitors.