Ian Hua / Quadcopter-mbedRTOS

You are viewing an older revision! See the latest version

Homepage

Feel free to look at code and implement your own. This article will be updated slowly, whenever I get a break from rock climbing, university and work commitments. Feel free to comment or ask me questions as need be.

Trung Tin Ian HUA - pHysiX Coding May 2014

Code is currently undergoing major changes to improve loop speed and implement stable cascaded control. Currently testing stability of PI-P vs P-PI for attitude, and P vs PI control for rate mode.

Introduction

Quadcopter (X-Mode) using RTOS.

Insert picture of build

Partslist

Sensors

  • TiltyQuad
    • InvenSense MPU6050
    • HMC5883L
    • MPL3115A2
    • Onboard voltage divider for voltage sensing

Frame

  • Hobbyking SK450
  • Custom 3D printed motor mounts
  • 5.5mm thickness vibration-absorbing foam

Propulsion

  • 4x Hobbyking Blue 30A ESC, flashed with SimonK firmware
  • 4x Turnigy D2826/950kV motors
  • 2x LH 10x4.5 props
  • 2x RH 10x4.5 props

Electrical

  • 1x Turnigy 1000mAh 20C Lipo (Entire control logic uses 300mA peak)
  • 1x Zippy 5000mAh 30C Lipo
  • 1x Turnigy 5A max Low RF Noise BEC

Radio

  • 1x HC-05 Bluetooth (TiltyQuad IMU)
  • 1x Turnigy 9x v2 9 channel receiver
  • 1x Turnigy 9x v2 9 channel transmitter, flash with OpenTX and running lipo pack

Implementation

RTOS

4 main threads:

  • Thread1: Output YPR telemetry.
    • Subfunction: Sample MPU6050 and calculate Yaw Pitch Roll angles from DMP quaternion.
    • Settings: 100Hz sampling rate, 100Hz output FIFO buffer.
    • Thread frequency: 100Hz.
  • Thread 2-Master: YPR sample, PI Master/Outer control loop. Attitude control.
    • Settings: Input limits: -500.0, 500.0; Output limits: -200.0, 200.0; Output bias: 0.0, Automatic mode
    • Settings: KP: 0.5, TI: 1.0, TD = 0.0
    • Thread frequency: 200Hz
  • Thread 2-Slave: Gyro sample, PI Slave/Inner control loop. Rate control.
    • Settings: Input limits: -500.0, 500.0; Output limits: -200.0, 200.0; Output bias: 0.0, Automatic mode
    • Settings: KP: 7.0, TI:2.0, TD = 0.0
    • Thread frequency: 400Hz
  • Thread 3: RC & Bluetooth Command, and Telemetry control
    • Settings: Default quadcopter is unarmed, and no telemetry is outputted.
    • Thread frequency: 50Hz
  • Thread 4: Update ESC pulsewidth
    • Note: My ESCs can apparently handle refresh rates of up to 400Hz. This means that the ESC should handle a 400Hz PWM pulse. This is distinguished from how fast I update the actual pulsewidth/duty cycle of my pulse!!!
    • Settings: PWM frequency: 400Hz
    • Thread frequency: 400Hz.

AHRS Sampling

Thread frequency: 100Hz

MPU6050 Sampling rate: 100Hz

FIFO Buffer Output rate: 100Hz

To be completed

Gyro Sampling & PID calculations

Master PID Loop

Thread frequency: 200Hz

To be completed

Slave PID Loop

Thread frequency: 400Hz

To be completed

RC & Bluetooth Command, and Telemetry

Thread frequency: 50Hz

To be completed

Update ESC

Thread frequency: 400Hz

Pulse period: 400HZ

Pulse update rate = Thread frequency = 400Hz

To be completed

Results/Demonstrations

Link to youtube video

To do/discussions (respective order of priority)

  1. Implement Integral control (P-PI or PI-P);
  2. Improve Control loop (remove slight oscillations, investigate D gain)
  3. Add support for EEPROM to store tuned gains outside of default
  4. Remove Bluetooth arming dependency
  5. Remap keyboard input for intuitive Telemetry/control
  6. Add in LCD output for offline setting/debugging
  7. Add in voltage sensing alarm
  8. Build GUI using Processing for Multiwii-like control
  9. Finish this article!

All wikipages