Bastian de Byl c905e1236b
Build Firmware / Build stm32-teslacharger (pull_request) Successful in 59s
feat: S8/S9 - trim chargercan.cpp + restore c2/c3 RX for multi-module Tesla OBC
S8 trimmed the 73-entry chargercan.cpp down to 37 entries to fit
libopeninv's 50-slot CANPOS pool — needed because the upstream firmware
silently overflowed the pool and dropped the SKUDAK 0x211 broadcast at
the tail. Without that broadcast the VCU couldn't see idc/udc/tmpobcmax.

S9 restores 8 of the entries S8 dropped: c2/c3 uac, flag, idc, udc.
These turn out to be NECESSARY for 3-module Tesla OBC operation:

- CalcTotals (charger.cpp:41/48) sums c1+c2+c3 idc and takes the max
  udc. Without c2/c3 idc mapped, idc reports only module 1's
  contribution. Bench observed 2.7 kW reported vs 9.7 kW actual EVSE
  draw — exactly the 1/3 ratio expected.
- CheckChargerFaults (charger.cpp:226-261) gates active2/active3
  detection on c2uac/c3uac > 70V. Without those mapped, the active
  bits short-circuit to false — which masked the c2flag/c3flag
  CheckAlive timeout. We were getting away with the trim by accident.

Kept dropped (still need pool headroom for future):
- c2/c3 iac (AC current — c1iac × 3 is a fine proxy, not used in
  aggregation anywhere)
- c2/c3 stt (state — all modules report same value for healthy operation)
- c2/c3 tmp1/2/in (temps — tmpobcmax from c1's 3 probes is sufficient;
  full 9-probe worst-case is a nice-to-have)
- CHAdeMO RX/TX (0x102/0x108/0x109) — Polarity VCU doesn't use CHAdeMO
- 0x368 idle frame — cosmetic only
- hwaclim duplicates on 0x209/0x20B — all modules report identical limits

Pool math: 42 / 50 slots used, 8-slot headroom for future additions.

VERSTR S8 → S9 so any bench reporting -S8 in the openinverter UI is
visibly the regressed build and needs canclear + reflash.

After flash: user must issue `canclear` from the openinverter Commands
tab so the persisted map gets rebuilt from the new chargercan.cpp.
Power-cycle, verify `can p` shows the 8 new c2/c3 lines, then EVSE
test should report ~9.5 kW in the app (was 2.7 kW).

#patch

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 14:07:19 -04:00
2023-01-23 11:30:16 +01:00
2024-06-12 15:43:36 +02:00
2023-01-23 11:32:15 +01:00
2022-10-10 12:39:30 +01:00
2023-12-15 17:56:07 +01:00
2022-10-10 12:39:30 +01:00
2023-12-15 17:56:07 +01:00

stm32-template

This project can be a starting point to your own STM32 project. It contains facilities that make software development easier and ensures compatibility with the esp8266 web interface.

It provides

  • Mostly object oriented syntax
  • A simple, hardware based scheduler for recurring tasks
  • Analog input management, fully independent with DMA
  • Digital I/O management
  • CAN library supporting up to 2 CAN interfaces
    • hardware filter support
    • No limitation on number of messages
    • Automatic mapping from/to parameter module
    • CAN Open SDO support
    • Fully interrupt driven
  • Error memory
  • ligthweight fixed point arithmetic
  • string functions to be independent of stdlib
  • Parameter module that interfaces to esp8266 web GUI
  • Saving parameters to flash
  • Serial terminal with custom commands and DMA transfer
  • Mathematical functions (sin/cos, arctan, square root)
  • PI controller class
  • Functions for field oriented control

OTA (over the air upgrade)

The firmware is linked to leave the 4 kb of flash unused. Those 4 kb are reserved for the bootloader that you can find here: https://github.com/jsphuebner/tumanako-inverter-fw-bootloader When flashing your device for the first time you must first flash that bootloader. After that you can use the ESP8266 module and its web interface to upload your actual application firmware. The web interface is here: https://github.com/jsphuebner/esp8266-web-interface

Compiling

You will need the arm-none-eabi toolchain: https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads On Ubuntu type

sudo apt-get install git gcc-arm-none-eabi

The only external depedencies are libopencm3 and libopeninv. You can download and build these dependencies by typing

make get-deps

Now you can compile stm32- by typing

make

And upload it to your board using a JTAG/SWD adapter, the updater.py script or the esp8266 web interface.

Editing

The repository provides a project file for Code::Blocks, a rather leightweight IDE for cpp code editing. For building though, it just executes the above command. Its build system is not actually used. Consequently you can use your favority IDE or editor for editing files.

Adding classes or modules

As your firmware grows you probably want to add classes. To do so, put the header file in include/ and the source file in src/ . Then add your module to the object list in Makefile that starts in line 43 with .o extension. So if your files are called "mymodule.cpp" and "mymodule.h" you add "mymodule.o" to the list.

When changing a header file the build system doesn't always detect this, so you have to "make clean" and then make. This is especially important when editing the "*_prj.h" files.

S
Description
Skudak fork of jsphuebner/stm32-teslacharger — OpenInverter-based Tesla Gen2 charger firmware with SKUDAK CAN broadcast (0x210) for VCU integration
Readme 1.2 MiB
Languages
C++ 56.3%
C 33.8%
Makefile 8.2%
Linker Script 1.7%