Professional Documents
Culture Documents
Alexander Mohamed Osman Riyad Ahmed El-laithy Ruyyan Ahmed El-laithy Peter Raouf Zaky
Supervised by:
ACKNOWLEDGEMENTS
After thanking God the Merciful we would like to send our thanks to the following people:
Firstly we would like to thank Dr. Ibrahim Imam for proposing the idea of an Unmanned Aerial Vehicle and for accepting us to carry on that project.
Secondly we would like to thank Dr. Atallah Hashad for giving us a helping hand whenever we needed one and for providing us with solutions for all the challenges we faced.
We would like to thank Dr. Hassan Ibrahim for providing us with help with the electrical problems we faced in our circuits.
We would also like to thank Dr. Gamal Selim for his encouragement, assistance and understanding.
We would like to thank Dr. Yasser Galal for answering some questions we had about DC motors.
We would also like to thank Eng. Ahmed Akl, Eng. Renad Kamal, Muhab Bahgat, Ruyhan El-Laithy, Fady Mounier, Beshoy Helmy, Todd Elliot, and Sparkfun Electronics for supporting us and/or making this possible.
Last but not least we would like to thank our parents & families for their love, support, and understanding.
Page 2
ABSTRACT
Gathering information from locations which are inhabitable, hostile, or difficult to reach is a crucial aspect for learning new information about unmarked territories and activities and aids in human technological advancement. This project is concerned with developing an agent for gathering visual information by holding a stationary position or pursuing a dynamic target. The agent is a quadrotor VTOL (Vertical Take Off and Landing) aircraft. This agent should have the capability to hover, fly and follow targets. It should receive and transmit data wirelessly into a base station. It should move through a predefined plan using a GPS receiver. It should also balance itself in the air through a gyrometer and an accelerometer. In addition it would utilize four ultrasonic sensors for obstacle avoidance and an extra one for landing assistance. The agent would also utilize a wireless camera to transmit a bird s eye view to the base station.
Page 3
TABLE OF CONTENTS
1. INTRODUCTION .......................7
..
12
3. ANALYSIS, COMPONENT-LEVEL DESIGN & SELECTION 3.1 Major Components 3.2 PCB Design .. 3.2.1 Interface Boards 3.2.1.1 3.2.1.2 3.2.1.3 GPS interface board Accelerometer / Gyrometer interface board RF Interface boards 24-G ..
4. CONTROL 4.1 Introduction 4.2 SPI communication 4.3 Main PIC Implementation 4.3.1 Pulse Width Modulation (Motors) 4.3.2 ADC Operation 4.3.2.1 Ultrasonic Sensors 4.3.2.2 Gyrometer 4.3.2.3 Accelerometer 4.4 Secondary PIC Implementation 4.4.1 GPS System 4.4.2 RF Transceiver 4.5 RC Unit . ..
33 .........33 .35 ................38 ...38 ............43 50 ...52 ..52 ......55 .55 .66 ......75
Page 4
6. FUTURE IMPLEMENTATIONS
..102
7. CONCLUSION
.......103
Page 5
106
..
165
.167
.169
APPENDIX F : REFERENCES
.170
APPENDIX G : BIBLIOGRAPHY
..173
Page 6
INTRODUCTION
The rapid development of micro-processor technology and the continuous growth of integration density of electronical and mechatronical components yields a significant cost reduction of high tech products. Driven by this development it becomes feasible to embed information processing and communicating devices in all sorts of appliances, toys, production facilities, communication systems, traffic and transport systems etc.
With this integration and the aid of global positioning systems, there has been a surge of development in Unmanned Vehicles (UV). The main benefits of UV s are that they do not require human control and thus can be reduced in size and cost. They also limit human error in several aspects, and reduce if not eliminate human endangerment. Unmanned vehicles are developed for use in air, over land and under water by both private and government agencies. Several unmanned systems exist such as Autonomous Underwater Vehicles (AUV), Unmanned Ground Vehicle (UGV), and Unmanned Combat Vehicles (UCV). NASA deploys USVs (Unmanned Space Vehicles) on rock gathering missions from the Moon and Mars. The military advanced UAVs and renamed them to UAVS (Unmanned Aerial Vehicle Systems) and are used in flight combat.
Government search and rescue departments find the UAVs helpful in inhabitable or hazardous terrain such as earthquakes, floods or volcanoes, where no human lives have to be risked. Institutions which have onsite geologists use UAVs for uncovering terrain and rock identification, without having to deploy a whole crew working outside. Departments of transportation can use this device to cover footage of inaccessible situations such as dead-lock traffic jams or multiple car-crashes. Government law enforcement and intelligence agencies can specifically find this device useful for reconnaissance and target pursuance, where the UAV provides the advantages of cheap costs, stealth and a diminished human risk factor.
The Unmanned Aerial Vehicle project has been an ongoing attempt to produce a reliable autonomous hovering or flying vehicle. The project designed and implemented a four-rotor hovering aerial vehicle. The advantages of a hovering vehicle over a fixed-wing
Page 7
The advantage of quadrotors over helicopters is that they do not require mechanical linkages to vary rotor angle of attack as they spin, this simplifies design and control. The use of four rotors allows each individual rotor to have a smaller diameter than the equivalent helicopter rotor, for a given vehicle size, allowing them to store less kinetic energy during flight. These smaller propellers reduce the damage caused should the rotors hit any objects, this also makes the vehicles safer to interact with in close proximity.
The first RC application of a 4-rotor vehicle was the Roswell Flyer made by Area51 technologies. Now there are several commercially available quadrotor aerial vehicles, to list a few, Atair aerospace quadcopter , Hammacher Schlemmer four rotor UFO , Keyence Engager and gyrosaucer and the DraganFlyer V Ti . The team s design was inspired by the DraganFlyer V, made by Draganfly Innovations Inc. where the four motors and props are laid at the ends of an X Chassis, and in the center lay the majority of the circuit boards and microprocessor dubbed by DraganFlyer Inc. as The Brain . (See figure below)
Page 8
A general control scheme can be seen in the diagram above. The controller block is composed of two communicating MCU s (MicroController Units). The main MCU does most of the calculations and decision making. The main MCU also receives inputs from the proximity sensors and stability sensors, while the secondary MCU is responsible for communicating with a GPS receiver for positioning and an RF module for wireless communication. Both MCU s then drive the outputs for the four motors together.
The stability sensors block consists of a 3-axis Gyrometer for angular velocity measurement and a 3-axis accelerometer for measuring acceleration. The proximity sensors block consists of 5 ultrasonic sensors placed around the vehicle and under it, for obstacle avoidance and assisted landing.
The GPS receiver block consists of a GPS module that provides position, velocity, heading and altitude readings. The RF transceiver block consists of a 2.4GHz RF Module that communicates bi-directionally with a remote control unit for sending and receiving data.
Page 9
The UAV works in three different modes, in the simplest mode a land based PC sends out signals through an RF transceiver in order to steer the UAV in different directions. In the second mode a land based PC receives images from an onboard camera, then a pattern recognition system identifies a target object and sends signals to the UAV through the RF transceiver to steer it toward the desired object. If the object is not found the UAV rises in altitude quickly in order to find the object and re-track it. The third mode uses an onboard GPS that gives the current position of the UAV and it compares that to its target destination, and steers to its target destination then comes back to its initial point. In all modes an accelerometer and gyrometer are used to provide stability, and ultrasonic sensors are used to measure height and avoid obstacles and in turn to steer the UAV away from them.
Because of the ambitious nature of the project, the team decided to build the UAV from ground up. Development of our 4-rotor vehicle can be divided into four major branches.
1. Conceptual Design and Physical Assembly. 2. Analysis, component-level design & selection. 3. Control. 4. Testing, Troubleshooting & Redesign.
Although these four stages overlapped and interfered with one another they can be discussed independently, without much referencing to other sections.
Page 10
1. Ability to hover, in the sense of generating enough thrust and have enough control in order to maintain a mid-air static position. 2. Maneuverability in all directions of a three-dimensional plane. 3. Sufficient endurance of no less than 10-15 minutes. 4. A very light-weight body, including a battery with the highest power to weight ratio we could find since the battery is the heaviest single component of the vehicle. 5. High residual thrust to hover thrust ratio, an acrobatic vehicle was desirable for ability to demonstrate controllability and to perform difficult flight maneuvers. 6. Minimal size & complexity.
The team decided to stick very close to traditional designs of 4-rotor vehicles, where four electric motors are placed on the corners of a rectangle, and drive four counter-rotating propellers. These propellers would produce sufficient thrust for take-off, and according to their different allocated power distributed on the four motors would provide maneuverability. Any propeller spinning produces a torque on the body it is attached to. For stability in flight the total resulting differential torque on the body should be zero. This is demonstrated very clearly in helicopters. The main rotor on the roof of the helicopter produces a large yaw torque on the body which is countered by the tail rotor on the rear of the plane. Assuming the main rotor is on a constant rpm, the difference in power to the rear propeller moves the helicopter around the z-axis.
Page 11
The proper rotation of the propellers, goes such as any two adjacent propellers rotate in opposite directions, and any two diagonal propellers rotate in the same direction. The sum of rotations of any two diagonal propellers should equal the sum of the remaining two diagonal propellers. This makes the total differential torque on the body about the zaxis zero. The figure below demonstrates the prop rotation direction.
At hover mode, all four propellers would be producing the same amount of torque resulting in zero-net force on the vehicle about any-axis once gravity is taken into account. To make the vehicle increase or decrease in altitude, the speed on all four propellers are increased or decreased respectively. In order to move the vehicle in any direction of the x or y axis, two propellers adjacent propellers are increased in thrust, this causes the vehicle to pitch or roll in the desired direction, since the sum of the any two diagonal rotors is still the same as their other diagonal pair, this prevents the vehicle from yawing in any direction other than the desired course. Assuming the vehicle is in hover mode the following table yields a summary of the vehicle control scheme. Use the previous figure for propeller reference.
Page 12
Propeller 2 + 0 + 0 +
Propeller 3 + + 0 0 +
Propeller 4
As stated earlier, a lightweight body was a must in order to achieve maximum thrust for ease of flight and acrobatic maneuvers. For the chassis of the plane carbon-fiber was used, a very stiff and lightweight material, with a variety of practical uses commonly used in racecars and RC planes for their unique characteristics. To save even more weight we used the X-chassis design, where four motors would be placed on every end of the Xchassis. This would also give a better chance for the high pressure to accumulate and increase under the blade of the propellers to give higher lift than in a rectangular design. It would also reduce the overall air resistance. The arms of the X-chassis were made from hollow carbon-fiber tubes, and at the end of the tubes the motor mounts were placed. They were welded together using a common adhesive known to the RC world as Epoxy .
On the bottom of the X-chassis the battery was mounted, keeping the battery on a lower point would lower the center of gravity of the vehicle giving the vehicle smoother pitching and rolling. On the four battery sides four ultrasonic sensors would be placed for obstacle avoidance. On the bottom of the battery the fifth ultrasonic sensor was placed to determine height, along with the wireless camera placed for surveillance purposes, video or image capturing.
On the top of the X-chassis the UAV brain board was placed. It carries the accelerometer, gyrometer, RF Transceiver, GPS, motor controllers, ultrasonic sensors connections, and of course the Microcontrollers. The following figure below displays the chassis.
Page 13
Page 14
Front View:
Page 15
Calculations:
Motor Force:
Therefore, the Total Motor Output of 4 Motors at Full Power: Max Output4Motors Maximum Payload = 1400 grams/4 Motors = 1400 990 = 410 grams
Hence, Max Output in Newtons = 1400 x 9.807 = 13.730 Newtons Max Output per Motor = 13.730/4 = 3.432 Newtons
Net Force:
Therefore, Lift of Chassis at Full Power and when Differential Torque = 0. Chassis mass = 990 grams = 0.99 Kg Chassis weight = 0.99 Kg x 9.807 m/s2 = 9.709N Lift = 13.730 9.709 = 4.021 Newtons
Acceleration:
Net Force
= =
Torque:
= Acceleration / Distance to Center = 4.061 m/s2 / 0.14m = 29.007 rad/sec2 = mass * radius2 * (angular velocity) = (0.495) x (0.14) 2 (29.007)
; where (0.99/2 Motors = 0.495 grams, since it takes 2 motors for the UAV to move front, back, left or right).
= 0.2814 Newtons
MAX =
4.061 x 0.14 = 0.56854 Newtons A picture of the UAV with complete physical assembly can be seen below in the
following figure.
Page 17
Counter-rotating propellers were selected as our default propellers, which are a must in any quadrotor plane, because motors do not turn in the same direction. We selected 10*4.5 propellers which are large considered for our motor. Larger propellers are more suitable for high thrust application, and smaller rotors are more suitable for high velocity and aerodynamic capabilities. Our choice was the EPP1045 propeller. A figure of the propeller is placed below.
Page 18
We needed a battery source that can provide more than 32A continuously, considering each motor can consume 8A, the battery of choice was a Lithium-polymer Thunder Power TP8000-2S4P two-cell 7.4V, 8AH battery. It can work continuously at 12C (96A), and can burst at 18C (144A) which is more than sufficient to have all motors working at full thrust. With a weight of 320 grams and dimensions of 128*50*29mm it had a high power to weight ratio and size relative to its competitors. It would also give us about a good 15 minutes of airtime if the UAV is flying at full power. A figure of the battery is placed below.
Page 19
Page 20
The IMU five degrees of freedom is an IMU (Inertia Measurement Unit) that combines the IDG300 gyrometer and an ADXL330 accelerometer. This unit measures x and y angular velocity and x, y, z accelerometer outputs, hence the name 5 degrees of freedom . Its advantages over two separate units are firstly that the x and y outputs of both have identical headings, and you only have one VCC and one GND connection. Disadvantages are if this IC for any reason becomes defective you lose two IC s. A figure of this IC is displayed below.
Page 21
For communication with ground, radio frequency IC s are used. The Laipac TRF2.4-G transceiver was used. It operates at a high frequency, 2.4GHz. Data rate transmission can work at either 250kbps or 1Mbps. It works at 3.0V logic consumes 10.5mA in TX mode and 18.5mA in RX mode. Maximum range is 280m. Each unit can send and receive data interchangeably. One of the transceivers is placed onboard, and the other is connected to a land-based PC, they send and receive data to and from each other.
Page 22
jhnjh
For the surveillance system the WS-309AS system was used, the package comes with 1.2GHz camera with a resolution of 628*582 and a horizontal definition of 380 lines. The camera works at 9.0V, and consumes 85mA. A simple 9V battery operates the camera. The package also comes with a receiver with audio out and video out. Linear transmission distance ranges from 50m-100m. A picture of the camera and components are placed below.
Page 23
Page 24
3.2
PCB Design
Required components for designing and etching a PCB are acetone, a laser printer,
glossy paper, a clothing iron, acid and a steel sponge. Firstly the surface of the brass board is scrubbed with a steel sponge to remove any impurities and any oxidized brass. It is then cleaned thoroughly with cotton drained in acetone. The team used the circuit designing program called EAGLE 4.16r1 . Any circuit is printed on glossy paper, the printed glossy paper is then well folded around the board to prevent any slip during ironing, then ironed on the brass board. Ironing continues until the circuit becomes visible from the other side of the printed glossy paper, or preferably when the white paper takes a yellowish/brownish color indicating a slight burn. (Caution should be taken during ironing, if the brass board becomes too hot, the brass actually deforms). After ironing, the paper should be removed leaving the toner ink on the brass board. The brass board is then placed in the acid and left until all brass surrounding the printed circuit is dissolved. After removing from acid and rinsing in water, a steel sponge is gently scrubbed on the toner ink to leave the brass trace under the toner ink while removing the ink. Holes are drilled into the circuit board in the appropriate places where components are to be placed. After drilling is complete, components are welded onto the board using solder and a soldering iron. All circuits used for this project were designed in this manner. Pictures below (left to right) display this procedure. Before these boards were actually designed they were tested on bread boards first in order to assure everything is working in order, because making an incorrect PCB means much wasted time and raw materials. More of this can be referenced in Section 7, Testing troubleshooting and redesign.
Page 25
Page 26
In his board the GPS cable is welded onto the left row of pins. The descending order of these pins is; not used, GND, TX, RX, VIN, & GND, again. The first pin is ignored. The second and last pins (both GND) connect to the right side second pin. The third pin TX connects to the fourth pin on the right. The 4th pin on the left is RX that connects to the third pin on the right.
Page 27
This follows the same method as the GPS interface board. The E$1 row is the yaw gyro, E$2 row is the roll/pitch gyro. E$3 row is the three axis accelerometer. E$4 row is the pin headers that connect onto the main board.
3.2.1.3
RF boards
The TRW-24G is a very sensitive component therefore we designed this interface board with a TRW-24G socket for plug and play action onto the board.
Page 28
- Switching speed of up to 2KHz (for PWM control) - Minimum Vce drop possible for more powerful motors - High current Ic - Low current Ib Unfortunately the transistors fitting this description could not be found here in Egypt, but we found a transistor 2SD1062. It is capable of running a current of up to 15A and Vce of as low as 0.3V, but it needed a larger current for Ib than a PIC could provide, therefore we added a TIP120 transistor as an interface between the PIC and the 2SD1062. Since Vce of the 2SD1062 was a function of the Ic current we put 2 transistors in parallel to drop the Vce as low as possible while at the same time assuring that it has enough capacity to pass through the required current for the motor.
A main feature of this circuit is the PC817 optocoupler, an IC that interfaces between the PIC circuit and the motor circuit. Isolating these circuits was necessary because combining high current components with low current ones can damage the low current components. The optocoupler in the following diagram is labeled as 2. The left side of the optocoupler is connected to the PIC circuit and the right side is connected to the motor circuit. The first rows of pins in order are GND (PIC circuit), Vcc (PIC circuit), GND (Motor circuit) and Vcc (Motor circuit). Vcc from PIC (PWM output) circuit goes through a 1.5K resistor through optocouplers where the phototransistor is activated and returns to the PIC ground. The signal in turn goes through the base of the TIP120 turning it on. The emitter of the TIP120 connects to the base of the 2SD1062 transistors, whose collectors are
Page 29
In the final motor driver design, the optocoupler was removed from the motor driver and put on the main brain. This was done in order to have smaller motor drivers, and to have less connections between the main board and the motor driver. Also large motor drivers facing upwards would make contact with revolving propellers, and if facing downwards could cause noise with the ultrasonic sensors.
Page 30
3.2.3
The Brain
To avoid the mistakes that occurred in Configuration 2 mentioned in the Testing,
Troubleshooting & redesign section the team changed two things mainly. FirstlyTo avoid the problem of circuit design or re-altering, it was decided that the IC s would be mounted on separate boards that would mount on the main Brain board, much the way PCI slots are mounted on a normal PC. In our previous design, should any circuit design errors occur, a new board would have to be made, and all components would have to be welded off the old board, and re-welded to the new brain. This takes a lot of time, and it is also potentially damaging to the components to be frequently exposed to the welder. Secondly as for having the problem of high power rated components alongside low power rated ones in one circuit, optocouplers were used to interface between the Brain board and motor drivers, this is more thoroughly explained in the previous section 4.6 Motor Drivers .
Page 31
This Main board was designed to accommodate two PIC16LF777s, 4 Motor controller boards connected through 4 opto-couplers, a 3-axis accelerometer, 2 dual-axis gyrometers, 5 ultrasonic sensors, a GPS receiver and a RF transceiver. To keep the circuit as small as possible we used the internal 8MHz oscillators available in PIC16LF777 PICs instead of adding more components to the circuit in the form of crystals and capacitors. The circuit is powered by a 9V battery and has a 5V regulator as well as a 3V regulator for all 5V Logic components as well as the 3V Logic components to operate. We also added some LEDs to simplify debugging. Later on we manually welded on some wires to two ICSP connectors to program the two PICs without removing them from the circuit. (As seen in the previous picture).
Page 32
CONTROL
4.1 Introduction
The Main PIC is responsible for reading and calculating the orientation of the plane, and accordingly take a decision. The Main PIC has only 3 PWM modules, therefore we use an extra PWM from the Secondary PIC. The Main PIC sends commands to the Secondary PIC to increase or decrease the power of one PWM output, it also sends the orientation data to be sent through the RF to the base computer station. The Secondary PIC takes the GPS messages and extracts the required values and sends them to the Main PIC, as well as through the RF to the base station. Regarding the control scheme, there are four separate operation modes:
In Hover Mode: Tries to keep the vehicle stable in position. The following pseudocode demonstrates the operating algorithm.
Start up system Read bias values from IMU sensors Loop: Read sensors Calculate Angles & Height If(Height<Required Meters) Increase PWM if(Height>Required Meters) Decrease PWM if tilted left Tilt right If tilted right Tilt left If tilted forwards Tilt backwards If tilted backwards Tilt forwards Repeat loop
Page 33
The Secondary PIC is the one that receives the RC commands through the RF, then forwards them to the Main PIC to execute.
In GPS Mode:
The Secondary PIC takes the GPS messages and extracts the required values and sends it to the Main PIC, and it sends all other useful data through the RF to the base station. The Main PIC takes decisions according to its coordinates achieved from the GPS from the Secondary PIC.
In Tracking Mode: The base station receives the Video Feed from the Wireless Camera on board the vehicle and searches for a blue target in view, if it is not found the vehicle will gain altitude and search again. Once a target is found the plane will descend quickly and hover above the target and keep following it. The Secondary PIC receives the commands from the base station through RF and forwards the commands to the Main PIC which performs the required actions.
Page 34
Two registers must be set in both PIC s in order to enable this mode; SSPSTAT and SSPCON. (Actual settings for these registers can be found in APPENDIX B : CONTROL CODE)
Page 35
Page 36
For desired interrupts bits 6 and 7 of INTCON (Global and peripheral interrupts) should be set. Bit7 of PIE1(SSPIE) should be set. When interrupt occurs bit7 of PIR1(SSPIR) is set. This occurs if either a byte is successfully transferred, also in case of collision occurs or overflow occurs.
Page 37
4.3
orientation and heading of the plane. The following sections divide these tasks and explain each of these elements independently.
4.3.1
After we have finally tested all our sensors, GPS device and RF devices for correct processed data, we can now begin to implement the results as output on the propellers through motor control. This is achieved by the use of PWM. In the PIC 16LF777, it has three pins for PWM. The control registers used to enable PWM on this PIC are CCP1CON, CCP2CON, CCP3CON, PR2 and most importantly T2CON, since PWM is controlled by Timer 2 in the microcontroller. These three CCPXCON registers let us enable capture modes, compare modes or PWM. Of course here, we will enable the PWM.
Page 38
Bit 7: Unimplemented. Bit 6: Unimplemented. Bit 5: Should be set as 0. Second Least Significant bit in PWM mode. (10-bit Resolution). Bit 4: Should be set as 0. First Least Significant bit in PWM mode. (10-bit Resolution). Bit 3: Should be set as 1. (To enable PWM mode). Bit 2: Should be set as 1. (To enable PWM mode). Bit 1: Don t care in PWM. (To enable PWM mode). Bit 0: Don t care in PWM. (To enable PWM mode).
The CCPXCON registers will be all set as following: CCP1CON: CCP2CON: CCP3CON: 0x0F = 0x0F = 0x0F = 0b00001111; 0b00001111; 0b00001111;
Page 39
After setting the CCPXCON registers, we need to now set the T2CON register which enables TIMER2 in the microcontroller that will then control over the frequency or period we need on the Pulse Width Modulation. In order do this we must set the following bits as follows.
Unimplemented. Should be set as 0. (Postscaling will not be needed). Should be set as 0. (Postscaling will not be needed). Should be set as 0. (Postscaling will not be needed). Should be set as 0. (Postscaling will not be needed). Should be set as 1 in order to enable and turn on Timer 2. Should be set as 1. (Since prescale with a value of 16 is required). Should be set as 1. (Since prescale with a value of 16 is required).
Page 40
PR2 is an 8-bit register made available in order to control the frequency output needed on the DC Brushed Motors. After using the T2CON register for prescaling to reduce frequency to 125 KHz, PR2 register is used to enter a decimal value that will control and limit our frequency to 750Hz. The value to be placed in the PR2 register is calculated as follows. We divide the 125000 Hz obtained by 750Hz which is what is needed. 125000/750 = 166.666667. Since the value to be placed in the PR2 register should be an integer value and is an 8-bit register and carries no space for a floating point number, 167 should be entered after subtracting 1 from it. Therefore, PR2 = 166 The equation for PR2 is: round (Fosc / (4 x 16 x Period Required)) - 1 Hence, Fosc = 8 x 10^6 PR2 = round(8 x10^6 / ( 4 x 16 x 750)) - 1 PR2 = round(8 x 10^6/ (48000)) - 1 PR2 = round(166.66666667)) - 1 PR2 = 167 - 1 PR2 = 166
Page 41
Since the PWM pins are driving the motors they need to be se as output pins. This is done by setting the registers TRISB and TRISC.
= =
0b00000000. 0b00000000.
The diagram of the PIC 16LF777 can be used as a reference below for the output pins CCP1 on Port C2, CCP2 on Port C1, and CCP3 on Port B5.
*NOTE: Please see APPENDIX B for the sample code of Pulse Width Modulation and how to control it.
Page 42
4.3.2
ADC Operation
Here using the Analog - to - Digital converters is most crucial in order to automate our Unmanned Aerial Vehicle (UAV). For the most part, most or all of our sensors, ultrasonic, gyrometer and accelerometer give us feedback on our control system. The Ultrasonic provides us with a way for collision detection and obstacle avoidance. The accelerometer and gyrometer provide us with crucial data to help us stabilize our UAV in mid-air and maintain a static hovering position. It can also help the UAV to auto-level after traveling in a certain direction, like a co-pilot.
The outputs of those sensors are analog voltages. The Analog - to - digital converter here helps with converting those outputs into useful data ready to be used and processed by the microcontroller. In this project we use the 16LF777 PIC by Microchip. It contains an abundant 14 channel 10-bit ADC.
We have 11 inputs from those sensors. Five alone for the ultrasonic sensors, placed on the front, back, left, right, and bottom sides of our UAV for height accuracy. The ultrasonic s range is far as 6.45m (254 inches) and as small as 15cm (6 inches) to aid the UAV in landing due to its blind spot. Six channels are used for 2 Gyrometers and an accelerometer. Each gyrometer outputs the rate of angular velocity in the X and Y planes, so we need three channels since we have 2 gyrometers. One input/channel will be ignored from the second gyrometer. The accelerometer needs 3 channels since it measures acceleration in the X, Y, and Z directions. This makes a total of 11 channels. Therefore, 3 channels on our 16LF777 microcontroller will not be used out of the 14 channels.
In order to set this up in our PIC we must enable certain bits in our control registers of the 16LF777 microchip. These control registers are the ADCON0, ADCON1, ADCON2, PIE1, and PIR1 and last but not least the INTCON register to enable our interrupts especially when the ADIF (AD Interrupt Flag) is set after every conversion in the PIR register. The result of the Analog-to-Digital Converter is placed in the ADRES (AD Result) register. It consists of 2 8-bit registers, ADRESL (AD Result LOW) and ADRESH (AD Result HIGH).
Page 43
Page 44
Page 45
Bit 7: <ADCS1> Bit 6: <ADCS1> Bit 5: <CHS2> Bit 4: <CHS1> Bit 3: <CHS0>
Must be set as 1 since we are using the Internal Oscillator. Must be set as 1 since we are using the Internal Oscillator. Analog Channel Select bit. Analog Channel Select bit. Analog Channel Select bit.
Bit 2: <GO/DONE> A bit that controls the start of conversion or end of conversion. Bit 1: <CHS3> Bit 0: <ADON> Analog Channel Select bit. Turns on the ADC module in the microcontroller.
Bits 5,4,3,1 are used to select the channels we need to take our inputs from. Therefore, you need to toggle through them as we read our values over the output interval time. We start out by reading through channel 0, then 1, then 2, until we reach channel 10 (11 Channels) then go back to Channel 0 to take new readings to process for our new interval.
Page 46
Bit 7: <ADFM>
Must be set as 1 for Right Justification in the ADRES register. In reading our result from the ADRES register, we read all the 8 bits from ADRESL and the least significant bits of ADRESH and multiply it by 256.
Bit 6: <ADCS2>
Must be set as 0 since our Vref+ is normally the VDD of the PIC. Must be set as 0 since our Vref- is normally the VDD of the PIC.
Must be set as 0 since we need to enable 11 Channels. Must be set as 1 since we need to enable 11 Channels. Must be set as 0 since we need to enable 11 Channels. Must be set as 0 since we need to enable 11 Channels.
The bits 3,2,1,0 of PCFG(X) remain fixed since we are enabling only 11 Channels for the ADC to read from. The pins where pins AN11, AN12 and AN13 of the microcontroller 16LF777 remain digital I/O pins depending on the settings of the Tri-State Buffers for the ports.
Bit 7: Unimplemented. Bit 6: Unimplemented. Bit 5: Must be set as 1, since we wish the conversion to take 12TAD (24 sec). Bit 4: Must be set as 0, since we wish the conversion to take 12TAD (24 sec). Bit 3: Must be set as 1, since we wish the conversion to take 12TAD (24 sec). Bit 2: Unimplemented. Bit 1: Unimplemented. Bit 0: Unimplemented.
Page 47
Therefore, 2 s * 12 = 24 sec, which is how long the ADC needs to acquire our data from one input channel.
In order to keep the microcontroller working efficiently and processing data without having it constantly polling and wasting processing power on all kinds of data coming in through the Sensors, GPS device or RF transceivers, we use interrupts. Concerning our sensors we set the PIE1 control register in our microcontroller. The Analog-to-Digital Interrupt Enable (ADIE) is bit number 6. We set it to 1. Whenever the ADC finishes a conversion, it will set the Analog-to-Digital Interrupt Flag in (ADIF) to 1 in register PIR1, interrupting the PIC. After we take our reading for the ADC, we must clear the ADIF in the PIR1 register in our software or else the PIC will keep itself running in a loop. Then we must change our channel through the bits 5, 4, 3, and 1 in the ADCON0 register. When this is done, we start a new conversion by the setting the bit number 2 (GO/DONE) as 1 in the ADCON0 register until the end of conversion is complete and the ADIF is set again calling the interrupt function in our microcontroller.
Setting our inputs on the Tri-State Buffers on all ports of the Microcontroller:
Since we have already set our control registers of the ADC module most importantly, we need to set the tri-state buffers on our ports in order to receive our inputs from the sensors. This is done by setting the registers TRISA, TRISB, and TRISE.
= = =
Page 48
In the summary of registers shown above, we must be very careful when setting the TRISE register because only the three least significant bits here control the PORTE Data Direction Bus, unlike TRISA where the complete register is used for only 6 pins. If we set the TRISE = 0xFF, it will cause the PIC to set two interrupt flags IBF and OBF and enable PSP Mode , which will cause PORTD to engage in parallel communication. This will cause the PIC to enter in an infinite loop of interrupts and if the flags are not cleared in the software. It almost causes the microcontroller to seem to Halt in a sense.
Page 49
The ultrasonic sensors used on the UAV can detect up to 254 inches 6.45 (meters) and the minimum distance it can detect due to its blind spot is 6 inches (15 cm). The sensor generates a new reading every 49 milliseconds. Since the microcontroller can take readings much faster than the ultrasonic sensor s output, if we take the readings at that speed, it will cause a lot of noise in our program for the UAV, so it is best we take our readings every 49 milliseconds to avoid the noise and make sure we have a new reading every time to be put to good use.
Every 0.01 Volts on our Ultrasonic sensor represents 1 inch of distance. Therefore, if the voltage on the output pin of the ultrasonic sensor is 0.20 Volts, then the distance it reads is 20 inches, therefore it is very simple to use.
In order to calculate the distance we need in our PIC 16LF777 we use a very simple equation which is: Distance (in Hexadecimal) = (Vin/Vref) X (2N) ; where Vin Vref N : is the Voltage input coming from the Ultrasonic Sensor. : is the reference voltage from our circuit which is 3.30V : is the number of bits of the ADC which is 10, therefore is 1024 For example, If Vin Vref = = 0.50V (which is equivalent to 50 inches read). 3.30V
In the ADC of the PIC 16LF777, the ADRES (AD Result) register will read 155 and will truncate the 0.1515.
If we take the reading 155 from the ADC and try to convert it back, it will be as follows:
Page 50
*NOTE: Please see APPENDIX B for the sample code of the Ultrasonic Sensors.
Page 51
4.3.2.2
Gyrometer
The gyrometer used was the IDG300. This IC gives accurate readings of angular velocity. All three angles were needed for control of the UAV, on the x, y and z axes; traditionally in flight labeled as roll, pitch and yaw angles. Angular velocity is measured accurately with a sensitivity of 2 mV/ /s. So every degree of rotation would indicate 0.002V electronically. The first thing to do was to interpret the signals into degrees, 0 - 360. This IC operates so that if the IC is rotated suddenly then stopped, you would get a change in reading only when the IC is moving, only when there is angular velocity. Thus an adder function is needed to constantly integrate the tilt intervally through the selected frequency, as general equation is as follows:
SUM SUM
SUM
new
t
new
Where
is initially set to 0.
sampling period. After the electric signal would be received on the ADC ports of the PIC it would be multiplied by the following equation to give degrees:
AngleNew
AngleOld
Vin *
Also any negative value for tilt had 360 added to it, since simple sin and cos functions behave differently to negative values.
4.3.2.3
Accelerometer
The accelerometer used was the ADXL330. This gives accurate measures of acceleration about all three axes. Typical sensitivity of this IC is 300mV/g, so every 1m/s2 of acceleration would indicate 30.58mV electronically. Primarily this IC has two main functions. The first is to indicate the initial angles of x and y in reference to the xy plane perpendicular to the gravity vector, so that the UAV can take off from any angled surface, if an accelerometer was not used, the system would always assume that the plane it was taking off from was always perpendicular to the vector of gravity, causing flight to be unstable. To use the accelerometer as an inclinometer, assuming X and Y are the acceleration values obtained from the corresponding axes on the accelerometer then, simply
Page 52
X g
Y Y=sin g
-1
The second use is to produce accurate estimations of acceleration, velocity and position, for use in the simulation. A fixed reference point is taken, more accurately the fixed axes at the point of takeoff. Acceleration and velocity in reference to that point are calculated. Distance from that point is calculated, and distance traveled around that point is also calculated. Considering the accelerometer uses the angles supplied from the gyrometer, a traditional 3D rotational matrix is used to rotate the constantly generated acceleration vectors around the reference axes, so that every value from the accelerometer has a X, Y and Z component on the reference axes.
1
RX( X) = 0
0 cos sin
X X
0 sin cos
X X
where
cos
RY( Y) =
0 1 0
sin 0 cos
0 sin Y
where
Y
Z Z
sin cos 0
Z Z
0 0 1
where
Multiplying all these matrices together would give the following matrix:
Page 53
X X
sin sin
Z Z
X X
cos cos
Z Z
Y Y
cos
cos
sin
cos
sin
sin
cos
if X,Y and Z are the acceleration values obtained from the corresponding axes on the accelerometer then, ReferenceX = Xcos Xcos
Y
Z(sin Ycos Xcos Z+sin Xsin Z) ReferenceY = Xsin Xcos + Y(sin Ysin Xsin Z+cos Xcos Z) +
Z(sin Ysin Xcos Z-cos Xsin Z) ReferenceZ = - Xsin + Ycos Ysin + Zcos Ycos
Integrating with respect to time once gives velocity, and integrating twice gives position. Adder functions are used for velocity and position for each reference axes. Another adder function is created taking the absolute value of every acceleration reading, then multiplying them by time twice in order to calculate the distance traveled. All adder functions for total rigid body acceleration, velocity, distance from origin and distance traveled, this simple equation is used.
V alue
Z2
Page 54
4.4
with an RF module. It handles communication tasks for the Main PIC. It also acts as a secondary PWM module. The following sections divide these tasks and explain each of these elements independently.
Page 55
The figures below briefly explain trilateration, where at the center of each sphere there is a satellite. When two spheres intersect they create lines. When the third sphere intersects it creates a point revealing the location of the receiver.
The coordinates are calculated according to the World Geodetic System WGS84 coordinate system. Position is determined by latitude and longitude which are basically angles, latitude ranges from 0-90 north and south, and longitude ranges from 0-180 west and east. The figures below display latitude and longitude.
Page 56
To calculate its position, a receiver needs to know the precise time. The satellites are equipped with extremely accurate atomic clocks, and the receiver uses an internal crystal oscillator-based clock that is continually updated using the signals from the satellites.
GPS satellites continuously transmit almanac and ephemeris at 50bps. The almanac consists of coarse time information and orbital data (speed and path). The ephemeris gives the satellites precise orbit. The almanac assists in the acquisition of other satellites. A complete almanac transmission is a 37,500 bit navigation message that takes 12.5 minutes to download. This long delay occurs when a new receiver is first turned on. Each satellite transmits its navigation message with at least two distinct spread spectrum codes: the Coarse / Acquisition (C/A) code, which is freely available to the public, and the Precise (P) code, which is usually encrypted and reserved for military applications. The C/A code is a 1,023 bit long pseudo-random code broadcast at 1.023 MHz, repeating every millisecond. Each satellite sends a distinct C/A code, which allows it to be uniquely identified.
Page 57
Often, these spheres will overlap slightly instead of meeting at one point. The receiver then moves the overlapping pseudoranges with the same amount (regardless of distance of receiver to satellite) till an intersection point is created this point is usually the most probable position. This scenario is shown in the following figure.
Page 58
Regarding GPS time as opposed to the conventional second, minute and hour; you only have seconds, more precisely seconds of the week. In a normal clock when the seconds reach 60 it starts a new minute. In GPS time when the seconds reach 604,800 it starts a new week, this is calculated by 7(days)*24(hours)*60(minutes)*60(seconds).
As for GPS date as opposed to the year, month, and day format of the Julian calendar, the GPS date is expressed as a week number and a day-of-week number. The week number is transmitted as a ten-bit field, and so it becomes zero again every 1,024 weeks (19.6 years). GPS week zero started at (00:00:19 TAI) on January 6, 1980 and the week number became zero again for the first time at on August 21, 1999. This event is known as a rollover.
After a GPS does a full almanac download, GPS systems boot in 3 different modes. Those would be cold start, warm start and hot start. In cold start, time and position are known within some limits, the almanac is known and the ephemeris is unknown. In warm start, time and position are known within some limits, the almanac is known, and at least three satellite ephemeris are known from the previous operation. In a hot start all ephemeris for all satellites are known so a hot start occurs. The GPS receiver chooses how to start based on the time between last turn off and current turn on. If this time was a few minutes the GPS chooses hot start which takes 1 second, if it was a few hours the choice is warm start which takes 38 seconds, anything longer than that produces a cold start which takes 42 seconds.
Most GPS systems have two protocols SirF protocol and NMEA protocol. In our case the NMEA protocol was used. NMEA protocol simply contains input messages and output messages. (Refer to the NMEA reference manual)
Page 59
A 16-bit XOR CRC creator was necessary to give input messages. A JAVA code is displayed in the APPENDIX B: CONTROL CODE.
Page 60
in SiRF protocol. To switch it to NMEA protocol you simply click action then Switch to NMEA Protocol , to open NMEA Setup. In this window as shown in the figure below, you can select each message and it s frequency per second. Highlighting checksum is preferred for message validation. For NMEA, baud rate should be set at 4800bps. After powering off the GPS receiver, GPS time, message type and frequency are saved.
Page 61
Latitude and longitude are displayed in degrees and minutes, At a latitude of 30 N (Cairo, Egypt), the latitude minute = 1847.54m and longitude minute = 1608.1m (distances change because the circumference of parallel of latitude changes, Earth is not a cylinder, please refer to http://home.online.no/~sigurdhu/Grid_1deg.htm ), velocity is multiplied by 1.852 to change from knots to km/hr. Then course heading in degrees ranging from 0360 moving clockwise from north. The final field before the checksum is date. The only fields needed were data validity, latitude, longitude, velocity and heading. VTG mode was desired to attain height, but during testing, height in MSL (Mean Sea Level) was quite inaccurate. At a change of height of about 4 meters, the GPS detected a change of height of 10 meters which is an error of over 150%. Latitude, longitude velocity and heading are transmitted via RF to the simulation.
Page 62
1. Y = Target Latitude
Present Altitude
X2 Y2
4. TempAngle is obtained by
tan
Y X
Desired course heading is obtained by the following scheme: Y + + X + + Course TempAngle + 0 TempAngle + 180 TempAngle + 360 (TempAngle is negative) TempAngle + 180 (TempAngle is negative)
Resgister Settings
Communication between the PIC and GPS system is acheived by the Universal Synchronous Asynchronous Receiver Transmitter (USART). In this case Asynchronous mode is used. (refer to the PIC 16F777 pdf file, section 11.0 for more detailed information) To enable this serial mode three registers must be set; TXSTA, RCSTA and SPBRG. TXSTA is set in the following manner:
Bit 7: 0 Don t care (for Asynchrous mdoe) Bit 6: 0 for 8-bit transmission Bit 5: 0 for transmission enabled Bit 4: 0 for Asynchronous mode Bit 3: 0 this bit is unimplemented Bit 2: 0 for High speed Bit 1: 1 for TSR empty (TRMT) Bit 0: 0 not used in 8-bit transmission
Page 63
the resulting X value is 25.04, so 25 is the value used in SPBRG. The RCSTA register is set in the following manner:
Bit 7: 1 for Serial port enabled Bit 6: 0 for Enables 8-bit reception Bit 5: 0 Don t care for Asynchronous mode Bit 4: 1 to Enable continuous receive (called CREN) Bit 3: 0 Don t care for 8-bit mode Bit 2: 0 for no Overrun error(OERR) Bit 1: 0 for no Framing error(FERR) Bit 0: 0 Don t care for 8-bit mode
When transmitting input messages to the GPS system to initialize data, the data message had to be inserted in the PIC s EEPROM via MPLAB before programming to PIC (an .ECH file can be created with your EEPROM input by exporting a file (MPLAB), this file is easier to load than re-inputting every time), because it consumed too much RAM. Data is transmitted bit by bit via the TXREG register, the TSR register must be polled to see whether the bit was sent out or not when TSR is empty only can u fill in the next bit. Interrupts are undesired in this mode.
Page 64
Page 65
transmitting/receiving respectively. Pre-amble, address, and CRC are stored on a buffer on the RF then transmitted out, instead of letting the PIC do all this work. The transceiver can receive simultaneously on two different channels. Only one channel was used in this project.
Pins used
Used pins were CE (Chip Enable), CS (Chip Select), CLK (Clock), DR1 (Data Ready1), DATA1, Vcc, and GND (1 represents pins pertaining to Channel1). The transceiver requires a configuration word of up to 15 bytes. This is done through three pins; CS, CLK and DATA1. Generally CE is turned off, CS is turned on, a delay is done to allow onboard processing, and then data is fed in bit by bit as the clock toggles. The Shock burst configuration word is as follows:
The section bit[119:16] contains the segments of the configuration register dedicated to Shock Burst operational protocol. After VDD is turned on Shock Burst configuration is done once and remains set whilst VDD is present. During operation only the first byte for frequency channel and RX/TX switching need to be changed.
Page 66
Bit 121-120:
Controls the setting of the PLL for test purposes. With closed PLL in TX no deviation will be present. For normal operational mode these two bits must both be low.
DATAx_W
Bit 119
Bit 111
NOTE: The total number of bits in a Shock Burst RF package may not exceed 256! Maximum length of payload section is hence given by:
(ADDR_W+ CRC)
Bit 103 64: ADDR2: Receiver address channel 2, up to 40 bit. Bit 63 24: ADDR1 ADDR1: Receiver address channel 1, up to 40 bit. *NOTE: Bits in ADDRx exceeding the address width set in ADDR_W are redundant and can be set to logic 0.
Page 67
Bit 103 64: ADDR2: Receiver address channel 2, up to 40 bit. Bit 63 24: ADDR1 ADDR1: Receiver address channel 1, up to 40 bit.
NOTE: Bits in ADDRx exceeding the address width set in ADDR_W are redundant and can be set to logic 0.
Bit 23
18: ADDR_W: Number of bits reserved for RX address in Shock Burst packages.
NOTE: Maximum number of address bits is 40 (5 bytes). Values over 40 in ADDR_W are not valid. Bit 17: CRC_L: CRC length to be calculated by nRF2401 in Shock Burst. Logic 0: 8 bit CRC Logic 1: 16 bit CRC Bit: 16: CRC_EN: Enables on-chip CRC generation (TX) and verification (RX). Logic 0: On-chip CRC generation/checking disabled Logic 1: On-chip CRC generation/checking enabled
Page 68
Bit 15: RX2_EN: Logic 0: One channel receive Logic 1: Two channels receive
NOTE: In two channel receive, the nRF2401 receives on two, separate frequency channels simultaneously. The frequency of receive channel 1 is set in the configuration word bit[7-1], receive channel 2 is always 8 channels (8 MHz) above receive channel 1. Bit 14:
Communication Mode: Logic 0: nRF2401 operates in direct mode. Logic 1: nRF2401 operates in Shock Burst mode
*NOTE: Utilizing 250 kbps instead of 1Mbps will improve the receiver sensitivity by 10 dB. 1Mbps requires 16MHz crystal.
Page 69
Bit 7
The channel frequency in transmit is given by: ChannelRF =2400MHz + RF_CH# * 1.0MHz RF_CH #: between 2400MHz and 2527MHz may be set. The channel frequency in data channel 1 is given by: ChannelRF =2400MHz + RF_CH# * 1.0MHz (Receive at PIN#8) RF_CH #: between 2400MHz and 2524MHz may be set.
The channel frequency in data channel 2 is given by: ChannelRF =2400MHz + RF_CH# * 1.0MHz + 8MHz (Receive at PIN#4) RF_CH #: between 2408MHz and 2524MHz may be set.
Page 70
For more intricate details about the configuration word refer to the nRF2401 datasheet page 19.
Within Shockburst mode there are four different modes. They are displayed in the following table.
ACTIVE MODE There are two different options in Active mode, Transmit and Receive.
Transmit 1. When the application MCU has data to send, set CE high. This activates nRF2401 onboard data processing. 2. The address of the receiving node (RX address) and payload data is clocked into the nRF2401. The application protocol or MCU sets the speed <1Mbps (ex: 10kbps). 3. MCU sets the CE to low, this activates a nRF2401 Shock Burst transmission. 4. nRF2401 Shock Burst: RF front end is powered up RF package is completed (preamble added, CRC calculated Data is transmitted at high speed (250 kbps or 1 Mbps configured by user). nRF2401 return to stand-by when finished
Page 71
Page 72
Configure Transmitter 1. In configure transmitter, CE is turned off, and CS is turned on. 2. DATA1 with CLK send the configuration word to the RF. 3. A delay of (1ms) is issued to allow ample time for onboard processing. 4. Both CE and CS are turned off.
Configure Receiver 1. In configure receiver, CE is turned off and CS is turned on. 2. A delay (1ms) is issued. The configuration is then sent through DATA1 from the PIC as the clock toggles. 3. CE and CS are then turned off and a delay (1ms) is used also for onboard processing. 4. CE is then left on as to enable receiving.
STAND-BY MODE Stand by mode is used to minimize average current consumption while maintaining short start up times. In this mode, part of the crystal oscillator is active. Current consumption is dependent on crystal frequency.
POWER DOWN MODE In power down the nRF2401 is disabled with minimal current consumption, typically less than 1A. Entering this mode when the device is not active minimizes average current consumption, maximizing battery lifetime.
Page 73
Data packages contain four main sections, in MSB order Pre-amble, address, payload and CRC. Pre-amble is either 4 or 8 bits and is added to the data packet. Address is between 8 and 40 bits. Payload is the desired data being transmitted or received. CRC is either 8 or 16 bits and used for validating message. More detail about the data package can be seen in the table below.
For information regarding delays, (please refer to the RF-24G datasheet page22).
Recommendations: 1. Delays should be taken very carefully, ample time is required for onboard processing. 2. Sequence of turning on CE and CS should be very accurate, or the transceiver will not operate as desired. 3. Configuration word should be set very carefully. 4. Configuration word entry starts from the MSB to the LSB. 5. This IC is unlike other ICs, it is very sensitive to physical shock and short circuits, three of these units were irreversibly damaged, which in our case cost much time.
Page 74
4.5 RC UNIT
The main purpose of this RC Unit besides enabling RC mode, is that the user can interfere manually should any errors occur, such as vehicle misguidance. This can save the vehicle from possible crashes.
1. KEYPAD TESTING
Required components are the keypad encoder MM74C923, 0.1uF capacitor, 1uF capacitor, and a 16 key keypad. The 1uF capacitor determines the debounce key mask. This is done by creating a debounce period of 0.01s (delay) of on the encoder. The 0.1uF determines the scanning frequency at 400Hz. The encoder has an output enable as which should be set at active low.
These CMOS key encoders provide all the necessary logic to fully encode an array of SPST switches. The keyboard scan can be implemented by either an external clock or external capacitor. These encoders also have on-chip pullup devices which permit switches with up to 50 KHz on resistance to be used. No diodes in the switch array are needed to eliminate ghost switches. The internal debounce circuit needs only a single external
Page 75
Both the keyboard scan rate and the key debounce period by altering the oscillator capacitor, COSE, and the key debounce mask capacitor, CMSK. Thus, the MM74C923's performance can be optimized for many keyboards. The keyboard encoders connect to a switch matrix that is 4 rows by 4 columns or 5 rows by 4 columns (MM74C923). When no keys are pressed, the row inputs are pulled high by internal pull-ups and the column outputs sequentially output a logic 0 . These outputs are open drain and are therefore low for 25% of the time and otherwise off. The column scan rate is controlled by the oscillator input, which consists of a Schmitt trigger oscillator, a 2-bit counter, and a 24-bit decoder. When a key is pressed, key 0, for example, nothing will happen when the X1 input is off, since Y1 will remain high. When the X1 column is scanned, X1 goes low and Y1 will go low. This disables the counter and keeps X1 low. Y1 going low also initiates the key debounce circuit timing and locks out the other Y inputs. The key code to be output is a combination of the frozen counter value and the decoded Y inputs. Once the key debounce circuit times out, the data is latched, and the Data Available (DAV) output goes high. If, during the key closure the switch debounces, Y1 input will go high again, restarting the scan and resetting the key debounce circuitry. The key may debounce several times, but as soon as the switch stays low for a debounce period, the closure is assumed valid and the data is latched. A key
Page 76
The following circuit schematic was used to connect the keypad to the encoder.
Page 77
The same method was applied on the gyrometer as the accelerometer but instead of measuring angle, it measured angular velocity which we would later on integrate to acquire the displacement angle.
Page 78
In order to test the SPI functionality a couple of LEDs were connected onto the Main and Secondary PIC. These LEDs would light up interchangeably with every message transferred through.
This shows results of the first experiment to get the binary output of the encoder to the LEDs After the previous experiment was successful, the next step was to see if the MCU would work perfectly along with the previous system.
This experiment shows the output of the keypad through the MCU. The LED s turn on by the MCU, by showing the binary output of the button pressed. LEDs were arranged in order of 4-bits in this experiment.
Page 79
5.1.2
LCD TESTING
The LCD connected to a PIC was a great method to test individual code segments
before integrating them into a greater whole. SPI, ultrasonic sensors, RF, GPS system, were all tested individually using this method.
The preferable LCD of choice to use is the Hitachi HD44780. It proved simple, efficient and the libraries are readily available in most PIC programming packages. The connections are illustrated as follows:
Bit 0: Bit 1: Bit 2: Bit 3: Bit 4: Bit 5: Bit 6: Bit 7: Bit 8: Bit 9: Bit 10: Bit 11: Bit 12: Bit 13: Bit 13: Bit 13:
Ground (GND). Power (VCC). Variable Resistance (Potentiometer) placed for adjusting contrast. Control line RS (Register Select). Control line R/W (Read/Write). Control line E (Enable). Data Input 0. Data Input 1. Data Input 2. Data Input 3. Data Input 4. Data Input 5. Data Input 6. Data Input 7. VCC for the Backlight. GND for the Backlight.
*NOTE: Please see APPENDIX B for the sample code of the Liquid Crystal Display.
Page 80
In order to test the blind spot of the ultrasonic sensor and to verify its sensitivity, the output from the ultrasonic sensor was connected to a PIC and was measured printed on an LCD for a better view of the oscillations in readings.
Page 81
A program is configured so options would be sent to the plane via the RF by the touch of a button from the keypad. The keypad sends an interrupt, that lets the MCU read the unique value from the encoder. The MCU then identifies which button was pressed and in turn sends a unique message to the RF that the MCU on the plane identifies and acts accordingly. The following options were in mind. 1. Start 2. Off 3. Hover 4. Land 5. Left 6. Right 7. Forward 8. Backward 9. Land
Use of the LCD was integrated into this system, to attain a viewable output that can be verified. The transceiver not only sends out messages to the plane, but receives information from the plane, regarding latitude and longitude, heading and velocity.
This experiment shows the LCD working with the RF and the keypad system. The LCD shows the current button pressed.
Page 82
The final test performed was to see the output of the GPS receiver onto the LCD to verify the USART connection with the GPS receiver.
5.1.3 RF TESTING
Since LCDs can prove to be buggy and slow an alternative had to be chosen, since the RF-24G is much faster than an LCD we tested the outputs and variables of some more complex programs than possible with and LCD or LEDs.
The Ultrasonic readings taken from the previous ultrasonic program for LCD testing where taken and instead of displaying them on the LCD, they were transmitted wireless to a computer to be displayed onto the screen at a much higher refresh rate.
5.1.3.2
GYROMETER TESTING
Initially testing the gyrometer with the LCD was more desirable, but the LCD was quite slow when keeping up with the gyrometer. Testing it with the RF was a better solution. The PIC code integrates the required value and constantly adds the values to provide the current angle. This value is sent through the RF transmitter. The RF receiver is connected to the RS232 port. A JAVA program extracts values from the serial port and displays it on a GUI. Pictures below show this process. The first picture shows the receiving RF node, the second shows the general circuit, and the last shows the angle being displayed while the gyro is being tilted. Code for this procedure can be found in APPENDIX B : CONTROL CODE.
Page 83
Page 84
Controlling the RF-24G via the keypad A program is configured so options would be sent to the plane via the RF by the touch of a button from the keypad. The keypad sends an interrupt, that lets the MCU read the unique value from the encoder. The MCU then identifies which button was pressed and in turn sends a unique message to the RF that the MCU on the plane identifies and acts accordingly. The following options were in mind. 1. Start 2. Off 3. Hover 4. Land 5. Left 6. Right 7. Forward 8. Backward 9. Land
Use of the LCD was integrated into this system, to attain a viewable output that can be verified. The transceiver not only sends out messages to the plane, but receives information from the plane, regarding latitude and longitude, heading and velocity.
This
experiment
shows
the
LCD
working with the RF and the keypad system. The LCD shows the current button pressed.
Page 85
PROTOTYPE CHASSIS 1
For initial design balsa wood was used, a very lightweight material, commonly used in RC planes for its practical characteristics. A rectangular frame was made from several balsa planks and glued together with an adhesive agent, super glue. Multiple planks were used on each side to give rigidity to the plane. The corners were reinforced with triangular pieces of balsa wood which would fit in each of the four inner corners of the plane adding more rigidity to the welds of the plane. Four equal length legs also made of balsa wood are extended from the plane, in order to give the plane a safe landing.
A thick bridge of balsa wood was extended from the mid-section of one of the sides of the frame to the other side. The top of this bridge was designed to carry our accelerometer, gyrometer, camera, GPS and PIC. On the bottom of the bridge we designed a battery compartment. The accelerometer and gyrometer were placed at the absolute center of the body in the center of the bridge. They were placed on top of each other. They must both be placed in the center in order to give accurate readings of acceleration and tilt. We decided to put the battery compartment on the bottom of the bridge. Considering it s the heaviest single object on the plane it was put on the bottom of the bridge in the center in order to lower the center of gravity of the vehicle and provide better balance and easier control. There was an ultrasonic sensor placed on the bottom of the battery compartment in order to properly detect height. A picture of the first chassis is shown below. It weighed 197 grams.
Page 86
In the very end after testing lift with this frame, the chassis was too bulky and heavy where the plane could barely lift it. Another reason for the lack of power was the triangular pieces of balsa in the corners which blocked airflow under the propellers. The motors were also delicate in their fastening to the frame. Our team then decided to reconstruct another chassis, a lighter one, reduced in size.
PROTOTYPE CHASSIS 2 The same design was used again, except the multiple layers were removed to reduce weight and thinner planks were used all over the plane. The rectangular frame was designed so that the when any two adjacent propellers face each other the distance between the propellers would be a bare 0.5cm. Struts were also added to better fasten the motors. Four struts are used to fasten all motors to the corners of the frame with screws, and the strut is fastened to the motor with a plastic belt. The result was a much slighter and sleeker design with better results than the previous design. This chassis weighed 93 grams. Pictures of the second frame (top) and a picture of the first and second frame together showing relative size (bottom) are placed below. Notice the triangular reinforcements in the first picture (compare to the second) were clipped in order to strengthen the aerodynamic vortex caused under the rotors.
Page 87
After testing the second chassis we noticed that the triangular reinforcements were inhibiting lift by disturbing the air vortex created by the propellers. This caused consideration for a third chassis to be built.
Page 88
Page 89
5.3
RF DRIVERS
5.3.1. Laipac RF TX / RX
The Laipac A2ABTAE-D2 transmitter/receiver set was used for communication. A parallel port sends signals out to the encoder, which in turn encodes signals to the transmitter, to send to the receiver. The receiver then receives from the transmitter and sends it to a decoder which gives the data to another microcontroller. The transmitter and receiver circuits were placed on two different boards. Circuit design and actual pictures of these circuits are placed below. (On boards below, transmitter is on left, and receiver is on right.) After testing it was decided that this was a very inefficient communication system for a variety of reasons. It was very slow, its range was very limited, and it s payload was very limited to 1 byte only, not to mention it had no checksum system. The RF-24G proved to be a superior alternative.
Page 90
5.3.2 RF DRIVER
The RF transceivers have two separate boards, in this section the one explained is the board that connects to a parallel port on a land based PC. This board was created in order to have the RF transceiver and GPS connect to the parallel port of a PC, to be used as an evaluation board for testing.
Page 91
5.4
CONFIGURATION 1:
This configuration was used on the second chassis. The PIC of use was the 16F877.
It was configured so that one of the PICs was a Main and the other was a Secondary. The battery was connected to a specifically designed power distributor. The power distributor then supplies the large current to all four motor drivers. This board receives power from our Li-Poly battery and supplies power through wires to the PICs, accelerometer, gyrometer, and motor drivers which in turn supply power to the motors. There were four motor drivers one for each of our motors. This motor driver is the same design explained in the analysis and component level design and selection, except one 2SD1062 transistor was used per motor driver, and optocouplers weren t yet implemented. All components of the plane were integrated into one large circuit. Circuit designs of the 16F877 driver (top), motor driver (center) and power distributor (bottom) are displayed below.
Page 92
Page 93
Page 94
The next phase of the project was testing and programming of accelerometer, gyrometer and ultrasonic sensors. This was halted due to the negative results. The team decided to revise their chassis, reduce wiring, and alter board configuration. This is explained in the next section.
Page 95
5.5 CONFIGURATION 2:
PIC Implementation : The onboard microprocessor receives signals from the accelerometer, gyrometer, ultrasonic sensors, RF chip and GPS. According to the mode that is being run the microprocessor controls the four motors accordingly via PWM. The team needed a microprocessor that can accommodate all these functions. The PIC of choice was the 18F4431, a figure of the PIN diagram is placed below. The accelerometer and both gyrometers are connected to port A, in the ADC pins. The ultrasonic sensors can release output in three different ways; analog signal, digital signal or by Pulse Width period. Three ultrasonic sensors are placed in the port E ADC pins, releasing analog output, and the last two ultrasonic sensors are placed on port B pins RB6 and RB7. RF outputs connect to Digital I/O pins, except DR1 which connects to a pin with an interrupt function. GPS chip connects to the serial TX/RX pins of the PIC namely pins RC6 and RC7. A figure of the pin diagram is placed below.
Page 96
Page 97
During the making of The brain there was a problem with line wiring of the RF section, this called to make a new brain. It also came to the team s knowledge that combining high rated power components with low power rated components with one common ground could be hazardous. The low power rated components could malfunction or burn. The team decided to design another brain, with motor drivers separated from the control circuit. Also our programmer used to burn the 18F4431 PICS so testing couldn t be implemented.
Page 98
5.6 Brain
Page 99
A potentiometer is connected to a 5V source and GND. Its output connects to the negative op-amp input, it is adjusted to create a difference, relative to the signal connected to the positive terminal. VSS determines your voltage output at maximum gain, so that VOUT can never exceed VSS. The gain in this circuit is simply:
Rf R1
Rf R1
where
VOUT
(V1 V2 )
VOUT
VSS
Assuming you had a difference of 0.1V between both OPAMP terminals, Rf=150K & R1=10K , gain would be 15 and Vout would be 1.5V. Sensitivity would
increase 15 fold, from 0.002V to 0.03V. In the end the OPAMP was removed because it s
Page 100
Old RF
E$4,5,6 and E$7 are silicone diodes, E$1 is 74LS126AP tri-state buffer, the E$8, E$9, E$10, E$11 are 10K pull down resistors, E$3 is the RF connection, and E$2 is the main
circuit connection. E$2 righter most pin is VCC 5V, The E$2 leftermost pin is a 3.3V connection beside it is GND, the rest are RF signals coming from the 5V logic. E$4, E$5, E$6, and E$7 are the diodes displayed below. They are connected in this manner because DATA1 is bi-directional. The 74LS126AP receives inputs from the PIC, and transmits CE, CS, CLK1 to the RF accordingly.
RF interface board
Page 101
FUTURE IMPLEMENTATIONS
If there was more time at hand, gyrometer and accelerometer outputs would be corrected in order to reduce if not eliminate output drift. Immediately after that; hover mode, RC mode, GPS mode, and tracking mode would be tested. Ultrasonic sensors would be connected to mechanical servos that move the sensors according to angles. The sensor that assists in height would be connected to a 3D servo, and all other sensors would be connected to a 2D servo. This would give us highly accurate estimation of height, and would detect obstacles that are perpendicular to the gravity vector. (Not objects that are above or under the UAV.) High powered brushless motors would also be a great variation to our design. Compared to brushed motors, they consume much less power, have higher efficiency, and they have longer life. A long range (near RF range) high resolution camera would also be a good improvement. If time was ample, our chassis would be redesigned to a circular design where the rotors are placed under the chassis and face downwards. The main board would be also under the vehicle along with the battery, leaving the upper side of the plate empty in order to carry objects.
Page 102
CONCLUSION
The local market does not have high quality products which were needed for this project. Almost all of our components were ordered from abroad. Shipping times for these parts caused big delays on work time. Unfortunate accidents subjected us to these delays.
The most difficult challenge was the race against time and due to the constraints it imposed on this project and due to the nature of the project there was a lot of undocumented equipments, experimentations, and analysis as time progressed.
Considering this project is an embedded system, a bottom-down programming method was used, followed by integrating elements into a greater whole. All single elements were tested and worked successfully. Only the gyrometer and accelerometer drifts were not corrected and this led to an incomplete project. With more time Kalman filters or PID control techniques could have been implemented.
Page 103
3.4K Resistor 100 Resistor 1.5K Resistor 330 Resistor 15 5W Resistor 10K Resistor 3.3K Resistor 100K Potentiometer 1M Potentiometer 22pF Capacitor 10uFCapacitor 100nF Capacitor 0.33uF Capacitor 470uF Capacitor 18F4431 MCU Mirocontroller unit 5V 40MHz (max)
Page 105
Carbon Fiber tubes cylindrical (Diameter = 1cm) 1 90cm Epoxy (Hardener & Resin) Ecuadorian Balsa wood (10cm*1cm) 90cm Ecuadorian Balsa wood (1cm*1cm) 90cm Ecuadorian Balsa wood (2.5cm*0.6cm) 90cm Ecuadorian Balsa wood (2.5cm*1cm) 90cm Ecuadorian Balsa wood (10cm*0.6cm) 90cm DT830 Digital Multimeter (Avometer) 1 2 3 5 3 2 3
Page 106
class keytest extends JFrame implements KeyListener { JTextField keyText = new JTextField(1); JTextField function = new JTextField(30); JLabel action = new JLabel("Action"); JLabel keyLabel = new JLabel("Press To Start"); ParallelPort lpt1 = new ParallelPort(0x378); // 0x378 address for a port int j=0; keytest() { super("KeyTest"); keyText.addKeyListener(this); setSize(350, 100); getContentPane().setLayout(new GridLayout(4,1)); getContentPane().add(keyLabel); getContentPane().add(keyText); getContentPane().add(action); getContentPane().add(function); setVisible(true); } private void sleeper() { try { lpt1.write(j); Thread.sleep(1000); // in miliseconds } catch(InterruptedException e) { keyLabel.setText("You numbnut you did "+e.toString()); } } public void keyPressed(KeyEvent input) { /*int[] receiver = new int[30];
this
:-
Page 107
//
//
//
//
//
// // //
Ultrasonic Code:
int i=0; void interrupt() { int i=0; if (PIR1.ADIF == 1) { if((ADRESL+(ADRESH*256)) <= 41) { PORTB.f0 = 1; } else { PORTB.f0 = 0; } PIR1.ADIF = 0; INTCON = 0xC0; PIE1 = 0x40; } ADRESL = 0; ADRESH = 0; delay_ms(50); ADCON0.GO = 1; } void main() { INTCON = 0xC0; OPTION_REG = 0X80; PIR1 = 0x00; PIE1 = 0x40; ADCON1 = 0xCE; ADCON0 = 0x01; TRISA = 0x01; TRISB = 0x00; TRISC = 0x00; TRISD = 0x00; TRISE = 0x00; PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0;
Page 111
TRISA = 0x03; TRISB = 0x00; TRISC = 0x00; TRISD = 0x00; TRISE = 0x00; PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; ADCON0.GO = 1; TMR0=0; while(1); }
LCD:
unsigned char *text = "RCIDIOTS by"; unsigned char *text1 = "mikroElektronica"; void main() { TRISB = 0; TRISD = 0;
// Initialize LCD at PORTB and PORTD with custom pin settings Lcd8_Config(&PORTB,&PORTD,3,2,1,7,6,5,4,3,2,1,0); Lcd8_Cmd(LCD_CURSOR_OFF); Lcd8_Out(1, 1, text); Lcd8_Out(2, 1, text1); while(1); }
PWM:
unsigned char flag; void interrupt() { if(INTCON.RBIF == 1) { INTCON.RBIF = 0; PORTA = ~PORTA; }
Page 120
Page 121
Accelerometer angle measurment & gyrometer angular velocity measurement with output on LEDs
double result,iresult; void main() { TRISA = 0;TRISB = 0;TRISC = 0;TRISD = 0; TRISE = 0; PORTA = 0;PORTB = 0;PORTC = 0;PORTD = 0;PORTE = 0; INTCON=0xC0; TRISA=0b00000001; ADCON0 = 0b01000001; ADCON1 = 0b11000000; delay_ms(2000); ADCON0.GO=1; PORTD.f0=1; while(ADCON0.GO==1); ADCON0 = 0x01; iresult=(ADRESH<<8)+ADRESL; PORTD.f0=0; PIE1 = 0x40; while(1); } void interrupt() { if(PIR1.ADIF==1) { PORTD.f1=~PORTD.f1; result=iresult-(ADRESH<<8)-ADRESL; if(result<-1) { PORTC=8; } else if(result>1) { PORTC=2; } else PORTC=1; if(result>10) { PORTC=8+16;
Page 133
Gyrometer angle calculation with integration and sending result through RF.
double result,iresult,reading,treading = 0; unsigned char count = 0; char text[4]; char data_array[4]; int i = 0; void transmit_data2() { unsigned char i, j, temp, rf_address; TRISC = 0b00000000; PORTC.f7 = 1; delay_ms(1); rf_address = 0b11100111; for(i = 0 ; i < 8 ; i++) { PORTC.f6 = rf_address.f7; PORTC.f5 = 1; PORTC.f5 = 0;
Page 134
Page 136
SPI with gyro angle calculation with integration & sending through RF.
Master
#include "constants.h" double xGyro,yGyro,IxGyro,IyGyro,altUltra,xAngle,yAngle,temp; char i = 0, count = 0; void bootup() { OSCCON=0b01111000; while(OSCCON.f2==0); } void initialize_ports() { TRISA=0x3F; TRISE=0x07; TRISB=TRISC=TRISD=0; PORTB=PORTC=PORTD=0; } void initialize_spi_master() { TRISC.f4=1; SSPSTAT=0b01000000; SSPCON=0b00100000; } void debugging_code() { PORTC.f6=1; PORTC.f7=0; delay_ms(5000); PORTC.f7=1; PORTC.f6=0; } void setup_adc() { ADCON0=0b01100001; ADCON1=0xC2; ADCON2=0b00101000; } void get_initial_values() { ADCON0.GO=1; while(ADCON0.GO==1); IxGyro=(ADRESH<<8)+ADRESL; ADCON0=0b01011001; ADCON0.GO=1; while(ADCON0.GO==1);
Page 137
Slave
#include "constants.h" unsigned char msg,i = 0; double double_msg; unsigned char data_array[4]; unsigned char bytes = 0; void bootup() { OSCCON=0b01111000; while(OSCCON.f2==0); } void initialize_ports() { PORTA=0; PORTE=0; TRISA=0; TRISE=0; TRISB=TRISC=TRISD=0; PORTB=PORTC=PORTD=0; } void initialize_spi_slave() {
Page 143
Slave
unsigned char dir=0; unsigned char msg; void setup_COMM_TRANSMIT() { TRISD=0; TRISB.f0=0; } void setup_COMM_RECEIVE() { TRISD=0xFF; TRISB.f0=1; } void clock_COMM() { delay_ms(2000); } void send_ACK() { setup_COMM_TRANSMIT(); PORTD=0xFF; PORTB.f0=1; clock_COMM(); PORTB.f0=0; PORTD=0; setup_COMM_RECEIVE(); } void receive_Byte() { msg=PORTD|0x80; send_ACK(); } void setup_INTERRUPTS() { INTCON=0b11010000; OPTION_REG=0b10000000; } void setup_COMM() { setup_COMM_RECEIVE(); while(PORTB.f0==0); msg=PORTD|0x80;
Page 149
Page 164
QUANTITY 1 1 1 1 1 1 4 4 1 1 1 2 1 1 1 5 1 4 1 1 1
WEIGHT (g) 197 93 47.5 43.5 326 35g 284 36 107 63 27 2 2 4 15 30 34 68 1107g 190g 990g
Page 165
GW/EPS-350C-CS
Volts PROPELLER (V) EP1047 EP1047 EP1047 EP1047 6 7.2 8.4 9.6 (A) 6.5 8.8 10.3 12.8 (g) 300 410 470 540 (oz) 10.50 14.35 16.45 18.90 39.00 63.36 86.52 122.88 Amps Thrust Power (w) (g/w) 7.69 6.47 5.43 4.39 (oz/kw) 269 226 190 154 Efficiency
*Note: Last row shouldn t be tested, prolonged exposure to high voltage can irreversibly damage your motors.
Page 166
Configuration is as follows, the power supply Vin connects regularly to a 110V/220V source. Vout terminals connect to the Charger/Discharger with alligator clips. The Dean s connector of the charger connects to the dean s connector of the battery. The blinky battery balancer connects to the adapter that connects to the balancer battery input.
The two line display indicates the status of the charging sequence in six messages shows (in order of left-right) shown in the figure below. Charge current (0.10A), number of cells (2C), charge mode (2, following 2C in the second field), battery voltage (6.93V), charge duration (3:05:52), and number of milliamp hours of charge (0.26AH) to put into battery pack.
Page 167
Caution should be taken to never let the battery drop below 3.2V per cell, the battery pack should be disconnected and charged immediately. Should the voltage fall below that the battery should be charged at a rate between 5% and 10% of rated of cell rated mA/hr capacity. If the voltage falls below 2.5V per cell, the battery will suffer irreversible chemical damage, and will slowly and completely deteriorate in 30 days.
Page 168
Page 169
APPENDIX F: REFERENCES
Programs used in this project - PIC Simulator IDE v6.34 - MP Lab v7.42 - EAGLE 4.16r1 - Mikro Elektronica's MikroC - JCreator LE - WINPIC800 - SiRF Demo PC GPS Utility v3.83 - AutoCAD 2006 - Google Earth (Testing and simulating) (PIC programmer) (PCB Design) (PIC code editor) (Java Code editor) (PIC programmer) (GPS initializer) (Chassis drawings) (GPS aid)
Page 170
-16F877, 16LF877 PIC s Datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/30292c.pdf -16F877A PIC Datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/39582b.pdf -74LS126A Quad Tri-State Buffer Datasheet http://www.tranzistoare.ro/datasheets2/97/97398_1.pdf
Page 172
APPENDIX G : BIBLIOGRAPHY
PID vs LQ Control techniques applied to an indoor micro quadrotor http://asl.epfl.ch/aslInternalWeb/ASL/publications/uploadedFiles/330.pdf
Page 173
www.APR2.tk
Page 174