1.そもそもADコンバーターなるものが必要なのか?
PCを使っている限りではアナログもデジタルも意識しないで済む。だからマイクから入力された信号はPCのスピーカーからそのまま出力されているものと思い込み、ADコンバーターなるものが必要なんて考えもしなかった。でも、よくよく考えてみればアナログ信号は身の回りにたくさんあって、今更ながらADコンバーターの重要性に気付かされた。0と1しかわからないPCに向かって「標高1000メートルの山と200メートルの山が連なっている」状況を思い浮かべさせることが土台無理な話なのだ。
https://www.marubun.co.jp/service/technicalsquare/a7ijkd000000bogr.html
2.ADコンバータの機能
それではPCでもわかるようにアナログ信号をデジタル信号に変換するということはどういうことなのか?一番わかりやすく言うと「なだらかな曲線のグラフを最も近い数字の折れ線グラフ」に変換することと理解した。その作業には、「標本化」とか、「量子化」とか、「符号化」の作業を辿らなければならないようだが。
https://www.rohm.co.jp/electronics-basics/ad-converters/ad_what2
3.ラズパイとADC0834の接続
上のデータシートを見てもちんぷんかんぷんなのだが、以下の情報と突き合わせながら何度も見ていると、なんとなく必要な情報が何なのかが見えてくる。
https://qiita.com/f_nishio/items/4b9723c4e622a51aaeb5
https://denkisekkeijin.com/raspberrypi/pi-spi-volume-rd/
尚、アナログには一般的な半固定抵抗を用いた。
ラズパイ | 半固定抵抗 | ADC00834CCN()内はピン番号 |
3.3V | V+(1) | |
GPIO8 | CS(2) | |
OUT | CH0(3) | |
GND | GND | DGND(7) |
5V | Vcc | Vcc(14) |
GPIO10 | Din(13) | |
GPIO11 | CLK(12) | |
GPIO9 | Dout(10) | |
3.3V | Vref(9) | |
GND | AGND(8) |
Vref電圧とは
ADコンバータで必ずでてくるリファレンス電圧(Vref)とは、ADコンバータにとっての基準電圧である。たとえば、8ビットの分解能を持っているMAX1118では、このリファレンス電圧を基準に256等分してアナログ電圧を読み取ることになる。つまりリファレンス電圧を3.3Vとしたので、3.3/256で計算すると、約0.013Vの精度で電圧が読み取れる訳だ。リファレンス入力がない場合は、リファレンス電圧が内部で決められているので、データシートをよく読んで確認しておこう。(https://101010.fun/iot/adc-max1118-raspberry-pi-zero.html#header-1-2より)
4.コード(作例)
これもみんなの作例を見ながら以下のように書いた。
import spidev
import time
import subprocess
# open SPI device 0.0
spi = spidev.SpiDev()
spi.open(0, 0)
#spi.max_speed_hz = 400 #must spidev3.3
try:
while True:
resp = spi.xfer2([0x68, 0x00])
value = (resp[0] * 256 + resp[1]) & 0x3ff
volt = value * 3.3 / 1023
print ('Value:',value,'\tVolt:',round(volt,2),'V')
time.sleep(1)
except KeyboardInterrupt:
spi.close()
なお、周波数の記載を必要とする作例も見受けたが、このADコンバータでは不要のようだ。
5.出力例
$ python3 adc_on.py
固定抵抗のつまみを右に回していくと0Vになってしまうが、左に回すと
Value: 831 Volt: 2.68 V
Value: 831 Volt: 2.68 V
Value: 0 Volt: 0.0 V
Value: 0 Volt: 0.0 V
Value: 831 Volt: 2.68 V
Value: 0 Volt: 0.0 V
Value: 0 Volt: 0.0 V
Value: 831 Volt: 2.68 V
Value: 831 Volt: 2.68 V
Value: 0 Volt: 0.0 V
Value: 0 Volt: 0.0 V
Value: 831 Volt: 2.68 V
Value: 0 Volt: 0.0 V
Value: 0 Volt: 0.0 V
Value: 319 Volt: 1.03 V
Value: 0 Volt: 0.0 V
コメント