View Full Version : Discussion Low Cost Auto Pilot Using Fma Autopilot And Gps
FAKHREALAM
Aug 24, 2007, 03:43 PM
Hi
I Am Trying To Develop Small Auto Pilot Using Fma Auto Pilot And Gps Receiver Along With Rabbit Rcm3720 For Gps Packet Filtering. Any One Have Any Good Idea How This Will Work Out.
1) Fam Auto Pilot Will Control Pitch And Roll.
2) Rabbit Rcm3720 Will Control Only Rudder servo (PWM), Input
Hedaing Info COMING From Gps Receiver.
3) User Can Turn Off/on Auto Pilot By Using Ch6 On His Transmitter.
4) Speed Contol Will Done By Rcm3270 Using Pwm (to Motor Throtle Servo) By Comparing Against Speed Getting From Gps.
5) Altitude Hold Will Add Later On.
6) Plane Will Hold The Current Heading.
Is Any One Have Any Ideas, For Low Cost Development ?
XJet
Aug 24, 2007, 04:26 PM
The use of an FMA Co-pilot combined with a GPS receiver and some form of simple onboard computer is a fairly common way to create a low-cost autopilot.
One problem you may encounter is getting a good match between the amount of "stability" the co-pilot provides and the amount of rudder authority your flight computer provides.
Too much rudder and you'll zig-zag between waypoints (possibly even going into a tight circle occasionally), too little and you'll find it hard to get around waypoints without using a *huge* "hit-radius".
Have a go though -- I've done it before and it's fun.
FAKHREALAM
Aug 24, 2007, 05:59 PM
The use of an FMA Co-pilot combined with a GPS receiver and some form of simple onboard computer is a fairly common way to create a low-cost autopilot.
One problem you may encounter is getting a good match between the amount of "stability" the co-pilot provides and the amount of rudder authority your flight computer provides.
Too much rudder and you'll zig-zag between waypoints (possibly even going into a tight circle occasionally), too little and you'll find it hard to get around waypoints without using a *huge* "hit-radius".
Have a go though -- I've done it before and it's fun.
Is you tried to mix PWM output to FMA input by adding/decreaing the analog voltage output of FMA co-pilt sensor that goes to main FMA auto pilot unit.
When turn is needed just increase or decrease the roll sensor output voltage (using D/A converter 8 bit). I did not try this approach, I will test it.
FAKHREALAM
Aug 28, 2007, 12:36 AM
Is any one know what is the reationship between surface control gain and air speed. For differnt air speed different surface control gain needed but how much, is any formula available. How often rudder servo need to move to control the heading.
FAKHREALAM
Aug 30, 2007, 06:33 PM
Is any one know what is the reationship between surface control gain and air speed. For differnt air speed different surface control gain needed but how much, is any formula available. How often rudder servo need to move to control the heading.
Today I added rudder gain control, depending on the speed auto pilot is getting from GPS it will select a gain and rudder pwm time will control. The benefit is that
1) If plane is flying at high speed then increase/decrease of rudder surface (rudder servo) will be less.
2) Also add the max angle rudder servo can turn when auto pilot on +/- 45 degrees only.
3) All the servo pwm time is getting showed on 4x20 LCD display.
4) 4X20 line LCD CHAR display show
- CURRENT HEADING
- AUTO PILOT REF HEADING
- CURRENT SPEED
- AUTO PILOT REF SPEED
- CURRENT ALTITUDE
- AUTO PILOT REF ALTITUDE
FAKHREALAM
Sep 02, 2007, 11:32 PM
Here is the snaps of auto pilot, now its attached to a RC Car. Here also some snaps extracted from video clip in July 2001, which I took using video camera. The plane I used was tower trainer 60 ARF.
FAKHREALAM
Sep 04, 2007, 04:20 PM
Here is the simple AUTO PILOT code which is written in c, can run on Rabbit semiconductor RCM3720 board. I will post the updated one as I will move forward.
Its for controlling heading (by moving the rudder servo) and speed control by changing the pulse on time (PWM) of the speed controller (throttle servo can be attached).
Neil Stainton
Sep 04, 2007, 05:43 PM
4) Speed Contol Will Done By Rcm3270 Using Pwm (to Motor Throtle Servo) By Comparing Against Speed Getting From Gps.
I think throttle should be set by the difference between desired ROC/descent and actual ROC/descent, as measured by an altimeter.
Neil.
FAKHREALAM
Sep 07, 2007, 01:15 AM
I Just Made Two Axis Tilt Sensor MESURING BOARD, That Can Be Use To Measure Static Tilt Angle, I Will Try This With My Auto Pilot To Measure Roll And Pitch Along With Fma Sensor.
toxicmouse
Sep 07, 2007, 04:27 AM
thanks for the photos, but i can't see much because the photos are blured.
FAKHREALAM
Sep 07, 2007, 11:04 AM
Here is the IC SENS THERMOPILE W/THERM TO-39 (MLX90247-ESF-DSA) board (4 sensors). I designed it using the different parts. I am working on rf modem for talking to plane and base station, its XECOM 927 MHZ, 500 mw power output, go up to 20 miles range. The cost is only US$ 75.00 per piece which is much less then available in market, please visit www.xecom.com if you interested.
CLONE TO FMA AUTO PILOT SENSOR CIRCUIT.
FAKHREALAM
Sep 09, 2007, 05:02 PM
Here Is The Aerial Snaps Taken Using Manual Still Camera, Receiver Landing Channel Was Used To Activate Standard Servo. Servo Was Used To Press The Camera Click Button. Works good, just need to adjust the servo lever correctly.
JettPilot
Sep 11, 2007, 12:09 PM
Neat project, it would be very useful ! I currently fly something close to this, but yours is better.
One comment I have is that Altitude control would be better to have than speed control. Most RC planes of the UAV type have one most efficient flight speed, changing it only makes things worse, and is not needed. In all my planes, I can set a good throttle position, and it will fly all day. Stalls are not an issue, as the autopilot will not give enough up elevator to stall.
I think altitude hold would be much more useful.
JettPilot
Neil Stainton
Sep 11, 2007, 01:23 PM
That is what I tried to say in post 8 but he ignored me.
Neil.
FAKHREALAM
Sep 11, 2007, 03:04 PM
That is what I tried to say in post 8 but he ignored me.
Neil.
I did not ignore you Neil, you are right but what I was thinking is:
For altitude control, elevator as well as heading speed is also important because if tail wind speed is more then plane speed or so, plane will lose the altitude. What my observation is that, I need to controls both (throtle and elevator to maintain the altitude, head wind and tail wind). In the case of head wind, may be only elevator control is enough for altitude maintaining but for tail wind I think both controls are needed. If I am not correct please correct me, I learn it by flying my 60 size Tower trainer.
Neil Stainton
Sep 12, 2007, 03:40 PM
For altitude control, elevator as well as heading speed is also important because if tail wind speed is more then plane speed or so, plane will lose the altitude. What my observation is that, I need to controls both (throtle and elevator to maintain the altitude, head wind and tail wind). In the case of head wind, may be only elevator control is enough for altitude maintaining but for tail wind I think both controls are needed. If I am not correct please correct me, I learn it by flying my 60 size Tower trainer.
This is all wrong, it is hard to know where to begin to correct you. The plane will fly the same irrespective of its heading vs wind direction. Ground observations that a plane climbs when going upwind and loses altitude when going downwind are either illusory, or caused by the ground based pilot's inability to fly the model at a constant airspeed or angle of attack.
Neil.
FAKHREALAM
Sep 12, 2007, 04:01 PM
This is all wrong, it is hard to know where to begin to correct you. The plane will fly the same irrespective of its heading vs wind direction. Ground observations that a plane climbs when going upwind and loses altitude when going downwind are either illusory, or caused by the ground based pilot's inability to fly the model at a constant airspeed or angle of attack.
Neil.
Just corect me, I am here to get information from you all.
1 ) Let me know when tail wind is more then your ground speed what will happen to the plane in terms of lift (any lift that can keep plane level and not losing any altitude)?.
2) If plane speed (air produce lift ) will equal to head wind what will happens ?.
3) If plane speed (air produce lift ) will less then head wind (is any lift)?.
4) In all three cases is plane fly without losing any altitude or what ?.
5) what factors are important to maintain an altitude.
Neil Stainton
Sep 12, 2007, 04:28 PM
Just corect me, I am here to get information from you all.
a) Correct has two Rs.
b) Please and thank you are customarily used when asking people for help or information.
Neil.
FAKHREALAM
Sep 12, 2007, 04:56 PM
a) Correct has two Rs.
b) Please and thank you are customarily used when asking people for help or information.
Neil.
We are here not for language or spell test, please make sure it. Don't waste your time, not good for all of us. I joined this group to share the information and learn same from you all. Share the information if you have any that can help all of us. Nothing personal please. Seems like we are not on the same page.
dmgoedde
Sep 12, 2007, 05:31 PM
a) Correct has two Rs.
b) Please and thank you are customarily used when asking people for help or information.
Neil.
Neil - Why not focus on the substance of question, not correcting trivial mispelling, and cultural differences that may seem like rudeness (though they are probably not). Why should Falkrealm worry about exact spelling if you and I know what he means? You are under no obligation to reply to a post if you are irritated by it...just don't view it.
Falkrealm - It seems that ground speed is being focused on, given the questions about tailwinds. To simplify, I just go with OK assumption that airspeed (drag) is a function of throttle setting (thrust) because at equilibrium when acceleration stops drag is equal to thrust. Airspeed (not ground speed so much) is important to flight and not stalling, etc... Of course, if plane is headed into wind then quickly turns with the wind then plane can stall. The wind movement equates to a moving reference frame... an equivalent condition in calm wind would be to do very abrupt turn. In practice, if you limit turn rate, then the airplane will never enter in to having tail wind all of a sudden, and has time to adjust.
FAKHREALAM
Sep 12, 2007, 08:06 PM
I am kind of trying to learn it (how plane fly in engineering terms), dmgoedde your post helps to understand it. Thanks for sharing the information in detail. In my last post I was explaining what I saw when
1) I was flying my tower trainer 60 (couple years back), it was a windy day, head wind speed was around 40 MPH, as plane was flying around the same speed. From ground what I saw that plane was flying but kind of no forward motion (acceleration becomes zero). Your post explain it very well.
2) When plane took the turn (kind big turn) and then it fly's in the wind direction, it was starting losing altitude quickly, I have to increase the throttle and elevator both to maintain the altitude. Your last post explain it very well.
dmgoedde
Sep 12, 2007, 09:40 PM
I am kind of trying to learn it (how plane fly in engineering terms), dmgoedde your post helps to understand it. Thanks for sharing the information in detail. In my last post I was explaining what I saw when
1) I was flying my tower trainer 60 (couple years back), it was a windy day, head wind speed was around 40 MPH, as plane was flying around the same speed. From ground what I saw that plane was flying but kind of no forward motion (acceleration becomes zero). Your post explain it very well.
2) When plane took the turn (kind big turn) and then it fly's in the wind direction, it was starting losing altitude quickly, I have to increase the throttle and elevator both to maintain the altitude. Your last post explain it very well.
Yep - I think I understand what you are describing. For your #2 above, my guess is that the turn may have seemed big, but how many seconds did you give it to make the 180 degree turn? The plane would have to change speed by total of 80 mph from in-wind to with-wind directions.
Of course what you saw was more than illusion - the plane really did need more power to not lose altitude. My bet is that the turn was too quick - even though it might have looked slow.
If the wind is a steady 40mph with no gusting, then it is a stable reference frame and as far as the plane is concerned the ground doesn't exist. If a tiny trim offset were put on the rudder or eileron, the plane should make a gently turn without altitude loss. I'm 99% sure I am right - that your turn looked slow, but the perception is skewed because you are on a different reference fram (the ground)
FAKHREALAM
Sep 13, 2007, 01:24 AM
I think plane only took around 5 to 6 seconds to make 180 degree turn (30 degrees/second), which kind of u can say steep turn, seems like that's the clue of losing altitude. I think you are right, I will try to re do the test and then log the data. Thanks dmogoedde for good advice and help.
Moby58
Sep 26, 2007, 03:12 PM
Here Is The Aerial Snaps Taken Using Manual Still Camera, Receiver Landing Channel Was Used To Activate Standard Servo. Servo Was Used To Press The Camera Click Button. Works good, just need to adjust the servo lever correctly.
Looks good. Try this switch for the camera. http://www.dimensionengineering.com/PicoSwitch.htm
I have 2 of em. Only US$20 each. Pull camera apart and solder 2 wires to the shutter switch contacts, then attach em to the relay.
they also do a few other items you may be interested in..
SST32
Sep 26, 2007, 08:55 PM
The plane will fly the same irrespective of its heading vs wind direction. Ground observations that a plane climbs when going upwind and loses altitude when going downwind are either illusory, or caused by the ground based pilot's inability to fly the model at a constant airspeed or angle of attack.
Neil.
Funny, I have watched my planes rise much like an elevator when facing into a headwind, and just about crash when landing with a tailwind......
Guess I should just quit flying altogether and get a job at McDonald's selling burgers with chips.
Moby58
Sep 26, 2007, 10:16 PM
Funny, I have watched my planes rise much like an elevator when facing into a headwind, and just about crash when landing with a tailwind......
Guess I should just quit flying altogether and get a job at McDonald's selling burgers with chips.
I think where some people get confused is with airspeed and ground speed.
Airspeed is the speed of the wing (aircraft) thru the air mass, where ground speed is the speed made good over the ground.
If you have a 20mph wind directly on the nose, and your model needs an airspeed over the wing of 30mph to fly, and you fly with power to give that 30mph, then you are only travelling over the ground at 10 mph.
Likewise, if you fly in the same wind, but with it on the tail, you need to still move thru that mass of air to get 30mph over the wing. That means you would be moving over the ground at 50mph to get 30mph over the wing.
So, one problem people have is when flying downwind, especially on a windy day. They think 'this is going way too fast' and reduce power. as they reduce power (because the ground speed is too much), they reduce their airspeed also, the model doesnt produce the same lift, and descends.
Same as when landing down wind. The pilot thinks he is coming in too 'hot', pulls power, loses airspeed and sinks.
Generally, of full size aircraft, you set your controls for the approach, and adjust your sink rate via power settings. Want to descend, reduce power. Want to climb, increase power.
Most of us in models reduce the power, and fly via the elevator, and only add power if gonna land short.
Also, why you 'sink' when turning downwind. Turn sharp, strong tailwind, need to accelerate up to flying speed (airspeed). If model doesnt accelerate quick enough, you will start to sink for the time it takes to build up airspeed again.
Now, if on a perfect still day, the best ground speed your model can do is 40mph (which would also equal the best airspeed), dont try to fly into a 50mph head wind. You will fly backward :-)
ridefst
Sep 26, 2007, 10:36 PM
Funny, I have watched my planes rise much like an elevator when facing into a headwind, and just about crash when landing with a tailwind......
Guess I should just quit flying altogether and get a job at McDonald's selling burgers with chips.
Maybe Neil was a little more condescending than need be; but he's still right.
Groundspeed doesn't matter to the airplane; airspeed is the only variable.
When in a headwind, you perceived the plane to be moving quite slowly in relation to the ground, so you were surprised to see it climb so easily; however the airplane was actually moving quite rapidly in relation to the air moving over it's wings, giving you a climb rate that you would expect to see at a much higher perceived ground speed on a calm day.
When landing with a tailwind, you are attempting to (nearly) bring the groundspeed below the airspeed; which would result in zero or even negative airspeed relative to the airplane; this obviously would give you the lift characteristics of your average paving brick.
To give an example, imagine landing an airplane that you normally land at 10mph in a 10mph tailwind. To get the lift that you usually have, you will have to travel 10mph faster than the air; putting you at 20mph groundspeed.
Without considering the wind, you will cut throttle to slow down to your customary 10mph groundspeed, only to find out that you are traveling the same speed as the air; hence, zero lift and your airplane drops like a rock.
edit: guess Moby58 typed faster than I...
Moby58
Sep 26, 2007, 10:51 PM
edit: guess Moby58 typed faster than I...
Ahh, these two little fat fingers can dance over the keyboard when they wanna :-)
FAKHREALAM
Sep 27, 2007, 03:48 PM
I just updated my firmware for MSP430F1232 which is used to detect the tilt angle and convert FMA sensor analog outputs to digital and then analog (DAC) to feed back to FMA AUTOPILOT computer.
This unit is doing all this for
1) convert FMA sensor signal to digital (10 bit ADC).
2) initialize and convert tilt sensor analog output to digital (10 bit ADC).
3) convert both FMA sensor output and tilt sensor output to GPS kind of packet and send it to main controller rabbit RCM3720 dev board for data logging and control.
/* TEST STRING FOR TILT SENSOR AND FMA SENSOR PACKET */
unsigned char test_fma_sensor_string [] = "$GPGFMA,X,512,Y,1023";
unsigned char test_tilt_sensor_string [] = "$GPGTLT,X,212,Y,424";
4) convert FMA sensor output back to analog (8 bit DAC) and send it to FMA computer unit.
The purpose of all this is to monitor the FMA sensor output and tilt sensor output as well and this unit can control the FMA sensor output (DAC) by receiving the command from rabbit RCM3720 controller. The controller have GPS input, tilt sensor input/FMA sensor input (this unit). The main RCM3720 is doing all the calculation.
I am in processing of writing the code for this unit to accept serial command from RCM3720 on serial port to change the elevator position and rudder position by changing the analog voltage (feed using 8 bit DAC). By doing this FMA computer unit will think that plane orientation is change and it will increase/decrease the rudder/elevator servo PWM on time.
I will update you all as project go forward. Receiving the SD micro flash card by weekend to store the test data.
FAKHREALAM
Sep 29, 2007, 05:41 PM
Moby58
Registered User
Looks good. Try this switch for the camera. http://www.dimensionengineering.com/PicoSwitch.htm
Fakhre Alam
Its kind of neat web site.
FAKHREALAM
Sep 29, 2007, 05:46 PM
Originally Posted by SST32
Funny, I have watched my planes rise much like an elevator when facing into a headwind, and just about crash when landing with a tailwind......
Guess I should just quit flying altogether and get a job at McDonald's selling burgers with chips.
Fakhre Alam
I kind of agree with you but I don't have test data to prove it.
FAKHREALAM
Oct 01, 2007, 03:58 PM
Here Is The Data From Sensor Board That Have Tilt Sensor And Fma Sensor.
FAKHREALAM
Oct 06, 2007, 05:29 PM
Here is the link how to calculate Barometric pressure and altitude.
http://chemistry.umeche.maine.edu/~amar/fall2004/barometans.html
I just posted the information for easy to use.
What is the partial pressure of oxygen at the top of Pike's Peak (14,500 feet) (T=10°C)?
First we need to assemble all of the data to insert into the barometric formula:
We proceed as before except that we use the total pressure formula with the average mass
Ptot,avg(h) = Ptot(0)e-Mavggh/RT becomes Ptot,avg(h) = Ptot(0)e-Mavggh/RT
Ptot(0) = 760 torr
Mavg= 0.02880 kg/mole
R = 8.3145 J/mol.K
T= 10°C = 283.15 K
g = 9.81 m/s2
h= 14,500 ft x (12in/ft) x (2.54 cm/in) x (1m/100cm) = 4,420 m
Now Mavggh/RT = (0.02880 kg/mole)(9.81 m/s2)(4,420 m)/(8.3145 J/mol.K)(283.15 K)
= 0.5304
So e-Mavggh/RT= e-0.5304= 0.5884
Finally, Ptot(h) = Ptot(0)e-Mavggh/RT =760 torr x 0.5884 = 447 torr.
760 torr = 101.325 Kpa.
1 torr = 0.1333 Kpa.
There is couple of sesnor available for digikey or other sources, like these ones.
1) SCC15A (0 to 15 PSI)
2) MPX4100A (2.2 to 15.2 PSI)
3) SCP1000 (Barometric Pressure Sensor MEMs - SCP1000-D01)
http://www.sparkfun.com/commerce/product_info.php?products_id=8161
http://www.sparkfun.com/commerce/product_info.php?products_id=8128
http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=551-1046-1-ND ($20.30)
I am trying to get one SCP1000 , for accurate measurement of altitude we need both pressure and temperature.
Mavg= 0.02880 kg/mole
R = 8.3145 J/mol.K
T= 10°C = 283.15 K (273 K + current temperature in C)
g = 9.81 m/s2
h (height in meters) = (RT/Mavg g) * ln (Ph/Po) (pressure at current altitude/pressure at sea level)
I will try to use this formaula, I checked it manually, works good. I will write program in C language that can take current pressure and temperaure and input and gives altitude as output.
FAKHREALAM
Oct 08, 2007, 01:06 AM
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define Gravity 9.81
#define Temperatre_in_K 273.15
#define R_CONST 8.3145
#define M_avg 0.02880
#define Pressure_at_sea_level 760 /* unit is torr */
/* temperature in centigrade*/
/* current_pressure in torr */
/* 760 torr = 101.325kPa*/
/* 1 torr = 0.1333 kPa */
long int altitude_value (unsigned char temperature, float current_pressure)
{
double height;
/* height = (((R * T)/ (M_avg * Gravity)) * ln (Ph/Po) */
height = (R_CONST * (Temperatre_in_K + temperature))/(M_avg * Gravity);
height = height * log(current_pressure/Pressure_at_sea_level);
/* convert to positive number */
height = 0 - height;
return (long int)height;
}
void main (void)
{
printf("altitude = %d meters\n",
altitude_value(10, 656.53));
getche();
}
d_wheel
Oct 08, 2007, 09:41 AM
I did not ignore you Neil, you are right but what I was thinking is:
For altitude control, elevator as well as heading speed is also important because if tail wind speed is more then plane speed or so, plane will lose the altitude. What my observation is that, I need to controls both (throtle and elevator to maintain the altitude, head wind and tail wind). In the case of head wind, may be only elevator control is enough for altitude maintaining but for tail wind I think both controls are needed. If I am not correct please correct me, I learn it by flying my 60 size Tower trainer.
More on how wind affects flight:
http://www.djaerotech.com/dj_askjd/dj_questions/downwind.html
So, if making a coordinated turn, the airplane has no way of knowing that the wind is blowing. Whether flying upwind or downwind, it makes absolutely no difference.
I have found that another important thing to consider in an autopilot is a turn rate control of some kind. If the turn rate is kept below 15 degrees per second, the airplane is less likely to overshoot the desired heading during a turn, or oscillate left and right while flying to the target. A simple rate gyro can be used for this purpose. Mount it to sense yaw and use the output to control turn rate. The same gyro can be used as a simple wing leveler. If the airplane is turning when it is supposed to be flying straight, the gyro will output this fact. Use it's output to roll the ailerons in the desired direction until no yaw is sensed and the wings will be level.
Also, if you are going to use the elevator to control altitude, you will have to incorporate a climb/descend rate control. I have found that 100 feet/minute is a good rate to shoot for with most models. This will have to be software based and should be the primary control loop for altitude. In other words, if you want to climb, you tell the climb/descend loop what the new altitude will be. The loop then slowly adds up elevator until the desired climb rate is obtained, and then holds this rate until the desired altitude is reached. Without this, the aircraft will oscillate up and down. Elevator movement will have to be limited to a very small amount, usually about the same as your radio moves it for full up and down TRIM. This will also aid in reducing up and down oscillation.
Later;
D.W.
FAKHREALAM
Oct 08, 2007, 03:14 PM
[QUOTE=d_wheel]More on how wind affects flight:
http://www.djaerotech.com/dj_askjd/dj_questions/downwind.html
So, if making a coordinated turn, the airplane has no way of knowing that the wind is blowing. Whether flying upwind or downwind, it makes absolutely no difference.
FAKHRE ALAM
I am in process of building software piece by piece, I will add that feature too, kind of not getting enough time due some other higher priority engagement. Thanks for the good advice and suggestion. I will look into that also.
FAKHREALAM
Oct 08, 2007, 03:49 PM
/* function will return altitude both in meters and in feets */
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define Gravity 9.81
#define Temperatre_in_K 273.15
#define R_CONST 8.3145
#define M_avg 0.02880
#define Pressure_at_sea_level 760 /* unit is torr */
#define Pressure_at_sea_level_kPa 101.325 /* unit is torr */
/* temperature in centigrade*/
/* current_pressure in torr */
/* 760 torr = 101.325kPa*/
/* 1 torr = 0.1333 kPa */
/* 1 kPa = 7.5006168 torr */
/* temperature in centigrade*/
/* current_pressure in kPa */
long int altitude_value_feets (unsigned char temp_centi, double cur_press_kPa)
{
double height;
float temp_pressure;
/* convert from kPa to torr */
temp_pressure = cur_press_kPa * 7.5006168;
/* height = (((R * T)/ (M_avg * Gravity)) * ln (Ph/Po) */
height = (R_CONST * (Temperatre_in_K + temp_centi))/(M_avg * Gravity);
height = height * log(temp_pressure/Pressure_at_sea_level);
/* convert into positive number */
height = 0 - height;
/* convert into feets */
height = height * 100/(2.54 * 12);
return (long int)height;
}
/* temperature in centigrade*/
/* current_pressure in torr */
long int altitude_value (unsigned char temperature, float current_pressure)
{
double height;
/* height = (((R * T)/ (M_avg * Gravity)) * ln (Ph/Po) */
height = (R_CONST * (Temperatre_in_K + temperature))/(M_avg * Gravity);
height = height * log(current_pressure/Pressure_at_sea_level);
/* convert into positive number */
height = 0 - height;
return (long int)height;
}
void main (void)
{
/* pressure in torr */
/* temperature in centigrade */
printf("altitude = %d meters\n",
altitude_value(10, 447));
/* pressure in kPa */
/* temperature in centigrade */
printf("altitude = %d feets\n",
altitude_value_feets(10, 59.5851));
getche();
}
FAKHREALAM
Nov 06, 2007, 07:01 PM
Here is the formula to solve for lat2 and lon2 by knowing bearing, distance and lat1, lon1. By using this anyone can calculate a new route (semi-circle or square, any shape).
double lat1, lat2, lon1, lon2, temp1, temp2, radian_value, bearing, temp3, temp4;
double t1, t2, t3, t4, t5;
float distance;
double lat2_test, lat1_test, test_bearing, test_distance;
double lon2_test, temp_variable;
#define CONV1 57.2958
/* function to calclate lat2 using known bearing, lat1, lon1 and d */
/* d = test_distance = distance b/w two points in radians */
/* test_bearing = bearing b/w two points */
test_bearing = calculate_bearing(gps_loc1, gps_loc2);
printf("bearing in deg = %f\n", test_bearing);
test_bearing = test_bearing/CONV1; /* convert in radians */
lat2_test = asin(cos(test_bearing) * cos(lat1_test) *
sin(test_distance) + sin(lat1_test) * cos (test_distance));
printf("lat2_test = %f in radian\n", lat2_test);
printf("lat2_test = %f\n", lat2_test * CONV1);
/* function to calclate lon2 using known bearing, lat1, lon1 and d and */
lon2_test = lon1 + atan2(sin(test_bearing)*
sin(test_distance*CONV1/6378.7)*cos(lat1),
cos(test_distance*CONV1/6378.7) - sin(lat1)*sin(lat2_test));
printf("lon2_test = %f in radian\n", lon2_test);
printf("lon2_test = %f\n", lon2_test * CONV1);
LukeZ
Nov 07, 2007, 01:48 AM
Fakhrealam, you're doing really good. Looks to me like you really have a good understanding of the altitude stuff. Your code and approach is quite similar to the one I took, which you may be interested to look over. I don't think you will find anything new I just thought it was interesting you were doing the same thing.
Kansas Flyer - Altitude (http://www.kansasflyer.org/index.asp?nav=Avi&sec=Alti&tab=Theory).
Luke
raven46
Nov 08, 2007, 12:07 PM
Hello FAKHREALAM, and all you Gurus out there. Consider me your humble student. I want to learn. Thanks :)
FredericG
Nov 08, 2007, 03:01 PM
Hi FAKHREALAM,
Just discovered this thread. I have been working on something similar. What you are doing and this thread holds valuable information. I will read it in more detail.
Beginning this year I started an OSD project and, in the margin, I wanted to have a rudder-home functionality, so that the plane can turn towards the pilot in case of any problem.
I also use an FMA copilot to stabilize the plane and use the rudder to control the heading. I did not want to make hardware and used a of-the-shelf OSD platform with just a small PIC. I do the GPS calculations without floating point or arithmetic function support. Because the limited program memory I could not use a more complex algorithm than a simple P-regulator. It works most of the time but it is far from perfect. Because of the position of the wind and the calibration of the copilot, the influence of the sudder varies. In some extremes the plane does not turn completely or there is serious overshoot. Another problem is the latency on the GPS data.
Eladio made a PCB for me and have now more place. The project has stalled but during this winter I will continue.
Here you can find a summary of my project: http://www.rcgroups.com/forums/member.php?u=14137
Here is a small move (very bad quality unfortunately) of my first test with the rudder home: http://www.rc-flight.be/temp/rudder_home.wmv
I will experiment with a PI(D) regulator and probably steer the copilot and no longer the rudder.
Frederic
FAKHREALAM
Nov 08, 2007, 06:32 PM
Fakhrealam, you're doing really good. Looks to me like you really have a good understanding of the altitude stuff. Your code and approach is quite similar to the one I took, which you may be interested to look over. I don't think you will find anything new I just thought it was interesting you were doing the same thing.
Luke
[Fakhre Alam]: I checked the information, seems to me very informative page, thanks for link.
FAKHREALAM
Nov 08, 2007, 06:36 PM
Hello FAKHREALAM, and all you Gurus out there. Consider me your humble student. I want to learn. Thanks :)
[Fakhre Alam]: I am also learning from all of you, just trying to share the infomation about this project to all of you.
FAKHREALAM
Nov 08, 2007, 06:46 PM
Hi FAKHREALAM,
Just discovered this thread. I have been working on something similar. What you are doing and this thread holds valuable information. I will read it in more detail.
Frederic
[Fakhre Alam]: Same here, I get stuck in winter, kind of little bit snow, its not good for flying outside when teperature is around 40 to 50 degree F. Are u able to fly your plane with return to home option, let me know what is the progress. I saw your video kind of seems good, is you tanken it by on board camera of by wireless. Where I am living its around 4700 feet, electric does not fly good here, GAS one are the only option, with-in city GAS plane are not allowed by law. Just working on project slowly. Thanks a lot for the thread, I will go through all the posting and will see your information will help me to get this project going on. FMA auto pilot will not work on snow due to thermopile sensors array.
raven46
Nov 09, 2007, 06:37 AM
[Fakhre Alam]: I am also learning from all of you, just trying to share the infomation about this project to all of you.
I have just jointed this forum, and have seen quite a lot of atemps to get a plane in Auto-Pilot mode.
1st. Question: Did you successfully get your plane in Auto-Pilot? :rolleyes:
2nd. Question: Do we need any thing else to completely have a Auto-Pilot System? :rolleyes:
3rd. Question: What about the heart of all this. Is the programming code difficult to get everything to work? What microprocessor did you use? :rolleyes:
What programming language? :rolleyes:
Is it possible to do a basic fluxogram so that we can better understand the complete programming code (maybe comment on some specific routines/functions/procedures etc) ... I myself just have VB experience :rolleyes:
Thank in advance. :)
FredericG
Nov 09, 2007, 06:51 AM
[Fakhre Alam]: Same here, I get stuck in winter, kind of little bit snow, its not good for flying outside when teperature is around 40 to 50 degree F. Actually, it's the other way around :) My project stalled in the beginning of the summer because it is more fun flying than coding. Anyhow, for me the rudder-home is just a failsafe not the most essentiual part of the project; the most essential part is that I always see how far I am from home and in which direction i need to fly to get back.
Are u able to fly your plane with return to home option, The rudder-home can be activated with a switch on the transmitter. In this case I can control the plane but the rudder is driven by the system. When I loose contact (or switch off my radio), the failsafe of the receiver is configured as if the switch is set. I use the switch for testing and alos when I am far away and coming back; this way the plane flies by itself and holds the correct direction.
I saw your video kind of seems good, is you tanken it by on board camera of by wireless. This was a project for FPV; the video is sent to the ground and I fly with goggles. I use the copilot mainly because it makes flying easier; the plane flies as in a video-game. That this helps making a simple rudder-home is a bonus.
Frederic
FAKHREALAM
Dec 09, 2007, 05:23 PM
Due to winter project progress in slow, can not fly 60 size GAS plane due to snow. I am working on OSD GPS overlay board using MAX7546, getting required parts from digikey and maxim.
Just want to update all, MAX7546 can be programmed using SPI interface. Chip is kind of little bit expensive around US$18.00. Here is the link to data sheet and snap of my OSD board which is not complete yet.
http://datasheets.maxim-ic.com/en/ds/MAX7456.pdf
FAKHREALAM
Dec 15, 2007, 03:02 PM
Max7456 Board With All The Parts Are Reday For Programming.
Programmed MAX7456, working one (12/24/2007).
FredericG
Dec 15, 2007, 04:14 PM
You plan on putting the chip together with a CPU on a PCB?
zik
Dec 15, 2007, 04:53 PM
Nice project. I'll be interested to see how it goes.
FAKHREALAM
Dec 17, 2007, 03:21 PM
You plan on putting the chip together with a CPU on a PCB?
I have plans for two kind of releases.
1) Just MAX7456 chip with all supporting parts for SPI interface, so anyone who knows the programming can use this board and do what ever he wants. I will share my software lib (its all written in C) too, so it will really easy.
2) MAX7456 with CPU, that will accept serial GPS data as input and will display heading, altitude, lat, lon and time. The board will also have an option to accept user data. User need to specify the line number along with text data, format will be same as GPS sentence.
I am open to all for good ideas.
Fakhre Alam
FAKHREALAM
Dec 20, 2007, 10:54 AM
Here Is Working Osd With Color Background. I Will Add Some Other Data Next Week.
Fakhre Alam
FAKHREALAM
Dec 24, 2007, 06:57 PM
Here Is Max7456 Programmed Chip output, You Can See Osd Messages On Screen.
I Am Woking On Pcb That Can Have Ony Max7456 With All Parts Rqequired Along With Spi Interface. The Serial Interface One Will Take Some Time.
Fakhre Alam
FAKHREALAM
Dec 25, 2007, 11:38 PM
I have just jointed this forum, and have seen quite a lot of atemps to get a plane in Auto-Pilot mode.
Thank in advance. :)
1st. Question: Did you successfully get your plane in Auto-Pilot? :rolleyes:
A. I flown it with heading and altitude control, kind of get crashed in 2001 due to too much weight. I had wireless video cam on board too. The snap is from that plane.
2nd. Question: Do we need any thing else to completely have a Auto-Pilot System? :rolleyes:
A. Some people use FMA sensors or thermopile sesnor, pressure sensor for altitude and GPS for heading and location along with accelerometer and gyros.
3rd. Question: What about the heart of all this. Is the programming code difficult to get everything to work? What microprocessor did you use? :rolleyes:
What programming language? :rolleyes:
A. Its all up to you you can use any language you are good in it. I am using C language it kind of good and powerful language. Heart is a good and powerful processor and good control loop.
Due to snow I am not able to fly my RC plane, out side is windy too. Kind of writing ON SCREEN DISPLAY code for MAX7456 , that will display GPS data along with video signal coming from camera and video coming from on board wireless camera.
Fakhre Alam
FAKHREALAM
Jan 23, 2008, 08:11 PM
PCB for MAX7456 OSD chip with SPI interface.
FAKHREALAM
Feb 16, 2008, 11:27 AM
MAX7456 OSD board with LPC2106 to program MAX7456 chip.
FAKHREALAM
Feb 28, 2008, 10:05 AM
HERE IS THE LNIK FOR LPC2106 LOW COST BORAD. FDI IS PROVIDING THE WHOLE SET (PROGRAMMER + DEV BOARD IN AROUND US$ 25 ). ITS A POWERFUL MICROCONTROLLER, CLOCK IS AROUND 60 MHZ WHEN PLL IS ON. IAR IS PROVIDNG 32 KB IDE FOR FREE, ITS EASY TO USE.
IAR KickStart Kit for LPC2106
(Part Number: KSDK-LPC2106-PLUS)
KickStart edition of IAR Embedded Workbench for ARM
The kickstart edition of IAR Embedded Workbench is completely free of charge and you may use it for as long as you want. The kickstart tools are ideal for creating small applications or for getting started fast on a new project. The only requirement is that you register to get a license key.
Code size
The code size limit is 32KB for all supported ARM-based devices.
http://www.teamfdi.com/USBDongle/usb-dongle.shtml
http://www.teamfdi.com/USBDongle/usb-dongle.shtml#USB-Dongle%20and%20Derivate%20Board%20Family
http://www.teamfdi.com/USBDongle/files/schematics/DB-LQFP48_2P1_SCH.pdf
The following list shows specific products currently in stock at Digi-Key.
http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=622-1016-ND
http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=622-1019-ND
FDI P/N
Description
Digi-Key P/N
Price
USB-DONGLE
USB-Dongle, Rev 3
622-1007-ND
$17.00
DB-HVSON10-LPC9103
DB-HVSON10-LPC9103, with LPC9103 loaded, Rev 1
622-1008-ND
$5.00
DB-DIP8-LPC901
DB-DIP8-LPC901, with LPC901 loaded, Rev 1
622-1009-ND
$5.00
DB-SO8-LPC908
DB-SO8-LPC908, with LPC908 loaded, Rev 1
TBD
$5.00
DB-TSSOP-LPC9107
DB-TSSOP-LPC9107, with LPC9107 loaded, Rev 1
TBD
$6.00
DB-TSSOP-LPC915
DB-TSSOP-LPC915, with LPC915 loaded, Rev 1
TBD
$6.00
DB-TSSOP-LPC917
DB-TSSOP-LPC917, with LPC917 loaded, Rev 1
TBD
$6.00
DB-TSSOP-LPC922
DB-TSSOP-LPC922, with LPC922 loaded, Rev 1
622-1010-ND
$6.00
DB-TSSOP-LPC925
DB-TSSOP-LPC925, with LPC925 loaded, Rev 1
TBD
$6.00
DB-TSSOP-LPC932
DB-TSSOP-LPC932, with LPC932 loaded, Rev 1
TBD
$6.00
DB-TSSOP-LPC938
DB-TSSOP-LPC938, with LPC938 loaded, Rev 1
622-1011-ND
$6.00
DB-PLCC44-LPC952
DB-PLCC44-LPC952, with P89LPC952FA loaded, Rev 1
TBD
$7.50
DB-TQFP44-89V52X2
DB-TQFP44-89V52X2, with P89V52X2 loaded, Rev 1
622-1012-ND
$7.50
DB-LQFP48-LPC2103
DB-LQFP48-LPC2103, with LPC2103 loaded, Rev 2.1
622-1013-ND
$7.50
DB-LQFP48-LPC2106
DB-LQFP48-LPC2106, with LPC2106 loaded, Rev 2.1
TBD
$10.00
DB-TSSOP-SKT
DB-TSSOP-SKT, Rev 1, 28 pin ZIF TSSOP socket loaded, supports 14 - 28 pin LPC9xxx devices
622-1014-ND
$49.00
DB-PLCC44-SKT
DB-PLCC44-SKT, Rev 2, 44 pin ZIF PLCC socket loaded
TBD
$49.00
FAKHRE ALAM
kbosak
Feb 28, 2008, 11:34 AM
LPC2106 is panifully slow at PIN operations (7 cycles to lit a bit, 3.5MHz max pin switching frequency with 60MHz core reported in Polish mag Elektronika Praktyczna one year ago).
Get LPC2148 LQFP64 0.5mm pitch from any supplier and solder it to QFP64 adapter by www.futurlec.com.
FAKHREALAM
Feb 28, 2008, 03:29 PM
LPC2106 is panifully slow at PIN operations (7 cycles to lit a bit, 3.5MHz max pin switching frequency with 60MHz core reported in Polish mag Elektronika Praktyczna one year ago).
Get LPC2148 LQFP64 0.5mm pitch from any supplier and solder it to QFP64 adapter by www.futurlec.com.
Thanks for advice and the link. LPC2148 have some additional features to LCP2106 but in term if speed I/O and CPU max clock it seems same to me. I am starting with LPC2106 because I have the dev board and IAR free 32 KB IDE. LPC2148 is a good option (just want to use what I have), check for future need.
In terms of CPU clock and crystal both seems same to me. I am not sure about PIN I/O.
LPC2106
• On-chip crystal oscillator with an operating range of 10 MHz to 25 MHz.
• On-chip PLL allows CPU operation up to the maximum CPU rate. May be used over the entire crystal operating range.
• CPU operating range up to 60 MHz.
LPC2148 (USB, ADC and DAC is not present in LPC2106)
• USB 2.0 Full-speed compliant device controller with 2 kB of endpoint RAM In addition, the LPC2146/48 provides 8 kB of on-chip RAM accessible to USB by DMA.
• One or two (LPC2141/42 vs, LPC2144/46/48) 10-bit ADCs provide a total of 6/14 analog inputs, with conversion times as low as 2.44 us per channel
Single 10-bit DAC provides variable analog output (LPC2142/44/46/48 only).
• 60 MHz maximum CPU clock available from programmable on-chip PLL with settling time of 100 us.
• On-chip integrated oscillator operates with an external crystal from 1 MHz to 25 MHz.
Thanks for the information.
Fakhre Alam
FAKHREALAM
Mar 01, 2008, 10:47 AM
Here Is The Pcb Layout Along With Osd Screen With Live Gps Data Feed. I Will Post The Osd Block Diagram Later On.
Here is low cost sockets from future.
http://www.futurlec.com/SMD_Adapters.shtml
Fakhre Alam
FAKHREALAM
Mar 01, 2008, 05:40 PM
Here is the link to OSD test video.
http://youtube.com/watch?v=RTPLH7UWspw
Fakhre Alam
FAKHREALAM
Mar 06, 2008, 12:38 AM
Here Is My 1st Max7456 Osd Home Made Pcb.
kbosak
Mar 06, 2008, 04:12 PM
"LPC2148 have some additional features to LCP2106 but in term if speed I/O and CPU max clock it seems same to me."
It is not written in bold text that LCP2106 is slow while 2148 is fast. Such things are not writen in datasheets.
LPC2148 has FIO (fast io) registers hooking pins to special high-speed bus, I don't see such registers in LPC2106, but I may be wrong.
LPC2148 has also lof IO registers that give legacy-slow pin access time (intentional, for compatibility).
FAKHREALAM
Mar 06, 2008, 07:02 PM
[QUOTE=kbosak]
LPC2148 has FIO (fast io) registers hooking pins to special high-speed bus, I don't see such registers in LPC2106, but I may be wrong.
LPC2148 has also lof IO registers that give legacy-slow pin access time (intentional, for compatibility).
Fakhre Alam:
YOU ARE RIGHT, PIN I/O OF LPC2148 IS FASTER BECAUSE ITS DIRECTLY CONNECTED TO ARM7 LOCAL BUS BUT
IN THE CASE OF LPC2106 ITS CONNECTED VIA BRIDGE (WHICH IS SLOWER, DUE TO TRANSLATION OF BUS).
THANKS FOR THAT DETAIL, ITS WAS VERY HELPFUL TO FIGURE OUT WHY LPC2106 IS SLOWER. FOR MY APP (GPS, TEXT, VIDEO OVERLAY)
LPC2103/LPC2106 IS MORE THEN WHAT IS REQUIRED. MAY BE I WILL CONSIDER LPC2148 FOR MY AUTO-PILOT PROJECT.
FAKHREALAM
Mar 07, 2008, 10:46 AM
Here Is Complete Max7456 Osd With Iar Lp2106 Dev Board And Gps Live Feed.
zik
Mar 08, 2008, 07:37 AM
Nice work you're doing there Fakhre!
FAKHREALAM
Mar 08, 2008, 05:37 PM
Nice work you're doing there Fakhre!
I am making final PCB with silk layer then I will share the files with all of u . So we all can use this board and program it using SPI protocol as per our needs.
Fakhre Alam
FAKHREALAM
Mar 08, 2008, 06:16 PM
Here is my TOWER HOBBY TRAINER 60 VP VIDEO, its was recorded in MAY 2001 by using X10 video cam. Its not very good, I used receiver CH6 for tilt servo movement.
http://www.youtube.com/watch?v=lB7Gj6IIo-s&feature=RecentlyWatched&page=1&t=t&f=b
http://www.youtube.com/watch?v=OOcEWTCfhyE
Fakhre Alam
FAKHREALAM
Mar 12, 2008, 03:51 PM
Here is a PID code implementation in c. Its a temp version but works.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define MAX_TOTAL_ERROR_LIMIT 30000
#define MIN_TOTAL_ERROR_LIMIT 100
#define DEFAULT_TOTAL_VALUE 15000
#define DEFAULT_KP_VALUE 5
#define DEFAULT_KD_VALUE 2
#define DEFAULT_KI_VALUE 1
#define DEFUALT_INCREMENT 500
/* ERROR STRUCT */
typedef struct
{
int total_error;
int error_proportional;
unsigned char Kp;
int error_deri_vative;
unsigned char Kd;
int error_integral;
unsigned char Ki;
unsigned int current_value;
unsigned int reference_value;
unsigned char reading_updated; /* flag set when new data is copied */
unsigned char error_data_ready; /* flag set when error get processed */
int ed_last_error;
}My_PID;
My_PID altitude_pid;
void init_pid_struct (void)
{
altitude_pid.total_error = DEFAULT_TOTAL_VALUE;
altitude_pid.error_proportional = 0;
altitude_pid.Kp = DEFAULT_KP_VALUE;
altitude_pid.error_deri_vative = 0;
altitude_pid.Kd = DEFAULT_KD_VALUE;
altitude_pid.error_integral = DEFAULT_TOTAL_VALUE;
altitude_pid.Ki = DEFAULT_KI_VALUE;
altitude_pid.current_value = 9;
altitude_pid.reference_value = 20;
altitude_pid.reading_updated = 0;
altitude_pid.error_data_ready = 0;
altitude_pid.ed_last_error = 0;
}
void show_current_heading_with_bar (unsigned int heading)
{
const char string_heading_value_bar[] = "0 ------------------------------------- 360\0";
char temp_buffer[50];
unsigned int bar_number;
strcpy(temp_buffer, string_heading_value_bar);
if (heading >= 0 && heading <= 360)
{
bar_number = heading/10;
temp_buffer[bar_number + 1] = 'I';
}
else
{
temp_buffer[5] = 'E';
temp_buffer[6] = 'r';
temp_buffer[7] = 'r';
}
printf("\n%s\n", temp_buffer);
}
void calculate_pid_error (My_PID *ptr)
{
int temp, temp1;
temp = ptr->error_integral;
ptr->error_proportional = ptr->reference_value - ptr->current_value;
ptr->error_deri_vative = ptr->reference_value - ptr->current_value;
ptr->error_integral = ptr->reference_value - ptr->current_value;
if (ptr->error_deri_vative > 0)
temp1 = ptr->error_deri_vative - ptr->ed_last_error;
if (ptr->error_deri_vative < 0)
temp1 = ptr->ed_last_error - ptr->error_deri_vative;
if (ptr->error_deri_vative == 0)
{
temp1 = 0;
ptr->ed_last_error = 0;
}
else
/* store the current error for next processing */
ptr->ed_last_error = ptr->error_proportional;
ptr->error_deri_vative = temp1;
ptr->total_error =
(ptr->error_proportional * ptr->Kp) +
(ptr->error_deri_vative * ptr->Kd) +
(ptr->error_integral * ptr->Ki) + temp;
/* add up the integral error */
ptr->error_integral = ptr->error_integral + temp;
if (ptr->error_integral >= MAX_TOTAL_ERROR_LIMIT)
ptr->error_integral = MAX_TOTAL_ERROR_LIMIT;
if (ptr->error_integral <= MIN_TOTAL_ERROR_LIMIT)
ptr->error_integral = MIN_TOTAL_ERROR_LIMIT;
if (ptr->total_error >= MAX_TOTAL_ERROR_LIMIT)
ptr->total_error = MAX_TOTAL_ERROR_LIMIT;
if (ptr->total_error <= MIN_TOTAL_ERROR_LIMIT)
ptr->total_error = MIN_TOTAL_ERROR_LIMIT;
printf("ptr->total_error = %d\n", ptr->total_error);
}
void print_pid_error_values (My_PID *ptr1)
{
printf("ptr1->error_integral = %d\n", ptr1->error_integral);
printf("ptr1->error_proportional = %d\n", ptr1->error_proportional);
printf("ptr1->error_deri_vative = %d\n", ptr1->error_deri_vative);
printf("ptr1->total_error = %d\n", ptr1->total_error);
printf("ptr1->ed_last_error = %d\n", ptr1->ed_last_error);
printf("ptr1->current_value = %d\n", ptr1->current_value);
printf("ptr1->reference_value = %d\n", ptr1->reference_value);
printf("\n");
}
void main (void)
{
int count,c, temp1;
init_pid_struct();
printf("test 1, ref_value > cur_value \n");
for (count = 11; count < 40; count++)
{
calculate_pid_error(&altitude_pid);
print_pid_error_values(&altitude_pid);
/* scale the value */
temp1 = (float)((float)altitude_pid.total_error/MAX_TOTAL_ERROR_LIMIT) * 100* 3.6;
printf("scale error value = %d, 0 = min, 360 = max\n", temp1);
show_current_heading_with_bar(temp1);
printf("\nPress any Key\n");
c = getch();
altitude_pid.reference_value = count ;
altitude_pid.reference_value = altitude_pid.reference_value + DEFUALT_INCREMENT;
}
init_pid_struct();
printf("\n\ntest 2, ref_value < cur_value \n\n");
for (count = 11; count < 40; count++)
{
calculate_pid_error(&altitude_pid);
print_pid_error_values(&altitude_pid);
/* scale the value */
temp1 = (float)((float)altitude_pid.total_error/MAX_TOTAL_ERROR_LIMIT) * 100* 3.6;
printf("scale error value = %d, 0 = min, 360 = max\n", temp1);
show_current_heading_with_bar(temp1);
printf("\nPress any Key\n");
c = getch();
altitude_pid.current_value = count ;
altitude_pid.current_value = altitude_pid.current_value + DEFUALT_INCREMENT;
}
printf("test program2\n");
}
FAKHREALAM
Mar 21, 2008, 03:13 PM
Here is few links for
PCB MANUFACTURING
www.pcbcart.com
SMD REFLOW AND MCU BOARDS
http://www.thesiliconhorizon.com/
PCB/SMD STENCIL
www.SMTstencil.com.
(702) 262-6648
www.pololu.com
Getting one 7" x 5" stencil would cost $56; we could do 11 copies for
$300. Depending on the design, the quantity price could be
lower. In any case, Priority Mail through the post office would add $5.
I am sharing it to every one that may be some of you need it.
Fakhre Alam
treehog
Mar 22, 2008, 05:02 AM
I keep monitoring this thread along with others before I launch into a similar project
Thanks keep up the good work
I would probably use twin glow 25 tractor pusher combo as I have got 3 pusher 9*6 props and 2 glow 25 motors and build a simplex fuse for a canard configuration (little flea solution very spin resistant ) to go onto a two sets of 25 trainer wings left over from death of two 25 trainers
funds are going through a severe restriction for the next few months so its presently build all projects from scraps I have left over until late 20008 when things should hopefully ease up
Ralf
FAKHREALAM
Mar 25, 2008, 02:28 AM
I keep monitoring this thread along with others before I launch into a similar project
Thanks keep up the good work
Ralf
Kind of these projects need lot of time with spare money to do testing/designing. I am not sure how people design with out any math, said that its a magic. In any design, if its RF antenna feed horn, no magic exist, its all design 1st on paper then real one, but not every one is aware how it works, so they call is magic, which is bad concept. Take your time, hope it will work.
Fakhre Alam
FAKHREALAM
Mar 28, 2008, 02:10 AM
For Stencil.
http://ohararp.com/Stencils.html
For GPS
E-TEK EB-85A 5Hz GPS Engine
GPS receiver with GPS antenna on board
High Sensitivity -158 dBm
Excellent start-up times and position accuracy
5 Hz NMEA Output (GPRMC,GPGGA,GPGSA,GPGSV)
2.8V TTL Signal Output
Firmware Version 1.85 0008
38400 default baud rate
3cm link cable
Price is $55 and shipping via USPS Prirority - 2-3 business days. USPS Express is overnight to most places.
www.ohararp.com/products.html
FAKHREALAM
Mar 28, 2008, 09:42 PM
1) Here Is Osd Max7456 Intialization Software, Any One Can Use It.
Its Shared For Every One. C File In Zip Format, Go Through Function By Function. Its Not Difficult To Read It.
2) Pid Control Is Written In C Anlong With Compute Bearing And Dustance B/w Two Gps Points, Its For Every One. C And *.exe File Is Any Zip Format.
3) THIS PID WILL WORK WITH RETURN TO HOME FUNCTION, OPEN THE RETURN TO HOME STATE MACHINE AND MODIFY AS PER YOUR NEED.
FAKHRE ALAM
zik
Mar 29, 2008, 08:02 PM
Nice work. I'm following this project closely.
FredericG
Mar 31, 2008, 08:13 AM
Thanks for sharing your work!
Did you have a look at the graphical tool that seems to come with the evaluation board? It communicates with the evaluation board and allows to play with the OSD settings and to define the character set.
The tool can also work in a stand-alone mode, without evaluation board. The character set can be saved to a file. I was thinking of making a simple tool that reads this file and translates this to a character steam that can be sent to the OSD chip via SPI. It would however be nicer if we would know the protocol this tool uses to communicate to the evaluation board via a serial line.
Frederic
FAKHREALAM
Mar 31, 2008, 03:23 PM
Thanks for sharing your work!
Did you have a look at the graphical tool that seems to come with the evaluation board? It communicates with the evaluation board and allows to play with the OSD settings and to define the character set.
I got the eval board and played little bit with it. Maxim have its own micro controller on it, talking is done by serial RS232, I am not aware of protocol but I will check with them. MAX7456 OSD chip is connected and programmed via SPI. The SPI signal is available on jumper if you see the eval board. With little mod, I think you can program external MAX7456 OSD chip too, I will give a try with my prototype MAX7456 OSD board. If you go through the my code, each char EEPROM can access by its address. If you want your own design char, you need to reprogram only that EEPROM location with pixel information. Its seems to me straight forward, I did not try it but I will check that and the GUI interface which is provided with the MAX7456 EVAL BOARD allow you to do so.
Here is my plan to add few new chars to MAX7456 EEPROM.
1) MAKE A TARGET WINDOW.
2) ADD BATTERY SYMBOL.
3) FUEL LEVEL
4) BATTERY LEVEL
5) HEADING AND PLANE ORIENTATION INFORMATION.
These days I am kind of busy with making final PCB for MAX7456 with all the required parts. The board will have VIDEO-IN, VIDEO-OUT RCA conenctor and SPI interface, so it will very easy for everyone to program. One can program using SPI. Example code is available on this RC side.
Fakhre Alam
drex
Apr 01, 2008, 02:19 AM
hello
i would like to add a half sized character set to it..
yes this wouldnt increase the number of lines but it still would make it appear smaller text!!
the text is huuggeee!!
drex
Apr 01, 2008, 02:20 AM
does anyone have the evaluation board?
hook up a com port monitor and see how the character map is uploaded to it so we can reverse engineer the communication protocol between the character map tool and the target MCU.
or i guess u could write your own character editing program too..
hmmm
which would be easier?
lol
i would rather reverse engineer the current one.
drex
Apr 01, 2008, 02:24 AM
ahh just read it again..
perhaps its easier to make a character stream out of the file and use it in standalone mode.
that way just make a quickie firmware and upload the file to your target MCU.
i might do this in dsPIC...
with a simple visual c# frontend.
FAKHREALAM
Apr 01, 2008, 10:26 AM
ahh just read it again..
perhaps its easier to make a character stream out of the file and use it in standalone mode.
that way just make a quickie firmware and upload the file to your target MCU.
i might do this in dsPIC...
with a simple visual c# frontend.
MAX7456 NVM can be written using SPI. NVM char memory holds the char image. Its 64 bytes for one char and memory is 256 x 64 bytes. Loaded with factory default char set. NVM ca be write/read as whole 64 bytes at a time by SPI, so there is no need of even the eval board, you are right, it can be done by just defined char set in firmware and program by controller at power up or any other way by checking the dip switch or jumper.
Fakhre Alam
drex
Apr 02, 2008, 09:53 PM
hey i got my new controller up and running!!
checkout the OSD
this is with black (inverted bit mode in DMM)
i am having trouble with auto increment for some reason and may look at your source code...... for some reason auto increment 16 bit mode displays the register # (0x07 is 7 etc...) instead of what i want it to display... which is very weird..
basically i have been doing verbatim form the datasheet for 16 bit mode auto increment.... but it goes wacky (like its 1 byte off......)..... i know im in 16 bit mode still.....and displays the register addy;s instead of the data!!!!!
hmmm...........
when you do auto increment do you do this everytime??
<DMDI> <character byte addy>
next one....
<DMDI reg> <character byte addy>
and soo....
until
<DMDI reg> <0xff> (turn off auto inc mode...)
this doesnt work for me!!
ill have to play with it some more....
i like the black inverted text.
i was thinking of redoing the text sizes smaller.
hmmmm....
FAKHREALAM
Apr 03, 2008, 10:25 AM
hey i got my new controller up and running!!
checkout the OSD
this is with black (inverted bit mode in DMM)
i am having trouble with auto increment for some reason and may look at your source code...... for some reason auto increment 16 bit mode displays the register # (0x07 is 7 etc...) instead of what i want it to display... which is very weird..
hmmmm....
Its good that your code is working, you dont have to send address 0x07 , when text data get finish just send 0xFF, you are done.
1) enable CS
2) just send 0xff to SPI port
3) disable CS
You are done. I am not checking for all the status register but it need to be checked for proper operation.
void send_data_to_mx7456_line(unsigned char line_number, unsigned char col,
char *string_ptr)
{
/* load 16 bit address for auto increment mode */
/* DISPLAY MEMORY HIGH REG */
/* DISPLAY MEMORY LOW REG */
send_line_address_to_max7456(line_number, col);
/* INIT AUTO INCREMENT MODE REG */
init_auto_address_increment_register();
/* JUST SEND TEXT TO SPI PORT WITH MENTIONING
THE ADDRESS */
/* ONLY UPDATING DATA, REST 8 BIT GET COPIED FROM
TEXT MODE REG , INV, blink etc */
send_text_string_max7456(string_ptr);
/* STOP AUTO-INCREMENT ADDRESS */
/* JUST SEND 0XFF TO SPI PORT, NO ADDRESS NEEDED */
send_stop_auto_address_increment_data();
}
Keep it good work, what about the code, if u allow us to see that, it will be good for all of us.
FAKHREALAM
Apr 03, 2008, 03:16 PM
Please read interesting this news.
http://www.manufacturing.net/News-Boeing-Flies-First-Fuel-Cell-Powered-Airplane.aspx?menuid=36
Boeing Flies First Fuel Cell-Powered Airplane
Edited By Manufacturing.net Staff
Manufacturing.Net - April 03, 2008
MADRID, Spain -- Boeing announced today that it has, for the first time in aviation history, flown a manned airplane powered by hydrogen fuel cells.
The recent milestone is the work of an engineering team at Boeing Research & Technology Europe (BR&TE) in Madrid, with assistance from industry partners in Austria, France, Germany, Spain, the United Kingdom and the United States.
"Boeing is actively working to develop new technologies for environmentally progressive aerospace products," said Francisco Escarti, BR&TE's managing director. "We are proud of our pioneering work during the past five years on the Fuel Cell Demonstrator Airplane project. It is a tangible example of how we are exploring future leaps in environmental performance, as well as a credit to the talents and innovative spirit of our team."
A fuel cell is an electrochemical device that converts hydrogen directly into electricity and heat with none of the products of combustion such as carbon dioxide. Other than heat, water is its only exhaust.
A two-seat Dimona motor-glider with a 16.3 meter (53.5 foot) wingspan was used as the airframe. Built by Diamond Aircraft Industries of Austria, it was modified by BR&TE to include a Proton Exchange Membrane (PEM) fuel cell/lithium-ion battery hybrid system to power an electric motor coupled to a conventional propeller.
Three test flights took place in February and March at the airfield in Ocana, south of Madrid, operated by the Spanish company SENASA.
During the flights, the pilot of the experimental airplane climbed to an altitude of 1,000 meters (3,300 feet) above sea level using a combination of battery power and power generated by hydrogen fuel cells. Then, after reaching the cruise altitude and disconnecting the batteries, the pilot flew straight and level at a cruising speed of 100 kilometers per hour (62 miles per hour) for approximately 20 minutes on power solely generated by the fuel cells.
According to Boeing researchers, PEM fuel cell technology potentially could power small manned and unmanned air vehicles. Over the longer term, solid oxide fuel cells could be applied to secondary power-generating systems, such as auxiliary power units for large commercial airplanes.
Boeing does not envision that fuel cells will ever provide primary power for large passenger airplanes, but the company will continue to investigate their potential, as well as other sustainable alternative fuel and energy sources that improve environmental performance.
BR&TE, part of the Boeing Phantom Works advanced R&D unit, has worked closely with Boeing Commercial Airplanes and a network of partners since 2003 to design, assemble and fly the experimental craft.
drex
Apr 03, 2008, 07:36 PM
Its good that your code is working, you dont have to send address 0x07 , when text data get finish just send 0xFF, you are done.
1) enable CS
2) just send 0xff to SPI port
3) disable CS
You are done. I am not checking for all the status register but it need to be checked for proper operation.
void send_data_to_mx7456_line(unsigned char line_number, unsigned char col,
char *string_ptr)
{
/* load 16 bit address for auto increment mode */
/* DISPLAY MEMORY HIGH REG */
/* DISPLAY MEMORY LOW REG */
send_line_address_to_max7456(line_number, col);
/* INIT AUTO INCREMENT MODE REG */
init_auto_address_increment_register();
/* JUST SEND TEXT TO SPI PORT WITH MENTIONING
THE ADDRESS */
/* ONLY UPDATING DATA, REST 8 BIT GET COPIED FROM
TEXT MODE REG , INV, blink etc */
send_text_string_max7456(string_ptr);
/* STOP AUTO-INCREMENT ADDRESS */
/* JUST SEND 0XFF TO SPI PORT, NO ADDRESS NEEDED */
send_stop_auto_address_increment_data();
}
Keep it good work, what about the code, if u allow us to see that, it will be good for all of us.
okay so i think its becuase i am sending the <DMDI reg address> everytime??
so it should be like this instead:
<display mem high byte register> <whatever>
<display mem low byte register> <whatever location lower byte>
<DMM register> <auto inc on>
<DMDI register> <byte1>
<byte2> <byte3>
<byte4> <byte5>
etc.....
<byte n> <0xff>
then thats it....
so once you turn on auto increment then u dont send the <DMDI register address ... ok thats the mistake i was making... the manual seems incorrect!!!.... they should write it a little better.
i havent tried that in my code...
they should have an example..
thanks will try it and see how i works.
yah i got it working the long way by specifying everything for 1 byte write each time...
wanna speed it up though :)
yah ill post code and it will be available on my website when it is finished.
dont wanna post unfinished code :)
optimizing it now.
thanks
drex
Apr 04, 2008, 04:27 PM
heres the highlights of my current code (this is not with auto increment.... will play with it later on :) )
this is the main function to call for outputting a string
called like this:::
string_to_OSD(5,2,"hello world");
void string_to_OSD(unsigned int row, unsigned int col,unsigned char *data)
{
unsigned int dmemaddy;
unsigned char dmemaddyh;
unsigned char dmemaddyl;
unsigned char charcode;
dmemaddy=display_mem_compute(row,col);
dmemaddyl= (unsigned char)dmemaddy;
dmemaddyh= (unsigned char)(dmemaddy>>8);
//this writes actual data in auto increment mode
do
{
//write high dmem addy
write_SPI(DMAH,dmemaddyh);
// write_SPI(DMAH,1);
//write low dmem addy
write_SPI(DMAL,dmemaddyl);
// write_SPI(DMAL,0);
while(!SPI2STATbits.SPIRBF);
if(*data!=0)
{
charcode=char2charcode(*data);
write_SPI(DMDI,charcode); //dmdi is character ady byte
}
//increment addy one space
if (dmemaddyl>=255)
{
dmemaddyl=0;
dmemaddyh=1;
}
else
{
dmemaddyl++;
}
} while( *data++ );
}
and here is my row, col to Dmem addy routine and the char to charcode routine (using your ascii tables so i didnt have to type it in again hahahahahah thanks i really appreciate it)
unsigned char char2charcode(unsigned char data)
{
unsigned char outchar=0;
unsigned int i;
for (i=0; i< sizeof(ascii_table); i++)
{
if (data == ascii_table[i])
{
outchar = charcodetable[i];
break;
}
}
return outchar;
// return 0x01;
}
//
// convert row and column to character offset
//
unsigned int display_mem_compute(unsigned int row1, unsigned int col1)
{
unsigned int displaymemaddy1;
if ((row1!=0))
{
displaymemaddy1= ((row1*30)+col1);
}
else if (row1==0)
{
displaymemaddy1= col1;
}
return displaymemaddy1;
}
FAKHREALAM
Apr 05, 2008, 02:36 PM
heres the highlights of my current code (this is not with auto increment.... will play with it later on :) )
this is the main function to call for outputting a string
called like this:::
string_to_OSD(5,2,"hello world");
void string_to}
Its will be good if you mentioned controller name along with the defines you used as well as ASCII table function. One top to dwon functions def will be good.
Fakhre Alam
FAKHREALAM
Apr 05, 2008, 03:27 PM
Here is the MAX7456 PCB DESIGNED USING EAGLE.
drex
Apr 05, 2008, 04:04 PM
yah im using your ascii table :)
but it can be anyting really just a translation from ascii code to max 7456 character code map.
i added the special effects text types to the function
(DMM register write)
so now each write generates a special text , inverted, LBC, blinking etc...
i will post a video of my test setup.
i finished some of the GPS parse functions.... not as hard as i thought to do.
i used strstr 1st then just lots of for loops....
:)
FAKHREALAM
Apr 05, 2008, 05:52 PM
Here is the MAX7456 PCB DESIGNED USING EAGLE.
Update MAX7456 PCB.
FAKHREALAM
Apr 05, 2008, 05:55 PM
yah im using your ascii table :)
but it can be anyting really just a translation from ascii code to max 7456 character code map.
:)
Waiting for your video, good luck.
Fakhre Alam
FAKHREALAM
Apr 07, 2008, 12:27 AM
Update MAX7456 PCB.
Here is the update PCB for MAX7456 board. Its a final one I am sending it to Fab. Let me know what you guys think.
Fakhre Alam
drex
Apr 09, 2008, 11:11 PM
hello
got a test layout for my OSD....the techFX motion (with full 6 DOF IMU)
http://www.youtube.com/watch?v=DcxilxPlc4M
this is just a test layout!!!
the bottom heading scroll isnt working yet...
also the DTH and DTT triangulation isnt working yet... (gonna use circular arc triangulation routines for greatest accuracy. i can handle the floating point.!!!
basically the 1st screen has threshold values for PDOP, HDOP etc and once the threashold is reached, it proceeds to screen 2 which scrolls through the various data screens.
line 1 is GPS info.
line 2 is spd / alt / battery info
then we have the heading scroll with home and target indicators
and the distance to home and distance to target #'s....
all variables will be settable with a windows GUI frontend!!
you can control how many seconds between screens and what data u want displayed!!
but still working on it.
fakhre:
what type of routine is your distance triangulation? is it great circular arc triangulation?
i found some websites with algorithms but wondering which one you are using.
hey your layout looks nice !!! cant wait to see your final boards!!
-drex
FAKHREALAM
Apr 10, 2008, 10:18 AM
hello
got a test layout for my OSD....the techFX motion (with full 6 DOF IMU)
this is just a test layout!!!
the bottom heading scroll isnt working yet...
fakhre:
what type of routine is your distance triangulation? is it great circular arc triangulation?
i found some websites with algorithms but wondering which one you are using.
hey your layout looks nice !!! cant wait to see your final boards!!
-drex
Good job, seems you get it all. I like it, I send my board to FAB. Autopilot project is going slowly. I am not able to see the video from this page but saw it from email link. Please check that. My equation is using Spherical distance on the Earth
Here is the c function.
/* return distance b/w two GPS coordinate in radians */
float get_distance_bw_two_gpd_coordinate (float lat_a, float lat_b, float
lon_a, float lon_b, float
temp_distance)
{
float angle;
#ifdef DEBUG
printf("test_gpd_rabbit_function\n");
#endif
angle = sqrt(
cos(lat_a)*cos(lat_b)*pow(sin((lon_a - lon_b)/2), 2) +
pow(sin((lat_a - lat_b)/2), 2)
);
angle = 2*asin(angle);
*temp_distance = (6378.7) * angle;
#ifdef DEBUG1
printf("distance new in meters = %f\n", temp_distance * 1000);
#endif
return angle;
}
/* distance return in radians */
void cal_distance_bearing_bw_two_points (GPS_Location *gps_loc1, GPS_Location *gps_loc2,
unsigned int *dist, unsigned int *bear)
{
float lat1, lat2, lon1, lon2, radian_value, temp1, temp_distance;
unsigned int distance;
#ifdef DEBUG
printf("cal_distance_bw_two_points\n");
#endif
convert_gps_points_in_radians(gps_loc1, gps_loc2, &lat1, &lon1,
&lat2, &lon2);
radian_value = get_distance_bw_two_gpd_coordinate(lat1, lat2, lon1, lon2, &temp_distance);
temp1 = 6378.7 * 1000 * radian_value;
distance = (unsigned int) temp1;
*dist = distance;
*bear = (unsigned int) calculate_bearing (lat1, lat2, radian_value, lon1, lon2);
#ifdef DEBUG
printf("distance b/w two points = %d\n", *dist);
printf("bearing b/w two points is = %d\n",
*bear);
#endif
}
This is the c code I am using for distace calculation in radians and converts it into meters. Hope it will help.
FAKHREALAM
Apr 10, 2008, 10:36 AM
Max7456 Osd Eval Board Sch File And Image.
drex
Apr 10, 2008, 02:22 PM
hi fahkre:
this is code to convert your ddmm.mmm and dddmm.mmm strings to decimal minutes dd.ddddd strings!!!
it is more accurate too.
this code assumes:
unsigned char LAT[11] = lat in ascii from nmea string in ddmm.mmmmmmm
unsigned char LONG[12] = long in ascii from nmea string in dddmm.mmmmmm
unsigned cahr NS[2] = just holds the direction N or S from nmea string
unsigned char EW[2] just hols the E or W direction character from nmea string
unsigned char LATd[11] = converted to decimal minutes
unsigned cahr LONGd[12] converted to decimal minutes
void convert2degrees(void)
{
//do lat
for (i=0;i<sizeof(LAT);i++)
{
if ((LAT[i]!=0x00)|(LAT[i]!=0x20)|(LAT[i]!='.'))
{
LATd[i]=(LAT[i]-48);
}
}
temp1= (float)(LATd[0]*10)+(float)(LATd[1])+ (((float)(LATd[2]*10)+(float)(LATd[3])+(float)(LATd[5]/10)+(float)(LATd[6]/100)+(float)(LATd[7]/1000)+(float)(LATd[8]/10000))/60);
if (NS[0]=='S')
{
temp1=-temp1;
}
temp2=sprintf(LATd, "%f", temp1);
if (NS[0]=='S')
{
temp1=-temp1;
LATd[9]=0x00;
}
else
{
LATd[8]=0x00;
}
//do longitude now
for (i=0;i<sizeof(LONG);i++)
{
if ((LONG[i]!=0x00)|(LONG[i]!=0x20)|(LONG[i]!='.'))
{
LONGd[i]=(LONG[i]-48);
}
}
temp1= (float)(LONGd[0]*100)+(float)(LONGd[1]*10)+ (float)(LONGd[2])+(((float)(LONGd[3]*10)+(float)(LONGd[4])+(float)(LONGd[6]/10)+(float)(LONGd[7]/100)+(float)(LONGd[8]/1000)+(float)(LONGd[9]/10000))/60);
if (EW[0]=='W')
{
temp1=-temp1;
}
temp2=sprintf(LONGd, "%f", temp1);
if (EW[0]=='W')
{
temp1=-temp1;
LONGd[9]=0x00;
}
else
{
LONGd[8]=0x00;
}
it also handles the + or - parsing from the NS or EW values....
produces upto 5 dec places which is very accurate.
FAKHREALAM
Apr 10, 2008, 03:25 PM
hi fahkre:
this is code to convert your ddmm.mmm and dddmm.mmm strings to decimal minutes dd.ddddd strings!!!
it is more accurate too.
it also handles the + or - parsing from the NS or EW values....
produces upto 5 dec places which is very accurate.
Pasing seems good, good coding. In my IAR setup does not support sprintf. Some times conversion is kind of difficult.
Fakhre Alam
drex
Apr 10, 2008, 03:48 PM
ohhh that sucks!!
sprintf is a common C function in <stdio.h>
can u check for stdio.h?
displaying as ddd.ddddd has more accuracy for same # of decimal places as ddmm.mmm since ddmm.mmm is rounded off!!!!
without the sprintf, hmmmm you would have to parse the float temp1 back to a string.... which sucks!!!!!
drex
Apr 21, 2008, 02:45 AM
just an update on our OSD...
btw: Fahkre, whats the status of your boards??
code code code writing!!!
got alot of features done already..
everything is in floating point!!! no interger rounding... so have the most accurate possible values....
-altitude in feet and meters upto 99999 feet,
- AGL and MSL selectable (AGL is latched upon meeting threeshold values of minimum HDOP , VDOP , PDOP, sats #
- lat and long is ddmmm.mmm and decimal degre with high accuracy
-speed can be mph and kph upto 999 with decimal point for slower speeds ie: 0.xx 00.x
distand to home and distance to target based on lat, and long are done using great circle forumals with high accuracy floating point....
DTH and DTT displayed in same units as others selected...
also whats cool is when you go below 1.0 unit (1 KM or 1 mile) the DTT and DTH automatically switch to feet and meters.... pretty cool feature
its super stable right now....
still have some left to do:
--addon modules
1) current sensor and mAH meter
2) SCP1000 baro altimeter module code
3) magneto or compass code instead of COG parsing
4) compass bar.... almost done actually.
5) other addon modules.... rpm?
so its getting there!!
really happy with the eb 85 a's accuracy!!
FAKHREALAM
Apr 21, 2008, 03:21 PM
just an update on our OSD...
btw: Fahkre, whats the status of your boards??
got alot of features done already..
so its getting there!!
really happy with the eb 85 a's accuracy!!
/* btw: Fahkre, whats the status of your boards?? */
The last vendor I send my PCB for Fab
(www.futurlec.com) is not responding to my emails, I
paid them in advance. looking for the new one.
/* got alot of features done already.. */
Seems like good progress, keep it up. Is any release date for the complete
board, or one can buy the complete auto-pilot board form ?.
Fakhre Alam
vBulletin® Copyright ©2000-2009, Jelsoft Enterprises Ltd.