I’m really interested in digital signal processing and control theory, as well as mechatronics, so I thought a cool project I could work on next is designing and building a remote control car!
A remote control car should be fairly straight forward, in theory anyways. It consists of:
- A microcontroller that acts as the brain
- An RC receiver, to relay instructions to the microcontroller
- Motors and motor drivers to move the car
- Battery to power the system
I want to add a couple more things to the system:
- IMU to read acceleration and rate of rotation
- Wireless telemetry
Here’s my preliminary functional block diagram, showing the power tree and what connects to the microcontroller:

Power tree (top), system (bottom)
Let’s go through the diagram, block by block:
- Battery: it’ll be 2S battery, which means two lithium ion cells in series. Each cell has a nominal voltage of 3.7 V (3 V to 4.2 V, depending on charge), which means the battery will have a nominal voltage of 7.4 V (6 V to 8.4 V). This will be driving motors, so it needs high output current and capacity.
- Current sensor: I’ll probably use this to estimate how much charge the battery has left, or how long the system has been running for; also how much load is on the motors.
- Boost: this will generate the 12 V to power the H-bridges, which drive the motors. The switch on this thing will have to be pretty beefy. Let’s say the motors draw 2 amps at 12 V; this means the battery will be outputting about twice that; all of this current will be managed by the buck, and the buck’s switch will have to deal with transient currents even larger than that. 12 V was chosen because it is a commonly used voltage for steppers and brushed motors.
- Buck: this will generate the 5 V which will power electronics on and off the system. A lot of servo motors use 5 V, so this rail will be used to power servos if they’re needed for this project. It will also be used to power 3.3 V LDO, which will be used to power most, if not all, the electronics on the PCB.
- LDO: the LDO will generate 3.3 V. Most servos, while powered by 5 V, need or use 3.3 V signals, so this rail is probably necessary. If not, I’ll just use 5 V for everything.
- Microcontroller: I want to get a powerful microcontroller; no more messing with 8 bit AVRs (as handy as they are). Since I want to do digital signal processing and control algorithms, I’m thinking a 32 bit microcontroller with a floating point unit, filter accelerators, fast processing speed and lots of RAM. I’ll have to see what’s on the market, but it’s probably an STM32 microcontroller.
- H-bridges: these can drive brushed and stepper motors. The only thing I’m on the fence about is how many H-bridges I’ll use; I only need two for this specific application, but it’d be nice to use the PCB I make for this project for other stuff too. If I want to make something like a CNC, then I’ll need 6 H-bridges to drive three stepper motors. I’ll probably make the schematic and PCB for 6 H-bridges, but only populate them as I need to. Another thing I’ll have to figure out is how much current I need for the motors. For this project, I’m not trying to make the car carry loads or traverse rough terrain, so the requirements are probably easy to meet.
- IMU: this will let the microcontroller know how much it has moved and rotated. By integrating the acceleration twice, the system can determine its displacement from its starting point. By integrating the gryoscope output, the system can determine its orientation. This will probably only be filtered and then transmitted over RF for telemetry, but it leaves the door open for some cool algorithms, like making a Roomba.
- USB: used for debug communication (RX, TX over COM port) and programming (using a bootloader)
- RF TX/RX: I’ve never done RF PCB design, so this will be interesting. The PCB will have an RF antenna, transceiver and amplifier. There’s lots of these for Arduinos, so I’ll use a similar design. This channel will be used for wireless telemetry, allowing the operator to get the state of the system (displacement, voltage rails, current draw, etc.) and maybe send commands.
- PPM: stands for Pulse Per Minute. This is standard communication protocol used in RC cars and planes. Instead of having 8 different lines to control 8 different motors, with each line carrying a PWM signal, PPM has those 8 PWM signals in series. This allows controlling many motors (or relaying many signals) on a single line. In this application, I’ll use this to control the RC car; I have an RC controller which communicates with an RC receiver, which outputs PPM. This will then communicate with the microcontroller to control the system.
- LED: used for debugging and quickly indicating the status of the system.
- ADC: used to measure voltage of the rails on the PCB, and to measure the current draw of the system. Very useful information to transmit over telemetry. I may just use the ADC channels on the microcontroller.
- GPIO: I’m hoping to connect all the GPIOs on the microcontroller to a connector. This will make debugging a lot easier, since I can easily probe the system, but It’ll also allow expanding upon the PCB by connecting sensors and other devices to it. This will also provide the PWM signals to control servos.
As always, the design will change and evolve as I work on it. But for now, this is the plan; let’s see how it goes.