The DUT12 is the twelfth car of the DUT Racing Team, a student project at the TU Delft I'm a member of.
It is a four wheel driven electric race car, with which we won the formula student competition in 2012! It is not only the lightest car at the competition with less than 148 kilograms, but it also accelerates the fastest: 0 to 100 kmph in 2.13 seconds, which is an official world record!
(Check http://dutracing.nl/cars/dut12 for more info about the car.)
My task in the team was to write the software for the main control unit in the car, which basically controls all electronics in the car.
Electronic Control Unit (ECU)
The ECU communicates with the sensor nodes (designed and made by Harmjan Treep) and reads out several other sensors (GPS speed, accelerometers, gyroscopes, accumulator management system, ...) directly to collect data. The data is then stored in flash memory, with a self designed file system optimized for this kind of data. Apart from that, it controls the main relays, dashboard, the brake light, and of course the four motors.
A controller (made in Simulink by our vehicle dynamics department, lead by Sven van Koutrik) runs on the ECU while the car is driving. It calculates the optimal settings for speed and torque for all four motors at 200Hz. One of the things it does is making sure none of the wheels are slipping. This means that the driver can just give 100% throttle and the ECU will make sure the car performs an almost perfect acceleration without wheelspin.
All data is continuously checked for consistency and safety: The throttle pedal has two sensors, and if they don't agree with each other, the car is shut down directly. Also, temperatures, voltages, and lots of other data is checked at all times to ensure the safety of the driver and the car.
The ECU can communicate with a computer, so we can easily read out the data from the data acquisition or change settings. All communication is compressed using zlib to speed it up.
All software is written in C++, and is compiled using GCC with a custom linker script and custom startup code. The real time operating system is interfaced using a self designed transparent C++ wrapper, which allows me to use processes and messages as objects in C++.
The ECU software consists of the following parts:
- CAN Bus Communication Driver
- I2C Bus Communication Driver
- 1-Wire Bus Communication Driver
- Safety Signals (emergency signals from other hardware on the car, including the emergency buttons)
- Motor Controller Communication Driver
- Sensor Nodes Communication Driver
- Accelerometer Driver
- Gyroscope Driver
- Temperature Sensors Driver
- Accumulator Management System Driver
- GPS Driver (highly accurate GPS speed sensor)
- Dashboard Interface Controller
- Real Time Clock Driver
- Brake light Controller
- Sounder Driver
- Simulink Controller (slip ratio control, yaw rate control, etc.)
- Flash Memory Driver (detecting and skipping bad blocks, etc.)
- Data Acquisition (storing all data in flash)
- PC Communication
The ECU runs on a LPC1788 ARM Cortex M3 processor from NXP. The ECU hardware (pcb) is designed and made by Michael Polushkin.
The car can be connected to a computer. Communication with the computer goes over the CAN bus, because I didn't have the time to implement USB.
These are the tools I wrote for the computer, they all run on both Windows and Linux:
- Flash Tool - To read and write directly to and from the flash memory, mark (or unmark) bad blocks, etc.
- Data Aqcuisition Tool - To list, download and erase the sensor data.
- Dashboard Tool - Emulates the dashboard, for debugging.
- Font Generator Tool - Generates fonts for the dashboard using a ttf or png font.
- Settings Tool - To read and change settings for the Simulink Controller.
- MATLAB tools - MATLAB functions to interface the Settings Tool directly.
- A simple installer for all of the above tools.
And last but not least, I designed some fonts for the dashboard. You can use them freely in your own projects if you want.
I could write pages more of interesting details about the DUT12, its hardware, its software and everything around it. But I'm not going to do that, since there are way too much cool projects to be done in way too little time.
If you want to know anything more about the DUT12, just e-mail me! (email@example.com)