• - 23rd April 2010, 16:42
Bobbo_ZA

Im no good with maths, :-(

I have a differential pressure sensor and am looking to use it to get an airspeed, once I have the airspeed I can work with it, :-)

Vref = 3.0V
ADC = 10-bit = 1023 steps
Air density @ sea Level = 1.225
Sensor Range = 0.6V per kpa

So, the formula that Im currently trying to get right is as follows:

Code:

```VelocityKPH VAR WORD A VAR WORD ADCIN 4, A will do a loop of 10 samples later VelocityKPH = (A-186)*36667 VelocityKPH = SQR VelocityKPH VelocityKPH = VelocityKPH / 18```
As I say, my maths is shocking, :-( I kinda understand the principles but dont get how to string it all together, any help will be very much appreciated.

Kind Regards
Rob
• - 23rd April 2010, 16:53
mackrackit
First thing I see is you will want to use LONGs.
Code:

``` VelocityKPH VAR LONG```
You will over run the WORD size variable
</pre>
• - 23rd April 2010, 21:59
Bobbo_ZA
Strange, does not look like we can edit our previous posts in the new forum, :-(

Slight correction was, the sensor range is not 0.6v, :-), rather, sensitivity.

The Zero (min Vout) value is 0.66V, thus I need to remove the first 207 / 208 counts of the AD value in order to get a 0 value.

The sensor range is rather: 0 to 3.92Kpa

Dave, I tried the long Var and PBP complains on compile, help only lists BIT, BYTE and WORD as valid variable types?

Any ideas on what the PBP equivalent equation / formula would be to extrapolate the Kpa to a speed?

In a C / Arduino example using the same sensor (although 5V sensor) is as follows:

Code:

``` ;#define Pressure_MTS(x) sqrt((((x*(INTPUT_VOLTAGE/1024.0))/1.0)*2.0)/1.225) //Converts to AirSpeed in meters per second ;#define Pressure_KMH(x) Pressure_MTS(x)*3.6 //converts to KPH```
I've been able to get the RAW ad reading as well as the sensor output voltage displaying on the LCD, however I'm lost on the conversion from a ratiometric voltage to a speed, :-(
• - 29th April 2010, 09:30
Bobbo_ZA
Well, managed to get a result in excel, :-) but my conversion to "integer" math for PBP does not work, I've tried probably 40 different variations of the code below and am still not getting a result, :-(

The excel formula works as follows:

rho: 1.225 Air Density constant
Zo: 0.75 Zero Offset
Vs: 3260 Voltage supply
Vo: 1.2 Voltage out from sensor (Output from ADC)

Formula1 Dp=(Vs*(Vo/Vs)-Zo)
Formula 2 Mps=SQRT((2*Dp*1000)/rho)

However, translated into PBP I tried the following:

Code:

```  rho = 1225        'Constant for pressure calc   Zo = 74          'Zero Offset   Vs1 = 3260        'Vref       AD_in = 0   Pres = 0   volt = 0      for samples = 1 to 4      '4 Samples from AD - Sensor is low pass filtered             ADCIN 4, ad_in         volt = volt + ad_in             Pause 25     Next Samples     volt = volt / 4          'Average AD     volt = volt * 3186            'convert to voltage out Vind = DIV32 10000            'DIV32 'Excel Formula: 'Dp=(Vs*(Vo/Vs)-Zo) dy_p = vind * 1000 Dy_p = (vind / Vs1) dy_p = (dy_p * vind) / 1000 dy_p = dy_p - Zo LCDOUT \$FE, \$80+6, dec2 dy_p, "    " 'output to first line 'Excel Formula: 'Mps=SQRT((2*Dp*1000)/rho) Vmps = dy_p / 1000 vmps = vmps * 2 * 1000 vmps = vmps / (rho/1000) vmps = sqr vmps lcdout \$FE, \$C0+5, dec2 vind        'output to second line```
Can anyone help steer me in the right direction? I tried using the DIV32 after the multipys but also then got some unexpected values.

Many Thanks
Rob
• - 30th April 2010, 00:46
mackrackit
Sorry for not following up sooner.

LONGs are only available in PBP 2.5 and newer and for 18F parts only. LONGs might make this easier but should not be needed.

First off, do you have

The sensor has an output from
0.66 to 3 volts ?
0 to 3.92Kpa ?

• - 30th April 2010, 15:50
Bobbo_ZA
Hi Dave,

Appreciate the help, still struggling to get PBP to understand my math, :-)

yip, i do,

Code:

```;----- NEW LCD Configuration for Testing------------- DEFINE OSC 20        '20 MHz Osc DEFINE ADC_BITS 10```
yes, the input from the regulator is acutally 3.26v which is just under the sensors "Max", output @ rest should be "Min" = 0.45v Typ = "0.60" and "Max" = 0.75 i assme this is due to the barometric pressure varying.

Range of the sensor is: 0 to 3.92kpa

in excel the maths seems to give me a realistic number based on changing the Vo cell where i would expect the reading from the sensor to be, however the testing has been blowing into the tube so not really very scientific, :-)

Kind Regards
Rob
• - 30th April 2010, 16:04
Acetronics2
Hi, Bobbo

seems PBP is not the only one to have difficulties with your maths ...

so, in case I could help ...

There are things I'm missing ...

Alain
• - 1st May 2010, 20:40
Bobbo_ZA
Hi Ace,

Sorry, :-( some concepts just dont sink in, they need to be beaten in, :-)

Attached is the datasheet.

Haven t tried again since Thursday, going to sit down now and try get each value multiplied out and then DIV32'ed to try get to the right values, see if it works.

Many thanks for the help

Rob
• - 2nd May 2010, 08:09
mackrackit
First the ADC needs to be converted into KPA for yourformuls to work.
You will need to have the ADC setup with a 3.0 volt reference.
Using the old formula of
y = mx-b
y = output 'Volts
m = slope
x = input units
b = offset

You are wanting to read form 0 to 30 amps.
You are wanting to read form 0 to 3.92kpa.
Output is 0.6 to 3 volts.

Start off by look at the output in volts. You have a 2.4 volt span. Giving a span of 3.92 / 2.4 = 1.633
m = 1.633

The offset. Starting at 0.6 volts. 0.6 volts = 0 kpa. The offset is 0.6 * 1.633 = 0.98
b = 0.98

Plug all this into the formula and lets say the input is 3.0 volts.(full scale)
y = (1.633 * 3) - 0.98
y = 3.92

Now convert this to an 10 bit PIC resolution.

10 bits ADC = 0 to 1023, 1024 steps.
At 3.0 volts one volt of input will will read 341.
Spanning 2.4 volts or 818 steps (2.4 * 341).

New value for m. 3.92 / 818 = 0.00479
m = 0.00479

The new offset starting at 205, (0.6 * 341).
205 * 0.00479 = 0.98
b = 0.98

y = (ADC * 0.00479) - 0.98
y = 3.92kpa

Now for some code.
Code:

```  '  m = 0.00479   '  b = 0.98   '  y = (ADC * 0.00479) - 0.98   '  ADC = 1023   '  y = 3.92kpa     M  CON 479    'm = 0.00479 * 10,000     B  CON 98      'b = 0.98 * 100     ADC VAR WORD    'INPUT FROM SENSOR     Y  VAR WORD    'KPA     Z  VAR WORD    'DUMMY VAR     Z1  VAR WORD    'DUMMY VAR     'V =  SQRT((2 * (Y/1000)) / 1.225)     V  VAR WORD    'METERS/SECOND     D  CON 122    'AIR DENSITY         START:     ADC = 1023  'FULL SCALE HARD CODED, NO SENSOR     Z = ADC * M     Z1 = DIV32 1000     Y = Z1 - B     Z = (2 * Y * 10000)     Z1 = DIV32 1000     V = SQR(Z1 / D *100)     LCDOUT \$FE,1,"KPA= ",DEC Y/100,".",DEC Y//100     LCDOUT \$FE,\$C0,"M/S= ",DEC V     PAUSE 250     GOTO START   ```
• - 7th May 2010, 12:51
Bobbo_ZA
Hi Dave,

Fianlly have usable numbers to work with, had some issues using a 3.3v reference as the sensor only works to 3V so I bought a LM317 adjustable reg and got it set to 3.00V, now it is working as per you calculations, :-) only thing im need to change a bit is the air density constant based on the altitude, temp and humidity.

the reveal, :-) basically what I am doing with this sesnor and program is setting it up in my RC plane to drop the flaps in relation to the airspeed, so as the airspeed decreases the flaps increase, and then as airspeed increases the flaps decrease. was driving in the car with the GPS, PIC and 2 servos connected and they seem to be reacting as I want them.

Will post a clip when I get a second hand to hold the cammera while I drive, :-)

Kind regards
Rob
• - 7th May 2010, 13:22
Acetronics2
Hi, bobbo

Some diving bomber planned ??? :rolleyes:

I hope not the " Stuka syndrom " ...

Alain
• - 7th May 2010, 14:00
Bobbo_ZA
lol, nope, just a lazy pilot and like automating as much as possible, :-), if I could figure out how to do an inflight re-fuel I would be quite happy, :-)
• - 7th May 2010, 14:02
Bobbo_ZA
Next thing will be to use a sensor to turn on nav lights automatically, :-)