Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Modular EV Battery Management System

UVA ECE Fall 2020 Capstone Project design for a modular battery management system (BMS) for use in electric vehicles. This repository contains the embedded systems code for the Main Node and Cell Node boards.


  • The PCB layouts and associated schematics for the Main Node and Cell Node boards can be found on the associated repository on
  • The Main Node uses the STM32G473 MCU.
  • The Cell Node uses the STM32F042 MCU.
  • The Cell Node board is designed to attach using nickel strips to a pair of standard 18650 battery cells connected together using the Vruzend V2.1 battery connector kit.
  • Photos demonstrating the attachment of the Cell Node board to the battery cells can be found here.
  • Both the Main Node and Cell Node were designed to run off an external 12V supply, such as a lead-acid battery, rather than directly off the battery pack.
  • This choice was made to avoid the potential complexity created by the addition of a buck-boost converter for a design without an external supply.


  • Both the Main and Cell Nodes run Mbed OS v6.
  • The Cell Node's STM32F042 MCU has an extremely limited amount of flash memory. As a result, a large number of features must be removed from the build.
  • Macros built into the code allow for the enabling and disabling of features (such as printf) as needed.

Software Environment

  • The instructions on the UVA Solar Car Team Website were used to help set up this project.
  • The PlatformIO Core, which includes the PlatformIO CLI, must first be installed.
  • The PlatformIO IDE can be optionally installed as either a Visual Studio Code or Atom extension.
  • On Windows, the driver for the ST-Link debugger will be needed to upload programs. This driver can be found here.

Directory Structure

  • The include and src directories are split into CellNode, MainNode, and Shared subdirectories.
  • The CellNode subdirectories will only include .cpp and .h files specific to the Cell Node, while the MainNode subdirectories will only include .cpp and .h files specific to the Main Node.
  • The Shared subdirectories will include .cpp and .h files that are common between the two boards.
  • All testing code that can be run on both boards will be located in src/Shared/test_main.cpp.


  • William Zhang
  • Dipesh Manandhar
  • Nripesh Manandhar
  • Nikilesh Subramaniam
  • Phillip Phan


We would like to thank Dr. Harry Powell and Prof. Adam Barnes for their valuable help and support throughout the development of this project.


UVA ECE capstone project design for a modular BMS for use in electric vehicles.







No releases published


No packages published