Battery Guide
The battery module consists of two distinct PCBs and three programmable units.
- Indicator PCB: A small board featuring LEDs and a button for checking the State of Charge (SoC) and powering on the battery. It is controlled by an ATtiny85 MCU. It has to be programmed with the correct firmware before assembly. The firmware can be found in the BMS repository.
- Main BMS Board: Houses the primary Battery Management System (BMS) chip and a companion ATtiny85 MCU. This MCU handles communication with the Indicator PCB and manages the sleep states of the main BMS. Both units can be programmed after the battery is assembled, the MCU via a set of test points after the top cover is removed, and the BMS is configured via I2C over the data pins of the main XT90 connector.
Note: Both ATtiny85 MCUs are programmed via an Arduino Nano loaded with the "Arduino as ISP" sketch.
Power State Logic
The main BMS cannot autonomously enter a DEEPSLEEP state; it must be commanded externally by the companion MCU. The transition logic operates as follows:
- NORMAL mode: The BMS is in NORMAL mode.
- SLEEP Mode: When there is no load or charging current, the BMS enters SLEEP mode, though the power output remains active.
- DEEPSLEEP mode: The companion MCU detects that the BMS has entered SLEEP mode by polling the BMS over I2C. After the BMS has been in SLEEP mode for a predetermined amount of time, while a not significant current is being drawn or pushed into the pack, the MCU issues a DEEPSLEEP command. This turns off the pack output and puts the entire battery to sleep.
Programming the BMS
To program the BMS, you need an EV2400 programmer and a Windows PC running a specific, newer version of BQStudio. The correct installer can be found in the BMS repository: F4F_BMS BQStudio Config.
Hardware Setup
- Connect the EV2400 to your computer via USB.
- Connect the EV2400 to the battery pack using PORT2 (I2C).
- Wake up the pack: If this is a brand-new pack, it will be in SHUTDOWN mode from the manufacturer. To wake it up so BQStudio can communicate with it, connect a current-limited lab power supply (e.g. set to 25V and 1A) to the pack's main XT90 connector.
BQStudio Configuration
- Launch BQStudio. It will often throw an error stating the BMS is not recognized and open the Target Selection Wizard.
- In the wizard, select Monitor, then choose Monitor_7694_0_36-bq76942.bqz, and click Finish.

- Navigate to the Data Memory tab at the top.
- Click Import and load the configuration file located in the BMS repository: BqStudio_config.csv.
- Click Write All. (If your lab power supply is connected, the BMS will begin charging the pack at this point).

Critical Manual Calibration
BQStudio deliberately ignores imported settings for the Calibration tab, as these values can be specific to individual BMS hardware. You must manually adjust these values:
- CC Gain: Set to
0.2 - Capacity Gain: Set to
0.2
Once set, click Write All again. Warning: If you forget to configure these values, the BMS will report a current approximately 5 times lower than the actual value, which will break the SLEEP-DEEPSLEEP logic.
Verification and Testing
In the Registers tab, ensure that Scan is activated (top right corner). If it is not active, you will have to manually click refresh to update the BMS telemetry.

- Voltage & Current: Verify the pack voltage with a multimeter. Connect a constant-current (CC) power supply or electronic load to verify the current readout. For example, if you push 1A into the pack, the gauge in BQStudio's bottom left corner should read around
100(it is configured to display in deci-milliamps).- Note: The current readout is not highly precise at low currents because the 0.2mΩ shunt is optimized for high-current monitoring (50–100A).
- Cell Voltages: You should see voltage readings on cells 1–5 and cell 10. They should all be tightly balanced (± 20mV) and within normal Li-ion voltage ranges (3.0V – 4.2V).
- Temperatures:
- TS1 and TS3: These indicate the current pack temperature (sensors inserted between the cells). The Cell Temperature field will display an average of these two values.
- Int Temperature: Indicates the temperature of the BMS chip itself. This value is also used as the FET temperature reference.
Safety Features and Protections
For drone applications, many standard BMS safety features are intentionally disabled, as losing power mid-flight is generally more dangerous than degrading the battery pack. However, the following core protections remain active:
- Short Circuit in Discharge (SCD): Trips at a 60mV drop across the shunt (equivalent to 300A).
- Certification Note: For battery certification, this should likely be lowered to 40mV (200A). Testing specifications require a short of less than 100mΩ. If an exact 100mΩ short is applied at 20V, the battery will only push ~150A, meaning the 300A SCD would not trigger.
- Once SCD is triggered, it is latched as a Permanent Fail (PF) to disable the pack. It can only be reset using the EV2400 programmer.
- Over Current in Charge (OCC): Triggers if a charging current exceeding 30A is applied.
- Cell Overvoltage (COV): If any cell reaches 4.25V, the pack will disable charging (discharging remains enabled). Once the cell drops below 4.15V, charging is re-enabled.
- Over Temperature in Charge (OTC): Disables charging if the temperature exceeds 55°C. Re-enables at 50°C.
- Under Temperature in Charge (UTC): Disables charging if the temperature drops below 0°C. Re-enables at 5°C.
Permanent Fail (PF) Modes
When a Permanent Fail is triggered, the pack shuts down entirely and requires a manual reset via the EV2400 programmer. The following PF conditions are active:
- Safety Over Voltage (SOV): Triggered if any cell reaches 4.35V or higher for at least 5 seconds.
- Safety Under Voltage (SUV): Triggered if any cell drops to 2.2V or lower for at least 5 seconds.
- Short Circuit in Discharge Latch (SCDL): Latches upon a severe short circuit, as detailed in the protections above.
SHUTDOWN fail
If the pack enters SHUTDOWN mode for whatever reason, its configuration will be restored to default values, so you must reload the config again, as if it was a new pack.