Electric car on CAN

ECU failure and fault response

Electric car on CAN

Four ECU models drive a simulated electric car and talk only over a virtual CAN bus. Stop one mid-drive and watch the rest of the car react.

What it shows

  • Separate ECUs wired from one DBC file
  • Lost-node detection through CAN RX timeouts
  • ABS and traction control on four road surfaces
  • Automated SIL and system tests

Built with

  • MACS Studio
  • CAN Bus nodes
  • Python nodes
  • Test Manager
  • Scene 3D dashboard

Four ECUs, one bus

The car is four MACS Studio models, each running as its own node with its own CAN Bus node. car.dbc is the wiring: a message's sender transmits it, and every node named as a receiver of one of its signals receives it.

ECU What it does
Vehicle The car itself: 1,850 kg, a 350 Nm rear motor, tyres with slip on dry, wet, snow or ice, brakes and a 75 kWh pack
VCU Power modes, gears, the pedal map, regeneration and the torque request
ABS Reference speed, ABS per wheel, brake blending with regeneration and traction control
Cluster Speedometer, power meter, trip computer, warning lamps and a DTC counter

Stop an ECU, mid-drive

Stop an ECU's CAN node and its frames stop. Every receiver's RX timeout fires, and the rest of the car responds as it was designed to.

Lost What happens
VCU The inverter goes to its safe state, the cluster lights the CAN lamp and names the VCU, and a DTC is counted
ABS The brakes fall back to plain hydraulics and the wheels lock on snow, while the VCU limps home at half torque without regeneration
Cluster Nothing else depends on it, so the driver's display freezes and goes stale

Tested like the real thing

The test suite runs against the deployed project at two levels. SIL tests stop one ECU's CAN node and play the bus themselves. System tests run the whole car on the bus, including braking on snow and losing ECUs mid-drive.

A driver that learnt the track

The car can also drive itself round a 700 m lap of hills, a kicker and washboard. The policy was trained by reinforcement learning on 12 cars in parallel, each one the same four models. It laps in about 30 to 33 s, against 41 s for a hand-tuned cruise at 66 km/h, and runs live as a Python node using only NumPy.

This is a simulation running on a virtual CAN bus, built to show what MACS can do.

Want to build something like this?

Tell us about your system and we'll show you MACS running live.