CrazyFlie quadcopter description
As promised, we publish some more information about CrazyFlie, our first quadcopter.
The main architecture of the system is as follow:
The copter itself is organised around the main CPU. The job of this CPU is to acquire the physical measurement given by the gyroscopes and accelerometers and to control the motors to keep the copter stable. This is done by a regulation loop which controls the motors speed 250 times per second. The radio communication has a pretty low bandwidth and is used to send commands to the copter and receive telemetry data from it. The CPU program can be updated by radio.
The computer runs control and telemetry programs. The control program reads the input from a game-pad and sends control commands to the copter. We also have programs that can configure the copter regulation parameters and log the measurements in order to make easier to tune the regulation.
All the development is done on Windows and Linux. Indeed we are 3 to work on this project, two of us work on Linux and one is mainly on Windows. Using FLOSS permit to handle that in a very effective way. We are mainly using the GCC compiler from CodeSourcery for the copter program compilation, GNU Make for the project build, Mercurial for the source control, and python/pyusb for the communication with the copter. All these softwares works seamlessly on both Linux and Windows and made the project pretty easy to handle.
The distance between the motors (horizontally and vertically) is around 8 cm and the total weight is around 20 g.
Details of the top side of the copter electronic board:
The top of the board contains the sensors and the control/communication electronic:
- The JTAG/Serial connector permit to program the processor and to communicate debug messages.
- The Main CPU is a STM32 Cortex-M3. It is clocked at 64MHz from the internal oscillator.
- The 2 Axis X-Y Gyro is an invensense IDG500. It has an analog output and thus is connected to the CPU analog to digital converters.
- The 1 Axis Z gyro is an invensense ISZ500. As the X-Y gyro this is an analog chip connected to the CPU analog to digital converters.
- The 2.4GHz Radio is based on a nRF24L01+ chip from Nordic Semiconductor. It is actually a breakout board sold by SparkFun. The radio is connected to the CPU via a SPI port.
- The 3 Axis Accelerometer is a SMB380 from Bosch. It is connected to the CPU via an I²C bus.
Details of the bottom of CrazyFlie:
Here nothing particular, except that the little battery is taped on the bottom of the copter. The battery comes from a Silverlit x-twin plane and actually permit 4.5min of flight time.
Details under the battery:
Under the battery we mostly have power supply and the “power” electronics:
- The charge connector accepts 5V and permits to charge the battery
- The power switch permits to power the copter either from the charge connector or from the battery.
- The 5V step-up permits to increase the power voltage from the 3~4V coming from the battery to 5V.
- The two 3.3V linear regulators, reduces the 5V to power the copter electronic. The digital and analog 3.3V are generated independently. This was made to reduce the noise on the analog components (here it is the two gyros, a quite critical part).
- Finally at the four sides we have the motors transistors. The power for the motors pass on the top and bottom of the part of PCB that hold the motors.
It can be noted that we also have the battery charging chip just at the right of the 3.3V regulators. It is a classical MAX1555 and is working pretty well.
The idea with the step-up was to get a more stable voltage when the battery is depleted and also to remove some of the noise coming from the motor electonic. Anyway, this boars is capable to work without by using 2.8V linear regulators instead. So most likely the step-up will be excluded on the next version and we also plan to integrate the radio on board.
The motors and propellers are taken from a Silverlit X-twin plane. They are powered by the battery voltage.