Last year we used a brushless DC (BLDC) motor and a custom controller to propel our prototype car. BLDC motors are much more efficient than traditional brushed electric motors, and are used in hard drives, quadcopters, and almost all electric vehicles. They’re very simple in concept: a rotating ring of outer magnets (rotor) is pushed and pulled by electromagnets in the center (stator). Energizing certain coils will make the rotor spin to align with the those coils, then the next set is energized to make the rotor spin a further, and so on. If the coils in the stator are energized in the correct order and timing, electrical energy can be converted to motion with up to 95% efficiency.
The controller is given rotor position feedback by three hall sensors placed around the motor. These give the controller coarse feedback of the rotor angle and tell it when to switch to the next state in a truth-table fashion.
More complex commutation schemes exist, such as sinusoidal or field oriented control. These have further efficiency benefits, but ultimately weren’t implemented on our 2016 car due to time constraints.
The 2016 Design
We designed our controller last year to run at 60V voltage limit and 60A current limit. The choice to overdesign was due to the lack of motor data at the time, and an overpowered controller allows for more “electrical gearing” in the face of limited mechanical gearing options.
The heart of the controller is a Teensy 3, a ARM Cortex M4 coded in Arduino. It was chosen because of it’s unique mix of easily accessible peripherals, but ample processing power. The Teensy is also easy to socket, which makes replacement quick during debugging.
A DRV8301 gate driver is used to control the power transistors. This IC provides many features which make driving large FETs at high frequencies easier. Finally, we used IRFS3107 N-FETs for the actual switching.
Please don't hesitate to contact us with questions!