Design and Build of a Remote Control (RC) Verical Take

Transcription

Design and Build of a Remote Control (RC) Verical Take
!
"#$ %!
#
!
%!
%& %!
!
"#
ii
Executive Summary
This project is a continuation of the 2004 University of Adelaide Mechanical Engineering
final year VTOL project, which aimed to develop a controlled and stable VTOL model
aircraft based on the F-35 Joint Strike Fighter. Last year’s project group was unable to
complete the project for several reasons, primarily because of the poor performance of the
internal combustion engines. Due to advances in electric motor and battery technology,
the use of electric motors in now a feasible option and has been chosen for this year’s
project. An investigation was performed to re-evaluate the most suitable aircraft upon
which to base this year’s design. This research identified that the V-22 Osprey was the
most suitable platform. The primary advantage in using the V-22 Osprey as opposed to
the F-35 was the higher thrust to weight ratio achievable using propellers.
Several designs were considered during the concept evolution, with each concept compared
with the design requirements. The final concept which met all requirements was then
modelled in SolidEdge where further details were considered. The design consists of an
Aluminium chassis with rotating wing arms controlled by servo motors allowing for tiltrotor operation. Control simplifications use this wing arm rotation along with a rear
tail-fan to directly control all three rotational degrees of freedom.
Thrust providing components were selected to best satisfy the constraints of cost, weight
and power. Ultimately two-blade fixed-pitch propellers were chosen to be mounted radially
to brushless motors via a planetary gearbox. These motors are controlled using an
electronic speed controller and powered by on-board Lithium Polymer batteries. Using
software based propeller theory these components were shown to produce adequate thrust.
To facilitate the creation of an appropriate control system using the physical
characteristics of the model aircraft, a mathematical representation of the system
was obtained by following several closely related examples. Using this mathematical
representation a state space controller was developed using a Reduced-Order Observer
and tuned using LQR Optimal Control. Another control technique, Proportional Integral
Derivative (PID) control, was also used as a controller for the aircraft. While the PID
iii
controller was less capable than the state space controller, it was much easier to implement
and tune.
The controllers were initially built in Matlab Simulink, which creates C code that is
cross-compiled and downloaded to a dSPACE DS-1104 rapid prototyping control platform.
This allowed for the easy implementation and tuning of these control systems. However
this control platform is an undesirable final solution to control the aircraft due to its
size and cost, so the control system was migrated to the on-board MiniDRAGON+
microcontroller. This microcontroller was specifically programmed to interface with all of
the control peripherals, including a standard remote control and receiver which was used
to control the model.
The model aircraft was attached to a gimble to allow the tuning of the control systems
while in a tethered and safe configuration. However due to problems associated with
this gimble the tuning was not successfully completed. The model was then moved to a
semi-tethered configuration, where it was removed from the gimble but still tethered via
the wiring loom which allowed relatively free movement within a fixed range. During this
semi-tethered stage of controller tuning a gearbox shaft failed which prevented progress
towards the project goals of controlled and stable hover.
The project was set back due to the late procurement of vital components and several
mechanical failures. While this contributed to the project goals of controlled and stable
hover being incomplete, the design was shown to be able to provide enough thrust to
achieve hover and sufficiently controllable to achieve these goals. Furthermore due to the
significant work undertaken in integration and control embedding the model is a solid
control platform for future work.
iv
Acknowledgements
The VTOL group would like to thank everybody who has assisted with the project.
Our project supervisor Dr. Ben Cazzolato has provided valuable assistance in this project.
Both his technical advice and general experience have been very useful for us. We thank
Ben for continuously allocating us into his exceedingly demanding schedule and appreciate
his time spent with us.
The Sir Ross and Sir Keith Smith Fund for providing the financial support which has
made this project possible.
Mr. Tim Newman, our industrial associate has provided us with advice and product
sourcing based on practical knowledge and experience with aeronautical engineering and
model aircraft.
Within the School of Mechanical Engineering Mr. Richard Pateman and Mr. Steven
Kloeden from the workshop and Mr. Silvio De Ieso from Electronics and Instrumentation
have been extremely helpful throughout the project, providing advice and assisting us
despite our constant pestering. Dr. Frank Wornle has also provided valuable help
with the microcontrollers and provided advice regarding the use of his real-time target
for embedded control. Postgraduate student Mr. Rohin Woods also helped in the
development of a Virtual Reality model.
Finally the group would also like to thank our family and friends for supporting us
throughout the project.
v
vi
Disclaimer
We, the authors, state that the material contained within is entirely our work unless
otherwise stated.
Zebb Prime
Allan Stabile
Michael Smith
Jesse Sherwood
vii
viii
Contents
Executive Summary
iii
Acknowledgements
v
Disclaimer
vii
List of Figures
xv
List of Tables
xviii
1 Introduction
1
1.1
Aim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2
Scope
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3
Significance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2 Literature Review
4
2.1
Key Findings of the 2004 Report . . . . . . . . . . . . . . . . . . . . . . .
4
2.2
Existing VTOL Aircraft . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2.1
F-35B Joint Strike Fighter . . . . . . . . . . . . . . . . . . . . . . .
5
2.2.2
V-22 Osprey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2.3
Experimental Craft . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3
Previous Tilt-Rotor VTOL RC Aircraft . . . . . . . . . . . . . . . . . . . .
9
2.4
Control Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
ix
Contents
Contents
3 Concept Evaluation
3.1
3.2
3.3
13
F-35 Joint Strike Fighter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.1
Ducted Fans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.2
Basic Feasibility Calculation . . . . . . . . . . . . . . . . . . . . . . 15
Osprey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.1
RC Propellers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.2
Basic Feasibility Calculations . . . . . . . . . . . . . . . . . . . . . 17
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4 Mechanical Design
4.1
4.2
4.3
19
Control Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.1.1
Yaw Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.1.2
Pitch Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.1.3
Roll Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.1.4
Translation Control . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Frame Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2.1
Materials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2.2
Tilt Rotor Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2.3
Final Tilt-Rotor Design . . . . . . . . . . . . . . . . . . . . . . . . 22
4.2.4
Frame Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2.5
Final Frame Design . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Propulsion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3.1
Propeller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.3.2
Propeller Theory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.3.3
Motor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
x
Contents
4.4
4.5
Contents
4.3.4
Batteries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.3.5
Propulsion Component Summary . . . . . . . . . . . . . . . . . . . 34
4.3.6
Tail Thrust . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Sensors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.4.1
Inertial Measurement Unit (IMU) . . . . . . . . . . . . . . . . . . . 37
4.4.2
Rate Gyroscopes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Actuators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.5.1
Servo Motors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5 Mathematical System Model
39
5.1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2
State Equations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.3
5.2.1
Linearisation Methods Used . . . . . . . . . . . . . . . . . . . . . . 39
5.2.2
Propeller Angles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.2.3
Left and Right Propeller State Equations
5.2.4
Rear Impeller Equation . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.2.5
Pitch Axis
5.2.6
Roll Axis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.2.7
Yaw Axis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2.8
Vertical Translation
5.2.9
Lateral and Longitudinal Translation . . . . . . . . . . . . . . . . . 46
. . . . . . . . . . . . . . 41
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
. . . . . . . . . . . . . . . . . . . . . . . . . . 46
Virtual Reality Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
xi
Contents
Contents
6 Control System
6.1
6.2
51
Classical Control (PID Controller) . . . . . . . . . . . . . . . . . . . . . . . 51
6.1.1
Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.1.2
Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.1.3
Controller Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
State Space Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.2.1
Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.2.2
Controller Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6.2.3
Observer Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.2.4
Simulink Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.2.5
Microcontroller Implementation . . . . . . . . . . . . . . . . . . . . 59
7 Implementation of Control
7.1
7.2
61
Signals, Hardware and Software . . . . . . . . . . . . . . . . . . . . . . . . 61
7.1.1
Control Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.1.2
Control Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.1.3
Control Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Development Stage (Tethered) . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.2.1
Hardware Configuration . . . . . . . . . . . . . . . . . . . . . . . . 66
7.2.2
Software Configuration . . . . . . . . . . . . . . . . . . . . . . . . . 70
7.3
Semi-Tethered Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.4
Fully Embedded Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.4.1
Embedded Hardware Design . . . . . . . . . . . . . . . . . . . . . . 74
7.4.2
Embedded Software Design . . . . . . . . . . . . . . . . . . . . . . 75
xii
Contents
Contents
8 Testing and Tuning
78
8.1
Initial Open Loop Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
8.2
Closed Loop Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8.3
Untethered Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
9 Constraint Analysis
83
9.1
Cost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
9.2
Weight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
9.3
Power Budget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
10 Issues
87
10.1 IMU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
10.2 Sourcing of Equipment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
10.3 Mechanical Failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
10.3.1 Wing Arm Motor Mount . . . . . . . . . . . . . . . . . . . . . . . . 88
10.3.2 Gearbox Shaft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
10.4 Wing Arm Bearings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
10.5 Electrical Noise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
10.6 Unmodelled Gimble Dynamics . . . . . . . . . . . . . . . . . . . . . . . . . 90
10.7 Weight of Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
11 Discussion and Future Work
92
11.1 Summary of achievements . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
11.1.1 Choice of platform . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
11.1.2 Mechanical design . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
11.1.3 Component Selection and Procurement . . . . . . . . . . . . . . . . 93
xiii
Contents
Contents
11.1.4 Mechanical Construction . . . . . . . . . . . . . . . . . . . . . . . . 93
11.1.5 Mathematical Modelling . . . . . . . . . . . . . . . . . . . . . . . . 93
11.1.6 Controller Design and Tuning . . . . . . . . . . . . . . . . . . . . . 93
11.1.7 Control Implementation . . . . . . . . . . . . . . . . . . . . . . . . 93
11.2 Future Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
11.2.1 Stable Hover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
11.2.2 Real-Time Embedded Gain Updating . . . . . . . . . . . . . . . . . 94
11.2.3 System Identification . . . . . . . . . . . . . . . . . . . . . . . . . . 95
11.2.4 Reduced Precision Sensors . . . . . . . . . . . . . . . . . . . . . . . 95
11.2.5 Model Body . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
11.2.6 Conventional Flight . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
References
97
A CAD Drawings
99
B Simulink Code
100
C Embedded Controller Code
101
xiv
List of Figures
2.1
F-35B JSF STOVL Aircraft (JSF, 2005). . . . . . . . . . . . . . . . . . . .
6
2.2
F125-PW-600 Power Plant for the F-35B JSF STOVL (JSF, 2005). . . . .
6
2.3
F-35B JSF STOVL Landing (JSF, 2005). . . . . . . . . . . . . . . . . . . .
7
2.4
V-22 Osprey in its Hover Configuration (Boeing, 2005). . . . . . . . . . . .
8
2.5
Cut-away View of the V-22 Osprey (Rogers, 1989, p. 242). . . . . . . . . .
8
2.6
Larry’s V-22 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.1
Wind Tunnel Testing of DS-51-DIA + Hacker 50XL Motor (Schubeler, 2005) 15
3.2
Wind Tunnel Testing of DS-51-DIA + HP 220-40-A3 Motor (Schubeler,
2005) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.1
Yaw Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2
Rotating Mount Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.3
Internal Motor Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.4
Final Motor Rotation Configuration . . . . . . . . . . . . . . . . . . . . . . 23
4.5
Motor and Motor Mount . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.6
First Frame Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.7
Redesigned Frame Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.8
Final Frame Concept Sketch . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.9
Final Frame Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
xv
List of Figures
List of Figures
4.10 Frame As Built . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.11 Selected Motor, Propeller and ESC. . . . . . . . . . . . . . . . . . . . . . . 35
4.12 Moment About CoM from Primary Thrust . . . . . . . . . . . . . . . . . . 35
4.13 Net Moment of Zero About CoM . . . . . . . . . . . . . . . . . . . . . . . 36
4.14 Rear Thrust Unit - Brushless Motor, Ducted Mini-Fan, ESC . . . . . . . . 37
4.15 Servo Mounted on Wing Arm . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.1
Basic Diagram of Model Layout . . . . . . . . . . . . . . . . . . . . . . . . 40
5.2
Propeller Angles
5.3
Basic Virtual Reality Model . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.4
V-22 Osprey Model in V-Realm Builder . . . . . . . . . . . . . . . . . . . . 49
5.5
Final V-22 Osprey VR Model . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.6
Simulink Model Driving the VR Block . . . . . . . . . . . . . . . . . . . . 50
6.1
Generalised PID Controller (Cazzolato, 2005b) . . . . . . . . . . . . . . . . 52
6.2
Decoupled PID Control System . . . . . . . . . . . . . . . . . . . . . . . . 53
6.3
Full State Space Controller (Cazzolato, 2005c) . . . . . . . . . . . . . . . . 54
6.4
Reduced Order Observer Implementation Cazzolato (2005c) . . . . . . . . 58
6.5
Simulink State Space Model . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.6
Simulink Model with Observer and Connections from IMU and to dSPACE 60
7.1
Example PWM Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.2
RC PWM and Servo Motor Example . . . . . . . . . . . . . . . . . . . . . 62
7.3
RS-232 Connectors and Pinouts used in this Project . . . . . . . . . . . . . 63
7.4
dSPACE Breakout Board . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.5
MiniDRAGON+ Development Board. . . . . . . . . . . . . . . . . . . . . . 65
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
xvi
List of Figures
List of Figures
7.6
PicoPic Servo Motor Controller.(Picobytes inc., 2003) . . . . . . . . . . . . 65
7.7
Tethered Configuration Hardware Layout . . . . . . . . . . . . . . . . . . . 67
7.8
Tethered Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.9
Tethered Power Supply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.10 Breakout Board . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.11 Modified Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
7.12 PicoPic Mounted to the Aircraft Frame
. . . . . . . . . . . . . . . . . . . 70
7.13 Abstracted Simulink Model . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7.14 VTOL Control Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.15 ControlDesk Layout for the PID Controller . . . . . . . . . . . . . . . . . . 72
7.16 free2move Bluetooth RS-232 Transmitter / Receiver . . . . . . . . . . . . . 73
7.17 Untethered Hardware Configuration . . . . . . . . . . . . . . . . . . . . . . 74
7.18 RC Transmitter and Receiver . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.19 Embedded Code Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
8.1
Emeter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8.2
Untethered Testing Outside the Holden Lab . . . . . . . . . . . . . . . . . 80
8.3
Untethered Testing on Grass . . . . . . . . . . . . . . . . . . . . . . . . . . 81
8.4
Mechanical Failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
10.1 Failure of shaft at Wing/Motor Mount junction . . . . . . . . . . . . . . . 89
xvii
List of Tables
3.1
Ducted Fan Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2
Propeller Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.1
Mechanical Properties of Common Model Aircraft Materials . . . . . . . . 21
4.2
Comparison of Battery Types . . . . . . . . . . . . . . . . . . . . . . . . . 34
9.1
Component Expenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
9.2
Estimated Student Labour Costs . . . . . . . . . . . . . . . . . . . . . . . 84
9.3
Weight Budget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
9.4
Control Circuit Power Budget . . . . . . . . . . . . . . . . . . . . . . . . . 86
9.5
Motor Power Budgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
xviii
Notation
Acronyms and Abbreviations
CoM
CoG
CRO
CTOL
ECT
GUI
IMU
LiPo
LQR
MIMO
PWM
RC
RPM
SISO
SLA
USB
VR
VTOL
Centre of Mass
Centre of Gravity
Cathode Ray Oscilloscope
Conventional Take-Off and Landing
Enhanced Capture Timer
Graphical User Interface
Inertial Measurement Unit
Lithium Polymer
Linear Quadratic Regulator
Multiple Input Multiple Output
Pulse Width Modulation
Remote Control
Revolutions Per Minute
Single Input Single Output
Sealed Lead Acid
Universal Serial Bus
Virtual Reality
Vertical Take-Off and Landing
xix
List of Tables
List of Tables
Nomenclature
Attitude
Authority
Nacelle
Pitch
Propeller Pitch
Roll
Yaw
The position of an aircraft relative to a frame of reference, typically
the horizon or direction of motion.
The amount of control the aircraft provides over its degrees of
freedom.
A streamlined enclosure to protect something, such an an engine.
In the context of this report it refers to the engine covers located
at the wing tips of the V-22 Osprey.
The up or down movement of the nose of an aircraft.
The distance a propeller will move forward in a perfect fluid
The rotation of an aircraft about its longitudinal axis, that is the
axis which runs along the length of the aircraft.
The left or right movement of the nose of the aircraft
xx
List of Tables
List of Tables
Roman Symbols
a
A
E
f
F
J
J
p
r
T
T
v
y
Acceleration (ms−2 )
Area (m2 )
Young’s Modulus of Elasticity (GP a)
Frequency (Hz)
Force (N )
Moment of Inertia (kg.m2 )
Advance Ratio
Pitch Angle (radians)
Roll Angle (radians)
Thrust (N )
Period (s)
Velocity (ms−1 )
Yaw Angle (radians)
Greek Symbols
τ
φ
ω
ρ
σ
θ
Moment (N.m)
Propeller Pitch Angle (radians)
Angular Velocity (radians.s−1 )
Density (kg.m3 )
Tensile Stress (M P a)
Propeller Angular Position (radians)
Note: ẋ indicates the temporal derivative
dx
dt
of x.
xxi
Chapter 1
Introduction
Vertical Take-Off and Landing (VTOL) aircraft are able to take-off with the agility of
a helicopter while retaining the efficiency and speed of an airplane during conventional
flight. The applications of such an aircraft are vast, ranging from civilian transport
to aeromedical evacuation and troop deployment (Bell Agusta, 2005; Wilkins, 2001).
Currently such aircraft have been limited to military and research applications. The
long range and efficiency associated with conventional aircraft means they can cover large
distances and the can land where conventional aircraft often cannot. In these locations
supplies can be deployed or surveillance obtained without the need for a sizeable landing
area.
Similar benefits exist for scaled model Remote Controlled (RC) VTOL vehicles. Model
aircraft enthusiasts are more often than not forced to fly their fixed wing aircraft in
areas containing open and appropriate ground space necessary for take off and landing.
However, a model RC VTOL aircraft would allow for launching from a roof top or an
inadequate surface for conventional take off such as the beach. These needs and potential
applications provide the motivation for this design project, in the anticipation of designing
and building a model VTOL aircraft that is able to be controlled remotely and affordable
to the everyday enthusiast.
1.1
Aim
The aim of this project is to develop a remote control model VTOL aircraft that is a scale
model of a real life aircraft. It should feature a control system which allows the aircraft to
remain in stable hover without user intervention. By definition, this aircraft must be able
to take off vertically and transition into conventional flight and be able to return to hover
1
Chapter 1. Introduction
1.2. Scope
mode for landing. It is envisaged that a significant market would exist if a VTOL aircraft
could be purchased for a price affordable to the average RC enthusiast. It is desired to
make such an aircraft available for under $2000. During development the aircraft will be
controlled via a PC, however the final version must be controllable using a standard RC
receiver.
It is desirable for the model to be intuitive to fly for someone who is used to flying
conventional model aircraft. As such when the model is hovering, the control system
should be capable of keeping the model stable with minimal user intervention.
1.2
Scope
As outlined in Section 1.1, this project is an ambitious one and not able to be completed in
a one year timeframe. The primary goal of this year’s project was to develop a mechanical
and control system design which would allow a model aircraft to attain stable hover. This
stable hover would be initally attained whilst tethered to a gimble before free flight was
attempted. This report details the design and construction of a prototype VTOL aircraft
based on the V-22 Osprey. It highlights the achievements of the authors and identifies
possible future work. Real life VTOL aircraft and previous attempts of replicating these
are discussed in the literature review as are some of the control methods for the model.
This report describes the design and construction of a RC VTOL model aircraft based on
the V-22 Osprey, the control system developed for stabilising the plane whilst in hover,
results from testing and possible future work.
A thorough review of previous literature and VTOL designs was undertaken with
the intention of selecting the most suitable platform upon which to base the design.
Full documentation is given for the electrical and mechanical design of the aircraft
including control requirements, frame design, propulsion methods, and sensor and
actuator selection. A comprehensive section is devoted to the mathematical model of the
system. This section describes the fundamental equations and also the approximations
and linearisations made to facilitate the design of a state space control system. A detailed
account of control system design and implementation is provided. This describes the
development of various control systems in software form and their implementation onto
the associated electrical hardware. Results and conclusions from testing are discuissed
along with analysis of constraints and issues. Possible improvements to the design are
discussed along with a list of future work deemed beneficial to the projects success.
2
1.3. Significance
1.3
Chapter 1. Introduction
Significance
There are currently no commercially available model VTOL aircraft (apart from rotary
winged) for the average enthusiast. The development of a VTOL capable aircraft sold in
kit form would be an impressive innovation in this field. Individuals have attempted to
build their own VTOL capable aircraft with some degree of success at hovering. However,
a RC VTOL aircraft with the capability to transition to conventional flight still eludes
the global RC aircraft community. The construction of a model that is able to transition
from a hover to conventional flight would be an achievement in itself, furthermore the
ability to VTOL would significantly increase available locations that the model can be
flown and enjoyed in, without the sacrifice of traditional aircraft manoeuvrability often
lost with VTOL aircraft such as model helicopters (Bell Agusta, 2005).
3
Chapter 2
Literature Review
Since this project is a continuation of an existing project, it is important to undertake a
critical analysis of the work already done and the theory involved. Other recent advances
in relevant areas must also be considered, along with well accepted traditional theory and
principles associated with the proposed design.
2.1
Key Findings of the 2004 Report
The most relevant document to the current project was the honours report of Jarrett
et al. (2004) titled “Design and Build of a Remote Control VTOL Aircraft” of which the
current project is an extension. The authors’ aim was to design and build a commercially
viable model VTOL aircraft based upon the F-35 Joint Strike Fighter (JSF), focusing on
the mechanical design of the model and the control system to enable it to hover.
With the help of several industry professionals they successfully built the model. However
they were unable to maintain a prolonged hover due to inadequacies of the internal
combustion engines. These inadequacies were namely:
• Large levels of vibration interfering with the inertial measurement unit and causing
frame fatigue.
• Their unpredictable performance due to tuning sensitivities, such as small changes
in air moisture producing a significant change in power output.
• The time delay between the throttling of the motors and their actual response.
• The time-varying nature of the engines, which stressed the control system.
4
2.2. Existing VTOL Aircraft
Chapter 2. Literature Review
Despite these issues, hover was sustained for short periods proving the control system able
to successfully control the aircraft. With time-invariant motors, such as electric motors, it
was thought that a sustained hover would be achievable. The progress in the technology of
batteries, specifically Lithium Polymer (LiPO) batteries, during the course of the project
made it theoretically possible to use electric motors with enough thrust to lift the aircraft
while maintaining an economically viable production cost.
An analysis of the power losses from several different thrust vectoring techniques was
performed. These included a swivelling duct, gimballed motor, fluidic vectoring and thrust
deflection. It was found that the gimballed motor, where the whole motor and impeller
rotate, had the least power loss, at the expense of complexity and model aesthetics. The
final model made use of the swivelling duct so it reflected the true form of the F-35 JSF
better.
2.2
Existing VTOL Aircraft
Model aircraft are typically based on existing full-size aircraft. In this section a critical
analysis of existing VTOL aircraft is presented.
2.2.1
F-35B Joint Strike Fighter
The Joint Strike Fighter program is the focal point of the US Department of Defence for
creating advanced and affordable next-generation strike aircraft for all four branches of
the U.S. armed forces and their allies (JSF, 2005). It attempts to do this by creating
three variants; each suited to a particular niche in the armed forces with up to 80% parts
commonality between models (Jarrett et al., 2004). The variant of particular interest to
this project is the F-35B Short Take-Off and Vertical Landing (STOVL), shown in Figure
2.1.
The F-35B is powered by the Pratt & Whitney F135-PW-600 turbojet engine which is
coupled to a lift fan fore of the main turbine, as shown in Figure 2.2. Vertical thrust at
the rear of the aircraft is generated by vectoring the turbine exhaust through a specially
developed three bearing swivel nozzle. A landing F-35B with its nozzle in the vertical
position is shown in Figure 2.3. Differential thrust from the exhaust and the lift fan allows
for pitch control of the aircraft. The airducts protruding from the sides of the turbine
(Figure 2.2) direct jets of air out to the wings, controlling roll. The nozzle at the rear of
the turbine can swivel either side of straight down, vectoring thrust either side to control
yaw.
5
Chapter 2. Literature Review
2.2. Existing VTOL Aircraft
Figure 2.1: F-35B JSF STOVL Aircraft (JSF, 2005).
Figure 2.2: F125-PW-600 Power Plant for the F-35B JSF STOVL (JSF, 2005).
6
2.2. Existing VTOL Aircraft
Chapter 2. Literature Review
Figure 2.3: F-35B JSF STOVL Landing (JSF, 2005).
2.2.2
V-22 Osprey
According to Boeing (2005) the V-22 Osprey is the first aircraft designed from the ground
up to accommodate the needs of all four branches of the U.S. armed forces. Winning the
Naval Air System Command contract in April 1983 the project that was to be known as
the Osprey was a collaboration between Bell, known for their experience with tilt wing
rotorcraft, and Boeing Vertol, known for their experience with heavy lifting helicopters
(Rogers, 1989). The V-22 is designed for both Vertical Take-Off and Landing (VTOL) and
Short Take-Off and Landing (STOL), with the former used for larger payloads. Capable
of 510 km/h (Boeing, 2005) in conventional flight the V-22 combines the advantages of
helicopters and fixed wing aircraft. A V-22 Osprey in its hover configuration is shown in
Figure 2.4.
Powered by two Allison T406-AD-400 turboprop engines, each developing 4,586 kW of
power, the V-22 drives each of its tri-blade 11.58 m diameter proprotors to achieve the
large amount of thrust required for vertical take-off (Boeing, 2005). Utilising both cyclic
and collective propeller pitch control, the V-22 can control all six of its degrees of freedom
when in hover while the nacelles remain stationary and in their upright position (Rogers,
1989). A cut away of the port nacelle to show these pitch control mechanisms is shown
in Figure 2.5, as well as a cut away of the starboard nacelle showing the tilt jack.
7
Chapter 2. Literature Review
2.2. Existing VTOL Aircraft
Figure 2.4: V-22 Osprey in its Hover Configuration (Boeing, 2005).
Figure 2.5: Cut-away View of the V-22 Osprey (Rogers, 1989, p. 242).
8
2.3. Previous Tilt-Rotor VTOL RC Aircraft
2.2.3
Chapter 2. Literature Review
Experimental Craft
Franklin (2002) provides a brief historical background on some experimental VTOL
aircraft including the X-22A VTOL Research Craft and XC-142 Tilt-Wing Tactical
Transport. The X-22A has four tilting ducted propellers, a pair near the nose and a
pair on the main wings at the rear. The XC-142 follows the common design of tilt rotor
aircraft but with four turbofan powered propellers on the wings and a shaft driven tail
propeller. The tail propeller is used to control pitch while in hover. In both cases the
propellers are driven through a complex interconnected shaft and gearbox system for
redundancy.
2.3
Previous Tilt-Rotor VTOL RC Aircraft
There have been a number of recent attempts by individuals to build RC VTOL tilt-rotor
aircraft. No one has succeeded in building a model capable of performing a successful
transition to conventional flight. There are many threads on discussion boards such as
“rcgroups.com” where individuals have expressed an intense interest in the development
of a commercially available transition capable tilt-rotor RC aircraft. Literature for this
section is restricted due to the fact that the people who have attempted to build an RC
VTOL aircraft are enthusiasts who do not generally publish their designs and ideas in
detail.
Larry Chapman is an enthusiast who has been developing a tilt-rotor RC aircraft based
on the V-22 for over a decade and has actually flown in a USAF V-22 flight simulator
(Chapman, 2005). His most recent model used customised 2 blade propellers with variable
pitch (from a RC helicopter) driven by O.S.46 petrol engines and is shown in Figure 2.6.
Initially Larry used no control augmentation but the latest model uses two rate gyros for
yaw and roll. The generic gyroscope based control system used has been a success even
though no advanced control techniques are employed.
The earliest model built by Larry had the motors mounted within the fuselage of the
plane with gearboxes at the wingtips. This proved highly unstable during hover and
more recent designs have the motors mounted at the wingtips. One of the initial major
problems experienced by Larry was the gyroscopic effects on the fuselage from attempted
rotation of the nacelles. When the propeller nacelles angles were altered the nose would
pitch up. Initially flat symmetrical helicopter blades were used but these were found to
stall when they were tilted to the 60 degrees from standard required for transition. To
prevent this, the model now incorporates timber propellers with a more traditional screw
9
Chapter 2. Literature Review
2.3. Previous Tilt-Rotor VTOL RC Aircraft
Figure 2.6: Larry’s V-22 Model
10
2.4. Control Techniques
Chapter 2. Literature Review
shape. Larry has also experienced issues changing the controls from hover to forward
flight and had to rebuild his models several times due to large crashes. The latest model
is able to sustain semi-hover flight with the propellers tilted at 60 degrees but as yet is
unable to transition to conventional flight.
In 2003, an Austrian man by the name of Norbert also built a scale model of the V-22
(TiltRotorMech, 2005). Norbert used a single petrol engine to power a pair of variable
pitch tri-blade propellers. He claimed to be able to sustain a basic hover with some
control of propeller tilt but has not achieved transition to forward flight. Again a generic
gyroscope based control system is able to stabilise the plane during hover.
Brian DiCinti has built a RC V-22 with electric engines (TiltRotorMech, 2005). In 2003 he
was able to maintain hover and helicopter like forward flight without properly functional
tilt control. Again, only a basic gyroscope control system is employed to stabilise the
plane. Brian is currently attempting to develop a more functional wing tilting system.
The above cases demonstrate that sustained hover is possible even with basic control
systems. If a more advanced control system were implemented in designs such as those
above to augment pilot input the controllability should see a major improvement. An
advanced control system may also facilitate the control of the various degrees of freedom
such as yaw and roll whilst in hover.
The transition from hover to forward flight appears to be the underlying barrier to all
previous attempts at RC VTOL tilt-rotor aircraft. An advanced control system similar
to one used in full size tilt-rotor plane would also make transition to forward flight more
feasible, as few RC pilots would have the skill to control the model through transition
without some form of control augmentation. A heavily automated transition system may
allow even less experienced pilots to fly the plane, a beneficial attribute for a commercial
RC aircraft.
2.4
Control Techniques
Classical methodologies based on PID feedback control are still implemented in full-scale
rotorcraft control (Mettler, 2003). The big advantage of such a simple control architecture
is that it can be implemented without a model of the vehicle dynamics; feedback gains can
be tuned experimentally. Franklin (2002) contains detailed analysis of classical control
systems used by various forms of VTOL aircraft when in hover or forward flight. Control
characteristics for various degrees of freedom in hover and flight are presented separately
with analysis of disturbance rejection and pilot controllability where relevant. This will
be further discussed in Chapter 6.
11
Chapter 2. Literature Review
2.4. Control Techniques
There have been a number of papers describing the development of mathematical models
for similar designs of flying or hovering craft. Cazzolato (2005a), Xiaofei-Wu et al. (2002)
and Hamel (2002) all describe the development of mathematical models for applications
similar to that of this project.
12
Chapter 3
Concept Evaluation
3.1
F-35 Joint Strike Fighter
The F-35 Joint Strike Fighter is the more aesthetically pleasing of the two designs
considered. A commercially available VTOL F-35 model would attract many consumers
interested in its advanced yet aggressive appearance. An F-35 balsa wood scale model
is sold by Oakdale Aircraft, reducing the amount of development required on the skin.
The main limitation of the F-35 model design is the generation of thrust within the
confined space of the shell. The feasibility of the F-35 VTOL was heavily dependent on
the existence of a solution to this issue of thrust generation within the constraints of the
project.
Due to the requirement that the thrust must be generated within the shell of F-35, the
possibilities for thrust generation are limited to ducted fans or turbines. Jarrett et al.
(2004) established that turbines are not an option for this project due to their prohibitively
high cost and low relative static thrust . Ducted fans powered by internal combustion
engines were shown to be inadequate for controllable hover as discussed in Section 2.1.
For this reason electric motors with ducted fans were the most seriously considered option
for thrust generation in the F-35 model.
3.1.1
Ducted Fans
The foremost limitation of the electric motor-ducted fan solution was the insufficient
thrust/weight ratios that could be achieved. It has been determined that the F-35 concept
is in theory feasible using high-end RC Aircraft components currently available (Jarrett
et al., 2004). Under laboratory conditions there are combinations of motor and ducted
13
Chapter 3. Concept Evaluation
3.1. F-35 Joint Strike Fighter
fans that produce enough thrust to lift the proposed mass of the model jet. However,
these theoretical concepts assume a design that would sufficiently minimise thrust losses
and weight. If a sufficient thrust solution was attained, other design factors relating to
the controllability would have been investigated in further detail. Table 3.1 shows the
models of ducted fan investigated.
Wennmacher Modell Technik (WeMoTec) is a German company specialising in the design
and manufacture of ducted fans for use with electric motors. The Jarrett et al. (2004)
considered the possibility of using the WeMoTec Midi-fan (90mm) as a source of thrust
but determined it was unable to produce sufficient levels. Some of the more advanced
ducted fans in the WeMoTec range were considered. The WeMoTec HW730 and HW750
are 7-bladed ducted fans with105mm and 124mm rotors respectively. The rotors are
constructed from carbon fibre with other parts made of Nylon, ABS and Aluminium.
WeMoTec claim that the HW750 fan can provide 35N of static thrust when used a high
power brushless motor powered by 32 Nickel Cadmium (NiCd) cells (WeMoTec, 2005).
There has been no success in finding any documented evidence to prove these claims true.
Furthermore, the weight of a battery to supply the required power for each motor would
be prohibitive (even for LiPo batteries) for a model which is required to perform vertical
take-off.
Schubeler Jets is a German company also specialising in the design and manufacture
of ducted fans for use with electric motors, and model jets that incorporate these fans.
The Schubeler DS-51-DIA ducted fan is regarded by some members of the RC Aircraft
community as the premier ducted fan currently available. The DS-51-DIA is a 4-blade,
90mm impeller designed to withstand the most powerful motors currently available to the
RC market. The DS-51 is constructed from carbon fibre and is built using CAD-CAM
techniques to maximise quality. Schubeler claims that the current design has very low
vibration at high speeds and a static efficiency of 78%. Schubeler performs laboratory
tests of the DS-51-DIA complying to the mass flow rate measurement standard VDI 2041.
Table 3.1: Ducted Fan Options
Characteristic
Impeller Model
Rotor Diameter
Blades
Weight
Max Static Thrust
Cost (RRP approx $AUD)
WeMoTec
HW730
HW750
105mm
124mm
7
7
148g
185g
25N (20 cells) 35N (32 cells)
$215
$250
14
Schubeler
DS-51-DIA
90mm
4
48g
33N (30 cells)
$380
3.1. F-35 Joint Strike Fighter
3.1.2
Chapter 3. Concept Evaluation
Basic Feasibility Calculation
The combination that Schubeler found produced the greatest thrust from testing was
the DS-51-DIA ducted fan with a Hacker 50XL (12 winding) motor and Beat 50-8-30
Electronic Speed Controller (ESC). This combination required the equivalent power as
would be supplied from 26-30 cells. Figure 3.1 shows that for an input of 29V (38000 rpm)
the static thrust output was approximately 28N . These results were almost matched by
the slightly smaller Plettenberg 220-40-A3 motor (27N at 27V) with the same battery
and ESC as can be seen in Figure3.2.
Figure 3.1: Wind Tunnel Testing of DS-51-DIA + Hacker 50XL Motor (Schubeler, 2005)
The lightest LiPo batteries able to supply the current required for these motors weighs
at least 650g (eg. Thunder Power TP4000-8S-2P). The total mass of components (not
including wiring) for a potential output thrust of 28 N would be 1200g (50g Ducted
Fan, 350g motor, 50g ESC, 650g LiPo). Assuming that two of these ducted fans in
the F-35 frame were able to replicate the tested thrust with no loss of flow there would
be 56N of thrust for 2400g. For the desired thrust to weight ratio of 1.5:1 this would
leave approximately 1300g for the remaining components or the model. In practice it
would be impossible to replicate the tested thrust efficiencies in the F-35 frame as both
fans will experience losses relating to flow distortions both up and downstream of the
fan. According to Jarrett et al. (2004) approximate thrust losses are 20% at the front
ducted fan with a higher loss for the rear fan. Assuming losses at both fans of 20% the
total theoretical thrust available is reduced to 45N and the allowable mass of the rest
15
Chapter 3. Concept Evaluation
3.2. Osprey
Figure 3.2: Wind Tunnel Testing of DS-51-DIA + HP 220-40-A3 Motor (Schubeler, 2005)
of the model reduced to 600g (for a Thrust/Weight ratio of 1.5:1). Lowering the desired
Thrust/Weight ratio may make this option more feasible. However, other factors such
as the ground effect during take-off, the diverting of thrust during transition and the
possibility of higher thrust losses (up to 50%) at the rear fan reduce the feasibility of this
design further.
The lack of a suitable thrust solution was the determining factor against the F-35 concept.
3.2
Osprey
The alternative VTOL design considered was that of the V-22 Osprey. This design
acquires thrust by means of two proprotors (which act as both a rotor and a propeller)
mounted in wing tip nacelles along with their engines and gearboxes. These nacelles
are able to rotate a vertical to a horizontal position. The high degree of rotation and
aerodynamic design that these proprotors are designed with allow for efficient operation
as both a rotor and a propeller, thus facilitating both VTOL and conventional flight.
The main advantage of the design based on the V-22 Osprey is the relaxed constraints
placed on the size of the propeller/rotor diameters. The propellers were able to be powered
by several types of motors, however as noted in Section 3.1 electric motors were the most
suitable choice for the control of hover on a small scale model.
16
3.2. Osprey
3.2.1
Chapter 3. Concept Evaluation
RC Propellers
Propellers choice for model aircraft are chosen based on material, size, blade number and
variable or fixed pitch. The chosen propellers need to provide adequate thrust to allow
sustained hover and have sufficiently low rotational inertia to allow for fine speed, and
thus thrust, control (Airfield Models, 2005). The availability of motor, propeller and
battery combinations is diverse. However, several combinations were considered in Table
3.2 in order to determine the availability of propellers capable of providing adequate thrust
(ICARE, 2005).
The two-blade APC propellers are made from glass-filled nylon, while CAM propellers
are generally made from a carbon fibre composite material and Menz S propellers are
commonly made from wood. These are all fixed pitch propellers and are specified by
diameter and pitch, usually quoted in inches. All of the propellers compared below are
powered using electric motors and can be seen to easily achieve a high level of static
thrust compared with the initial model mass estimate of 2.5kg. Larger diameter and
pitch propellers are also available from both APC and Menz S, however these propellers
have higher rotational inertia.
Table 3.2: Propeller Options
Characteristic
Diameter
Pitch
Max Static Thrust
Voltage at Max Thrust
3.2.2
16”
10”
38N
29.8V
APC
17”
13”
44.1N
25.6V
20”
10”
54N
27.4V
CAM
13”
14”
20”
7”
9.5”
12”
28N
30N
31N
10.4V 11.5V 11.5V
Menz S
18”
20”
10”
10”
44.1N 47.1N
26.2V 23.7V
Basic Feasibility Calculations
Initial feasibility calculations were performed using the electric flight performance
predictive software package MotoCalc. This allowed for a comparative analysis of
different motor, propeller and battery combinations. The Plettenberg 220 range, along
with the Hacker B40 and B50 range combined with an 11.1 V LiPo battery allowed
for sufficient thrust attainment (at least 25 N per motor/propeller combination) with
propeller diameters greater than 15”. The mass of the LiPo batteries required to provide
the desired thrust is estimated at 0.32kg, with the motor mass approximately 0.25 kg
each. The collective thrust attainable through the use of two electric motors driving
propellers of diameter greater than 15” is therefore estimated to be at least 50 N and thus
17
Chapter 3. Concept Evaluation
3.3. Conclusion
comfortably exceeds the expected mass of the frame, motors and batteries estimated to
be approximately 2.5 kg.
Thus is would appear that the use of electric motors and propellers, powered by LiPo
batteries, provide sufficient levels of thrust to warrant further investigation into their use
as a thrust unit in the VTOL design.
3.3
Conclusion
The deciding factor in choosing to base the project aircraft on the V-22 Osprey was
its ability to generate more static thrust at a lower weight than the F-35. The F-35
has considerable size constraints on the impeller, hence putting an upper limit on the
attainable static thrust. When using propellers with the V-22 model these constraints
were relaxed and thus adequate thrust levels required for VTOL were attainable.
18
Chapter 4
Mechanical Design
4.1
Control Requirements
In order to properly design a frame its functional requirements must be defined. In this
case it must provide sufficient actuation for control of the degrees of freedom of interest.
4.1.1
Yaw Control
In the real V-22 Osprey yaw is controlled by differential longitudinal cyclic pitch, this
offsets the thrust angle resulting in a yaw moment about the centre of mass while
maintaining a net vertical thrust. The model V-22 simplifies this method by counterrotating the wing-arm (and motors) as shown in Figure 4.1. For conventional flight the
motors must also be able to tilt all of the way forward. As a result the motors were
designed to be able to rotate slightly more than 90◦ .
Figure 4.1: Yaw Control
19
Chapter 4. Mechanical Design
4.1.2
4.2. Frame Design
Pitch Control
Pitch is controlled by using several complex techniques such as pendulum balancing and
longitudinal cyclic pitch control in the real V-22 Osprey. The model V-22 controls pitch
by the addition of a tail fan unit. This provides a much simpler and decoupled control
method than that employed by the real V-22 Osprey at the expense of model aesthetics.
The frame therefore provides facilities to mount a small ducted fan at the rear.
Given the helicopter nature of the V-22 Osprey, when in hover pitch is highly coupled
with forward translation. Thus if the aircraft pitches forward it will move forward as well
due to the thrust being slightly non-vertical.
4.1.3
Roll Control
Roll in the real V-22 Osprey is produced by creating a differential thrust at each proprotor.
This differential thrust creates a moment about the centre of mass and causes rotation
about its longitudinal axis. The real V-22 Osprey creates this thrust differential by
adjusting the collective pitch of each proprotor since speed control is too slow due to
the large rotational inertia of the propellers. To simplify this, the model V-22 uses two
separate motors and creates the differential thrust simply by differential motor speeds.
4.1.4
Translation Control
The real V-22 Osprey controls vertical translation by collectively changing the thrust at
each proprotor. This is achieved in the model V-22 by collectively changing the motor
speeds.
The actual V-22 Osprey can strafe in the horizontal axis by laterally adjusting the angle
of the proprotors. This feature is neglected on the model V-22 due to the associated
complexities in both the mechanical and control system designs. Thus control of horizontal
translation is achieved through the natural coupling with pitch and roll.
4.2
Frame Design
A general aircraft frame must be as light as possible while still being sufficiently strong
to carry all components and not fail. Furthermore for a VTOL platform the frame must
20
4.2. Frame Design
Chapter 4. Mechanical Design
provide sufficient actuation, as just discussed, to enable a sustained, stable hover. The
frame must also be sufficiently configurable to accommodate any design changes.
The frame was designed using the Computer Aided Design (CAD) package SolidEdge.
SolidEdge models parts as solids, with associated physical properties such as density.
This allows the monitoring of the total system mass, the centre of mass and the rotational
moments of inertia about the centre of mass. All of these properties are important when
designing a control system.
4.2.1
Materials
According to Newman (2005), materials commonly used in the construction of model
aircraft are Aluminium, Balsa Wood, Birch Wood, Carbon Fibre Tube, Cellfoam 88
and Depron. The relevant mechanical properties are shown in Table 4.1. Due to the
similar properties of Cellfoam 88 and Depron they have both been included as the Foamed
Polymer entry.
Table 4.1: Mechanical Properties of Common Model Aircraft Materials
Material
6060 T4 Aluminium
Balsa Wood
Birch Wood
Carbon Fibre Tube
Foamed Polymer
Density
(kg/m3 )
2710
110 - 150
500 - 700
1500 - 1600
50 - 77
ρ
Young’s
Modulus
E(GP a)
70
2.6 - 3.5
4.5 - 10.3
60 - 160
0.0034 - 0.032
Ultimate Tensile
Strength σut (M P a)
160
10 - 12
27 - 40
300 - 800
0.01 - 0.9
Aluminium was chosen as the base frame material due to its low cost and easy fabrication
properties, despite Carbon Fibre Tubing having a significant strength to weight advantage.
4.2.2
Tilt Rotor Concepts
As previously discussed the nacelle of our proposed model design must be able to rotate
over 90◦ to meet the control requirements. Several concepts to allow this were considered,
before the current solution was chosen.
The concept of a rotating motor mount directly coupled to a servo motor is shown in
Figure 4.2. This concept is mechanically sound, providing the required rotation with the
21
Chapter 4. Mechanical Design
4.2. Frame Design
forces supported by the bearings. The directly coupled servo motor provides a direct,
linear link between the servo motor angles and the angle of the propulsion system. The
main disadvantage of this concept is the considerable mass and size associated with the
large wing-arm section. The servo motor and bearing required would also be quite large,
necessitating a larger scale model to accommodate it all.
Figure 4.2: Rotating Mount Concept
An alternative solution of placing the motors inside the frame, driving the propellers
through 90◦ gearboxes, is shown in Figure 4.3. This concept removes the weight of the
bulky components from the end of the wing, allowing for a lighter wing section. There
are several disadvantages to this concept. Firstly, having the weight close to the centre of
mass reduces the rotational moment of inertia, making the platform less stable as it will
rotate more quickly. Secondly, the centre of nacelle rotation must be based at the same
point as the motor shaft passes through. A consequence of this is that when the nacelle
rotates the propeller speed will change due to relative speed differences. Additionally long
shaft sections rotating at high speeds are prone to vibration.
4.2.3
Final Tilt-Rotor Design
Combining several of the advantages of the concept solution, the final solution is shown
in Figure 4.4. It features a servo motor directly coupled to the aluminium tube which
supports the motor. The bearing and servo motor are located on the fuselage, removing all
bulky components except the motor and gearbox from the wing itself. An interchangeable
mount is used at the end of the tube to provide versatility should a different motor be
required. The motor and motor mount at the outer end of the tube are shown in Figure
4.5. For the details of the wing arm parts and assembly refer to Appendix A.
22
4.2. Frame Design
Chapter 4. Mechanical Design
Figure 4.3: Internal Motor Concept
Figure 4.4: Final Motor Rotation Configuration
23
Chapter 4. Mechanical Design
4.2. Frame Design
Figure 4.5: Motor and Motor Mount
4.2.4
Frame Concepts
Referring to Section 4.2.1, Aluminium was chosen as the base frame material. To simplify
fabrication it was decided that standard Aluminium sections would be used. Originally
using 12 × 20 × 1.5 mm unequal angle sections and 10 × 1.2 mm tube, the first frame
concept shown in Figure 4.6 was constructed in SolidEdge. This frame had several strong
features, including rotating wing arms, a rigid central mount for the IMU to locate it at
the model V-22’s centre of mass, and versatile motor mounts. It was scaled to fit inside a
1:15 scale model size of the actual V-22 Osprey. The major drawback of this design was
its weight, approximately 800 g according to SolidEdge. This was considered too heavy
for just a bare frame.
Following this, the frame was redesigned to be lighter by using less Aluminium and better
utilising Balsa wood as a material. The concept is shown in Figure 4.7.
As a further evolution to the weight reduction by making the frame as small as possible,
the concept shown in Figure 4.8 was considered. Although this concept frame has much
less room for components than the previous two, its lighter weight makes it a desirable
solution.
24
4.2. Frame Design
Chapter 4. Mechanical Design
Figure 4.6: First Frame Concept
25
Chapter 4. Mechanical Design
4.2. Frame Design
Figure 4.7: Redesigned Frame Concept
26
4.2. Frame Design
Chapter 4. Mechanical Design
Figure 4.8: Final Frame Concept Sketch
27
Chapter 4. Mechanical Design
4.2.5
4.3. Propulsion
Final Frame Design
The final frame design is an evolution of the concepts, and as such it closely resembles the
concept sketch in Figure 4.8. Upon construction in SolidEdge it was evident this concept
solution may not accommodate all of the components. A Balsa wood subcarriage was
considered to hold some of the bulky components such as batteries, as shown in Figure
4.9, however it was not used as the hardware was attached to both the top and bottom
of the frame, alleviating the need for an undercarriage.
Figure 4.9: Final Frame Design
The frame was constructed without the balsa-wood subcarriage is shown in Figure 4.10.
The frame as-built differs from the previous design slightly due to the recommendations
of the workshop staff. These recommendations included the use of thicker wing-arm and
rear-arm tubing, now 16×2 mm aluminium tube, and the inclusion of a top plate between
the bearing blocks to reduce lateral deflection under load.
The final frame design is estimated to weigh the same as the first concept designed in
SolidEdge, however through the use of larger materials its strength and hence robustness
against damage was greatly increased. For the full details of the frame construction,
please refer to Appendix A.
4.3
Propulsion
The propulsion unit in a VTOL aircraft is of extreme importance, as it is responsible
for generating enough thrust to overcome the mass of the aircraft. Propulsion units are
28
4.3. Propulsion
Chapter 4. Mechanical Design
Figure 4.10: Frame As Built
generally comprised of a motor that drives some kind of propeller/impeller and a power
source. The most appropriate motor, propeller and power source combination for this
design were considered for selection.
4.3.1
Propeller
The actual V-22 Osprey operates variable-pitch proprotors to obtain the required thrust
outputs (Boeing, 2005). The proprotor system of the Osprey incorporates a tri-blade hub,
with automatic folding graphite/fibreglass blades. The approximate diameter of the rotor
system is 11.58 m and thus they have significant rotational inertia due to their large size.
For this reason the V-22 Osprey proprotors operate at a constant speed with variable
pitch utilised to adjust thrust.
The propeller choice for this project was primarily dependant on the static thrust required
to achieve stable hover. The actual selection was an iterative process, as the required
maximum thrust was dependant on the final weight of the model. However, the weight
of the model depended significantly on the choice of the motors, propellers and batteries.
Thus the final weight of the model had to be estimated using the weight of known
components, the frame and choosing an appropriate sized motor and battery to suit.
The chosen propeller must be available as a pusher/tractor pair, this is when two propellers
are identical but designed to operate in different rotational directions. By doing this the
drag forces which act on the propeller to create a yawing moment on the frame are
cancelled out by their counter-rotation.
29
Chapter 4. Mechanical Design
4.3.2
4.3. Propulsion
Propeller Theory
Basic propeller theory contains several equations that were used as a guide in the selection
of an appropriate propeller (McCormick, 1995). The most important of these equations
is that which determines an appropriate blade diameter D based on required static thrust
T and the induced power at static thrust Pi0 :
T =P
2
3
i0
1
ρπD2
2
1
3
(4.1)
where ρ is the density of air.
Estimating the required static thrust to be 24.5N and using the required induced power to
be 375W from data obtained during Section 3.2.2, the required propeller was estimated
to be 15”. However this was a lower bounds estimate as the in-ground effects caused
by the propeller sucking in its own downwash had not been considered. According to
Newman (2005) an in-ground effect correction factor of 1.3 was needed to be factored into
the thrust and yielded an estimated propeller diameter of 21”.
4.3.2.1
Fixed vs Variable Pitch
For propellers with a large rotational inertia, variable thrust is accomplished by varying
the pitch of the propeller, whilst maintaining a constant rotational speed. This type
of thrust control significantly adds to the complexity of the mechanical design. The
alternative method consists of using a fixed pitch propeller and varying the rotational
velocity to vary the thrust response. This type of thrust control is limited by the torquing
capabilities of the motor providing the power and is heavily dependant on the rotational
inertia of the chosen propeller. Due to the reduction in both mechanical and control
system design and the low inertia associated with the use of fixed pitch model aircraft
propellers, they were selected over variable-pitch propellers as the method for thrust
variation in the design.
4.3.2.2
Number of Blades
It was decided to use two-blade propellers as compared to the three-bladed system used by
the real V-22 Osprey. This is due to the increased efficiency of the two-bladed propellers
over the three-bladed propellers (HazelProp, 2005).
30
4.3. Propulsion
4.3.2.3
Chapter 4. Mechanical Design
Material
The material of the propeller needed to be light weight, rigid and extremely durable, as
the model would be subject to potential failures where the propeller could experience
possible impacts. According to Airfield Models (2005) the five commonly used materials
for model aircraft propellers are wood, nylon, fibreglass-reinforced nylon, fibreglass and
carbon fibre. Wood propellers were not considered as they lacked sufficient strength,
particularly in the larger designs. Nylon propellers were also not a practical choice of
material, although they are highly resilient to impact they are exceedingly flexible and
thus cause a continual change to pitch in addition to high levels of vibration. Both carbon
fibre and fibreglass propellers were viable options, however, due to the expensiveness of
carbon fibre and the non-durable nature of fibreglass they were not considered as suitable
propeller choices. Glass-filled nylon or fibreglass-reinforced nylon were chosen as the most
desirable propeller materials as they are highly durable, rigid and reasonably inexpensive,
though less efficient than carbon fibre propellers.
4.3.2.4
Size
The size of the propeller is specified by the tip to tip diameter and the associated pitch.
In this case MotoCalc was used to determine the most suitable propeller size based on the
required static thrust and induced power of the electric motor. The result of MotoCalc
was that a diameter of at least 18” and a pitch no less than 10” was required for 25 N of
thrust at maximum efficiency. The motor/propeller combination must have a steep speed
gradient at their hover point in order to give adequate authority for the control system,
so a small pitch had to be used as this gives finer speed control.
4.3.2.5
Final Selection
The final choice of propeller consisted of a 20” × 10” APC glass-filled nylon two-blade
fixed-pitch propeller, which is available as a pusher/tractor pair. The size constraints
were confirmed by basic propeller theory, which estimated the propeller diameter to be
approximately 15”. This is a lower estimate because it does not consider in-ground effects,
which will occur during initial stages of hover. When such effects are factored into the
calculations, a resultant propeller diameter of approximately 21” is found, which agrees
with the estimation made by MotoCalc.
31
Chapter 4. Mechanical Design
4.3.3
4.3. Propulsion
Motor
Consideration was given to the use of several types of motors, ranging from small jet
engines through to internal combustion engines. However, following the recommendations
of Jarrett et al. (2004) and the selection criteria of cost, efficiency, reliability, size, weight
and ease of operation it was decided to use electric motors to drive the propellers. Two
possible types of electric motors were considered for selection, brushed and brushless.
4.3.3.1
Brushed Motors
Brushed electric motors are the simplest form of direct current (DC) motor to use. They
operate with permanent magnets attached to the case and windings attached to their
rotor, using brushes to produce mechanical commutation. Whilst they are easy to use
they typically operate at a lower efficiency than the equivalent brushless motor and are
not commonly used in remote control motors of the power rating required for the project.
Due to the wear on the brushes, from the nature of mechanical commutation, the motor
performance will vary with long-term operation. Hence any motor constants used in the
construction of the control system will change over time as the motor wears.
4.3.3.2
Brushless Motors
The brushless DC electric motor uses an electronically controlled commutation system,
instead of a mechanically controlled commutation system (Wikipedia, 2005). The benefits
of using a brushless motor over a conventional brushed motor include higher reliability,
longer lifetime (no brush erosion), elimination of ionizing sparks from the commutator,
and overall reduction of electromagnetic interference. Brushless motors generally operate
at efficiencies between 80% and 90% while brushed motors of the same capacity typically
operate at 60-70% (RS Automation, 2005). Furthermore, brushless motors are able to
operate consistently at higher RPM and with higher cogging-torque, they are ideal for
use in this application because of both the large size and expected high speeds of the
propellers.
There are two types of DC brushless motor used in RC equipment, the standard brushless
motor (also known as the ‘inrunner’) and the ‘outrunner’. Both types of motor contain
fixed windings with rotating permanent magnets, the difference being the standard
brushless motor has the permanent magnets attached to the rotor, while on an outrunner
they are attached to a section of the outer casing which rotates, driving the rotor through
32
4.3. Propulsion
Chapter 4. Mechanical Design
gears. The outrunner has a higher start-up torque than a standard brushless motor, but
it was decided against using these due to their increased mounting complexities, smaller
product range and relative infancy.
Given their windings are fixed, brushless DC motors require a three-phase power supply in
order to operate. This is provided by an Electronic Speed Controller (ESC) which chops
the DC supply voltage into a three-phase signal for powering the motor and controlling
its speed.
4.3.3.3
Final Selection
Brushless motors were chosen over conventional brushed motors to drive the propellers
based on their high RPM and torque capabilities in conjunction with the minimal
associated wear, resulting in constant motor characteristics over the life of operation.
As with the propeller selection, the choice of motor was determined through the
‘comparative’ ability of the MotoCalc software (Newman, 2005) These calculations
compensate for motor heating effects, which is important as motor efficiency changes with
temperature. The primary consideration in the selection of the motor was the required
static thrust. Although the static thrust was dependant on the weight of the motor itself,
an estimation was used and a motor selected which would attain the required static thrust
to maintain hover at as close to maximum efficiency as possible. The associated thrust
value estimated to be needed at maximum efficiency was 25 N .
An iterative process of determining the ideal motor based on the desired thrust and known
constraints led to the selection of the Plettenberg 220/30/A3 P4 brushless motor, with a
planetary gearbox at a ratio of 5:1. This motor and propeller combination, although not
the optimum solution for maximum efficiency at hover, was the best combination that
could be found without undertaking a substantial optimisation analysis. To drive the
Plettenberg motors, an 80 A Hyperion ESC was selected.
4.3.4
Batteries
A number of requirements were placed about the selection of battery. Firstly, the battery
needed to be rechargeable, with a large number of charge cycles (¿100) possible. Secondly,
the battery was required to output a minimum of 20A at a minimum of 10V, in order to
effectively drive the above motor and propeller combination (ICARE, 2005). Finally, the
selection of battery type was heavily dependant on energy density, as the weight budget
of the model is a crucial factor for a model VTOL aircraft. Three commonly used battery
33
Chapter 4. Mechanical Design
4.3. Propulsion
types were considered to drive the brushless electric motors. These were Nickel-Cadmium
(NiCd), Nickel-Metal Hydride (NiMH) and Lithium Polymer (LiPo) and the comparative
analysis can be seen in Table 4.2, where the gravimetric energy density is the value of
average power discharge multiplied by the number of service hours divided by the mass
of the battery.
Table 4.2: Comparison of Battery Types
Characteristic
Voltage (V )
Capacity (mAh)
Weight (g)
Gravimetric Energy
Density (W h/kg)
NiCd
9.6
12
2400 2400
495
670
Battery Type
NiMH
8.4
12
12
7.4
3000 1000 3000 1700
442
205
600
82
45-80
60-120
LiPo
11.1
2250
150
11.1
3600
302
100-130
From this table, the decision was made to use Lithium Polymer batteries because of their
higher gravimetric energy density. The Plettenberg 220/30/A3 P4 brushless motors were
easily powered from 11.1V, however commonly attainable LiPo packs of 2450mAh were
unable to provide the continuously required current. Thus two 11.1V (3S1P) LiPo battery
packs were chosen to be used in parallel to effectively power the propulsion unit. This
configuration also increases the flight time. The batteries selected were the Tanic 11.1V,
2450mAh LiPo packs. These each weighed 165g, resulting in a net battery weight of 660g
for the main motors.
4.3.5
Propulsion Component Summary
Thus the final selection for the propulsion unit of the model consisted of two Plettenberg
220/30/A3 P4 brushless motors geared 5:1, each connected to a 20”×10” APC glass-filled
nylon two-blade fixed pitch propeller. Each motor is controlled using an 80 Amp Hyperion
Brushless ESC, and is to be powered by two Tanic 11.1V 2450mAh LiPo battery packs
in parallel.
The theoretical thrust levels attained by each motor and propeller combination were
estimated by MotoCalc to be 27 N using a 20”×10” propeller. The actual thrust attained
during testing was approximately 25N. This discrepancy was likely due to significant inground effects in the confined area of testing and motor losses.
34
4.3. Propulsion
Chapter 4. Mechanical Design
Figure 4.11: Selected Motor, Propeller and ESC.
4.3.6
Tail Thrust
As discussed in Section 4.1 it was decided to use a thrust unit at the tail of the plane to
control pitch. The thrust (T ) generated by the primary motors creates a moment (M )
about the aircraft’s centre of mass, defined by:
M =T ×d
(4.2)
where d is the perpendicular distance between the vertical thrust line and the centre of
mass, as shown in Figure 4.12.
Figure 4.12: Moment About CoM from Primary Thrust
By the addition of an tail fan at the rear of the aircraft generating a thrust (Tt ) at a
distance (dt ) from the centre of mass of the aircraft another moment (Mt ) is created as
35
Chapter 4. Mechanical Design
4.4. Sensors
shown in Figure 4.13. By balancing these moments the minimum required static thrust
at the tail was calculated using:
Tt = T ×
d
dt
(4.3)
The ratio of distances, ddt , is relatively small, estimated using SolidEdge at being
45
approximately 750
= 0.06, thus the required thrust at the tail is relatively small. Given
an estimated primary thrust of 25N during standard hover, the required thrust at the tail
would be a minimum of 1.5N . It is desired that the tail thrust unit produce at least twice
this value to ensure sufficient controllability. Pitch control in both directions is achieved
by either increasing or decreasing the thrust provided by the tail fan about the point
where it cancels the moment generated by the primary propellers.
Figure 4.13: Net Moment of Zero About CoM
The tail thrust is attained through the use of a WeMoTec 5-blade ducted micro-fan,
driven by a brushless Himax 2015 4100 electric motor. The motor is powered using a 20A
Hyperion ESC. The components of the tail unit can be seen in Figure 4.14. The thrust
levels attained by this unit were estimated to be 3.0 N , which provides adequate pitch
authority.
4.4
Sensors
Sensors are required to return data of the planes position and orientation to the controller.
Sensors constitute a large proportion of the cost of the plane and the controller system.
36
4.4. Sensors
Chapter 4. Mechanical Design
Figure 4.14: Rear Thrust Unit - Brushless Motor, Ducted Mini-Fan, ESC
4.4.1
Inertial Measurement Unit (IMU)
The Inertial Measurement Unit (IMU) is a device used to obtain information about the
current state of the aircraft, specifically the accelerations, Euler angles and angular rates.
The MicroStrain 3DM-GX1 was chosen as the IMU for this aircraft due to its gyrostabilised output which eliminates accelerometer drift and hence the need for an external
Kalman filter. The 3DM-GX1 combines three angular rate gyros with three orthogonal DC
accelerometers, three orthogonal magnetometers, multiplexer, 12 bit A/D converter, and
embedded microcontroller. This enables it to measure the three orientation angles (pitch,
roll and yaw), the three angular rates (pitch rate, roll rate and yaw rate) and acceleration
in the three linear axes (X, Y and Z) in both dynamic and static environments.
The IMU communicates using an RS-232 serial connection with a maximum data rate of
115.2 kbaud. With a maximum data output rate of 100Hz the 3DM-GX1 easily provides
sufficient feedback to the control system to achieve a stable hover.
Due to the high cost (approximately half the expected commercial cost of the aircraft),
the use of the 3DM-GX1 is a short term solution. In the long term, an affordable IMU
incorporating a Kalman filter may be developed as a level four Mechanical Engineering
project.
4.4.2
Rate Gyroscopes
In order to make the aircraft more affordable to the ‘every-day’ enthusiast it is envisioned
that the expensive IMU will be replaced with cheaper rate gyroscopes. This will result in
a loss of precision and an increase in computational effort by the embedded controller in
order to maintain the aircraft in a stable hover.
37
Chapter 4. Mechanical Design
4.5. Actuators
This year the project did not progress to a stage where rate gyroscopes had to be
considered, hence they were not thoroughly investigated. Reference to rate gyroscopes is
made in Section 11.2.4.
4.5
4.5.1
Actuators
Servo Motors
Servo motors allow accurate open-loop command following of their shaft angle thanks
to their on-board controller circuit. They are controlled by a Pulse-Width-Modulated
(PWM) signal where the desired servo motor angle is proportional to the pulse width,
as discussed further in Section 7.1.1.1. RC servo motors generally run between 4 and 8
Volts and may oscillate if they are supplied with a voltage that is too high. Servo motors
typically draw 130mA under normal operation, but they can draw over 1A when under
full load.
To rotate the wing arms the JR 577 standard servo motor were initially chosen. However
these proved inadequate as discussed later in Section 10.4. Following this the JR 579
servo motors, which feature metal gears, a ball-race and can provide 0.824 N.m torque
when run at 4.8V (Modelflight, 2005) were chosen. The JR 579 servo motor mounted to
the wing arm is shown in Figure 4.15.
Figure 4.15: Servo Mounted on Wing Arm
38
Chapter 5
Mathematical System Model
5.1
Introduction
To be able to design a state space controller for the model aircraft a set of state space
equations are required. These must be formulated from physical laws and simplified to
allow for the development of a working linear controller.
A diagram of the axes system used to derive the equations is presented in Figure 5.1. It
is important to note that this system does not share the complexities of more common
aircraft axes systems. Moments about axes and angular velocities are not given separate
labels. The system originates at the centre of mass of the plane with the longitudinal axis
(X) running through the fuselage in the direction of the nose of the plane. The lateral axis
(Y) is positive out of the left (port) wing of the plane. The vertical axis (Z) is positive in
the upward direction. All forces, displacements and velocities along each of these three
body reference axes are positive in the directions indicated. Pitch moments, angles and
angular velocities of the aircraft are positive in a nose-up direction. Yaw moments, angles
and angular velocities are positive in the nose-left direction. Roll moments, angles and
angular velocities are positive for left wing down rotations.
5.2
5.2.1
State Equations
Linearisation Methods Used
To allow for the implementation of a state space controller a linearised state model is
required. This model is derived from the state equations through the linearisation of non39
Chapter 5. Mathematical System Model
5.2. State Equations
Figure 5.1: Basic Diagram of Model Layout
linear terms in the equations. The following simplifications are applied in the derivation
of the model.
Where φ is small, we assume sin φ = φ and cos φ = 1. The lift generated by the propellers
2
is proportional to angular velocity squared (θ˙i ). We assume that lift can be approximated
as a linear function of angular velocity when near the angular velocity required for hover.
Hence:
θ̇i2 ≈ θ̇0 θ̇i
(5.1)
where:
θ̇0 is the angular velocity of the propellers at hover.
θ̇i is the angular velocity of the propellers.
5.2.2
Propeller Angles
In order to affect control in various degrees of freedom the propellers are required to rotate
independently relative to the XY axis of the plane as in Section 5.2. These angles are φL
and φR (for left and right propeller angles respectively). For transition to normal flight
the propellers must both rotate around to the position of a standard plane. However, for
the purposes of the state model for hover the rotation angles will be restricted to small
values. Gyroscopic effects either directly or indirectly caused by the servo motors or the
dynamic movement of angle φ of the propeller are assumed negligible. The servo motors
are controlled by Pulse Width Modulation (PWM), so for simplicity it will be assumed
that φ is the input to the equations. In practice the values of φ will be related to the
servo motors as PWM outputs from the microcontroller.
40
5.2. State Equations
Chapter 5. Mathematical System Model
Figure 5.2: Propeller Angles
5.2.3
Left and Right Propeller State Equations
The torque balance and electrical motor equation derivations are directly from the analysis
of the Quanser 3DOF Hover platform (Cazzolato, 2005a).
If we start with the torque balance from the motor then we have the following non-linear
equation:
Jm θ̈m + bm θ̇m + kD (θ̇M m )2 = kT ia
(5.2)
where:
Jm is the moment of inertia of the propeller and motor rotor.
bm is the viscous friction in the motor rotor.
kD (θ̇m )2 is the reactive torque, in free air, by the propeller due aerodynamic drag.
kD > 0 is the drag constant of the propellers, which is a factor of the air density, the
propeller dimensions and other factors.
kT is the torque constant of the motor.
ia is the armature current.
θm is the angular position of the rotor.
Another system of equations that governs the dynamics is the electrical equation of the
motor:
41
Chapter 5. Mathematical System Model
5.2. State Equations
La ia + Ra ia = Va − ke θ̇m
(5.3)
where:
La is the armature inductance.
Ra is the armature resistance.
ka is the back EMF constant and is equal to the torque constant of the motor when in SI
units.
Va is the voltage applied to the motor.
In many cases the relative effect of the inductance is negligible compared to the mechanical
motion and can be neglected in Equation 5.3. This leave us with:
Ra ia = Va − ke θ̇m
(5.4)
Combining Equations 5.2 and 5.4 yields:
kT ke
kT
+ kD θ̇m,0 )θ̇m =
Va
Ra
Ra
(5.5)
kT ke
kT
Va − (bm +
+ kD θ̇m,0 )θ̇m
Ra
Ra
(5.6)
Jm θ̈m + (bm +
Jm θ̈m =
Equation 5.6 can be written for each propeller:
θ̈L =
θ̈R =
where Kmp = bm +
kT ke
Ra
1
Jprop
1
Jprop
kT
VL − Kmp θ̇m
Ra
!
kT
VR − Kmp θ̇m
Ra
+ kD θ̇m,0
42
(5.7)
!
(5.8)
5.2. State Equations
5.2.4
Chapter 5. Mathematical System Model
Rear Impeller Equation
The rear ducted fan impeller is expected to have a moment of inertia (J) low enough
such that it can be assumed to have negligible effect on the angular acceleration of the
impeller. Removing this term from Equation 5.6 and rearranging yields:
VB =
RB
kB ke
(bB +
+ kD,rear θ̇B,0 )θ̇B
kB
RB
VB = KB θ˙B
where:
KB =
5.2.5
kB ke
RB
(bB +
+ kD,rear θ̇B,0 )
kB
RB
(5.9)
(5.10)
(5.11)
Pitch Axis
Taking the torque balance about the pitch axis, the following expression can be derived:
Jp p̈ ≈ l1 (FL + FR ) − l2 Fb
(5.12)
Therefore:
p̈ =
l1
l2
(FL cos φL + FR cos φR ) − FB
Jp
Jp
(5.13)
Simplifying by applying trigonometric linearisation:
p̈ =
l1
l2
l1 Kprop
l2 Krear
(FL + FR ) − FB ≈
(VL + VR ) −
VB
Jp
Jp
Jp
JP
where:
JP is the moment of inertia of the body about the pitch axis.
l1 is the distance from the pitch axis to either front propeller centre.
l2 is the distance from the pitch axis to the back propeller centre.
kl is the coefficient of lift for the two front propellers.
43
(5.14)
Chapter 5. Mathematical System Model
5.2. State Equations
kl,rear is the coefficient of lift for the back propeller.
θ̇L , θ̇R and θ̇B are the angular velocity of the left and right propellers and back fan
respectively.
T
Kprop = Rklaθ̇K0 kmp
is the approximated (linearised) lift supplied by the propellers for a given
input voltage.
Krear =
kl,rear θ̇0,B
KB
is the lift supplied by the rear fan for a given input voltage.
It should be noted that the longitudinal distance between the centre of mass and the lift
point of the propellers (l1 ) is affected by the angle of the motors. The lift point is moved
when the motors are not parallel to the pitch axis. This change in l1 is non-linear and
assumed negligible.
5.2.6
Roll Axis
Taking the torque balance about the roll axis, the following expressions can be derived:
Jr r̈ ≈ l3 (Fl − Fr )
(5.15)
Therefore:
r̈ =
l3
(FL cos φL − FB cos φR )
Jr
(5.16)
Simplify by applying trigonometric linearisation:
r̈ =
l3
l3 Kprop
(FL − FR ) =
(VL − VR )
Jr
Jr
(5.17)
where:
Jr is the moment of inertia of the body about the roll axis.
l3 is the distance from the roll axis to either propeller centre.
θ̇L and θ̇R are the angular velocity of the left and right propellers respectively.
T
Kprop = Rklaθ̇K0 kmp
is the approximated (linearised) lift supplied by the propellers for a given
input voltage.
44
5.2. State Equations
5.2.7
Chapter 5. Mathematical System Model
Yaw Axis
Taking the torque balance about the yaw axis yields:
Jy ÿ ≈ l3 (FL,yaw + FR,yaw ) + τL − τR + τB
ÿ =
l3
KD,prop
KD,rear
(FL sin φL − FR sin φL ) +
(VL − VR ) +
VB
Jy
Jy
Jy
(5.18)
(5.19)
Simplifying by applying trigonometric linearisation:
ÿ =
1
(l3 (FL φL + FR φR ) + KD,prop (VL − VR ) + KD,rear VB )
Jy
(5.20)
This can be approximated by:
ÿ =
1
(l3 Kprop (VL φL + VR φR ) + KD,prop (VL − VR ) + KD,rear VB )
Jy
(5.21)
This is linearised by removal of the multiplication between the input voltage and propeller
angle.
ÿ =
1
(l3 Kprop (Vhov φL + Vhov φR ) + KD,prop (VL − VR ) + KD,rear VB )
Jy
where:
Jy is the moment of inertia of the body about the yaw axis.
l3 is the distance from the roll axis to either propeller centre.
θ̇L and θ̇R are the angular velocity of the left and right propellers respectively.
θ̇B is the angular velocity of the rear impeller.
θ̇0 is the angular velocity of the front propellers at hover.
θ̇0,B is the angular velocity of the rear impeller at hover.
Vhov is the voltage supplied to the front propellers for hover.
45
(5.22)
Chapter 5. Mathematical System Model
5.2. State Equations
T
Kprop = RkAl θ̇K0 kmp
is the approximated lift supplied by the propellers (at hover angular
velocity) for a given motor input voltage.
kT
KD,prop = RkDAθ̇K0 mp
is the torque constant that relates the torque generated by the propeller
when a voltage is applied to the motor.
k
θ̇ k
0 T
KD,rear = D,rear
is the torque constant that relates the torque generated by the rear
RA Kmp
impeller when a voltage is applied to the motor.
5.2.8
Vertical Translation
For z-axis translation, it is assumed that in-ground effects are negligible and that the
translational velocity is too low to induce significant drag. All translations are expressed
in body reference frame.
Therefore:
MP z̈ =
X
Fz ≈ FL cos φL + FR cos φR + FB − W
(5.23)
where W = MP g the total weight of the model.
Linearising the cosine terms and replacing the forces with voltage input relationships
gives:
MP z̈ = Kprop VL + Kprop VR + Krear VB − W
(5.24)
MP z̈ = Kprop (VL + VR ) + Krear VB − W
5.2.9
(5.25)
Lateral and Longitudinal Translation
For both lateral and longitudinal translation it is assumed that drag is negligible due to
low velocity. Since there are no translation forces acting along the lateral axis the lateral
translation is not considered. Thus:
MP ÿ = 0
(5.26)
In the longitudinal direction the only translational forces are from the tilted propellers.
Thus:
46
5.3. Virtual Reality Model
Chapter 5. Mathematical System Model
MP ẍ =
X
Fx ≈ FL sin φL + FR sin φR
(5.27)
Simplifying by applying trigonometric linearisation:
MP ẍ = FL φL + FR φR = Kprop (VL φL + VR φR )
(5.28)
This equation can be simplified further by assuming that the motors will be running at a
voltage near their hover voltage.
MP ẍ = Kprop (Vhov φL + Vhov φR )
5.3
(5.29)
Virtual Reality Model
The virtual reality (VR) model was developed in order to be able to visualise the aircraft’s
expected behaviour during flight. Initially a simple model was created using the VRML
Editor software V-Realm Builder 2.0 editor and the Matlab VR toolkit. This model was
used to learn the basic concepts of using the VR software and can be seen in Figure 5.3.
When these concepts were understood a more advanced model was developed. Accurate
3D models of the V-22 Osprey are available for purchase on a number of dedicated 3D
model websites but are generally more expensive than necessary (approximately US$90).
A model of the Osprey developed using Gmax 1.2 by Travis FitzPatrick as a file for the
MS Flight Simulator computer game was discovered as a freely available download on the
Internet.
This file format is not compatible with the CAD and design software available at university
so the freeware computer game model design program Gmax was downloaded. The
developer of Gmax is Discreet Software (also developers of 3D Studio Max); however
the company has made it extremely difficult to convert files from one format to the other
for commercial reasons. The solution to this was to convert the Gmax file to a Quake
3 model (M3D) using Tempest (also freeware game model design software) and then to
a Raw Object file using 3D Exploration (shareware). The Matlab VRML Editor (VRealm 2.0) can be used to convert the Raw object into a VRML file, but the shapes are
scrambled within a single node and cannot be individually manipulated. The solution to
this was to use the university’s educational version of 3DS Max to convert the VRML to
a .max file and reclassify all shapes as individual nodes. From here individual shapes were
grouped into functional parts such as the propellers and motors before being exported
47
Chapter 5. Mathematical System Model
5.3. Virtual Reality Model
Figure 5.3: Basic Virtual Reality Model
as a VRML file. In the Matlab V-realm editor some aspects of the VRML file such as
rotational centres of nodes were redefined to allow for accurate animation as can be seen
in Figure 5.4. To complete the model colour changes were made to some components and
a background was added. The final model can be seen in Figure 5.5.
The Virtual Reality model is manipulated directly through Simulink using the VR Sink
block such as in Figure 5.6. The VR Sink block allows values for orientation and position
of each node to be altered relative to its parent node. The orientation of the whole model
is manipulated by inputting a vector consisting of four values into the VR Sink block
targeted at the V2Grp01 node which represents all nodes of the model. These values
include pitch, yaw and roll weighting as well as a sum of the three angles in radians.
Position in space is affected by a vector input in the three axes of the VR space again
targeted at the V2Grp01 node. The motors of the Osprey are manipulated by altering
the value of the angles of rotation of the two motor group nodes relative to the axis along
the wing. Rotation of the propellers is achieved by continuously increasing the angle
about the vertical axis relative to the motors. Models with a tail fan in place rotate the
blades of the tail fan in the same manner as the propellers. These inputs provide the
model with all of the functionality required for the current scope of the project. However,
features of the model such as the flight surfaces and landing gear have been left on the
model to be used at a later date if required. Furthermore, an advanced virtual world
could be constructed within which the Osprey could fly among fixed objects, complete
with collisions and lighting effects.
48
5.3. Virtual Reality Model
Chapter 5. Mathematical System Model
Figure 5.4: V-22 Osprey Model in V-Realm Builder
Figure 5.5: Final V-22 Osprey VR Model
49
Chapter 5. Mathematical System Model
5.3. Virtual Reality Model
Figure 5.6: Simulink Model Driving the VR Block
50
Chapter 6
Control System
The control system for the RC VTOL aircraft forms a large part of the project. The
reason for this is the aircraft itself is inherently unstable in hover and thus would be
difficult to fly without a control system.
6.1
6.1.1
Classical Control (PID Controller)
Background
For Single Input Single Output (SISO) systems, the controller that is most commonly
used in industrial process control is the three-term or PID controller. This controller has
the following transfer function:
Gc (s) = KP +
KI
+ KD s
s
(6.1)
where KP , KI and KD the proportional, integral and derivative gains respectively.
Equation 6.1 is often rewritten in terms of time constants:
Gc (s) = K +
K
+ KTD s
TI s
(6.2)
where K is the overall gain, TI and TD are the integral and derivative time constants
respectively.
51
Chapter 6. Control System
6.1. Classical Control (PID Controller)
This controller is termed a PID controller because Equation 6.1 has a proportional,
integral and derivative term. Although these controllers are simple, they are quite robust,
simple to tune and often provide sufficient control. PID controllers have well known
tuning methods such as the Ziegler-Nichols Step and Ultimate Gain Methods (Dorf and
Bishop, 2001). Whilst these tuning methods are unlikely to produce an optimally tuned
controller, they do provide a good starting point for further optimisation.
The default PID block in Simulink is quite limited and an improved model was used
in this project. The improved model included an integrator anti-windup loop, setpoint
weighting, output saturation and a low-pass filter on the derivative term to reduce the
effect of noise (Cazzolato, 2005b). This model is shown in Figure 6.1.
Figure 6.1: Generalised PID Controller (Cazzolato, 2005b)
6.1.2
Application
It is possible to control a system such our aircraft using decoupled PID loops. Such
loops would view the coupling between axes purely as a disturbance and should be able
to compensate in a robust manner. This is the type of controller used by Jarrett et al.
(2004). A Simulink implementation of such a system is shown in Figure 6.2.
6.1.3
Controller Tuning
The group decided that the PID loops would be tuned one at a time, leaving any untuned
degrees of freedom in an open-loop (when feedback is not applied configuration). However
52
6.2. State Space Control
Chapter 6. Control System
Figure 6.2: Decoupled PID Control System
the tuning of the controller while the aircraft was attached on the gimble proved difficult
due to the non-linearities introduced by having a pivot not located at the centre of mass
of the aircraft, as discussed in Section 10.6.
The aircraft was moved to its semi-tethered configuration and it was then attempted to
tune the controller. However due to the mechanical failure discussed in Section 10.3.2 this
was not completed.
6.2
6.2.1
State Space Control
Background
While classical control is quite successful in controlling SISO systems, it is often less
successful in controlling Multiple Input Multiple Output (MIMO) systems. Fortunately
state space or “modern control” techniques often provide adequate control. If the state
vector is defined as x = [x1 x2 . . . xn ] then the differential equations governing the system
can be written in matrix form as:
ẋ = Ax + Bu
53
(6.3)
Chapter 6. Control System
6.2. State Space Control
y = Cx + Du
(6.4)
State space controllers can be designed using pole placement or optimal control using a
Linear Quadratic Regulator (LQR). State space techniques have the potential to produce
a high-performance controller, however they require an accurate model of the plant
(Cazzolato, 2005c). Matlab has extensive optimal controller development tools which
can be used to determine the controller and observer gains. These calculated gains can
be used in Simulink with the dSPACE DS-1104 boards (and with the VR model) until
the controller is working as desired. Dr. Ben Cazzolato kindly provided a template state
space controller Matlab file to assist in the development of the controller.
Figure 6.3: Full State Space Controller (Cazzolato, 2005c)
6.2.2
Controller Design
Initially the mathematical equations derived in Chapter 5 were converted to a set of state
matrices as in Equation 6.5. Using Matlab and the template m-file for a state space
controller provided by Dr. Cazzolato the controller was developed around these state
matrices.
The mathematical equations for the behaviour of the plane were converted to a set of
state matrices. Relationships between states such as angular rates to angular positions
54
6.2. State Space Control
Chapter 6. Control System
were represented by integral relationships. Initially there were 16 states; six for the yaw,
pitch and roll angular rates and positions, six for the translational velocity and positions
and an angular position and velocity state for each of the left and right motors. However,
the Y translation states were not implemented since they always equal zero.












































ẏ
ÿ
ṗ
p̈
ṙ
r̈
θ̇
θ̈
θ̇
θ̈
Ẋ
Ẍ
Ẏ
Ÿ
Ż
Z̈
























































































=
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
l1 Kprop
Jp
−Kmp
Jprop
0
0
0
0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0
0
0
0
0
0
0






0



0



0



0



0


k
T

 Ra Jprop


0



0



0



0



0



0



0


0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
l3 Kprop
Jr
0
0
0
0
0
0
0
Kprop
Mp
0
0
0
l1 Kprop
Jp
0
−l3 Kprop
Jr
0
0
0
−Kmp
Jprop
0
0
0
0
0
Kprop
Mp
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 0 0 0 0 0
0 0 0 0 0 0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
KD,rear
l3 Kprop Vhov
Jy
−l3 Kprop Vhov
Jy
0
0
0
−l2 Krear
Jp
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
kT
Ra Jprop
0
0
0
0
0
0
0
0
0
0
0
0
Kprop Vhov
Mp
Kprop Vhov
Mp
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
−Krear
Mp
55
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0












































y
ẏ
p
ṗ
r
ṙ
θL
θ˙L
θR
θ˙R
X
Ẋ
Y
Ẏ
Z
Ż






















+


































































VL
VR
VB
φL
φR











(6.5)
Chapter 6. Control System
6.2. State Space Control
During preliminary testing a number of states were removed from the state matrices.
The values of the angular position of the left and right motor/propeller states were
accumulating to very high levels and overloading the simulation. Since the thrust
generated by the propellers is relative to angular velocity, the angular position states
were irrelevant and were also removed. Furthermore, the X translation states were also
removed as the aim of this particular controller was only to facilitate stable hover. The
Z translation state was also removed due to the fact that the IMU can only measure
translational accelerations (double integration of the acceleration to measure position is
prone to large offset errors). The yaw position state was also removed as yaw rate was
deemed a more intuitive set-point input for a pilot. After the removal of these states the
state matrices were rearranged to facilitate the development of the reduced order observer
as discussed in Section 6.2.3. The final set of state matrices are 6.6 with outputs 6.7.




















ÿ
ṗ
ṙ
Z̈
p̈
r̈
¨
θL
θ¨R









































Kd
=


0



0



0




0



0

 kt
 R J
 a pr
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
Kprop
Mp
l1 Kprop
Jp
l3 Kprop
Jr
−Kmp
Jpr
Kprop
Mp
l1 Kprop
Jp
−l3 Kprop
Jr
0
−Kmp
Jpr
l3 Kp Vhov
Jy
−l3 Kp Vhov
Jy
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
−Kd Kd,rear
0
0
0
0
0
0
kt
Ra Jpr
0
0
−Kr
Jp
−l2 Kr
Jr
56
0




















ẏ
p
r
Ż
ṗ
ṙ
θ̇L
θ˙R

VL
VR
VB
φL
φR










+







































(6.6)
6.2. State Space Control
Chapter 6. Control System









ẏ
p
r
Ż
















=
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0



















ẏ
p
r
Ż
ṗ
ṙ
θ˙L
θ˙R




 


 
 
 
+
 
 
 







0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0











VL
VR
VB
φL
φR











(6.7)
The Matlab m-file uses Linear Quadratic Regulator (LQR) theory to determine the gain
matrices for the controller. LQR is a tool used in optimal control which involves the
setting of state weighting and control (effort) weighting matrices. These two matrices are
used in conjunction with the state matrices to develop a function of the physical cost of
controlling the plant with respect to the mathematical model. LQR determines a gain
matrix to minimise this cost function. If the equations model the behaviour of the plant
accurately then the controller can be tuned by altering the state weighting and control
penalty matrices and recalculating the gain matrix.
The mathematical model defines a number of constants required to enable implementation
of the controller. The accuracy of these constants is crucial to the development of
a working state space controller. Sourcing accurate values for some of the required
constants proved difficult, as a result some values had to be measured experimentally.
The torque constant and armature resistance of the motors were available from the
manufacturer. However, other constants considered in the mathematical model such as
the viscous resistance and armature current were unavailable. Data regarding the lift
and drag characteristics of the propellers is not published by the manufacturers, although
generic data is available from various enthusiasts and computer programs. PropCalc and
ThrustHP were used to estimate propeller performance relative to power input. These
programs claim to be within 10% of the true thrust for available RC propellers. The
rotational moment of inertia of the propellers was calculated using a generic equation
for 2-bladed RC propellers. After testing it was discovered that the accuracy of the
programs was within the claimed percentage (26.7 N estimated vs 24.5 N measured) and
almost identical after considering losses in the electric motor. Due to the unavailability
of motor constants for the rear fan this too had to be estimated until it was determined
experimentally. Rotational moments of inertia for the fuselage were calculated on the
SolidEdge model, as was the estimated mass. Whilst the constants used were reasonably
close to the physical values, a system identification as described in Section 11.2.3 would
result in a superior model upon which to design a controller.
57
Chapter 6. Control System
6.2. State Space Control
For preliminary testing the equations of the mathematical model are used as the plant.
For the controller to work the values of all states must be fed back into the controller.
Not all of the states of the model can be measured by the IMU. Hence an observer is
required in the controller to estimate those states that are not measured.
6.2.3
Observer Design
To begin with, an observer with full-rank feedback (to observe all states) gain matrix
was developed to estimate the states. Initially the feedback matrix was determined using
pole placement, however the resulting observer matrix was unable to be calculated by
Matlab. An optimal observer was attempted but similar issues were encountered during
testing in Simulink. A reduced order observer was developed in an attempt to remedy
these problems. To develop a reduced order observer it is necessary to partition the states
into those xm which can be measured and those xu which must be estimated (Hansen and
Snyder, 1996). This resulting state equation is shown in Equation 6.8.







ẋ
A
Amu   xm   Bm 
 m  =  mm
+
u
xu
ẋu
Aum Auu
Bu
(6.8)
An observer matrix L was created to estimate the states that are not measured. This
is implemented as in Section 6.4. In the final controller the ‘estim’ command is used in
Matlab to create a state space system to represent the whole observer.
Figure 6.4: Reduced Order Observer Implementation Cazzolato (2005c)
58
6.2. State Space Control
6.2.4
Chapter 6. Control System
Simulink Model
A Simulink model of the desired controller complete with estimator was adapted from
the state space controller provided by Dr. Ben Cazzolato for the Quanser 3DOF Hover
Platform. The VR Model Block was added to this Simulink model and a reduced order
observer version was also created. The gain and observer matrices created by the controller
m-file can be implemented in such a Simulink block diagram of a state space controller.
For preliminary testing the equations of the mathematical model were used in a state
space Simulink block as the plant, with a gain block containing the state output matrix,
converting the output of the state space block to the correct vector.
Figure 6.5: Simulink State Space Model
For tethered testing the state space block was replaced with links to the DS-1104 boards
representing the outputs from the controller and the inputs from the IMU. Figure 6.6
shows the layout of the controller for testing, including a block to determine vertical
velocity as the return input for Z velocity.
6.2.5
Microcontroller Implementation
In order to convert the complete controller from a set of gain and observer matrices to
a form able to be implemented on a microcontroller, a state space model of the whole
system was created in Matlab. This was done by creating state space models for each
59
Chapter 6. Control System
6.2. State Space Control
Figure 6.6: Simulink Model with Observer and Connections from IMU and to dSPACE
of the augmented states, estimator, set-point inputs and controller gains. These blocks
were appended into a single state space model. The ‘connect’ command was then used
to connect the various components of the model in the same manner as the Simulink
block model. Separate output states were added for the control signals of the voltages
and motor angles of the model so that they could be monitored. This process results in a
state space model that can be discretised and diagonalised. The resulting set of matrices
can more easily be converted to C-code for use in the microcontroller.
60
Chapter 7
Implementation of Control
7.1
Signals, Hardware and Software
In order to provide some insight into the way the control system was integrated, the
components are discussed briefly.
7.1.1
Control Signals
Control signals are the method by which different components of the control system
transfer information between each other. The two types of control signals used in this
project are Remote Control (RC) Pulse Width Modulation (PWM) and asynchronous
serial communications using the RS-232 standard.
7.1.1.1
RC Pulse Width Modulation
Pulse Width Modulation (PWM) is a technique commonly used to represent an analogue
signal using digital circuitry. It involves the switching on and off of a digital output at a
fixed frequency (switching frequency fs ), but with varying times of either on or off. The
ratio of on-time to the total period (T = f1s ) is called the duty cycle (d). Some examples
of a PWM signal are shown in Figure 7.1.
RC equipment such as servo motors and electronic speed controllers typically use PWM
signals to represent the control input. As opposed to standard PWM signals where the
signal value is dependant upon the duty-cycle, RC equipment use the actual pulse-width
(in seconds) to represent the signal. An RC PWM signal is usually bound between a 750 µs
61
Chapter 7. Implementation of Control
7.1. Signals, Hardware and Software
Figure 7.1: Example PWM Signals
and 2250 µs pulse width, with 1500 µs generally being accepted as the centre-point, as
indicated in Figure 7.2. The RC PWM signals usually operate fairly independently of the
PWM switching frequency, with the accepted range being between 20 Hzand 200 Hz.
Figure 7.2: RC PWM and Servo Motor Example
7.1.1.2
Asynchronous Serial Communications
Many devices communicate using an asynchronous serial communications port, ones in
this project include the IMU (mentioned previously), the PicoPic, dSPACE DS-1104 and
MiniDRAGON+ (all mentioned later). Several standards for this exist, including the
commonly known RS-232 and RS-485 standards. The standard used in this project
62
7.1. Signals, Hardware and Software
Chapter 7. Implementation of Control
was RS-232 which will be discussed briefly, but a full description of the standard is
unwarranted.
The RS-232 standard includes many features, such as hardware flow control and
handshaking, but which are not usually used in practice. The connections of interest are
the transmit (Tx), receive (Rx) and ground (GND) lines. The standard also recommends
several connector types, commonly the DB-9 (or D-subminiature 9-pin) type. The
standard pinouts for these connectors, as well as the ones on the MiniDRAGON+ are
shown in Figure 7.3.
Figure 7.3: RS-232 Connectors and Pinouts used in this Project
7.1.2
Control Hardware
The control hardware is the hardware used to run the control system or assist in its
implementation.
7.1.2.1
dSPACE DS-1104
The dSPACE DS-1104 rapid prototyping platform is a real-time control target that is
extensively used in the construction and testing of control systems. The DS-1104 is an
expansion card that sits on the host computer’s PCI bus and contains its own PowerPC
CPU and a Texas Instruments (TI) Digital Signal Processor (DSP). Matlab Simulink
models are compiled using a cross-C compiler and loaded to the DS-1104 platform. Using
63
Chapter 7. Implementation of Control
7.1. Signals, Hardware and Software
the dSPACE software ControlDesk, variables and outputs from the Simulink model are
accessible via a Graphical User Interface (GUI). A dSPACE DS-1104 breakout board is
shown in Figure 7.4.
The DS-1104 hardware has eight Analogue to Digital (A/D) converters, eight Digital
the Analogue (D/A) converters, four PWM outputs, one asynchronous serial port (either
RS-232 or RS-422/485), two encoder readers as well as a host of other inputs and outputs.
Figure 7.4: dSPACE Breakout Board
7.1.2.2
MiniDRAGON+
The microcontroller chosen to run the embedded control system is the Motorola 68HCS12,
operating on a MiniDRAGON+ development board. The HCS12 is very flexible and
powerful when compared to similar microcontrollers, featuring a plethora of inputs and
outputs. Some of these include two asynchronous serial communication ports, two 10-bit
analogue to digital converters (multiplexed to 16 channels), eight 8-bit PWM outputs, an
Enhanced Capture Timer (ECT) and a variety of configurable digital input/output pins.
A MiniDRAGON+ is shown in Figure 7.5.
Dr. Frank Wornle has developed a Real-Time MC9S12 Simulink Target, allowing Simulink
models to be compiled onto the MiniDRAGON+ in a similar fashion to the dSPACE
platform.
7.1.2.3
PicoPic
The PicoPic servo controller is a PIC microcontroller that has been designed and built
by PicoBytes to generate RC PWM signals. It has 20 PWM output channels, each with
a resolution of 1 µs (giving approximately 1500 discrete output levels)(Picobytes inc.,
2003). It receives commands over its RS-232 asynchronous serial communications port
up to a rate of 115.2 kbaud, giving ample output bandwidth. The serial connection is
64
7.1. Signals, Hardware and Software
Chapter 7. Implementation of Control
Figure 7.5: MiniDRAGON+ Development Board.
uni-directional, that is the PicoPic does not transmit any information it only receives it.
A PicoPic servo controller is shown in Figure 7.6.
Figure 7.6: PicoPic Servo Motor Controller.(Picobytes inc., 2003)
7.1.3
Control Software
The control software is the software used when designing, constructing and testing the
control system.
7.1.3.1
Matlab/Simulink
MathWorks Matlab (short for Matrix Laboratory) is a powerful mathematical program
that is commonly used not just for engineering, but many applications ranging from
financial modelling to image processing. Due to its powerful and versatile control toolbox
it is commonly used in the design and analysis of control systems.
65
Chapter 7. Implementation of Control
7.2. Development Stage (Tethered)
Simulink is a software package that comes with Matlab and is commonly used in
the construction of control systems, particularly those that contain non-linearities,
discontinuities or complex systems. It also has facilities to compile these models to
a variety of platforms, including the aforementioned dSPACE DS-1104 and HCS12
platforms.
7.1.3.2
dSPACE ControlDesk
ControlDesk is the software that comes with the DS-1104 platform. It interacts with
the Simulink control system running on the DS-1104 hardware to allow the monitoring of
control signals, such as controller outputs, and allows the modification of control variables,
such as controller gains, on the fly. When a USB joystick is attached to the host computer,
ControlDesk acts as an interface, forwarding any joystick commands to the DS-1104
platform.
ControlDesk combines all of these features with an easy to use Graphical User Interface
(GUI).
7.1.3.3
Metrowerks Codewarrior
Metrowerks Codewarrior is an Integrated Development Environment (IDE) for several
platforms including the Motorola HCS12 family of microcontrollers. It allows direct
programming of the MiniDRAGON+ development board in the C programming language.
7.2
Development Stage (Tethered)
The first stage of implementation was to operate the aircraft while tethered to a frame.
This would allow safe operation of the aircraft while tuning the controller.
7.2.1
Hardware Configuration
The basic control hardware configuration of the model is shown in Figure7.7.
66
7.2. Development Stage (Tethered)
Chapter 7. Implementation of Control
Figure 7.7: Tethered Configuration Hardware Layout
Figure 7.8: Tethered Configuration
67
Chapter 7. Implementation of Control
7.2.1.1
7.2. Development Stage (Tethered)
Control Platform
During tethered testing the control system was initially run on the dSPACE DS-1104
platform. A DS-1104 board is only capable of producing 4 PWM outputs. Since this
project required a minimum of 5 such outputs, one for each motor and one for each wing
arm servo motor, a second DS-1104 board was used in a master-slave configuration to
provide the additional PWM outputs. The two DS-1104 boards communicated with each
other via digital to analogue (D/A) and analogue to digital (A/D) ports. The PWM
signals were run along a BNC cable to the breakout board where they are terminated and
run along the main loom to the platform.
Problems arose with electrical noise from nearby equipment. The large length of the loom
made this problem significant. The group was able to use the serial port of the secondary
DS-1104 board and a PicoPic servo controller to minimise the noise interfering with the
PWM signals.
7.2.1.2
Power Supply
The three motors (two main and single rear) were powered from a 12V deep-cycle sealed
lead acid (SLA) battery as shown in Figure 7.9. For safety reasons, a 100A circuit
breaker/isolator was installed to allow the team to cut the power should anything go
wrong and to help prevent damage in the case of a short circuit. It also allows the
complete isolation of power from the high-power components, allowing the team to work
on the model in safety, without the fear the motors will start up unexpectedly. The servos
and the IMU were powered using a bench power supply which allowed the group to easily
monitor and control the maximum current.
7.2.1.3
Signal Routing and Distribution
The control signals were routed through a breakout board which was developed by Jarrett
et al. (2004). Since the power to the motors came from the battery in the control room,
large gauge wires needed to be added to last year’s loom. The only other addition was
two thermocouple extension cables for monitoring the temperature of the motors as this
was identified as a potential problem. Figure 7.10 shows the breakout board located
at the host end. The five PWM channels are on cables with BNC connectors. This is
convenient as one could easily connect a channel to a Cathode Ray Oscilloscope (CRO) to
troubleshoot the system. The IMU power and data connections are shown on the bottom
left of the picture.
68
7.2. Development Stage (Tethered)
Chapter 7. Implementation of Control
Figure 7.9: Tethered Power Supply
Figure 7.10: Breakout Board
69
Chapter 7. Implementation of Control
7.2. Development Stage (Tethered)
As mentioned previously, there was the problem of electrical noise. The group were able
to overcome this without modifying the cable loom. For untethered configuration the
group had decided on using the PicoPic serial servo motor controller, as it was expected
the serial connection would be less sensitive to noise. Since the signal is uni-directional,
a pin to BNC cable connecting the transmit and ground pins of the dSPACE serial port
to the breakout board. This is shown in Figure 7.11.
Figure 7.11: Modified Configuration
Figure 7.12 shows the PicoPic mounted on the aircraft. The serial connection is located
on the right of the picture and the five PWM connections are at the top of the device.
Figure 7.12: PicoPic Mounted to the Aircraft Frame
7.2.2
Software Configuration
While in its tethered configuration the model was ran open-loop, with proportional, PID
and State-Space control as described in Chapter 6. The results of this are discussed in
70
7.2. Development Stage (Tethered)
Chapter 7. Implementation of Control
detail in Chapter 8.
7.2.2.1
Simulink
When implementing the control system through Simulink several specialized input/output
blocks were constructed to abstract the control system from the underlying hardware. The
abstracted Simulink model is shown in Figure 7.13.
Figure 7.13: Abstracted Simulink Model
The feedback block handles the serial communication protocol to the IMU, sending the
command byte and receiving the raw data from the IMU. This is then converted to
standard units, such as radians, and output from the block.
The output, or ‘VTOL’ block receives the output from the control system as a series of
control outputs as standardised units, for example motor angles in radians. This data is
scaled and offset to correspond with the appropriate raw output and sent to the digital to
analogue converters in order to send it to the slave DS-1104 board. For reasons of safety
a software emergency stop (or Estop) has been programmed into this block that latches
all outputs to zero in the event of an emergency. The workings of the ‘VTOL’ block are
shown in Figure 7.14.
7.2.2.2
ControlDesk
Different ControlDesk layouts were required for each of the controller types being run.
The open-loop layout provided direct access to the output signals, the PID controller
layout had control of the setpoints and access to the controller gains, while the StateSpace controller layout only provided access to the setpoints. Figure 7.15 shows the
71
Chapter 7. Implementation of Control
7.2. Development Stage (Tethered)
Figure 7.14: VTOL Control Block
ControlDesk layout used during the tuning of the PID controller. It provides access to
all of the controller gains, the control output values, the input values provided by the
joystick and the IMU feedback.
Figure 7.15: ControlDesk Layout for the PID Controller
72
7.3. Semi-Tethered Configuration
7.3
Chapter 7. Implementation of Control
Semi-Tethered Configuration
When the issue regarding the pivot not being located at the centre of mass was identified,
as discussed in Section 10.6, it was decided to test the aircraft while semi-tethered. The
aircraft was removed from the gimble, but still powered by the power sources discussed
in Section 7.2.1. The large power cables acted as an anchor, preventing the model from
lifting too high or travelling too far.
The only significant difference between this configuration and that outlined in Section
7.2 is the replacement of the serial connections with the free2move bluetooth dongles,
shown in Figure 7.16. These dongles act as a wireless serial link and have an approximate
outdoor range of 100m.
Figure 7.16: free2move Bluetooth RS-232 Transmitter / Receiver
In order to replace to two serial connections with a single wireless link the semiunidirectional nature of the IMU and the PicoPic were exploited. Information was send
to the PicoPic (located on the aircraft) as before, since this is already a unidirectional
link. The IMU was placed into ‘continuous’ mode, where it sends back information about
the aircraft’s state as quickly as it can, and hence was only used uni-directionally. This
data-stream from the IMU was buffered in the DS-1104 board and required analysis to
identify a packet, compute its checksum and store the previous correct result in the event
a checksum fails. This process was made difficult by the signals-based nature of Simulink.
73
Chapter 7. Implementation of Control
7.4. Fully Embedded Solution
7.4
Fully Embedded Solution
7.4.1
Embedded Hardware Design
The aircraft hardware layout in its fully untethered configuration is shown in Figure 7.17
Figure 7.17: Untethered Hardware Configuration
7.4.1.1
Control Platform
In the untethered configuration the control system was ported to the MiniDRAGON+
development board, as discussed further in Section 7.4.2. It received control setpoints
by measuring the pulse width of the PWM output from the RC transmitter/receiver
pair, shown in Figure 7.18. Feedback is received from the IMU via one of the serial
communications ports of the MiniDRAGON+.
Figure 7.18: RC Transmitter and Receiver
74
7.4. Fully Embedded Solution
Chapter 7. Implementation of Control
It was decided to continue using the PicoPic to generate the RC PWM signals even
though the MiniDRAGON+ has the facilities to generate eight 8-bit PWM signals, or
four 16-bit PWM signals. This is because the PicoPic can generate a much higher
resolution output for the five required PWM outputs (expected to be eight when the
aircraft achieves conventional flight). The 8-bit PWMs generated by the MiniDRAGON+
can describe a maximum of 256 discrete levels over the entire period. Given the
usable pulse width is restricted to between 750µs and 2250µs as outlined in Section
7.1.1.1, as a best case scenario with fs = 200Hz, the number of usable outputs is
(2250 − 750) × 10−6 × 200 × 256 = 76.8. This was deemed too low compared with
the approximate 1500 usable output levels available when using the PicoPic (see Section
7.1.2.3).
7.4.1.2
Power Supply
Once fully untethered the main motors and the the control system were powered by
on-board Lithium Polymer (LiPo) batteries, as chosen in Section 4.3.4.
7.4.2
Embedded Software Design
After consultation with Dr. Frank Wornle it was decided that the embedded controller
would be programmed in C, using Metrowerks Codewarrior, as opposed to using Dr.
Wornle’s real-time embedded Simulink target. This decision was made because of the need
to use some of the hardware units on the microcontroller, as discussed later. Programming
in C also tends to be more efficient, flexible and reliable than using Simulink and the realtime target.
A brief overview of the operation of the embedded code can be seen in Figure 7.19. The
following describes the basic operation of the program. Refer to Appendix C for the
embedded code.
7.4.2.1
Main Program
The main program consists of a loop that does nothing. The function of the main program
is to simply waste time until an interrupt occurs, at which time the program jumps to
one of the interrupt service routines.
75
Chapter 7. Implementation of Control
7.4. Fully Embedded Solution
Figure 7.19: Embedded Code Operation
7.4.2.2
Timed Interrupt
The timed interrupt is an interrupt that occurs at a fixed frequency, in this case exactly
40 Hz. The function of the timed interrupt is to ensure the control system runs at a
fixed rate as is required when running a discrete control system. As soon as the interrupt
occurs the control system is started.
7.4.2.3
Control System
The control system executes outside of the timed interrupt, so that other interrupts
associated with the other modules can still occur. Once the control system begins
execution it reads in the buffered data from the IMU on the first serial port (SCI0)
and requests the next set of data from the IMU. The control system then copies the
setpoint data from the PWM capture block, and for safety reasons tests the state of the
‘landing gear’ switch on the RC radio. If this switch is off or the radio itself is off the
control system is stopped from executing and all outputs set to zero, this is to prevent the
accidental starting up of the motors while someone is working on the aircraft. Before the
actual control system will execute properly this switch needs to be on for two seconds.
The controller has been ported to C from the state-space model. This was done by
collecting all the state-space components together into one large state-space controller
using the ‘connect’ command in Matlab, as discussed in Section 6.2.5. This connected
state-space controller was converted from the continuous ’s-plane’ to the discrete ‘zplane’ using Matlab’s ‘c2d’ command. Finally the ‘A’ matrix of the discrete state-space
controller was diagonalized using the ‘canon’ command in Matlab, which diagonalizes
the state space model reducing it to a simpler series of multiplications and additions which
are easily implemented in C.
76
7.4. Fully Embedded Solution
Chapter 7. Implementation of Control
Once the control outputs are calculated they are placed in a buffer to be sent to the
PicoPic over the second serial port (SCI1).
7.4.2.4
PWM Capture
The PWM capture code makes use of the microcontroller’s Enhanced Capture Timer
(ECT) hardware unit to accurately measure the PWM signal output from the RC receiver
while using as little processor time as possible. The ECT captures both the time when
the PWM signal goes high and the time when it goes low. It then generates an interrupt
where the two times are compared to calculate the input pulse width. This pulse width
is scales to a value between zero and one representing the control setpoint.
The ECT has a total of eight channels, one (channel 7) is reserved for the timed interrupt
and another (channel 5) is connected to the speaker of the MiniDRAGON+ and thus does
not operate properly, leaving six channels able to capture the PWM signals.
7.4.2.5
IMU Communications
Upon the request of the control system the IMU Communications block sends the one-byte
request for the next set of data to the IMU. When each byte is returned from the IMU an
interrupt occurs and this byte is buffered. Once the entire data packet has been received
the raw data from the IMU is converted and scaled to standard units. The control system
requests this data once it starts executing.
7.4.2.6
PicoPic Communications
Once the control system has buffered the data for sending to the PicoPic, the PicoPic
communications module converts the data to the appropriate format for the PicoPic and
begins transmitting. Given the relatively long time required to send this data compared
with the processor’s speed this process is interrupt driven. When a byte has been sent
an interrupt occurs and the next byte in the buffer is sent. This significantly reduces the
communications overhead as compared to the ’busy-waiting’ method of communication.
77
Chapter 8
Testing and Tuning
8.1
Initial Open Loop Testing
The group initially tested the model connected rigidly to the gimble. This allowed the
group to verify the mechanical and systems design. It revealed the flaw in the integrity
of the wing arm/motor mount junction, discussed in detail in Section 10.3. A new motor
mount was designed and built to withstand greater loading conditions.
After strengthening and rebuilding, a thrust test was performed by placing a set of digital
scales under the whole assembly and measuring the reduction in force applied to the
scales. Using the 12V Sealed Lead Acid (SLA) battery, a 5 kg reduction in mass was
measured which corresponds to 49 N of lift. The maximum current and voltage drop were
measured using the Emeter, a device placed in series with the power supply to one of
the motors which records its voltage, current draw and speed. The Emeter is showed in
Figure 8.1. The maximum current draw of one of the primary motors was 33.3A under
maximum load, with a corresponding voltage of 11.3V. This results in a total power draw
of 375W each motor. This exercise was repeated when powered by the LiPo batteries
which yielded slightly over 30N, however this is dependant of the actual charge status of
the batteries.
If the motors were not adequately cooled there was the potential for damage. A
thermocouple was attached to the exterior of each motor which allowed the group to
monitor the surface temperature, as overheating was a concern. During normal operation
the surface temperature did not exceed 30◦ . However, to ensure that the motors did not
heat up too much after running at full load, the motors were allowed to run at a lower
speed for some time before being shut off completely.
78
8.2. Closed Loop Testing
8.2
Chapter 8. Testing and Tuning
Closed Loop Testing
It was initially planned to tune the controller while the aircraft was fixed to the gimble.
This would allow testing with a reduced risk of damage to components (particularly the
propellers) from a rough landing, as the consequences of the system going unstable would
be minimal.
The group attempted to tune a PID controller. Initially the gimble was locked so only
movement in yaw was possible. The aircraft was able to be controlled very effectively
in the yaw axis through simple proportional feedback. The gimble was then loosened to
allow the model to attempt a more realistic hover. The roll and pitch axes could not be
easily controlled. This was primarily due to the effect of being tethered to the gimble,
in particular the point of rotation being moved from the model’s centre of mass to the
ball-joint of the gimble. The layout of the fuselage had been designed for a centre of
gravity in front of the lift point of the wings. Moving the pivot point away from this
location rendered pitch uncontrollable, with roll dynamics also made uncontrollable as a
result. Other issues with the gimble are covered in more detail in Section 10.6.
The state space controller was also tested on the gimble. After some modification to the
control weighting matrix the state space controller showed stable behaviour in yaw but
encountered the same problems as the PID controller in pitch and roll. It was decided
not to attempt further control of the roll and pitch of the model whilst connected to the
gimble.
Figure 8.1: Emeter
79
Chapter 8. Testing and Tuning
8.3
8.3. Untethered Testing
Untethered Testing
The model was tested on the concrete outside the Holden Lab of the University of
Adelaide. This site is shown in Figure 8.2. This figure also shows the landing gear
that was assembled in an attempt to keep all moving parts away from the ground. The
power cables constrained the movement of the rig, acting as an anchor. A large mass was
placed on top of the cable to fix is to the ground. This test was short lived as one of the
propellers hit the ground which caused minor damage to one its tip. It was expected that
the pitch PID loop would compensate for the pitching forward motion associated with
the thrust form the front propellers. However, this proved untrue and a small amount
of forwards pitch immediately after takeoff caused the plane to land in such a way that
the propeller into contact with the concrete. Further tests were postponed until a more
suitable testground was found. The damaged propeller was balanced by smoothing the
edge of the damaged tip and reducing the length of the undamaged tip to match. This
resulted in uneven thrust generation between the two propellers. A small amount of gain
(˜2%) was added to the control signal of the motor driving the damaged propeller so as
to match the thrust output between the two motors.
Figure 8.2: Untethered Testing Outside the Holden Lab
The next testing session took place on grass, as shown in Figure 8.3, with the aim of
limiting hardware damage due to unstable landings. The power to the tail fan was made
proportional to the power supplied to the front motors such that the plane would be more
stable in pitch during hover. The maximum power offset was limited to the point required
for stable pitch, in the hope that the pitch PID loop would compensate after this level
is reached. The basic PID controller was tested before attempting the more complicated
80
8.3. Untethered Testing
Chapter 8. Testing and Tuning
state space controller. The controller gains for roll and pitch were tuned incrementally
after each test run. While lift-off was achieved a number of times, the aircraft could not
achieve a stable hover. After a few runs the lift-off characteristics were improving with
less severe landings.
Figure 8.3: Untethered Testing on Grass
The group did not have time to adequately tune the controller due to a mechanical failure.
As shown in Figure 8.4, the wing arm rotated 180◦ from its original position and struck the
ground. This failure was caused by the plastic servo motor horns stripping and resulted in
one of the propellers striking the ground whilst still being powered. This impact resulted
in a shear failure of the output shaft of the planetary gearbox. This shaft was repaired
by Steve Kloeden of the mechanical workshop in time to display the aircraft at the Level
IV Project Exhibition, however further testing was not possible due to time constraints.
81
Chapter 8. Testing and Tuning
8.3. Untethered Testing
Figure 8.4: Mechanical Failure
82
Chapter 9
Constraint Analysis
9.1
Cost
Final product price is a major constraint, as a model that is too expensive will have
reduced commercial appeal. A project such as this requires the use of several expensive
components, which are outlined in Table 9.1. Some of these expensive components, such
as the Bluetooth Dongles and the IMU will not be used in the final solution but are
required for prototyping.
The major expense of the project was labour, namely the students and the workshop staff.
Whilst the labour costs for the workshop staff were unavailable, the estimated student
labour throughout the project is shown in Table 9.2. This was estimated using the hours
each student worked with a standard salary and including estimated direct and indirect
costs.
9.2
Weight
As with any aircraft weight is a major constraint. VTOL aircraft are particularly sensitive
to weight as the powerplant must produce enough thrust to overcome this weight. The
weight distribution of the project model are shown in Table 9.3.
The discrepancy between the initial estimate of 2.5 kgand that listed in Table 9.3 of 4.0 kg
is discussed in Section 10.7.
83
Chapter 9. Constraint Analysis
9.2. Weight
Table 9.1: Component Expenses
Item
Plettenberg 220/30/A3 P4 5:1 Brushless Motor
80 Amp Hyperion Brushless ESC
Tanic-3S2P 2450 mAh 11.1 V LiPo
7.4V 1800mAh LiPo
LiPo Charger
Deep Cycle 12 Volt Lead Acid Battery
Lead-Acid Battery Charger
MiniDRAGON+ plus comm upgrade
PicoPic plus upgrades
Free2Move RS-232 Bluetooth Dongles
3DM-GX1 IMU
Wemotec Ducted MicroFan
Hyperion 20Amp ESC
Himax 2025 4100 Brushless Motor
Hyperion e-Meter
APC 20 x 10” Propeller Pusher Tractor Pair
Frame Materials + Construction
Cabling
Total (incl GST)
Quantity
2
2
8
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
Item Cost
$444.98
$168.00
$118.00
$40.80
$200.00
$100.00
$75.00
$174.00
$87.60
$182.50
$2500.00
$30.00
$87.40
$69.95
$138.00
$115.00
$300.00
$100.00
Total
$889.96
$336.00
$944.00
$40.80
$200.00
$100.00
$75.00
$174.00
$87.60
$365.00
$2500.00
$30.00
$87.40
$69.95
$138.00
$115.00
$300.00
$100.00
$6552.71
Table 9.2: Estimated Student Labour Costs
Student
Zebb Prime
Jesse Sherwood
Michael Smith
Allan Stabile
Total
Hours
567.5
292
407
400.5
1667
Salary
$14,551
$7,487
$10,436
$10,269
$42,744
Direct Costs
$4,365
$2,246
$3,131
$3,081
$12,823
84
Indirect Costs
$18,917
$9,733
$13,567
$13,350
$55,567
Total
$37,833
$19,467
$27,133
$26,700
$111,133
9.2. Weight
Chapter 9. Constraint Analysis
Table 9.3: Weight Budget
Item
Frame
Aluminium Frame
Rear Arm
Wing Arms
Wing Arm Bearings
Motor Mounts
Assorted Screws
Sensors
3DM-GX1 IMU
Actuators
NES-579 JR Servo with mount
E381 Servo with mount
Controllers
MiniDRAGON+
PicoPic
Propulsion
Motors - Plettenberg 220/30/A3 P4 5:1
Propellers
Propeller Adaptor
ESC Hyperion 80 A Brushless
WeMoTec Ducted Fan
Himax 2025 4100 Brushless Motor
20 Amp Hyperion ESC
Batteries
Tanic-3S2P 2450 mAh 11.1 V LiPo
7.4 V 1800mAh LiPo
Miscellaneous
Cabling∗
Landing Gear
Bluetooth Dongle
Total
∗Estimated
85
Quantity
Weight (g)
Total (g)
1
1
2
2
2
20
400
110
110
60
100
3
400
110
220
120
200
60
1
75
75
4
3
48
29
192
87
1
1
50
14
50
14
2
2
2
2
1
1
1
225
190
40
45
30
61
21
450
380
80
90
30
61
21
5
1
172
82
860
82
1
1
1
300
30
50
300
30
50
3952
Chapter 9. Constraint Analysis
9.3
9.3. Power Budget
Power Budget
The amount of power that the batteries can provide is a constraint. Given the specification
of a minimum of 3 minutes flight time it is important that the batteries are able to provide
full power to the motors for at least this period.
The current prototype contains four separate power circuits. The control circuit contains
all of the control components and is powered by a 7.4V 1800 mAh LiPo, as shown in Table
9.4. Each of the main motors are driven by two Tanic 2400mAh 11.1V LiPo batteries,
while the rear motor runs from its own Tanic TP730-2S. The power budgets for both of
these circuits are shown in Table 9.5.
Table 9.4: Control Circuit Power Budget
Component
Servo Motors
PicoPic
MiniDRAGON+
3DM-GX1 IMU
Bluetooth RS-232 Dongle
TOTAL (mA)
Battery
7.4 V 1800 mAh LiPo
Current Draw (mA)
130
14
85
65
70
Quantity
6
1
1
1
1
Capacity (mAh)
1800
Surge Current (A)
12
Total
780
14
85
65
70
1014
Discharge Time (min)
106.5
Table 9.5: Motor Power Budgets
Motor
Plettenberg @ 100%
Plettenberg @ 75%
Himax @ 100%
Current
Draw (A)
31
25
10
Battery
Battery
Capacity (mAh)
2xTanic LiPo
2xTanic LiPo
Tanic LiPo
4900
4900
2450
86
Battery
Surge
(A)
58
58
24
Discharge
Time (min)
8.9
11.76
14.7
Chapter 10
Issues
10.1
IMU
There were a number of issues relating to the IMU. Initially the 3DM-G, an older variant
of the 3DM-GX1 described in Section 4.4.1, was to be used. The communications protocol
provided with this unit was in fact for the newer 3DM-GX1, and hence described several
modes of operation which were not available on the older 3DM-G. It was desired to use
one of these modes of operation for the project, and as such a lot of time was wasted
trying to get these modes to work which were not supported by the 3DM-G. The correct
manual was eventually sourced from the manufacturer, and the 3DM-G exchanged with
a 3DM-GX1 another project group who did not need these advanced modes were using.
One issue relating to the IMU that affected several groups, including Jarrett et al. (2004)
was the poor handling of two’s-complement numbers by Matlab and Simulink. Two’s
complement is the most popular method used in computer science to represent both
positive and negative values. Matlab and Simulink treat the pure binary data, such as
that read back from the IMU, as unsigned integers, with no simple conversion to two’s
complement representation. The conversion had to be manually programmed in order to
obtain the correct values.
10.2
Sourcing of Equipment
The Plettenberg motors together with the two associated ESCs, the Himax motor, LiPo
batteries and charger were originally sourced from a Canadian distributor. The specialised
nature of the Plettenberg motors required purchasing by the distributor from Plettenberg
87
Chapter 10. Issues
10.3. Mechanical Failure
in Germany prior to delivery. However, the deadline specified for delivery was exceeded.
After unsuccessful attempts to contact the distributor, a decision was made to procure
the Plettenberg motors direct from the manufacturer in Germany and the remainder of
the goods from a local distributor. Although this further delayed the acquisition date, it
was a necessary decision based on the lack of communication and unknown arrival date of
goods from the Canadian distributor. As a result of this sourcing issue, the commissioning
of the model was delayed by approximately three weeks.
10.3
Mechanical Failure
10.3.1
Wing Arm Motor Mount
During the initial stages of design testing, a failure occurred at the junction of the motor
mount and the wing arm. This occurred in the course of preliminary motor quantitative
thrust analysis and was believed to be a direct result of inadequate design accelerated by
propeller imbalance.
Initially the motor mount was fixed to the aluminium tubing of the wing by a 3 mm bolt
through the tube, 10mm from the end of the shaft. The size of the tubing was designed to
withstand loading associated with torquing from the servo motors and transverse bending
from lift and the weight of the assembly, in which case the design would have been
sufficient. However, the moment generated by the small distance between the thrust
point and the motor mount was not considered, and coupled with the eccentric force
generated by the propeller imbalance caused the bolt tear-out shown in Figure 10.1.
The slight imbalance in the pusher propeller was rectified through a static balancing
process. The thickness of the aluminium tubing used for the wing arm was also increased
to 2mm. This had the complimentary effect of reducing transverse flex of the wing arms,
a previously noticed concern. Additionally, the distance of the bolt-hole from the shaft
end was increased to 30mm and was reinforced with a solid aluminium plug. The result
of these changes was a more rigid, durable and strengthened junction point between the
wing arm and motor mount, reducing the risk of failure.
10.3.2
Gearbox Shaft
During untethered testing several crashes stripped the plastic gears on the servo motor
horn. This caused the wing arm to slip with the motor at high power, sending the propeller
88
10.4. Wing Arm Bearings
Chapter 10. Issues
Figure 10.1: Failure of shaft at Wing/Motor Mount junction
into the ground at full-speed. This resulted in a torsional shear failure of the gearbox
output shaft.
Mr. Steve Kloeden from the workshop managed to repair the broken part in time for
the exhibition, allowing us to demonstrate the propulsion system. However Mr. Kloeden
stressed that this is a short-term solution, and advised a new gearbox or motor/gearbox
assembly be purchased. The motor itself is undamaged and it is envisaged that it will be
used to power a ducted fan for another of Dr. Ben Cazzolato’s final year projects.
10.4
Wing Arm Bearings
The original bearings used to facilitate rotation of the wing arms were teflon coated
dry-rubbing copper bearings embedded into opposite ends of a nylon block. With no
transverse loading these bearings operated at a satisfactory level. However, transverse
forces experienced by shaft during operation resulted in an unsatisfactory level of friction
between the shaft and bearings. Even with additional lubrication, the wing arms were not
able to rotate with desired freedom, eventually resulting in stripping of the servo motor
gears.
The dry rubbing bearings were subsequently replaced with needle roller bearings of the
same inner diameter and similar length. This combined with the purchasing of the more
robust servo motors described in Section 4.5.1 resulted in satisfactory wing-arm operation.
89
Chapter 10. Issues
10.5
10.5. Electrical Noise
Electrical Noise
Originally the PWM signals were generated by the two dSPACE DS-1104 boards and
transmitted to the aircraft through the entire length of the wiring loom. During
transmission the PWM signals were picking up electrical noise which caused erratic
behaviour of the servo motors and electronic speed controllers. This noise problem was
identified by measuring the PWM signal at the aircraft side of the loom using a Cathode
Ray Oscilloscope (CRO).
The PWM signals were replaced with a serial connection to the PicoPic servo controller
which was located on the aircraft. The serial connection proved to be more robust
against noise, eliminating the erratic behaviour of the servo motors and electronic speed
controllers.
10.6
Unmodelled Gimble Dynamics
Tuning of the control system was initially attempted while the model was attached to
the gimble. This had the effect of introducing unmodelled dynamics into the system.
The gimble pivot was located at a distance from the centre of mass of the model. This
introduced dynamics analogous to the ‘inverted pendulum’ problem, in that the aircraft
was easiest to control when in it was approximately horizontal, but became harder to
control as the angle from the horizontal increased. Furthermore the restraint on the
maximum angle of the gimble restricted movement and introduced a spring effect such
that the model could bounce when it hit the extremities of its movement.
To counter this problem, smaller IMU cradle arms where fabricated so the position of
the gimble could be brought closer to the centre of mass of the aircraft. If the centre of
mass is brought to the position of the pivot, or even slightly below it the dynamics of the
aircraft would better represent the true untethered dynamics.
10.7
Weight of Model
During the construction phase various elements of the design were altered. A consequence
of these alterations was the mass of the model to increased significantly over initial
estimates. Increasing the size of the motors and propellers relative to the initial design
subsequently required an increase in battery size and resulted in substantial weight gain.
The redesign of the wing-arms after failure also increased the mass of the model, with
90
10.7. Weight of Model
Chapter 10. Issues
thicker aluminium tubing and plate used to strengthen the motor mounts. The mass
of electric cabling was also higher than expected. The final measured mass was 4.4kg
including batteries and training undercarriage. The model was able to attain sufficient
thrust to leave the ground when running on a sealed lead acid battery. However testing
on LiPo batteries has shown that it there may not be enough static thrust generated to
achieve lift-off.
91
Chapter 11
Discussion and Future Work
11.1
Summary of achievements
Whilst a stable hover was not achieved during the course of the project, there were still
a number of significant achievements throughout the project.
11.1.1
Choice of platform
The first major task in this project was the choice of which platform to base our design on.
A number of sources were discussed in the literature review in Chapter 2 and the reasons
against choosing the F-35 Joint Strike Fighter were detailed in Section 3.1. For the reasons
outlined in Section 2.2.2, the V-22 Osprey was noted to have some promising features
and subsequently was analysed in more detail. This change in platform necessitated the
abandoning of much of the work achieved by Jarrett et al. (2004).
11.1.2
Mechanical design
To develop a realistic working model of the system, a full solid model of the frame and
components was constructed in SolidEdge. The detailed frame drawings can be found in
Appendix A. The biggest constraint was keeping the weight down enough to ensure that
the thrust to weight ratio exceeded the chosen minimum of 1.5:1. Although the mechanical
design of the current system did not have the same vibration issues that Jarrett et al.
(2004) had to consider, the frame still needed to be structurally sound.
92
11.1. Summary of achievements
11.1.3
Chapter 11. Discussion and Future Work
Component Selection and Procurement
Through the review of the mechanical system requirements as discussed in Section 4.3, the
components required to produce thrust, namely the batteries, motors and propellers, were
chosen and subsequently purchased. These components, whilst expensive, have enormous
potential for producing thrust. Furthermore these components have a high degree of
reuseability due to their quality, and thus will be used in future projects.
11.1.4
Mechanical Construction
The frame design was manufactured in the workshop and was assembled with all the
chosen components. The frame displayed a high degree of robustness and controllability,
provided the control system were sufficiently tuned. As such makes a solid control platform
for future development.
11.1.5
Mathematical Modelling
This project intended to implement a state space controller which required an accurate
model of the system dynamics. In Chapter 5 the mathematical model of the aircraft
whilst in hover was derived using force and moment balancing, motor/propeller response
properties and differential equations of motion. In order to design a controller the nonlinear terms were approximated as linear about their operation points.
11.1.6
Controller Design and Tuning
In Chapter 6 both a PID and a state-space controller were designed. The statespace controller was constructed using the derived mathematical model. Whilst it was
envisioned the PID controller would be tuned experimentally this did not occur due to
the events discussed in Chapter 8, where mechanical failure hampered controller tuning.
The state-space controller, on the other hand, was tuned using optimal control (LQR).
11.1.7
Control Implementation
Significant achievements were accomplished in the implementation of the control system,
even though the control system itself was not sufficiently tuned.
93
Chapter 11. Discussion and Future Work
11.2. Future Tasks
During the control development, while the controller was run from the dSPACE DS1104 platform, several issues relating to the Inertial Measurement Unit (IMU) were
discovered for the first time in a final year project, despite its previous use, as discussed
in Section 10.1. Additionally through the use the PicoPic servo motor controller, a much
less expensive component than a dSPACE DS-1104 platform, and insight into to the
communications protocols used, the control system was implemented on a single DS1104 board. This frees an expensive DS-1104 board for use in other projects or teaching
practicals throughout the university year.
Given the requirement of an embedded controller and the use of standard RC equipment
for control, extensive work was undertaken in the integration of these components.
The MiniDRAGON+ development board was programmed and tested for reliable
operation and communication with all peripheral equipment, as discussed in Section 7.4.
Furthermore the state space controller was ported to the MiniDRAGON+ development
board using an efficient method that is quick and easy to reproduce if the controller
changes. It was tested and proven that the MiniDRAGON+ development board had
sufficient processing power to execute this state space controller, including such features
as a reduced-order observer.
11.2
Future Tasks
11.2.1
Stable Hover
Given the large amount of work that has gone into this project it is envisioned that the
completion of all the project goals will only require minimal work. As such all of the
project members have expressed an interest in continuing the project past the official
completion date in order to get the aircraft to hover in a stable manner. Through the
modification of the gimble to eliminate the issue of the unmodelled dynamics discussed
in Section 10.6, it is expected that a suitable controller could be quickly developed. The
aircraft would then be tested untethered, in a similar method to that described in Section
8.3.
11.2.2
Real-Time Embedded Gain Updating
It is proposed to implement communications from the MiniDRAGON+ to the IMU and
PicoPic using a single serial communications port in a similar fashion to that implemented
on the dSPACE DS-1104 control board. This would free up the second port which could
94
11.2. Future Tasks
Chapter 11. Discussion and Future Work
then be used to implement a protocol to update the controller gains in real-time, possibly
using the bluetooth dongles, in a similar fashion to that used by ControlDesk.
11.2.3
System Identification
While the mathematical model developed in Chapter 5 is quite detailed, many
approximations were required to linearise the model. Due to these approximations some
states of the model may be uncontrollable in practice. Different methods of linearising
the equations exist but may have similar issues. Should this be the case with the
model presented in Chapter 5, the Matlab System Identification toolkit facilitates the
evaluation of linear models of dynamic systems from input-output data. Designing the
controller using such a numerical system model is potentially more accurate. This will
allow a wider choice of control system as some techniques require an accurate model.
11.2.4
Reduced Precision Sensors
As one of the main objectives is to build a system which is affordable by model aircraft
enthusiasts, using a $2500 IMU is not practical. It is envisioned that more economically
viable rate gyroscopes will be used. Rate gyroscopes are prone to DC offset since they
must be integrated to determine the position. The effect of less precise information can
be simulated on the IMU by not utilising some of its advanced features, which will allow
the tuning of the existing control system to a point where it is suitable for use with rate
gyroscopes and hence more viable for the commercial market.
Rate gyroscopes output the angular velocity of the model, thus for control the signal must
be numerically integrated to obtain a value for angular position. Numerical integration
of discrete signals is prone to offset errors, thus it is likely the model will drift during
hover. These bias errors can be overcome by an operator using trim pots (trimming
potentiometers) to correct the signal, or the addition of a cheap horizon sensor.
11.2.5
Model Body
Eventually a V-22 Osprey body will be constructed around the frame. Using balsa wood
ribbing and depron skin the body can be made very light. The frame has been designed to
fit inside a 1:15 model of the V-22 Osprey with minor modification. At this stage serious
consideration must be put into the size, shape and actuation of the traditional control
surfaces. For the purposes of “realism” a simple body was manufactured from cardboard
95
Chapter 11. Discussion and Future Work
11.2. Future Tasks
and shaped clear plastic. This covering enables a view of the inner model workings, whilst
giving a realistic impression of the final design. The drawback associated with this design
is that it is purely aesthetic and cannot be used for active conditional control surfaces.
11.2.6
Conventional Flight
As a future project the model could be adapted for conventional flight. This will involve
the construction of traditional flight and control surfaces, such as wings, ailerons, rudders
and elevators and the adaption of the control system to allow a successful transition to
conventional flight. This has been the major challenge to enthusiasts who have attempted
to build model VTOL aircraft in the past.
96
References
Airfield Models (2005).
http://www.airfieldmodels.com/information source/model aircraft engines/propellers.html.
Accessed 10/10/05.
Bell Agusta (2005). http://www.bellagusta.com/pdf/ba609 2004.pdf. Accessed 19/5/05.
Boeing (2005). http://www.boeing.com/rotorcraft/military/v22. Accessed 10/5/05.
Cazzolato, B. (2005a). 3 Degree of Freedom Hover Tutorial. The University of Adelaide.
Cazzolato, B. (2005b). Advanced Automatic Control Lecture Notes. The University of
Adelaide, Adelaide.
Cazzolato, B. (2005c). Automatic Control II Lecture Notes. The University of Adelaide,
Adelaide.
Chapman, L. (2005). http://www.geocities.com/v22chap. Accessed 15/3/05.
Dorf, R. and Bishop, R. (2001). Modern Control Systems. Prentice Hall, New Jersey,
9th edition.
Franklin, J. A. (2002). Dynamics, Control and Flying Qualities of V/STOL Aircraft.
AIAA.
Hamel, R. L. R. O. J., Tarek; Mahony (2002). Dynamic modelling and configuration
stabilization for an x4-flyer. IFAC 15th Triennial World Congress, Barcelona, Spain.
Hansen, C. and Snyder, S. D. (1996). Active Control of Noise and Vibration. Spon Press.
HazelProp (2005). http://www.hartzellprop.com/engineering/engineering faqs.htm.
Accessed 19/9/05.
ICARE (2005). Personal correspondence. 28/7/05.
Jarrett, M., Ng, R., and Teske, T. (2004). Radio Controlled Vertical Take-Off and
Landing Aircraft. The University of Adelaide, Adelaide.
97
References
References
JSF (2005). http://www.jsf.mil/index.htm. Accessed 19/5/05.
McCormick, B. W. J. (1995). Aerodynamics, Aeronautics and Flight Mechanics.
Academic Press.
Mettler, B. (2003). Identification Modelling and Characteristics of Minature Rotorcraft.
Kluwer Academic Publishers.
Modelflight (2005). http://www.modelflight.com.au/jr propo rc control servos.htm.
Accessed 1/5/05.
Newman, T. (2005). Personal correspondence. 16/5/05.
Picobytes inc. (2003). PicoPIC User and Technical Manual.
Rogers, M. (1989). VTOL Military Aircraft. Haynes.
RS Automation (2005). http://www.rsaustralia.com. Accessed 1/6/05.
Schubeler (2005). http://www.schuebeler-jets.de. Accessed 16/3/05.
TiltRotorMech (2005). http://www.tiltrotormech.com/v22 models.htm. Accessesd
10/5/05.
WeMoTec (2005). http://www.wemotec.com/index e.html. Accessed 1/5/05.
Wikipedia (2005). http://en.wikipedia.org. Accessed 25/9/05.
Wilkins, P. S. (2001). The potential use of military tiltrotor aircraft for aeromedical
evacuation. ADF Health, 1:58 – 63.
Xiaofei-Wu, Ignatov, R., Muenst, G., Imaev, A., and Zhu, J.-J. (2002). A nonlinear
flight controller design for a ufo by trajectory linearization method, part 1, modelling.
Proceedings of the Thirty Fourth Southeastern Symposium on System Theory Cat,
No.02EX540.:97–102.
98
Appendix A
CAD Drawings
Drawing Number
Title
VTOL-05-001
VTOL-05-002
VTOL-05-003
VTOL-05-004
VTOL-05-005
VTOL-05-006
VTOL-05-007
VTOL-05-008
VTOL-05 Frame
Main Chassis
Main Chassis Parts
Assembled Wing Arm
Assembled Wing Arm Parts
IMU Cradle
IMU Cradle Parts
Motor Mount and Propeller Adapter
Please note all drawings were intended for printing to A3, hence some detail may be lost
when printed to A4.
99
REV
REVISION HISTORY
DESCRIPTION
DATE
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
TITLE
VTOL-05 Frame
FILE NAME: VTOL-05-001.dft
SIZE
A3
SCALE:
DWG NO
VTOL-05-001
WEIGHT:
DRAWN a1078621
27/10/05
CONTACT [email protected]
REV CHECKED
1 ENG APPR
MGR APPR
SHEET 1 OF 2
945
420
300
220
3
1
2
2
60
1
1
94
260
1154
REV
REVISION HISTORY
DESCRIPTION
DATE
Item Number
TITLE
VTOL-05 Frame
FILE NAME: VTOL-05-001.dft
SIZE
A3
SCALE:
DWG NO
Quantity
VTOL-05-002
Main Chassis
1
2
VTOL-05-004
Assembled Wing Arm
2
3
VTOL-05-006
IMU Cradle
1
VTOL-05-001
WEIGHT:
Title
1
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
Document
Number
DRAWN a1078621
27/10/05
CONTACT [email protected]
REV CHECKED
1 ENG APPR
MGR APPR
SHEET 2 OF 2
4
12
8
1
7
9
11
6
10
5
2
13
3
Item Number
REV
ASSEMBLY NOTE:
PLEASE WELD ALL COMPONENTS AS APPROPRIATE
Document
Number
Title
Quantity
1
VTOL-05-003
Rear Servo Mount (for elevators
and rudder)
1
2
VTOL-05-003
Main Frame Front Strut
1
3
VTOL-05-003
Main Frame Left Strut
1
4
VTOL-05-003
Main Frame - Rear Cantilever
Arm
1
5
VTOL-05-003
Main Frame Right Strut
1
6
VTOL-05-003
Main Frame Back Strut
1
7
VTOL-05-003
Aileron Servo Mount
1
8
VTOL-05-003
Rear Ducted Fan Mount
1
9
VTOL-05-017
Connecting Bracket
1
10
VTOL-05-003
Connecting Bracket
1
11
VTOL-05-003
Arm holder
2
12
VTOL-05-003
Wing Servo Bracket (Right)
1
13
VTOL-05-003
Wing Servo Bracket (Left)
1
REVISION HISTORY
DESCRIPTION
DATE
DETAIL A
Flatten tube to
accept rear fan mount
DETAIL B
B
A
106.5
265
420
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
TITLE
Main Chassis
FILE NAME: VTOL-05-002.dft
SIZE
DWG NO
A3
SCALE:
1:5
DRAWN a1078621
27/10/05
CONTACT [email protected]
REV CHECKED
VTOL-05-002
1 ENG APPR
MGR APPR
WEIGHT: 279g+welds SHEET 1 OF 1
36.5
3
O 3.5
33.5
13.5
246.5
23
8x M3
100
420
1.5 THICK
O 3.5
O
4. 5
45 °
37
47
REAR SERVO MOUNT (FOR RUDDER AND ELEVATOR CONTROL)
QUANTITY: 1
SCALE: 1.5:1
MATERIAL: 3MM ALUMINIUM
REV
DATE
148.5
19.5
2.5
14.5
7.5
3
REVISION HISTORY
DESCRIPTION
173.5
4x O 3
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
TITLE
Main Chassis Parts
FILE NAME: VTOL-05-003.dft
4.5
13
12
20
MAIN FRAME - LEFT STRUT
QUANTITY: 1
SCALE: 1:2
MATERIAL: 20x12x1.5 UNEQUAL ANGLE ALUMINIUM
DRAWN a1078621
27/10/05
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
CONTACT [email protected]
REV CHECKED Jesse Sherwood
SIZE DWG NO
VTOL-05-003
A3
1 ENG APPR
SCALE: -
WEIGHT: -
SHEET 1 OF 5
MGR APPR
36.5
20
12
12
O
20
3.5
1.5
1.5
47
4.5
10
3.5
42
47
O
94
383.5
94
420
O
42
1.5 THICK
148.5
173.5
45 °
MAIN FRAME - FRONT STRUT
QUANTITY: 1
SCALE: 1:1
MATERIAL: 20x12x1.5 UNEQUAL ANGLE ALUMINIUM
4.5
13
12
20
MAIN FRAME - RIGHT STRUT
QUANTITY: 1
SCALE: 1:2
MATERIAL: 20x12x1.5 UNEQUAL ANGLE ALUMINIUM
REV
REVISION HISTORY
DESCRIPTION
45 °
4 5°
4.5
DATE
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
TITLE
Main Chassis Parts
FILE NAME: VTOL-05-003.dft
MAIN FRAME - REAR STRUT
QUANTITY: 1
SCALE: 1:1
MATERIAL: 20x12x1.5 UNEQUAL ANGLE ALUMINIUM
SIZE
A3
SCALE: -
DWG NO
VTOL-05-003
WEIGHT: -
DRAWN a1078621
27/10/05
CONTACT [email protected]
REV CHECKED Jesse Sherwood
1 ENG APPR
MGR APPR
SHEET 2 OF 5
4x O 3.5
2x O 4.5
10.5
3
30.5
1
260
40
60
2
5
10
7.5
3
12.5
47
22.5
5
55
35
5
5
30
SERVO ARM HOLDER
QUANTITY: 1
SCALE: 1:2
MATERIAL: 3MM ALUMINIUM
NOTES: TOP ARM BASE SUPPORTED BY BEARINGS AND NOT
ATTACHED TO LOWER PIECES
REV
REVISION HISTORY
DESCRIPTION
DATE
PART 2
PART 1
LEFT SERVO BRACKET
QUANTITY: 1
SCALE 1:1
MATERIAL: 3MM ALUMINIUM
NOTES: RIGHT BRACET DIMENSION SAME
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
TITLE
Main Chassis Parts
FILE NAME: VTOL-05-003.dft
RIGHT SERVO BRACKET
QUANTITY: 1
SCALE 2:1
MATERIAL: 3MM ALUMINIUM
NOTES: DIMESIONS THE SAME AS LEFT
BRACKET, JUST MIRRORED (SEE LEFT)
SIZE
A3
SCALE: -
DWG NO
VTOL-05-003
WEIGHT: -
PART 3
ARM HOLDER BASE
QUANTITY: 2
SCALE: 1:2
MATERIAL: 3MM ALUMINIUM
NOTES: ONE FOR THE TOP AND ONE
FOR THE BOTTOM AS SHOWN
DRAWN a1078621
27/10/05
CONTACT [email protected]
REV CHECKED Jesse Sherwood
1 ENG APPR
MGR APPR
SHEET 3 OF 5
INTERNAL R 26
260
10
15
HOLE THROUGH BOTH
TO ACT AS A CLAMP
3
30
REAR DUCTED FAN MOUNT
QUANTITY: 1
SCALE: 1:1
MATERIAL: ALUMINIUM
NOTES: ROUND CLAMP SECTION TO BE MADE FROM ROLLED 2MM
ALUMINIUM STRIPPING
REV
REVISION HISTORY
DESCRIPTION
DATE
TOP BEARING BASE
QUANTITY: 1
SCALE: 1:2
MATERIAL: 3MM ALUMINIUM
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
TITLE
Main Chassis Parts
FILE NAME: VTOL-05-003.dft
SIZE
A3
SCALE: -
DWG NO
VTOL-05-003
WEIGHT: -
DRAWN a1078621
27/10/05
CONTACT [email protected]
REV CHECKED Jesse Sherwood
1 ENG APPR
MGR APPR
SHEET 4 OF 5
2X
5
4X
5
10
7.6
O3
O
30
3
3
12
25
5
4xM3
460
R5
30
38.5
12
1
37
R6
R6
12
5
R5
12
25
5
7
17
94
3.5
5
1
O
20
ID
3
O
OD
10
47
REAR CANTILEVER ARM
QUANTITY: 1
SCALE: 1:5
MATERIAL: STANDARD OD 10MM ALUMINIUM TUBE
REV
REVISION HISTORY
DESCRIPTION
DATE
AILERON SERVO MOUNT
QUANTITY: 1
SCALE: 1:1
MATERIAL: 3MM ALUMINIUM
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
TITLE
Main Chassis Parts
FILE NAME: VTOL-05-003.dft
REAR ARM CONNECTING BRACKET
QUANTITY: 1
SCALE 2:1
MATERIAL: ALUMINUM
REAR SERVO CONNECTING BRACKET
QUANTITY: 1
SCALE 2:1
MATERIAL: ALUMINIUM
SIZE
A3
SCALE: -
DWG NO
VTOL-05-003
WEIGHT: -
DRAWN a1078621
27/10/05
CONTACT [email protected]
REV CHECKED Jesse Sherwood
1 ENG APPR
MGR APPR
SHEET 5 OF 5
3
2
4
5
A
7
6
1
Item Number
DETAIL A
REV
REVISION HISTORY
DESCRIPTION
DATE
TITLE
Assembled Wing Arm
FILE NAME: VTOL-05-004.dft
SIZE
DWG NO
A3
SCALE: 1:2
Title
Quantity
1
VTOL-05-005
Wing Arm
1
2
VTOL-05-005
Wing Arm - Motor Mount
1
3
VTOL-05-005
Collar and Servo Hub
1
4
VTOL-05-005
Wing Arm Collar
1
5
VTOL-05-005
Arm Plug
1
6
VTOL-05-005
Acrylic Block
1
7
------------- ID16x16 Roller Bearing
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
Document
Number
2
DRAWN a1078621
27/10/05
CONTACT [email protected]
REV CHECKED
VTOL-05-004
1 ENG APPR
MGR APPR
WEIGHT: 83g+welds SHEET 1 OF 1
O
ID
12
O
16
5
10
2.5
5
3
OD
M2
M2 FOR GRUB SCREW
NOTE: 45v OFFSET FROM OTHER HOLES
475
O 16.25
O
+0.25
0
22
45°
O 30
4x M2.5
12
O 20
3
90
°
O
25
+0.
0
5
16.2
WING ARM
QUANTITY: 2
SCALE: 1:3
MATERIAL: STANDARD OD 16MM ALUMINIUM TUBE
NOTES: 1 FOR EACH ASSEMBLED WING ARM
REV
REVISION HISTORY
DESCRIPTION
ARM COLLAR AND SERVO HUB
QUANTITY: 2
SCALE: 2:1
MATERIAL: ALUMINIUM
NOTES: 1 FOR EACH ASSEMBLED WING ARM
DATE
WING ARM WASHER
QUANTITY: 2
SCALE: 3:1
MATERIAL: ALUMINIUM
NOTES: 1 FOR EACH ASSEMBLED WING ARM
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
TITLE
Assembled Wing Arm Parts
FILE NAME: VTOL-05-005.dft
SIZE
A3
SCALE: -
DWG NO
VTOL-05-005
WEIGHT: -
DRAWN a1078621
27/10/05
CONTACT [email protected]
REV CHECKED
1 ENG APPR
MGR APPR
SHEET 1 OF 2
10
45 °
O
26
40
O2
0
30
4xM3
5
O 22
30
5
4xM3
5
10.5
35
O 16
.25
10
4.5
2.5
5
2.5
26
10
10.5
10
O
16
28
60
16
O
12
4xO3
ACRYLIC ARM BEARING BLOCK
QUANTITY: 2
SCALE: 1:1
MATERIAL: ACRYLIC
NOTES: 1 FOR EACH WING ARM
RECESSES MACHINED TO FIT STANDARD
ID16x16 ROLLER BEARINGS
REV
REVISION HISTORY
DESCRIPTION
DATE
WING ARM MOTOR MOUNT
QUANTITY: 2
SCALE: 2:1
MATERIAL: ALUMINIUM
NOTES: 1 FOR EACH WING ARM
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
TITLE
Assembled Wing Arm Parts
FILE NAME: VTOL-05-005.dft
WING ARM PLUG
QUANTITY: 2
SCALE: 2:1
MATERIAL: ALUMINIUM
NOTES: 1 FOR EACH WING ARM
SIZE
A3
SCALE: -
DWG NO
VTOL-05-005
WEIGHT: -
DRAWN a1078621
27/10/05
CONTACT [email protected]
REV CHECKED
1 ENG APPR
MGR APPR
SHEET 2 OF 2
AS APPROPRIATE
BOTTOM ONLY
94
AS APPROPRIATE
AS APPROPRIATE
BOTTOM ONLY
1
AS APPROPRIATE
2
240
5
3
76.5
4
NOTES:
ALL PARTS EXCEPT GIMBLE EXTENDER TO BE WELDED ON AS APPROPRIATE/SHOWN
Item Number
REV
Document
Number
Title
1
VTOL-05-007
IMU Cradle Strut - Back
1
2
VTOL-05-007
IMU Cradle - Right Strut
1
3
VTOL-05-007
IMU Cradle - Left Strut
1
4
VTOL-05-007
IMU Cradle upright
4
5
VTOL-05-007
Gimble Extender
1
REVISION HISTORY
DESCRIPTION
DATE
6.5
Quantity
5
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
TITLE
DWG NO
IMU Cradle
SIZE
FILE NAME: VTOL-05-006.dft
SCALE: 1:2
A3
DRAWN a1078621
27/10/05
CONTACT [email protected]
REV CHECKED
VTOL-05-006
1 ENG APPR
MGR APPR
WEIGHT: 126g+welds SHEET 1 OF 1
12
20
1.5
12
1.5
12
20
20
32
32
1.5
240
156
156
47
94
240
O
6 .5
45 °
45 °
45 °
8.25
8.25
5.5
5.5
IMU CRADLE - LEFT STRUT
QUANTITY: 1
SCALE: 1:2
MATERIAL: 20x12x1.5 UNEQUAL ANGLE ALUMINIUM
IMU CRADLE - REAR STRUT
QUANTITY: 1
SCALE: 1:1
MATERIAL: 20x12x1.5 UNEQUAL ANGLE ALUMINIUM
REV
REVISION HISTORY
DESCRIPTION
DATE
IMU CRADLE - RIGHT STRUT
QUANTITY: 1
SCALE: 1:2
MATERIAL: 20x12x1.5 UNEQUAL ANGLE ALUMINIUM
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
TITLE
IMU Cradle Parts
FILE NAME: VTOL-05-007.dft
SIZE
A3
SCALE: -
DWG NO
VTOL-05-007
WEIGHT: -
DRAWN Jesse Sherwood
27/10/05
CONTACT [email protected]
REV CHECKED
1 ENG APPR
MGR APPR
SHEET 1 OF 2
O
O
10
6 .5
7.6
O
O
10
2x O
4.5
10
25
M6
50
75
76
20°
1
rox
App
Approx 25
Approx 36
Approx 22
10
94
M6
IMU CRADLE - UPRIGHT
QUANTITY: 4
SCALE: 2:1
MATERIAL: STANDARD OD 10MM ALUMINIUM TUBE
REV
REVISION HISTORY
DESCRIPTION
GIMBLE-IMU MOUNT
QUANTITY: 1
SCALE 1:1
MATERIAL: 3mm ALUMINIUM
NOTES: DISTANCE BETWEEN HOLES IS IMPORTANT
GIMBLE EXTENDER
QUANTITY: 1
SCALE: 2:1
MATERIAL: STEEL
NOTES: CONFIRM BOTTOM THREAD SIZE BEFORE
SUMBISSION
DATE
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
TITLE
IMU Cradle Parts
FILE NAME: VTOL-05-007.dft
SIZE
A3
SCALE: -
DWG NO
VTOL-05-007
WEIGHT: -
DRAWN Jesse Sherwood
27/10/05
CONTACT [email protected]
REV CHECKED
1 ENG APPR
MGR APPR
SHEET 2 OF 2
Item Number
4xO3.5
18
13
50
32
8
O1
Document
Number
Title
Quantity
1
VTOL-05-008
Propeller Adapter Shaft
1
2
VTOL-05-008
Propeller Adapter Lower Collar
1
3
------------
APC 20"x10" Glass Filled Nylon
Propeller
1
4
VTOL-05-008
Propeller Adapter Upper Collar
1
5
------------
M8 Fibre Lock Nut
1
1
3
13
20
23
5
46
4
3
50
75
10.5
50
3
30
40.5
2
3
10.5 9.5
3
40
APC PROPELLER ADAPTER
QUANTITY: 2
SCALE: 2:1
MATERIAL: STEEL
NOTE: PARTS ON THE FOLLOWING PAGE
PLETTENBERG MOTOR MOUNT
QUANTITY: 2
SCALE: 1:1
MATERIAL: ALUMINIUM
NOTE: TO BE WELDED TOGETHER FROM 3MM ALUMINIUM
REV
REVISION HISTORY
DESCRIPTION
DATE
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
TITLE
Motor Mount and Propeller Adapter
FILE NAME: VTOL-05-008.dft
SIZE
A3
SCALE:
DWG NO
VTOL-05-008
WEIGHT:
DRAWN a1078621
27/10/05
CONTACT [email protected]
REV CHECKED
1 ENG APPR
MGR APPR
SHEET 1 OF 2
O
44
M 4
M8
O
14
O
25
8.2
2
O
5.9
O1
O 17.8
O8
PROPELLER ADAPTER SHAFT
QUANTITY: 2
SCALE: 2:1
MATERIAL: STEEL
NOTE: ONE FOR EACH MOTOR
REV
1.5
1.5
O 6
REVISION HISTORY
DESCRIPTION
3.4
5.3
17
23
M 4
63
40
O8
PROPELLER ADAPTER UPPER COLLAR
QUANTITY: 2
SCALE: 2:1
MATERIAL: STEEL
NOTE: ONE FOR EACH MOTOR
PROPELLER ADAPTER LOWER COLLAR
QUANTITY: 2
SCALE: 2:1
MATERIAL: STEEL
NOTE: ONE FOR EACH MOTOR
DATE
ALL TOLERANCES +/- 0.5MM OR +/- 1°
UNLESS OTHERWISE SPECIFIED
ALL DIMENSIONS IN MILLIMETERS
UNLESS OTHERWISE SPECIFIED
APPROVED
TITLE
Motor Mount and Propeller Adapter
FILE NAME: VTOL-05-008.dft
SIZE
A3
SCALE:
DWG NO
VTOL-05-008
WEIGHT:
DRAWN a1078621
27/10/05
CONTACT [email protected]
REV CHECKED
1 ENG APPR
MGR APPR
SHEET 2 OF 2
Appendix B
Simulink Code
100
% This file will build a state model of the 2005 RC VTOL (Osprey).
% The file was adapted from Ben Cazzolato's state model template.
clc
close all
clear all
disp('Mass of motors and fans')
mf = 0.4; % mass of each front motor/prop (kg)
mb = 0.1; % mass o rear motor/fan (kg)
disp('Total mass')
Mp = 4; %Mass of plane (kg)
%disp('Length of fuselage (m)')
l1 = .05;
l2 = .8;
l3 = .5;
% Will need to work these out somehow
%disp('Moment of intertia for a single motor/fan')
J = mf;
Jre = mb;
%disp('Moments of inertia about each axis')
Jy = 0.25934;
%calculated on solid edge
Jp = 0.094625;
Jr = 0.19712;
% prop weighs 0.0433lbs = 195g.
Jpr = 2.55e-3; % moment of inertia of prop, see p31 of allans book
disp('Motor/Fan Force and Torque constants')
% some of these constants are not in use currently as they have been
% replaced by experimentally determined values
Vhov = 8;
% Voltage supplied to front motors for hover
kD = .004;
% drag constant of props (assumed from prop calc)
kt = .1901;
% torque constant of motor (mN.m/A) (published on website)
kB = 0;
% torque constant of rear motor (Nm/A)
keb = kB;
Ra = .29;
% armature resistance (ohms)
CT = 0.0828;
%thrust coefficient for propeller 20-10 estimated propcalc
kl = 0.7;
% coefficient of lift for props
klrear = 0.5;
% coefficient of lift for rear fan
ke = kt;
%back emf constant = torque const in SI units
Kmp = ((.1901)^2/0.56 + 0.008*3000/60);
%(bm + kt*ke/Ra + kD*theta_0_dot);%
was 0.06;
Kd = 0;
% kD*theta_0_dot*kt/(Ra*Kmp); % Nm per volt Front Props (not measured)
Kdr = 0;
% Nm per volt Rear Prop/Fan (not measured)
%Kp = kl*theta_0_dot*kt/(Ra*Kmp);
% From Thrust Testing
thr = 2.5*9.81;
Kp = thr/10;
Kr = .15/10;
% from full power thrust test on 12V battery 49N for both props;
% N x volt Front Props;
% N per volt Rear Prop/Fan;
Pd = l1*Kp/Jp;
Rd = l3*Kp/Jr;
Zd = Kp/Mp;
%_______________________________________________
disp('Define the uncoupled model')
disp('States : [y, y_dot, p, p_dot, r, r_dot, theta_L_dot,theta_R_dot, X, X_dot, Z, Z_dot]')
% Angles are in radians
% p = pitch
% r = roll
% y = yaw
% theta_L = angular position of left prop
% theta_R = angular position of right prop
% X = translation along X axis
% Y = translation along Y axis
% Z = translation along Z axis
disp('State Matrix')
Am=[ 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
Zd
Zd
-Pd
-Pd
-Rd
Rd
-Kmp/Jpr 0
0 -Kmp/Jpr ]
disp('State input matrix')
disp('Command states are: [Dl, Dr, Db, phi_L, phi_R]')
%
Vl
Vr
Vb
phi L
Bm=[
Kd
-Kd
Kdr
l3*Kp*Vhov/Jy
0
0
0
0
0
0
0
0
0
0
-Kr/Mp
0
0
0
l2*Kr/Jp
0
0
0
0
0
kt/(Ra*Jpr)
0
0
0
0
kt/(Ra*Jpr)
0
0
%
%
%
%
%
%
%
%
*
*
*
*
*
*
*
*
y_dot
p
r
Z_dot
p_dot
r_dot
theta_L_dot
theta_R_dot
phi R
-l3*Kp*Vhov/Jy
0
0
0
0
0
0
0
]
%
%
%
%
%
%
%
%
=
=
=
=
=
=
=
=
y_ddot
p_dot
r_dot
Z_ddot
p_ddot
r_ddot
theta_L_ddot
theta_R_ddot
%State output vector
% y
Cm = [1
0
0
0
p
0
1
0
0
r
0
0
1
0
X
0
0
0
1
Z
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
];
%Feedforward term
Dm = [0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0];
disp(' ');disp(' ');
osprey_model = ss(Am,Bm,Cm,Dm);
Statenames = str2mat('y_dot', 'p','r', 'Z_dot', 'p_dot', 'r_dot', 'theta_L_dot', 'theta_R_dot')
set(osprey_model,'StateName',Statenames);
set(osprey_model,'InputName',{'D_{left}'; 'D_{right}'; 'D_{back}'; 'Phi_{left}';...
'Phi_{right}'},'OutputName',{'yaw'; 'pitch'; 'roll'; 'Z_trans'})
disp(' ');disp(' ');
disp('Now add the augmented states');
disp('States : [y_dot, p, r, Z_dot , p_dot, r_dot, theta_L_dot,...
theta_R_dot, alpha, beta, gamma, zeta, eta]');
% State Matrix
A_augmented = [Am, zeros(8,4); Cm, zeros(4,4)];
% State input matrix
B_augmented = [ Bm; zeros(4,5)];
% Also define an alternative input vector to allow us to input the desired
% setpoints
B_setpoint = zeros(12,4);B_setpoint(9,1)=-1;B_setpoint(10,2)=-1; B_setpoint(11,3)=-1;
B_setpoint(12,4)=-1;% Augmented state input vector for 4 augmented states
% B_aug = [B,B2]
% State output vector
C_augmented = [Cm, zeros(4,4)];
% Feedforward term
D_augmented = Dm;
osprey_augmented = ss(A_augmented,B_augmented,C_augmented,D_augmented);
Statenames = str2mat('y_dot', 'p','r','Z_dot', 'p_dot', 'r_dot', 'theta_L_dot',...
'theta_R_dot', 'alpha', 'beta', 'gamma', 'zeta');;
set(osprey_augmented,'StateName',Statenames);
set(osprey_augmented,'InputName',{'D_{left}'; 'D_{right}'; 'D_{back}'; 'Phi_{left}';...
'Phi_{right}'},'OutputName',{'yaw'; 'pitch'; 'roll'; 'Z_trans'});
osprey_augmented;
%%
%disp('The open poles are')
damp(Am);
step(osprey_model)
title('Open Loop Step Response')
% Check controllability
Co = ctrb(osprey_model);
cond(Co);
% Check observability
Ob = obsv(osprey_model);
cond(Ob);
unco = length(Am)-rank(Co);
unob = length(Am)-rank(Ob);
% number of uncontrollable states
% number of unobservable states
%_____________________________________________________________
disp('Now design the controller')
disp('State weighting matrix')
q = diag([100 100 100 100 1 1 1 1 200 200 200 200])
disp('Effort penalty matrix')
r = diag([2 2 2 50 50])
% The controller gains
K = lqr(A_augmented,B_augmented,q,r);
Km = K(:,1:8)
% These are the usual feedback gains
Ki = K(:,9:12)
% These are the feedback gains for the augmented states
% The closed loop system with full state feedback is
C_extra = [Cm;-Km];
% Augment the output so we can see the motor drive voltages.
osprey_model_full = ss(Am-Bm*Km,Bm,C_extra,0);
Statenames = str2mat('y_dot', 'p','r', 'Z_dot', 'p_dot', 'r_dot', 'theta_L_dot', 'theta_R_dot');
set(osprey_model_full,'StateName',Statenames);
set(osprey_model_full,...
'InputName',{'D_{left}'; 'D_{right}'; 'D_{back}'; 'Phi_{left}'; 'Phi_{right}'}, ...
'OutputName',{'yaw'; 'pitch'; 'roll'; 'Z_trans'; 'D_{left}'; 'D_{right}'; 'D_{back}';...
'Phi_{left}'; 'Phi_{right}'});
% Plot the closed loop step response
figure
step(osprey_model_full)
title('Closed loop step response with full state feedback');
% The closed loop augmented system with full state feedback and command following is
C_extra = [C_augmented;-K];
% Augment the output so we can see the motor drive voltages.
osprey_augmented_full = ss(A_augmented-B_augmented*K,B_setpoint,C_extra,0);
Statenames = str2mat('y_dot','p','r', 'Z_dot', 'p_dot', 'r_dot', 'theta_L_dot',...
'theta_R_dot', 'alpha', 'beta', 'gamma', 'zeta');
set(osprey_augmented_full,'StateName',Statenames);
set(osprey_augmented_full,...
'InputName',{'Yaw Command'; 'Pitch Command'; 'Roll Command';'Z Trans Command'}, ...
'OutputName',{'yaw'; 'pitch'; 'roll';'Z_trans';'D_{right}';'D_{left}'; 'D_{back}';'Phi_{left}'; 'Phi_
{right}'});
osprey_augmented_full;
% % Plot the closed loop step response
figure
step(osprey_augmented_full)
title('Augmented system closed loop step response with full state feedback and command following')
%% Reduced Order Observer
% Splits A and B matrices into required form for Reduced Order Observer
for i = 1:4
for j = 1:4
Aaa(i,j) = Am(i,j);
Ba(i,j) = Bm(i,j);
end
end
for i = 5:8
for j = 1:4
Aba(i-4,j) = Am(i,j);
Bb(i-4,j) = Bm(i,j);
end
end
for i = 1:4
for j = 5:8
Aab(i,j-4) = Am(i,j);
end
end
for i = 5:8
for j = 5:8
Abb(i-4,j-4) = Am(i,j);
end
end
Qob = diag([1 1 1 1]); % Q matrix for kalman filter
Rob = diag([1 1 1 1]); % R matrix for Kalman filter
G = lqr(Abb',Aab',Qob,Rob); % Determine observer gains
L = transpose(G);
L_red = L;
%computes state matrices for reduced order observer to allow for a state
%space block to be used in Simulink model
Ar = Abb - L*Aab;
Br = [(Aba- L*Aaa + Abb*L - L*Aab*L) (Bb - L*Ba)];
Cr = eye(4);
Dr = [L zeros(4,5)];
%% Full Rank Observer (used in estim command below)
P = pole(ss(Am-Bm*Km,Bm,Cm,Dm));
disp('Place observer poles at 10 times the controller poles')
P_ob = 10*P;
disp('Now work out observer gains')
L_transpose = place(transpose(Am),transpose(Cm),P_ob);
L_full = transpose(L_transpose);
disp('Now build the full estimator (not reduced) using the "estim" command')
% EST = ESTIM(SYS,L,SENSORS,KNOWN)
% The system is "plant", the estimator gains are "L"
% The sensors specify which outputs (y) are known, which in this case
% is the first four states
% The known refers to which inputs (u) to the plant are known.
%
% First determine the number of inputs and outputs from the plant
[Nstates,Nin] = size(Bm)
[Nout,Nstates] = size(Cm)
SENSORS = [1:Nout]
KNOWN = [1:Nin]
system_estim = estim(osprey_model,L,SENSORS,KNOWN)
plant_estim = estim(osprey_model,L)
Statenames = str2mat( 'y_dot_est', 'p_est', 'r_est',...
'Z_dot_est','p_dot_est','r_dot_est','theta_L_dot_est', 'theta_R_dot_est')
set(system_estim,'StateName',Statenames)
set(system_estim,
'InputName',{'V_{left}'; 'V_{right}'; 'V_{back}'; 'Phi_{left}'; 'Phi_{right}';...
'Yaw_des'; 'Pitch_des'; 'Roll_des';'Z_des'},...
'OutputName',{'Yaw_est'; 'Pitch_est'; 'Roll_est';'Z_est'; 'y_dot_est';...
'p_est';'r_est';'Z_dot_est';'p_dot_est'; 'r_dot_est';'theta_L_dot_est'; 'theta_R_dot_est'})
%%
%
disp('*******************')
disp('Design a regulator ')
disp('*******************')
% Look at the regulated plant - For checking final system
disp('The regulator is')
osprey_model_reg = reg(osprey_model,Km,L)
disp('The regulated system is')
osprey_model_regulated = feedback(osprey_model,-osprey_model_reg)
figure
step(osprey_model_regulated)
title('Step response with regulator')
%%
%
disp('************************************************************************')
disp('Now build all the subcomponents to make the model with integral tracking')
disp('************************************************************************')
disp('*******************************************')
disp('Build a state space model of the controller')
disp('*******************************************')
system_controller = ss([],[],[],-Km);
% This is simply a feed forward term
Statenames = str2mat( 'y_dot', 'r', 'p', 'Z_dot','p_dot','r_dot','theta_L_dot','theta_R_dot')
set(system_controller,...
'InputName',{ 'y_dot_in','p_in','r_in','Z_dot_in',
'p_dot_in','r_dot_in','theta_L_dot_in','theta_R_dot_in'},...
'OutputName',{'Vcont_{left}'; 'Vcont_{right}'; 'Vcont_{back}'; 'Phi_cont_{left}'; 'Phi_cont_
{right}'});
system_controller
disp('******************************************************')
disp('Build a state space model of only the augmented states')
disp('******************************************************')
% This is an integrator (on the input) for each state, with input weighting equal to the control gains
calculated earlier
system_aug = ss(zeros(5),Ki,eye(5),0);
Statenames = str2mat('alpha', 'gamma','beta','epsi','kappa')
set(system_aug,'StateName',Statenames)
set(system_aug,...
'InputName',{'Yaw Error'; 'Pitch Error';'Roll Error';'Z Error'},...
'OutputName',{'Integral Vl error'; 'Integral Vr error'; 'Integral Vb error';...
'Integral phi L error';'Integral phi R error'})
system_aug
%%
disp('**********************************************')
disp('Build a state space model of the command input')
disp('**********************************************')
% This is the only way to have four inputs into the augmented states
system_input = ss([],[],[],eye(4));
set(system_input,'InputName',{'Yaw SP', 'Pitch SP','Roll SP','Z SP'},'OutputName',{'Pitch SP', 'Yaw SP',
'Roll SP','Z SP'});
system_input
system_plant = osprey_model;
disp('********************************************************************************************')
disp('Append the plant, the estimator, the controller, the augmented states and the command inputs')
disp('********************************************************************************************')
system_complete_temp = append(system_plant, system_estim, system_aug, system_controller, system_input)
goutput = get(system_complete_temp,'OutputName');
ginput = get(system_complete_temp,'InputName');
disp('*********************************************************************************************')
disp('Connect the plant, the estimator, the controller, the augmented states and the command inputs')
disp('*********************************************************************************************')
%% Connect all the appropriate inputs and outputs of the subsystems
% The connection from the plant output into the estimator
con1 = [11, 1, 0; 12, 2, 0; 13, 3, 0; 14, 4, 0];
% The connection from the control gain and augmented states to the estimator
con2 = [6, 22, 17; 7, 23, 18; 8, 24, 19 ; 9, 25, 20 ; 10, 26, 21];
% The connection from the control gain and augmented states to the plant input
con3 = [1, 22, 17; 2, 23, 18; 3, 24, 19 ; 4, 25, 20 ; 5, 26, 21];
% The connection from the ref gain and plant output into the augmented states
con4 = [15, 27, -1; 16, 28, -2; 17, 29,-3 ; 18, 30, -4;];
% The connection from the state estimates to the controller
con5 = [ 19, 9, 0; 20 , 10, 0; 21, 11, 0; 22, 12, 0; 23, 13, 0; 24 , 14, 0; 25, 15, 0; 26, 16, 0];
CON = [con1;con2;con3;con4;con5];
INPUTS = [27,28,29,30];
OUTPUTS = [1,2,3,4];
% The inputs to the system are the four setpoints
% The outputs from the system are
system_complete = connect(system_complete_temp,CON,INPUTS,OUTPUTS);
C_extra = [system_complete.c;zeros(5,8), -Km, eye(5)];
% Add some additional outputs to see the
motor control voltage
D_extra = [0];
system_complete = ss(system_complete.a, system_complete.b, C_extra, D_extra);
set(system_complete,...
'InputName',{'Yaw SP', 'Pitch SP', 'Roll SP', 'Z SP'}, ...
'OutputName',{'Yaw'; 'Pitch'; 'Roll'; 'Z';'VL control';'VR control';'VB control';'PhiL control';'PhiR
control'})
Statenames = get(system_complete_temp,'StateName');
set(system_complete,'StateName',Statenames)
system_complete
figure
step(system_complete)
title('Augmented System step response using an estimator with command following')
Appendix C
Embedded Controller Code
101
/* ------ Metrowerks Codewarrior Project:
P:\Code\miniDRAGON_SS -------- */
/* ----------------------------------------------------------------------------------------------File: main.c
----------------------------------------------------------------------------------------------- */
#include
#include
#include
#include
<mc9s12dp256.h>
"pll.h"
"timer.h"
"ControlSystem.h"
/* derivative information */
/* defines _BUSCLOCK, sets bus frequency to _BUSCLOCK
MHz */
void main(void) {
/* set system clock frequency to _BUSCLOCK MHz (24 or 4) */
PLL_Init();
/* Initialize the timer unit */
timer_Init();
/* Initialize the control system */
controlSystem_Init();
}
/* forever - check if the control system is ready for execution */
for(;;){
if( controlSystemFlag == 0x01 ){
controlSystemFlag = 0x00;
controlSystem();
}
}
/* ----------------------------------------------------------------------------------------------File: isr_vectors.c
----------------------------------------------------------------------------------------------- */
extern void near _Startup(void);
/* Startup routine */
/* declarations of interrupt service routines */
//extern __interrupt void SCI1_RX_isr(void);
//extern __interrupt void RTI_isr(void);
#include "timer.h"
#include "PicoPicCommInt.h"
#include "IMUComms.h"
#pragma CODE_SEG __NEAR_SEG NON_BANKED
/* Interrupt section for this module. Placement will be in NON_BANKED area. */
__interrupt void UnimplementedISR(void) {
}
/* Unimplemented ISRs trap.*/
asm BGND;
typedef void (*near tIsrFunc)(void);
const tIsrFunc _vect[] @0xFF80 = {
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
/* Interrupt
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
/* vector
table */
63 : (reserved) */
62 : (reserved) */
61 : (reserved) */
60 : (reserved) */
59 : (reserved) */
58 : (reserved) */
57 : PWM emergency shutdown */
56 : PORT P */
55 : MSCAN4 - transmit */
54 : MSCAN4 - receive */
53 : MSCAN4 - errors */
52 : MSCAN4 - wakeup */
51 : MSCAN3 - transmit */
50 : MSCAN3 - receive */
49 : MSCAN3 - errors */
48 : MSCAN3 - wakeup */
47 : MSCAN2 - transmit */
46 : MSCAN2 - receive */
45 : MSCAN2 - errors */
44 : MSCAN2 - wakeup */
43 : MSCAN1 - transmit */
};
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
SCI1_TDRE_ISR,
SCI0_RIE_ISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
TOC7_ISR,
TIC6_ISR,
TIC5_ISR,
TIC4_ISR,
TIC3_ISR,
TIC2_ISR,
TIC1_ISR,
TIC0_ISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
UnimplementedISR,
_Startup
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
42
41
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
09
08
07
06
05
04
03
02
01
00
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
MSCAN1 - receive */
MSCAN1 - errors */
MSCAN1 - wakeup */
MSCAN0 - transmit */
MSCAN0 - receive */
MSCAN0 - errors */
MSCAN0 - wakeup */
FLASH */
EEPROM */
SPI2 */
SPI1 */
IIC bus */
DLC */
SCME */
CRG lock */
Pulse accumulator B overflow */
Modulus down counter underflow */
PORT H */
PORT J */
ATD1 */
ATD0 */
SCI1 (TIE, TCIE, RIE, ILIE) */
SCI0 (TIE, TCIE, RIE, ILIE) */
SPI0 */
Pulse accumulator input edge */
Pulse accumulator A overflow */
Timer Overflow (TOF) */
Timer channel 7 */
Timer channel 6 */
Timer channel 5 */
Timer channel 4 */
Timer channel 3 */
Timer channel 2 */
Timer channel 1 */
Timer channel 0 */
Real-Time Interrupt (RTI) */
IRQ */
XIRQ */
SWI */
Unimplemented Instruction trap */
COP failure reset*/
Clock monitor fail reset */
Reset vector */
/* ----------------------------------------------------------------------------------------------File: pll.h
----------------------------------------------------------------------------------------------- */
/*************************PLL.h****************************
*
boosts the CPU clock to 48 MHz
*
*
*
*
Created by Theodore Deden on 20 January 2004.
*
*
Modified by Theodore Deden on 9 February 2004.
*
*
Last Modified by Jonathan Valvano 2/9/04.
*
*
*
*
Distributed underthe provisions of the GNU GPL ver 2 *
*
Copying, redistributing, modifying is encouraged.
*
*
*
**********************************************************/
// modified to define _BUSCLOCK
// PLL now running at 48 MHz to be consistent with HCS12 Serial Monitor
// fw-07-04
#ifndef _PPL_H_
#define _PLL_H_
/* Define the desired bus clock frequency:
no PLL (crystal) -> SYSCLOCK = 4 MHz
-> BUSCLOCK = 2 MHz
PLL on
-> SYSCLOCK = 48 MHz -> BUSCLOCK = 24 MHz
This is used by sci0.c and/or sci1.c to determine the baud rate divider */
#define _BUSCLOCK 24
//********* PLL_Init ****************
// Set PLL clock to 48 MHz, and switch 9S12 to run at this rate
// Inputs: none
// Outputs: none
// Errors: will hang if PLL does not stabilize
void PLL_Init(void);
#endif
/* _PLL_H_ */
/* ----------------------------------------------------------------------------------------------File: pll.c
----------------------------------------------------------------------------------------------- */
/*************************PLL.C***************************
*
boosts the CPU clock to 48 MHz
*
*
*
*
Created by Theodore Deden on 20 January 2004.
*
*
Modified by Theodore Deden on 9 February 2004.
*
*
Last Modified by Jonathan Valvano 2/16/04.
*
*
*
*
Distributed underthe provisions of the GNU GPL ver 2 *
*
Copying, redistributing, modifying is encouraged.
*
*
*
*********************************************************/
// modified to make PLL_Init depend on _BUSCLOCK (defined in pll.h)
// PLL now running at 48 MHz to be consistent with HCS12 Serial Monitor
// fw-07-04
#include <hidef.h>
#include <mc9s12dp256.h>
#include "pll.h"
/* common defines and macros */
/* derivative information */
/* macro _BUSCLOCK */
//********* PLL_Init ****************
// Set PLL clock to 48 MHz, and switch 9S12 to run at this rate
// Inputs: none
// Outputs: none
// Errors: will hang if PLL does not stabilize
void PLL_Init(void){
/* ensure we're running the controller at an appropriate clock speed */
#if (_BUSCLOCK != 24 && _BUSCLOCK != 16)
#error pll.h: _BUSCLOCK has to be set to 16 (MHz) or 24 (MHz)
#endif
/* set PLL clock speed */
#if _BUSCLOCK == 24
SYNR = 0x02;
REFDV = 0x01;
#else
SYNR = 0x00;
REFDV = 0x00;
#endif
// PLLOSC = 48 MHz
// PLLOSC = 32 MHz
/* PLLCLK = 2 * OSCCLK * (SYNR + 1) / (REFDV + 1)
Values above give PLLCLK of 48 MHz with 4 MHz crystal.
(OSCCLK is Crystal Clock Frequency)
*/
CLKSEL = 0x00;
/*Meaning for
Bit 7: PLLSEL
Bit 6: PSTP
Bit 5: SYSWAI
But 4: ROAWAI
Bit 3: PLLWAI
Bit 2: CWAI
Bit 1: RTIWAI
Bit 0: COPWAI
*/
CLKSEL:
= 0 Keep using OSCCLK until we are ready to switch to PLLCLK
= 0 Do not need to go to Pseudo-Stop Mode
= 0 In wait mode system clocks stop.
= 0 Do not reduce oscillator amplitude in wait mode.
= 0 Do not turn off PLL in wait mode
= 0 Do not stop the core during wait mode
= 0 Do not stop the RTI in wait mode
= 0 Do not stop the COP in wait mode
PLLCTL = 0xD1;
/*Meaning for PLLCTL:
Bit 7: CME
= 1; Clock monitor enable - reset if bad clock when set
Bit 6: PLLON = 1; PLL On bit
Bit
But
Bit
Bit
Bit
Bit
5:
4:
3:
2:
1:
0:
AUTO
ACQ
PRE
PCE
SCME
= 0; No automatic control of bandwidth, manual through ACQ
= 1; 1 for high bandwidth filter (acquisition); 0 for low (tracking)
(Not Used by 9s12c32)
= 0; RTI stops during Pseudo Stop Mode
= 0; COP diabled during Pseudo STOP mode
= 1; Crystal Clock Failure -> Self Clock mode NOT reset.
*/
}
while((CRGFLG&0x08) == 0){
// Wait for PLLCLK to stabilize.
}
CLKSEL_PLLSEL = 1; // Switch to PLL clock
/* ----------------------------------------------------------------------------------------------File: timer.h
----------------------------------------------------------------------------------------------- */
extern char controlSystemFlag;
// Flag to indicate start control system
void timer_Init( void );
// Initialize the timer module
extern
extern
extern
extern
extern
extern
extern
// PWM input variables, range: 0-1
float
float
float
float
float
float
float
__interrupt
__interrupt
__interrupt
__interrupt
__interrupt
__interrupt
__interrupt
__interrupt
PWM_Capture_Ch0;
PWM_Capture_Ch1;
PWM_Capture_Ch2;
PWM_Capture_Ch3;
PWM_Capture_Ch4;
PWM_Capture_Ch5;
PWM_Capture_Ch6;
void
void
void
void
void
void
void
void
TOC7_ISR(
TIC6_ISR(
TIC5_ISR(
TIC4_ISR(
TIC3_ISR(
TIC2_ISR(
TIC1_ISR(
TIC0_ISR(
void
void
void
void
void
void
void
void
);
);
);
);
);
);
);
);
// Interrupt Service Routines for timer channels.
/* ----------------------------------------------------------------------------------------------File: timer.c
----------------------------------------------------------------------------------------------- */
/**
* \file
* Code to control the ECT timer module. Channel 7 causes
* 40Hz Interrupts and Channels 0-6 capture PWM inputs. Channels
* 0-3 are pins 9-12 (miniDRAGON+) and Channels 4-6 are pins
* 15-17 (miniDRAGON+).
* The PWM signal received from the R700 receiver normally varies between
* 1.1ms and 1,9ms, hence the PWM is configured for this.
*
* \bugs Channel 5 doesn't work. This is because the channel is connected
*
to the speaker and a capaciter. This can be fixed by breaking
*
the J15 connection on the bottom of the board.
*
*
* \author Zebb Prime
* \date 19/7/05
* \version 1.0 beta
*/
#include <mc9s12dp256.h>
// Derivative information
// Constants that define the operation
#define timerOffset 37500
//
#define lowCount 1650
//
#define highCount 2850
//
#define validCount 3000
//
#define fullPeriodThreshold 3500
//
#define pwmInputScale 1200.0
//
#define pwmInputPeriod 33000
//
of the PWM and the timed interrupts.
Timer offset for 40Hz interupts
#Clock cycles for 1.1ms
#Clock cycles for 1.9ms
If greater than this ignore the value.
Threshold for low pwm
Input resolution, highCount - lowCount
Clock cycles per pwm input period
// Flag to begin control system computation
char controlSystemFlag;
// Variables containing the captured PWM signals. Vary from 0 to 1.
float
float
float
float
float
float
float
PWM_Capture_Ch0;
PWM_Capture_Ch1;
PWM_Capture_Ch2;
PWM_Capture_Ch3;
PWM_Capture_Ch4;
PWM_Capture_Ch5;
PWM_Capture_Ch6;
// Holding variables for the channels without buffered registers.
unsigned short first_Ch4;
unsigned short first_Ch5;
unsigned short first_Ch6;
char PWM_Capture_flags;
// Variable to reduce period to 1s for flashing the LED.
char timerDivider;
/**
* \brief Initializes the ECT timer module.
*
* Sets up channel 7 for 40Hz interrupts and channels 0-6 for
* PWM capture. The PWM signals saturate at 1.1ms and 1.9ms.
*
* \author Zebb Prime
* \date 19/7/05
*/
void timer_Init( void ){
asm sei
TIOS = 0x80;
TCTL1 = 0x3F;
OC7M = 0x00;
TCTL3 = 0xFF;
TCTL4 = 0xFF;
ICOVW = 0xFF;
ICSYS = 0x0A;
//
//
//
//
//
//
//
TSCR2
TC7 =
TIE =
TSCR1
// PR = 32, reset on successful OC
// Offset for 40Hz interrupts
// Enable all interrupts
// Enable Timer
= 0x0C;
timerOffset;
0xFF;
= 0x80;
DDRB = 0xFF;
DDRH = 0xFF;
PWM_Capture_Ch0 =
PWM_Capture_Ch1 =
PWM_Capture_Ch2 =
PWM_Capture_Ch3 =
PWM_Capture_Ch4 =
PWM_Capture_Ch5 =
PWM_Capture_Ch6 =
PWM_Capture_flags
}
Ch7 = OC, Ch0-6 = IC
Disconnect pin 7
Don't affect any linked input pins
Detect on all edges
Detect on all edges
Only write to registers when they're empty
TFMOD, BUFEN
// Port B is output
// Port H is output
0.5;
0.5;
0.5;
0.5;
0.5;
0.5;
0.5;
= 0x00;
controlSystemFlag = 0x00;
TFLG1 = 0xFF;
// Initially don't start computation
// Clear all interrupt flags
asm cli
// Enable interrupts
/**
* \brief 40Hz interrupt routine.
*
* Toggles bottom LED of 7seg display at 1Hz, also sets flag
* to mark the beginning of the control system.
*
* \author Zebb Prime
* \date 19/7/05
*/
__interrupt void TOC7_ISR( void ){
if( timerDivider < 20 ){
timerDivider ++;
}else{
timerDivider = 0;
PTH ^= 0x08;
}
// Toggle PortH bit3
}
controlSystemFlag = 0x01;
// Set flag
TFLG1 = 0x80;
// Clear interrupt flag
/**
* \brief Interrupt service routine for Channel 0 PWM capture
*
* Channel 0 has a buffered holding register. Using this we only need
* to interrupt once 2 edges have been caught (catches both rising and
* falling edges). Determines if it has caught a rising then falling or
* falling then rising edge by testing the time between them. Using this
* it offsets and scales the input to between 0 (1.1ms) and 1 (1.9ms).
* Can detect a maximum of 1200 discrete PWM input levels.
*
* \author Zebb Prime
* \date 19/7/05
*/
__interrupt void TIC0_ISR( void ){
unsigned short first;
unsigned short last;
PTH |= 0x02;
// Beginning of paylod
first = TC0H;
last = TC0;
// Read from registers
if( last > first ){
// Calculate difference between edges
last -= first;
}else{
last = (first - last) + timerOffset;
}
if( last > fullPeriodThreshold ){// Detect if PWM high or low
last = pwmInputPeriod - last;
}
if( last > validCount ){
// If data is greater than the threshold, ignore it.
PTH &= 0xFD;
// End of payload
TFLG1 = 0x01;
// Clear interrupt flag
return;
}
if( last < lowCount ){
// Test for lower limit
PWM_Capture_Ch0 = 0.0;
PTH &= 0xFD;
// End of payload
TFLG1 = 0x01;
// Clear interrupt flag
return;
}
if( last > highCount ){
// Test for upper limit
PWM_Capture_Ch0 = 1.0;
TFLG1 = 0x01;
// Clear interrupt flag
PTH &= 0xFD;
// End of Payload
return;
}
last = last - lowCount;
// Offset
PWM_Capture_Ch0 = ((float)last)/pwmInputScale;
}
PTH &= 0xFD;
TFLG1 = 0x01;
// End of payload
// Clear interrupt flag
/**
* \brief Interrupt service routine for Channel 1 PWM capture
*
* Channel 1 has a buffered holding register. Using this we only need
* to interrupt once 2 edges have been caught (catches both rising and
* falling edges). Determines if it has caught a rising then falling or
* falling then rising edge by testing the time between them. Using this
* it offsets and scales the input to between 0 (1.1ms) and 1 (1.9ms).
* Can detect a maximum of 1200 discrete PWM input levels.
*
* \author Zebb Prime
* \date 19/7/05
*/
__interrupt void TIC1_ISR( void ){
unsigned short first;
unsigned short last;
PTH |= 0x02;
// Beginning of paylod
first = TC1H;
last = TC1;
// Read from registers
if( last > first ){
// Calculate difference between edges
last -= first;
}else{
last = (first - last) + timerOffset;
}
if( last > fullPeriodThreshold ){
last = pwmInputPeriod - last;
}
if( last > validCount ){
PTH &= 0xFD;
TFLG1 = 0x02;
return;
}
if( last < lowCount ){
PWM_Capture_Ch1 = 0.0;
PTH &= 0xFD;
TFLG1 = 0x02;
return;
}
if( last > highCount ){
PWM_Capture_Ch1 = 1.0;
TFLG1 = 0x02;
PTH &= 0xFD;
return;
}
last = last - lowCount;
// Detect if PWM high or low
// If data is greater than the threshold, ignore it.
// End of payload
// Clear interrupt flag
// Test for lower limit
// End of payload
// Clear interrupt flag
// Test for upper limit
// Clear interrupt flag
// End of Payload
// Offset
PWM_Capture_Ch1 = ((float)last)/pwmInputScale;
}
PTH &= 0xFD;
TFLG1 = 0x02;
// End of payload
// Clear interrupt flag
/**
* \brief Interrupt service routine for Channel 2 PWM capture
*
* Channel 2 has a buffered holding register. Using this we only need
* to interrupt once 2 edges have been caught (catches both rising and
* falling edges). Determines if it has caught a rising then falling or
* falling then rising edge by testing the time between them. Using this
* it offsets and scales the input to between 0 (1.1ms) and 1 (1.9ms).
* Can detect a maximum of 1200 discrete PWM input levels.
*
* \author Zebb Prime
* \date 19/7/05
*/
__interrupt void TIC2_ISR( void ){
unsigned short first;
unsigned short last;
PTH |= 0x02;
// Beginning of paylod
first = TC2H;
last = TC2;
// Read from registers
if( last > first ){
// Calculate difference between edges
last -= first;
}else{
last = (first - last) + timerOffset;
}
if( last > fullPeriodThreshold ){
last = pwmInputPeriod - last;
}
if( last > validCount ){
PTH &= 0xFD;
TFLG1 = 0x04;
return;
}
// Detect if PWM high or low
// If data is greater than the threshold, ignore it.
// End of payload
// Clear interrupt flag
if( last < lowCount ){
PWM_Capture_Ch2 = 0.0;
PTH &= 0xFD;
TFLG1 = 0x04;
return;
}
if( last > highCount ){
PWM_Capture_Ch2 = 1.0;
TFLG1 = 0x04;
PTH &= 0xFD;
return;
}
last = last - lowCount;
// Test for lower limit
// End of payload
// Clear interrupt flag
// Test for upper limit
// Clear interrupt flag
// End of Payload
// Offset
PWM_Capture_Ch2 = ((float)last)/pwmInputScale;
}
PTH &= 0xFD;
TFLG1 = 0x04;
// End of payload
// Clear interrupt flag
/**
* \brief Interrupt service routine for Channel 3 PWM capture
*
* Channel 3 has a buffered holding register. Using this we only need
* to interrupt once 2 edges have been caught (catches both rising and
* falling edges). Determines if it has caught a rising then falling or
* falling then rising edge by testing the time between them. Using this
* it offsets and scales the input to between 0 (1.1ms) and 1 (1.9ms).
* Can detect a maximum of 1200 discrete PWM input levels.
*
* \author Zebb Prime
* \date 19/7/05
*/
__interrupt void TIC3_ISR( void ){
unsigned short first;
unsigned short last;
PTH |= 0x02;
// Beginning of paylod
first = TC3H;
last = TC3;
// Read from registers
if( last > first ){
// Calculate difference between edges
last -= first;
}else{
last = (first - last) + timerOffset;
}
if( last > fullPeriodThreshold ){
last = pwmInputPeriod - last;
}
if( last > validCount ){
PTH &= 0xFD;
TFLG1 = 0x08;
return;
}
if( last < lowCount ){
PWM_Capture_Ch3 = 0.0;
PTH &= 0xFD;
TFLG1 = 0x08;
return;
}
if( last > highCount ){
PWM_Capture_Ch3 = 1.0;
TFLG1 = 0x08;
PTH &= 0xFD;
return;
}
last = last - lowCount;
// Detect if PWM high or low
// If data is greater than the threshold, ignore it.
// End of payload
// Clear interrupt flag
// Test for lower limit
// End of payload
// Clear interrupt flag
// Test for upper limit
// Clear interrupt flag
// End of Payload
// Offset
PWM_Capture_Ch3 = ((float)last)/pwmInputScale;
}
PTH &= 0xFD;
TFLG1 = 0x08;
/**
// End of payload
// Clear interrupt flag
* \brief Interrupt service routine for Channel 4 PWM capture
*
* Channel 4 does not have a buffered holding register like channels 0-3.
* Hence we need to interrupt on every edge. On first edge it stores the
* interrupt time and sets a flag. On the second edge it computes the PWM
* input. Determines if it has caught a rising then falling or
* falling then rising edge by testing the time between them. Using this
* it offsets and scales the input to between 0 (1.1ms) and 1 (1.9ms).
* Can detect a maximum of 1200 discrete PWM input levels.
*
* \author Zebb Prime
* \date 19/7/05
*/
__interrupt void TIC4_ISR( void ){
unsigned short last;
PTH |= 0x02;
// Beginning of Payload
if((PWM_Capture_flags & 0x10)==0){
first_Ch4 = TC4;
PWM_Capture_flags |= 0x10;
TFLG1 = 0x10;
PTH &= 0xFD;
// Capture first time
}else{
last = TC4;
PWM_Capture_flags &= 0xEF;
// Capture second time
// Set flag
// Clear Interrupt flag
// End of Payload
// Clear flag
if( last > first_Ch4 ){
// Calculate difference between edges
last -= first_Ch4;
}else{
last = (first_Ch4 - last) + timerOffset;
}
if( last > fullPeriodThreshold ){ // Detect if PWM high or low
last = pwmInputPeriod - last;
}
if( last > validCount ){
// If data is greater than the threshold, ignore it.
PTH &= 0xFD;
// End of payload
TFLG1 = 0x10;
// Clear interrupt flag
return;
}
if( last < lowCount ){
// Test for lower limit
PWM_Capture_Ch4 = 0.0;
PTH &= 0xFD;
// End of payload
TFLG1 = 0x10;
// Clear interrupt flag
return;
}
if( last > highCount ){
// Test for upper limit
PWM_Capture_Ch4 = 1.0;
TFLG1 = 0x10;
// Clear interrupt flag
PTH &= 0xFD;
// End of Payload
return;
}
last = last - lowCount;
// Offset
PWM_Capture_Ch4 = ((float)last)/pwmInputScale;
}
}
PTH &= 0xFD;
TFLG1 = 0x10;
// End of payload
// Clear interrupt flag
/**
* \brief Interrupt service routine for Channel 5 PWM capture
*
* Channel 5 does not have a buffered holding register like channels 0-3.
* Hence we need to interrupt on every edge. On first edge it stores the
* interrupt time and sets a flag. On the second edge it computes the PWM
* input. Determines if it has caught a rising then falling or
* falling then rising edge by testing the time between them. Using this
* it offsets and scales the input to between 0 (1.1ms) and 1 (1.9ms).
* Can detect a maximum of 1200 discrete PWM input levels.
*
* \bugs Doesn't work due to the issues outlined in bug report at the top of
*
the file.
*
* \author Zebb Prime
* \date 19/7/05
*/
__interrupt void TIC5_ISR( void ){
unsigned short last;
PTH |= 0x02;
// Beginning of Payload
if((PWM_Capture_flags & 0x20)==0){
first_Ch5 = TC5;
PWM_Capture_flags |= 0x20;
TFLG1 = 0x20;
PTH &= 0xFD;
// Capture first time
}else{
last = TC5;
PWM_Capture_flags &= 0xDF;
// Capture second time
// Set flag
// Clear Interrupt flag
// End of Payload
// Clear flag
if( last > first_Ch5 ){
// Calculate difference between edges
last -= first_Ch5;
}else{
last = (first_Ch5 - last) + timerOffset;
}
if( last > fullPeriodThreshold ){
last = pwmInputPeriod - last;
}
if( last > validCount ){
PTH &= 0xFD;
TFLG1 = 0x20;
return;
}
if( last < lowCount ){
PWM_Capture_Ch5 = 0.0;
PTH &= 0xFD;
TFLG1 = 0x20;
return;
}
if( last > highCount ){
PWM_Capture_Ch5 = 1.0;
TFLG1 = 0x20;
PTH &= 0xFD;
return;
}
last = last - lowCount;
// Detect if PWM high or low
// If data is greater than the threshold, ignore it.
// End of payload
// Clear interrupt flag
// Test for lower limit
// End of payload
// Clear interrupt flag
// Test for upper limit
// Clear interrupt flag
// End of Payload
// Offset
PWM_Capture_Ch5 = ((float)last)/pwmInputScale;
}
}
PTH &= 0xFD;
TFLG1 = 0x20;
// End of payload
// Clear interrupt flag
/**
* \brief Interrupt service routine for Channel 6 PWM capture
*
* Channel 6 does not have a buffered holding register like channels 0-3.
* Hence we need to interrupt on every edge. On first edge it stores the
* interrupt time and sets a flag. On the second edge it computes the PWM
* input. Determines if it has caught a rising then falling or
* falling then rising edge by testing the time between them. Using this
* it offsets and scales the input to between 0 (1.1ms) and 1 (1.9ms).
* Can detect a maximum of 1200 discrete PWM input levels.
*
* \author Zebb Prime
* \date 19/7/05
*/
__interrupt void TIC6_ISR( void ){
unsigned short last;
PTH |= 0x02;
// Beginning of Payload
if((PWM_Capture_flags & 0x40)==0){
first_Ch6 = TC6;
PWM_Capture_flags |= 0x40;
TFLG1 = 0x40;
PTH &= 0xFD;
// Capture first time
}else{
last = TC6;
// Capture second time
// Set flag
// Clear Interrupt flag
// End of Payload
PWM_Capture_flags &= 0xBF;
// Clear flag
if( last > first_Ch6 ){
// Calculate difference between edges
last -= first_Ch6;
}else{
last = (first_Ch6 - last) + timerOffset;
}
if( last > fullPeriodThreshold ){
last = pwmInputPeriod - last;
}
if( last > validCount ){
PTH &= 0xFD;
TFLG1 = 0x40;
return;
}
if( last < lowCount ){
PWM_Capture_Ch6 = 0.0;
PTH &= 0xFD;
TFLG1 = 0x40;
return;
}
if( last > highCount ){
PWM_Capture_Ch6 = 1.0;
TFLG1 = 0x40;
PTH &= 0xFD;
return;
}
last = last - lowCount;
// Detect if PWM high or low
// If data is greater than the threshold, ignore it.
// End of payload
// Clear interrupt flag
// Test for lower limit
// End of payload
// Clear interrupt flag
// Test for upper limit
// Clear interrupt flag
// End of Payload
// Offset
PWM_Capture_Ch6 = ((float)last)/pwmInputScale;
}
}
PTH &= 0xFD;
TFLG1 = 0x40;
// End of payload
// Clear interrupt flag
/* ----------------------------------------------------------------------------------------------File: SS_Coeff.h (Truncated for printing, please see file for all coefficients)
----------------------------------------------------------------------------------------------- */
/*
This is an automatically generated C header containing
the state-space coefficients for embedded implementation.
Matlab Script: ss_to_C(state_model,filename)
Filename: miniDragon_SS/sources/SS_Coeff.h
*/
const float A[21][21]= {
-9.1569272269e-001, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, -9.1569268446e-001, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, -3.8880428789e-001, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, -3.8880429515e-001, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 8.1703176158e-001...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, -1.5453544113e-001...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000, 0.0000000000e+000...
};
#define A_r
#define A_c
21
21
const float B[21][4]= {
3.6582688568e-013, 2.4467522904e-014, 3.1242486781e-014, -2.1705685760e-014,
1.6712711309e-013, 5.2834063705e-013, -1.2557649859e-013, -8.1983891956e-013,
1.9843779054e-012, 5.9900646127e+000, 2.2014237798e-007, -1.3504266527e+000,
-2.9010561451e-012, 1.5089742169e-007, 6.1617707053e+000, -3.4017976770e-008,
-2.4184664193e-011, -4.7056325828e-012, 1.3492266473e-012, 1.7220433282e-012,
-4.4849946680e-011, -1.4073711378e-011, 4.5062648469e-012, 3.1700405834e-012,
7.4181812052e-012, -1.8413170676e-012, 1.1911860740e-012, 3.3944339450e-014,
3.3737575024e-011, 2.1871351392e-011, -9.4595802845e-012, -5.0029395807e-012,
3.7938084548e-011, 2.7250524993e-011, -6.5493908201e-012, -4.8949575126e-012,
-4.6764788929e-011, 2.6509138572e-011, 5.2382893392e-011, -1.1272323060e-012,
-1.3783742617e-011, 6.1147145472e-011, 7.0997845059e-002, -8.2123923013e-012,
3.7013896008e-011, -3.7372361300e-011, -2.7746898269e+001, 3.7811686665e-012,
-2.1586936395e+000, 1.7292502007e-012, -5.5748089934e-014, -2.0138870928e-013,
-2.3222524122e+000, -1.5280042564e-012, 1.0041674945e-013, 3.4836853354e-014,
-2.2717536008e-011, 1.5838285949e-001, 5.6269623357e-012, 2.8203040294e-001,
1.3437569820e-011, 2.7135180414e+001, 1.3139954975e-011, -6.8533579834e-001,
5.7031990974e-012, 9.2537772449e-011, 2.2784283437e+001, -7.1467867754e-013,
-9.1060348650e-013, 1.6393862198e-002, -1.0137053021e-012, 1.0561911880e+001,
1.3310443365e-011, -1.3336306705e-001, 1.0280626427e-011, 1.0930577444e+001,
-2.3104715970e-012, -2.2614016329e+001, 8.2612501756e-012, 2.9346513625e-001,
2.1921292290e-014, -1.8582181118e-015, -6.0355819202e-015, 3.2943424657e-015
};
#define B_r 21
#define B_c 4
const float C[9][21]= {
-1.5135710425e-009, -5.0000998413e-011, 2.8280210190e-020, -1.7387059327e-020, 8.6650829691e-008..
1.2538929729e-016, 2.4449164424e-007, -1.8707062049e-005, -5.0650824380e-004, -8.2050340264e-017..
8.5468421435e-004, -3.5955196304e-017, -4.3783564211e-016, 4.2501851266e-015, 3.0349521701e-017...
-7.9623063711e-005, -1.3054349330e-004, 1.1832256217e-016, 1.7468585945e-004, -1.7021630967e-004..
6.8601559232e-005, 1.6517375709e-005, -4.7059613017e-005, -1.7105528226e-006, 3.0658896706e-005...
6.8601559232e-005, 1.6517375709e-005, 4.7059613017e-005, -1.7105528223e-006, 3.0658896705e-005...
-2.0895429305e-003, 1.6922006100e-004, 7.2704763060e-015, -4.3194157336e-004, 2.2771334703e-002...
-4.9376122033e-016, -9.1493967213e-016, 3.7769139042e-017, 4.8777088403e-016, -4.5010575369e-016..
1.1450331826e-005, -8.0359465268e-006, 4.9955754429e-006, 4.6401473120e-018, 3.8328293839e-017...
};
#define C_r 9
#define C_c 21
const float D[9][4]= {
5.1054167768e-005, -5.9863029349e-019, -6.1332346957e-019, 1.4606183962e-019,
3.0196506168e-024, 1.1141134508e-007, -6.1612654539e-019, 6.2663331226e-009,
2.9511260106e-024, -5.0774104049e-018, 5.1120242753e-007, 1.2394756926e-018,
-2.9847545536e-022, -6.3630467674e-006, 1.3033869983e-019, 1.3318683848e-006,
-1.4440332303e-018, -2.6648620966e-002, -2.7118402241e-002, 6.0801804810e-003,
-1.1309289964e-018, -2.6648620966e-002, 2.7118402241e-002, 6.0801804810e-003,
-8.2208294403e-018, 2.7308393981e-002, -2.7622221347e-015, 1.2169653467e-001,
1.7491888561e-002, 1.7610189069e-018, -2.9154543622e-018, 3.0797889565e-018,
-1.7491888561e-002, -1.7610189069e-018, 2.9154543622e-018, -3.0797889565e-018
};
#define D_r 9
#define D_c 4
#define state_length 21
#define input_length 4
#define output_length 9
/* ----------------------------------------------------------------------------------------------File: ControlSystem.h
----------------------------------------------------------------------------------------------- */
void controlSystem_Init( void );
void controlSystem( void );
// Initialize the control system
// Run the control system
/* ----------------------------------------------------------------------------------------------File: ControlSystem.c
----------------------------------------------------------------------------------------------- */
/**
* \file
* Control system computation. Occurs outside an interrupt as there are a large
*
number of interrupts that need to occur while the control system computation
*
is taking place. Note the state-space controller hasn't been tested. It is
*
recommended that this take place!
*
*
* \author Zebb Prime
* \date 22/7/05
* \version 1.0 alpha
*/
#include
#include
#include
#include
#include
#include
<mc9s12dp256.h>
<math.h>
"timer.h"
"PicoPicCommInt.h"
"IMUComms.h"
"SS_Coeff.h"
// Derivative information
#define pi 3.141592564
void SSmatrixMult(float *X, float *Y, float *result, int X_r, int X_c);
char active;
char counter;
float
float
float
float
float
// Control System active flag.
// count until control system starts
current_states[ state_length ];
next_states[ state_length ];
inputs[ input_length ];
outputs[ output_length ];
Z_d;
/**
* \brief Initialize the control system.
*
* Initializes the SCI1 module for communications to PicoPic and
* the SCI0 module for the IMU. Also clears all of the state variables.
*
* \author Zebb Prime
* \date 22/7/05
*/
void controlSystem_Init( void ){
int ii;
PicoPicCommInt_Init();
IMUComms_Init();
active = 0;
counter = 80;
DDRB = 0xff;
}
for(ii=0; ii<state_length; ii++){
current_states[ ii ] = 0.0;
next_states[ ii ] = 0.0;
Z_d = 0.0;
}
// 2 second delay
// Port B is output
// Clear States
/**
* \brief Computes the control system.
*
* For safety the remote control landing gear switch (PWM Capture Channel 4) must
*
be on for at least two seconds before the control system will start.
* Computes the connected state space model of the controller through matrix
*
multiplication.
*
* \author Zebb Prime
* \date 5/10/05
*/
void controlSystem( void ){
int ii;
float temp_states[ state_length ];
PTH |= 0x01;
// Beginning of payload
IMUComms_Update();
// Update the IMU data.
// If the switch is off, then stop the control system.
if( PWM_Capture_Ch4 < 0.9 ){
counter = 81;
active = 0;
PORTB &= 0x7F;
// Turn off PortB.7 (Pin 31 - LED)
}
if( active == 0 ){
PicoPicCommInt_Send(
PicoPicCommInt_Send(
PicoPicCommInt_Send(
PicoPicCommInt_Send(
PicoPicCommInt_Send(
// If the control system is off
0, 1);
// All signals to 0
0, 2);
0.709677419, 4);
0.29032258, 5);
0, 7);
// Decrement count.
counter --;
if( counter == 0 ){
// If the switch has been on for two
active = 1;
// seconds, start the controller and reset the states.
for(ii=0; ii<state_length; ii++){
current_states[ ii ] = 0.0;
next_states[ ii ] = 0.0;
Z_d = 0.0;
}
}
}else{
PORTB |= 0x80;
// Turn on PortB.7 (Pin 31 - LED)
/* State Space Control Implementation */
// update state vectors
for(ii=0; ii<state_length; ii++){
current_states[ ii ] = next_states[ ii ];
}
Z_d += (scaledOutput[ 6 ] + 9.81)*0.025;
}
}
// Integrate Z acceleration
// Calculate controller inputs (setpoints - feedback)
inputs[0] = (PWM_Capture_Ch3+0.5)*pi - scaledOutput[ 2 ];
inputs[1] = (PWM_Capture_Ch2+0.5)*pi/12 - scaledOutput[ 1 ];
inputs[2] = (PWM_Capture_Ch1+0.5)*pi/12 - scaledOutput[ 0 ];
inputs[4] = (PWM_Capture_Ch0+0.5) - Z_d;
//
//
//
//
SSmatrixMult(&A,&current_states,&temp_states,A_r,A_c);
SSmatrixMult(&B,&inputs,&next_states,B_r,B_c);
// A*x
// B*u
for(ii=0; ii<state_length; ii++){
next_states[ii] += temp_states[ii];
}
// x_n = A*x + B*u
SSmatrixMult(&C,&current_states,&temp_states,C_r,C_c);
SSmatrixMult(&D,&inputs,&outputs,D_r,D_c);
// C*x
// D*u
for(ii=0; ii<output_length; ii++){
outputs[ii] += temp_states[ii];
}
// y = C*x + D*u
PicoPicCommInt_Send(
PicoPicCommInt_Send(
PicoPicCommInt_Send(
PicoPicCommInt_Send(
PicoPicCommInt_Send(
outputs[4]/10, 1);
outputs[5]/10, 2);
0.36965019*outputs[7]+0.709677419, 4);
-0.36965019*outputs[8]+0.29032258, 5);
outputs[6]/10, 7);
PTH &= 0xFE;
Yaw = Yaw_SP - Yaw_FB
Pitch = Pitch_SP - Pitch_FB
Roll = Roll_SP - Roll_FB
Z_d = Z_d_SP - Z_d_FB
// Send the left motor speed
// Send the right motor speed
// Send the left servo position
// Send the right servo position
// Send the rear motor speed
// End of payload
/**
* \brief Performs State-Space matrix multiplication (matrix * vector).
*
* \param X: first matrix for multiplication
* \param Y: second matrix for multiplication
* \param result: matrix to house the result (please make sure the size is correct)
* \param X_r: number of rows of X
* \param X_c: number of columns of X
*
* \author Zebb Prime
* \date 24/10/05
*/
void SSmatrixMult(float *X, float *Y, float *result, int X_r, int X_c){
int ii, jj, kk;
float temp;
// Matrix * Vector multiplication
kk=0;
for( ii=0; ii<X_r; ii++ ){
}
}
temp = 0;
for( jj=0; jj<X_c; jj++){
temp += *(X+kk) * *(Y+jj);
kk ++;
}
*(result + ii) = temp;
/* ----------------------------------------------------------------------------------------------File: IMUComms.h
----------------------------------------------------------------------------------------------- */
#define GSEAARV
#define BAUD_115200
// Defined mode
// Defined baud rate
void IMUComms_Init( void );
char IMUComms_Update( void );
__interrupt void SCI0_RIE_ISR( void );
// Prototypes
#ifdef RSO
#define outputLength
#endif
#ifdef GSV
#define outputLength
#endif
#ifdef IV
#define outputLength
#endif
#ifdef IQ
#define outputLength
#endif
#ifdef GSQ
#define outputLength
#endif
#ifdef IOM
#define outputLength
#endif
#ifdef GSO
#define outputLength
#endif
#ifdef GSQV
#define outputLength
#endif
#ifdef IEA
#define outputLength
#endif
#ifdef GSEA
#define outputLength
#endif
#ifdef GSEARV
#define outputLength
#endif
#ifdef GSEAARV
#define outputLength
#endif
// Available modes
9
9
9
4
4
9
9
13
3
3
6
9
extern float scaledOutput[ outputLength ];
/* ----------------------------------------------------------------------------------------------File: IMUComms.c
----------------------------------------------------------------------------------------------- */
/**
* \file
* \brief Communications to the 3DM-GX1 IMU using interrupts over SCI0
*
* data bits = 8, stop = 1, parity = none, baud - see header
* Communicates to the 3DM-GX1 IMU using receiver interrupts. Mode is selectable
* by declaring the acronym in the header file IMUComms.h.
*
* \author Zebb Prime
* \date 8/9/05
* \version 1.0
*/
#include <mc9s12dp256.h>
/* derivative information */
#include <math.h>
#include "IMUComms.h"
#define pi 3.141592653
#define RDRF 0x20
#define TDRE 0x80
/* Math libraries */
// Receive Data Register Full Bit
// Transmit Data Register Empty Bit
#define bufferLength (outputLength*2+5)
char ReadBuffer[ bufferLength ];
char bufferIndex;
// Not a ringbuffer.
float scaledOutput[ outputLength ];
// Raw sensor output
#ifdef RSO
#define commandByte 0x01
const float scalingValues[ outputLength ] = { 5.0/65536.0, 5.0/65536.0, 5.0/65536.0,
5.0/65536.0, 5.0/65536.0, 5.0/65536.0,
5.0/65536.0, 5.0/65536.0, 5.0/65536.0
};
#endif
// Gyro stabilised vectors
#ifdef GSV
#define commandByte 0x02
#define magGainScale 4000.0
#define accelGainScale 7000.0
#define gyroGainScale 8500.0
const float scalingValues[ outputLength ] = {
magGainScale/32768000.0, magGainScale/32768000.0, magGainScale/32768000.0,
accelGainScale/32768000.0, accelGainScale/32768000.0, accelGainScale/32768000.0,
gyroGainScale/32768000.0, gyroGainScale/32768000.0, gyroGainScale/32768000.0
};
#endif
// Instantaneous vectors
#ifdef IV
#define commandByte 0x03
#define magGainScale 2000.0
#define accelGainScale 7000.0
#define gyroGainScale 8500.0
const float scalingValues[ outputLength ] = {
magGainScale/32768000.0, magGainScale/32768000.0, magGainScale/32768000.0,
accelGainScale/32768000.0, accelGainScale/32768000.0, accelGainScale/32768000.0,
gyroGainScale/32768000.0, gyroGainScale/32768000.0, gyroGainScale/32768000.0
};
#endif
// Instantaneous Quaternion
#ifdef IQ
#define commandByte 0x04
const float scalingValues[ outputLength ] = { 1.0/8192.0, 1.0/8192.0, 1.0/8192.0, 1.0/8192.0
};
#endif
// Gyro Stabilised Quaternion
#ifdef GSQ
#define commandByte 0x05
const float scalingValues[ outputLength ] = { 1.0/8192.0, 1.0/8192.0, 1.0/8192.0, 1.0/8192.0
};
#endif
// Instantaneous Orientation Matrix
#ifdef IOM
#define commandByte 0x0A
const float scalingValues[ outputLength ] = { 1.0/8192.0, 1.0/8192.0, 1.0/8192.0, 1.0/8192.0,
1.0/8192.0, 1.0/8192.0, 1.0/8192.0, 1.0/8192.0,
1.0/8192.0, 1.0/8192.0, 1.0/8192.0, 1.0/8192.0
};
#endif
// Gyro Stabilised Oriantation Matrix
#ifdef GSO
#define commandByte 0x0B
const float scalingValues[ outputLength ] = { 1.0/8192.0, 1.0/8192.0, 1.0/8192.0, 1.0/8192.0,
1.0/8192.0, 1.0/8192.0, 1.0/8192.0, 1.0/8192.0,
1.0/8192.0, 1.0/8192.0, 1.0/8192.0, 1.0/8192.0
};
#endif
// Gyro Stabilised Quaternion and Vectors
#ifdef GSQV
#define commandByte 0x0C
#define magGainScale 2000.0
#define accelGainScale 7000.0
#define gyroGainScale 8500.0
const float scalingValues[ outputLength ] = {
1.0/8192.0, 1.0/8192.0, 1.0/8192.0, 1.0/8192.0,
magGainScale/32768000.0, magGainScale/32768000.0, magGainScale/32768000.0,
accelGainScale/32768000.0, accelGainScale/32768000.0, accelGainScale/32768000.0,
gyroGainScale/32768000.0, gyroGainScale/32768000.0, gyroGainScale/32768000.0
};
#endif
// Instantaneous Euler Angles (rad)
#ifdef IEA
#define commandByte 0x0D
const float scalingValues[ outputLength ] = { 2.0*pi/65536.0, 2.0*pi/65536.0, 2.0*pi/65536.0
};
#endif
// Gyro Stabilised Euler Angles (rad)
#ifdef GSEA
#define commandByte 0x0E
const float scalingValues[ outputLength ] = { 2.0*pi/65536.0, 2.0*pi/65536.0, 2.0*pi/65536.0
};
#endif
// Gyro Stabilised Euler Angles (rad) and Rate Vector (rad/s)
#ifdef GSEARV
#define commandByte 0x30
#define gyroGainScale 8500.0
const float scalingValues[ outputLength ] = {
2.0*pi/65536.0, 2.0*pi/65536.0, 2.0*pi/65536.0,
gyroGainScale/32768000.0, gyroGainScale/32768000.0, gyroGainScale/32768000.0
};
#endif
// Gyro Stabilised Euler Angles (rad) and Acceleration (g) and Rate Vectors (rad/s).
#ifdef GSEAARV
#define commandByte 0x31
#define accelGainScale 7000.0
#define gyroGainScale 8500.0
const float scalingValues[ outputLength ] = {
2.0*pi/65536.0, 2.0*pi/65536.0, 2.0*pi/65536.0,
accelGainScale/32768000.0, accelGainScale/32768000.0, accelGainScale/32768000.0,
gyroGainScale/32768000.0, gyroGainScale/32768000.0, gyroGainScale/32768000.0
};
#endif
/**
* \brief Initialize SCI0 for communications to the 3DM-GX1 IMU
*
* Sets the communication parameters such as baud, data bits and parity.
*
Communications are two-way so both transmitter and receiver are enabled.
*
Interrupts are enabled for receive register full, however command packets
*
are one byte so polling is sufficient for sending.
*
* \author Zebb Prime
* \date 28/7/05
*/
void IMUComms_Init( void ){
char i;
asm sei
#ifdef BAUD_115200
SCI0BDH=0;
SCI0BDL=13;
#endif
#ifdef BAUD_38400
SCI0BDH=0;
SCI0BDL=39;
#endif
#ifdef BAUD_19200
SCI0BDH=0;
SCI0BDL=78
#endif
// Set up baud rate
SCI0CR1=0x00;
SCI0CR2=0x2C;
// data = 8, stop = 1, parity = none
// RIE,TE,RE
bufferIndex = 0;
// Reset Buffer Index
}
for( i=0; i<outputLength; i++ ){
scaledOutput[i] = 0.0;
}
// Clear output values
asm cli
// enable interrupts
/**
* \brief Updates that data in the holding variables, requests the next lot of data from the
*
IMU
*
*
Calculates the checksum to make sure the packet is valid, if so the results are converted
*
to floating point values and normalized, then placed in the holding variables. It then
*
sends a request to the IMU for the next data packet. This implies that the data will
*
always be Ts behind at worst.
*
* \return valid: 1 if data in variables is valid, 0 if not.
* \author Zebb Prime
* \date 28/7/05
*/
char IMUComms_Update( void ){
char i;
short temps;
float tempf;
if( (SCI0SR1 & RDRF) != 0 ){
temps = SCI0DRL;
}
for(i=0; i<outputLength; i++){
temps = ReadBuffer[ (i*2+1) ] << 8;
temps += ReadBuffer[ (i*2+2) ];
tempf = (float)temps;
tempf *= scalingValues[i];
scaledOutput[i] = tempf;
}
}
if(bufferIndex == bufferLength) i = 0x01;
else i = 0x00;
bufferIndex = 0;
while((SCI0SR1 & TDRE) == 0){};
SCI0DRL = commandByte;
return i;
//
//
//
//
//
Data MSB
Data LSB
convert to floating point
scale
store
// reset the buffer index
// When Tx ready
// Send request for next byte
/**
* \brief miniDRAGON+ to 3DM-GX1 over SCI0 received data interrupt service routine
*
* Adds the received data to the buffer. The buffer must be big enough to hold all of the
*
input data. If the buffer is full the byte is ignored.
*
* \author Zebb Prime
* \date 28/7/05
*/
__interrupt void SCI0_RIE_ISR( void ){
char temp;
if( bufferIndex == bufferLength ){
// if buffer is full discard the byte
while((SCI0SR1 & RDRF) == 0){};
temp = SCI0DRL;
return;
}
while((SCI0SR1 & RDRF) == 0){};
// Test to see if data is present
ReadBuffer[ bufferIndex ] = SCI0DRL;
// Place the data in the buffer
bufferIndex ++;
}
/* ----------------------------------------------------------------------------------------------File: PicoPicCommInt.h
----------------------------------------------------------------------------------------------- */
void PicoPicCommInt_Init( void );
// Initialize SCI1 to PicoPic
void PicoPicCommInt_Send( float position, char port );
// Send a position setpoint to PicoPic
__interrupt void SCI1_TDRE_ISR( void );
// SCI1 TDRE interrupt service routine
/* -----------------------------------------------------------------------------------------------
File: PicoPicCommInt.c
----------------------------------------------------------------------------------------------- */
/**
* \file
* \brief Communications to the PicoPic using SCI1 with interrupts.
*
* baud = 115200, data bits = 8, parity = none.
* Even though the baud is set at the maximum for the PicoPic there
*
was still significant latency when communicating using polling
*
(~0.5 ms per channel) which is too much considering there is only
*
25ms available per control system cycle (40Hz). Hence using interrupts
*
the polling overhead is removed freeing MCU time for other computation
*
while still transferring data to the PicoPic as fast as possible.
*
* Utilizes a ring-buffer to store data. There is no buffer overflow check
*
so if the communications starts doing crazy stuff try increasing the
*
bufferLength parameter. As indicated below the current maximum buffer
*
length is 255 (using 8-bit indexes), to increase this change SCI1Buffer
*
and SCI1Sent to unsigned short or unsigned int (16-bit: max length 65535).
*
* \author Zebb Prime
* \data 19/7/05
* \version 1.0
*/
#include <mc9s12dp256.h>
/* derivative information */
#define TDRE 0x80
// Transmit Data Register Empty
#define bufferLength 100
// Max 255 unless change pointers to short
char SCI1RingBuffer[ bufferLength ];
char SCI1Buffer;
char SCI1Sent;
// Ringbuffer variables
/**
* \brief Initialize SCI1 for communications to the PicoPic
*
* Sets the communication parameters such as baud, data bits and parity.
*
Communications are one way so it only enables the transmitter. Interrupts
*
aren't enabled until the buffer is non-empty.
*
* \author Zebb Prime
* \date 19/7/05
*/
void PicoPicCommInt_Init( void ){
char i;
}
SCI1BDH=0;
SCI1BDL=13;
SCI1CR1=0x00;
SCI1CR2=0x08;
// baud = 115200
for(i=0; i < bufferLength; i++ ){
SCI1RingBuffer[i] = 0;
}
SCI1Buffer = 0;
SCI1Sent = 0;
// Clear buffer
asm cli;
// Global enable Interrupts
// No parity
// TIE,Enable Transmitter
/**
* \brief Sends a position to the PicoPic.
*
* Scales the input to values recognisable by the PicoPic, then
* places the data into the ring-buffer. If the buffer was empty at the
* beginning of the call it starts the transmission by enabling the interrupts.
*
* \param position: float - value between 0 and 1 indicating the desired position
*
of the servo. If <0 or >1 saturates to 0 or 1.
* \param port: char (byte) - servo port to send the position to (1 - 20)
*
* \author Zebb Prime
* \date 19/7/05
*/
void PicoPicCommInt_Send( float position, char port ){
short setpoint;
char data;
char flag;
// Flag if buffer is empty
if( SCI1Buffer == SCI1Sent ) flag = 1;
else flag = 0;
setpoint = (short)(1500.0*position);
setpoint += 750;
// Scale for PicoPic
// Offset for PicoPic
if(setpoint > 2135){
setpoint = 2135;
}else if( setpoint < 750 ){
setpoint = 750;
}
// Position Saturation
SCI1RingBuffer[ SCI1Buffer ] = 120;
// Put PicoPic address in buffer
SCI1Buffer ++;
if( SCI1Buffer == bufferLength ) SCI1Buffer = 0;
SCI1RingBuffer[ SCI1Buffer ] = port;
// Put servo port in buffer
SCI1Buffer ++;
if( SCI1Buffer == bufferLength ) SCI1Buffer = 0;
data = (char)(setpoint/256);
// Put upper position byte in buffer
SCI1RingBuffer[ SCI1Buffer ] = data;
SCI1Buffer ++;
if( SCI1Buffer == bufferLength ) SCI1Buffer = 0;
data = (char)(setpoint%256);
SCI1RingBuffer[ SCI1Buffer ] = data;
// Put lower position byte in buffer
SCI1Buffer ++;
if( SCI1Buffer == bufferLength ) SCI1Buffer = 0;
SCI1RingBuffer[ SCI1Buffer ] = 0;
// Put a 0 in the buffer
SCI1Buffer ++;
if( SCI1Buffer == bufferLength ) SCI1Buffer = 0;
}
if(flag == 1){
SCI1CR2 = 0x88;
}
// If the buffer is initially empty.
// Enable the interrupts
/**
* \brief SCI1 to PicoPic Transmission Data Register Empty (TDRE) interrupt
*
service routine.
*
* Tests if the ring-buffer is empty. If it is the interrupts are disabled,
* otherwise it places the next byte in the transmission register to send
* to the PicoPic.
*
* \author Zebb Prime
* \date 19/7/05
*/
__interrupt void SCI1_TDRE_ISR( void ){
PTH |= 0x40;
// Turn on the Tx LED.
if( SCI1Buffer == SCI1Sent ){
PTH &= 0xBF;
SCI1CR2 = 0x08;
return;
}
}
// If nothing to send
// Turn off Tx LED
// Turn off the interrupts
while((SCI1SR1 & TDRE) == 0){};
//
SCI1DRL = SCI1RingBuffer[ SCI1Sent ];
//
SCI1Sent ++;
//
if(SCI1Sent == bufferLength) SCI1Sent = 0;
PTH &= 0xBF;
//
Read SCI1SR1 (needed before transmission)
Place next byte in register
Update ring-buffer
Turn off Tx LED