#!/usr/bin/env perl # Approximate Inductance of a Wire Parallel to Ground sub Print { print "\33[H\33[J". "\t\tApproximate Inductance of a Wire Parallel to Ground\n\n". " \n". " <---------- length --------> \n". " ___________________________ _ \n". " \@_________________________ | _| Diameter \n". " ) | <--+ \n". " | | | \n". " | | | Height \n". " ______________________________| |_____|____ \n". " \n". " Ground \n"; } sub Get { undef $_; undef $val; undef $unit; undef $rad; while (!m/^([0-9.]+)(mm|MM|cm|CM|in|IN+)$/) { print "\nmm = millimeters\n". "cm = centimeters\n". "in = inches\n\n". "Enter wire $VAL [value][mm,cm,in]: "; chomp($_ = ); } if (m/^([0-9.]+)(mm|MM|cm|CM|in|IN+)$/) { $val = $1; $unit = $2; } if ($unit =~ /cm/i) { $unit = "centimeters"; $rad = $val / 2.54; } elsif ($unit =~ /mm/i) { $unit = "millimeters"; $rad = $val / 25.4; } elsif ($unit =~ /in/i) { $unit = "inches"; $rad = $val; } } &Print; &Get($VAL = "RADIUS"); $a = $rad; $radu = $unit; $radv = $val; &Get($VAL = "LENGTH"); $b = $rad; $lenu = $unit; $lenv = $val; &Get($VAL = "HEIGHT"); $h = $rad; $hu = $unit; $hv = $val; $A = $b + (sqrt (($b ** 2) + ($a ** 2))); $Aa = sqrt (($b ** 2) + ($a ** 2)); $B = $b + (sqrt (($b ** 2) + (4 * ($h ** 2)))); $Bb = sqrt (($b ** 2) + (4 * ($h ** 2))); $L1 = 0.0117 * $b * (log (((2 * $h) / $a) * ($A / $B))) / (log 10); $L2 = 0.00508 * (($Bb - $Aa) + (($b / 4) - ((2 * $h) + $a))); $L = $L1 + $L2; $dia = 2 * $radv; &Print; print "\n\n Wire radius : $radv $radu\n". " Wire diameter : $dia $radu\n". " Wire length : $lenv $lenu\n". " Wire height : $hv $hu\n\n"; printf " Approximate inductance : %.6f uH\n". " : %.6f nH\n\n", $L, $L * 1000;