目次

A/Dコンバータ用電圧計算(AWK)

 複数のスイッチのうち、どれが押されたのかを判定するのに
 A/Dコンバータを使うことがあります。



 電圧値で、どのスイッチが押されたのかを判断するとして
 抵抗値の組合せを、どうすればよいのかを計算で求めます。

 テキストファイルに、次のように抵抗値を入れておきます。

2200 1000
2200 1000 2200
2200 1000 2200 3300
2200 1000 2200 3300 5100
2200 1000 2200 3300 5100 10000
2200 1000 2200 3300 5100 10000 75000

 中途半端な数値になっているのは、E24系列で選んでいるから。

 A/Dコンバータに入力される電圧値とA/D値を計算する
 スクリプトは、次のようにします。

{
  # first resistance
  r0 = $1
  # sereies resistance
  r1 = 0 
  for ( i = 2 ; i < NF+1 ; i++ ) {
    r1 = r1 + $i
  }
  # calculate voltage
  result = (r1 * 3.3) / (r0 + r1)
  # counter
  cnt = result * 1024.0 / 3.3
  printf("%d %d %.3f(V) %d\n",r0,r1,result,cnt)
}

 接続電圧を3.3Vとして、A/Dコンバータの分解能は10ビットとしています。

 結果をI/Oリダイレクトでファイルに落とします。

2200 1000 1.031(V) 320
2200 3200 1.956(V) 606
2200 6500 2.466(V) 765
2200 11600 2.774(V) 860
2200 21600 2.995(V) 929
2200 96600 3.227(V) 1001

 スイッチを押すと、300、600、700、800、900、1000台になっています。

 実際の抵抗値を入れた回路図は、以下。



 判定しやすい値を算出しているので、抵抗値の組合せを
 試行錯誤で計算する時間が短くなります。

 電卓を使うよりも短い時間で、妥当な抵抗値を求められるのが
 スクリプトを使う長所だと思います。


目次

inserted by FC2 system