#!/usr/bin/perl # # Pressure / Altitude Table # # This builds a table of input voltage to pressure to altitude # The purpose is to either show that one altitude step between # pressure sensor readings is adequate, or to build a table # to calculate altitude based on pressure. # $Vstep=5/1024; # Volts per A/D step $p = 0; # pressure value $Al=0; while ( $p < 1024 ) { #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Pressure - kPa $Vp=$p * $Vstep; $Vs=5; $P = (($Vp/$Vs) + 0.10941) / 0.01059; #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Altitude - Calculation # sub log10 { my $n = shift; return log($n)/log(10); } # # #PbP $Alt1 = -26216 * log($P / 101.325); # #ROL / BS2 / Army #Pa = Po (1 - 6.87535E-06 * Hc)^5.2561 # Hc=(10^(Log(Pa/Po)/5.2561)-1)/-6.87535E-06 # Pa = pressure at altitude # Po = Sea level pressure = 101325 Pa # Hc is altitude in feet #Altitude = (10^(log(P/P_0)/5.2558797)-1)/-6.8755856*10^-6. #Altitude = (10^(log(P/P_0)/5.2558797)-1)/-6.8755856*10^-6 $Alt2 = (10**(log10($P/101.325)/5.2558797)-1)/(-6.8755856E-6); #$Alt2 = (10**(log10(($P)/101.325)/5.2558797)-1)/(-6.8755856*10E-6); $Ad = $Al - $Alt2; # Home: # Pa = Po (1 - 6.87535E-06 * Hc)^5.2561 # 98,072.6328 Pa # --------------------------------------------------------------------------- #print "$p $Vp $P $Alt2 $Ad\n"; printf "%.f, /* 0x%x 0x%x %d %.4f V %.4f hpa %.4f ft %.1f delta */\n", $Alt2, $Alt2, $p, $p, $Vp, $P, $Alt2, $Ad; $Al = $Alt2; $p += 1; }