uchan note

プログラミングや電子工作の話題を書きます

Arduino に iPod の出力を繋ぐためのプリアンプ回路を実験してみる

少し前に プリアンプ回路を設計した ので、それを実装して実験してみた。

そもそもやりたかったのは、Arduino でデジタルエフェクタを作ることである。 そのために、交流である音声信号を、 1.65V を中心にして、なるべく 0V から 3.3V まで大きく振れる信号に変換したい。

動作実験

実装したプリアンプ回路の動作実験をした結果を紹介する。 回路に正弦波や音声信号を入力して、出力信号を観察した。

正弦波入力とプリアンプ出力

実装した回路に 1kHz の正弦波を入力して動作を観察してみた。

正弦波は "Tone Generator" などと呼ばれる iPhone アプリを使うと手軽に生成できる。 私は Audio Tone Genarator Lite を使った。

f:id:uchan_nos:20151223125856j:plain:w300

  • 上側:プリアンプ回路の出力信号(1V/div)
  • 下側:プリアンプ回路の入力信号(100mV/div、1kHz 正弦波)

下側のチャンネルは 1 メモリ 100mV 設定(100mV/div)なので、振幅は約 140mV である。 対して、上側のチャンネルは 1 メモリ 1V 設定(1V/div)なので、振幅は約 2.8V である。 きちんと増幅してくれているようで一安心だ。増幅率は約 20 倍。

プリアンプ回路の増幅率は可変抵抗で調整できるように作っている。 試しに増幅率をもっと上げてみると次のようになった。

f:id:uchan_nos:20151223131114j:plain:w300

プリアンプ回路で使っているオペアンプの電源が 3.3V なので、最大でも 3.3V の振幅までしか増幅ができない。 増幅率を上げすぎると、このように波形の上下が途切れてしまう。 Arduino で精度よくアナログ波形を読み取るには、ぎりぎり途切れないくらいの増幅率に設定するのがよい。

ちなみに、今回使った LMC6484AIN というオペアンプが "rail to rail" と呼ばれる特徴を持つ品種であるおかげで、電源電圧ぎりぎりまで増幅ができている。 rail to rail でないオペアンプでは電源電圧より低い電圧しか出力できないため、注意が必要だ。

音声信号入力とプリアンプ出力

今度は正弦波の代わりに iPod から実際の楽曲を入力し、増幅の様子を見てみる。

f:id:uchan_nos:20151223134615j:plain:w300

  • 上側:プリアンプ回路の出力信号(200mV/div)
  • 下側:プリアンプ回路の入力信号(10mV/div、iPod 音声信号)

下側のチャンネルは 1 メモリ 10mV 設定(10mV/div)なので、最大振幅は約 40mV である。 対して、上側のチャンネルは 1 メモリ 200mV 設定(200mV/div)なので、振幅は約 0.8V である。 画像では増幅されていることが分かりにくいが、きちんと 20 倍に増幅できている。

正弦波入力と DAC 出力

Arduino で AD 変換した結果をそのまま DA 変換するプログラムを作り、波形を見てみることにした。 Adruino Due は AD/DA ともに専用の回路を持っており、どちらも 12 ビットの精度で変換ができるので、 Arduino への入力信号と同じ波形が出力されると期待できる。

f:id:uchan_nos:20151223140240j:plain:w300

  • 上側:ArduinoDAC 出力信号(1V/div)
  • 下側:プリアンプ回路の入力信号(100mV/div、1kHz 正弦波)

下側のチャンネルは 1 メモリ 100mV 設定(100mV/div)なので、振幅は約 140mV である。 対して、上側のチャンネルは 1 メモリ 1V 設定(1V/div)なので、振幅は約 1.9V である。

増幅率は約 20 倍に設定してあるのでプリアンプ回路の出力は振幅 2.8V である。 なのに、DAC 出力が 1.9V になってしまうのはなぜだろうか。

Arduino Due の CPU である SAM3X8E の仕様書 を読むと答えが書いてあった。 DAC の出力電圧は電源電圧の 1/6 から 5/6 の範囲しか出ないらしい。

DAC 出力の振幅が入力の 2/3 になるということだから、2.8 × 2/3 ≒ 1.9 となり、観測結果は正しいようだ。

実装

ブレッドボード上に回路を実装した様子はこんな感じになった。

f:id:uchan_nos:20151223145850j:plain:w300

オリジナルサイズで表示

左側がプリアンプ回路、右側が Arduino Due の基板である。 プリアンプ回路の中央にある IC が、メインの部品となるオペアンプだ。

実装上の注意や、設計から一部変更した点などはまた今度書く予定。

Arduino に iPod の出力を繋ぐためのプリアンプ回路を設計してみる

注)Qiita で書いた記事 を引っ越してきました

ArduinoiPod の出力を精度よくデジタル変換したいなと思って、プリアンプ回路を設計してみた。対象は Arduino Due だけど、他の Arduino でも同じように使える回路になっているはず。

Arduino Due は 3.3V で動くので、AD 変換(アナログ-デジタル変換)の精度が最も良くなるのは 1.65V を中心に振幅が 1.65V の信号を入れたとき。しかし、iPod の出力の最大振幅は 1.0V 程度なので、AD 変換器の性能を引き出せない。

しかも、iPod のステレオミニプラグから取り出した音声信号は 0V を中心にして正負の電圧になる。それを ArduinoGND と A0 ピンに直接繋ぐと正側の信号しか取れないことになる。しかも Arduino の入力ピンに負電圧がかかるので Arduino を壊すかもしれない。

プリアンプの必要性

プリアンプ回路

ということで、中心電位を 1.65V に調整しつつ、振幅を増幅する回路を作る。それをプリアンプと呼ぶかどうかは良くわからないが、入力信号を調整するアンプという意味でそう呼ぶことにする。使った部品はすべて秋月電子通商で揃う。

プリアンプ回路図

回路図の左側がメインとなるアンプ回路だ。典型的な非反転増幅回路になっていて、増幅倍率を可変抵抗で調整できる。

右側が、Arduino から供給された 3.3V の電源から、その半分の 1.65V を作り出す回路だ。これもまたオペアンプの典型的な使い方で、ボルテージフォロワと呼ばれる。

回路図中のグランド記号がボルテージフォロワの出力に繋がっているのがポイントだ。電圧というのは相対的なもので、「グランド」を基準とすると ArduinoGND 端子は -1.65V、3.3V 電源端子は +1.65V になるというわけ。この回路のおかげで、アンプ回路の出力が Arduino からみて 1.65V を中心とした波形になる。

この設計の回路がちゃんと動くかは、後日検証する予定。

タッチパッドに手のひらが触れてカーソルが動くのを防止する

タイピング中に手のひらがタッチパッドに触れて、マウスカーソルが動いてしまったりクリックしてしまうことがある。それを防ぐために、タッチパッドの両端を無効化する方法を説明する。Ubuntu 15.04 で動作確認しているが、その他の Linux でも同様の方法が使えるはず。

続きを読む

【Ubuntu】ラップトップ PC の蓋を閉じてスリープさせる

LAVIE Direct HZ というラップトップ PC に Ubuntu 15.04 を入れて使っている。この PC は 13.3 型もの大きさがあるのに非常に軽く、筆者のお気に入りだ。ただ、残念なことに蓋を閉じてもスリープモードにならない問題があった。

※2017 年 1 月 29 日追記:Ubuntu 16.04 でも動作することを確認しました。

蓋を閉じてもスリープしない

蓋を開閉して dmesg を確認してみると、次のようなメッセージが出ることが確認できた。

f:id:uchan_nos:20200326090049p:plain

続きを読む