見出し画像

トーン&ボリュームコントロールの試作(その1):M62421をArduinoで制御

マイコンから制御できる電子ボリュームは何かないかと探していたところ、aitendoで三菱のM62421FPという安価なチップが目にとまりました。ボリュームだけでなくトーンコントロールもできるようです。

データシート(三菱)を見たところ、自分でも動かせそうな感じなので、試しにこのチップを使った電子ボリュームを試作してみました。


試作回路

ネットで検索するとルネサスのデータシートは日本語なので、こちらを参考にしました。下記はデータシートに載っていた応用回路です。

今回はこの回路をそのまま製作してみました。

応用回路例(ルネサスエレクトロニクス M62421SP/FPデータシートより抜粋)


出力の430Ωは手持ちが無かったので470Ωを使っています。ただ、三菱のデータシートでは430Ωはチップの中に入っていて、外付けは必要無い回路になっています。どちらが本当なのかは分かりませんが、一応外付けの抵抗を入れています。

トーンコントロール部分ですが、オペアンプ(SIMAMP)と、136KΩと1.8KΩの内部抵抗と、外付けのコンデンサー(0.022uF)によって、インダクタ(シミュレーテッド・インダクタ)を構成して、Bass用のフィルターに用いているようです。0.022uFでは中心周波数が100Hzとなるようなので、この値を変えればBassコントロールの中心周波数を変更できるように思います(未確認)。

また、TREBLEコントロールのハイパスフィルターの周波数は、0.033uFの値を変えれば変更できるように思います(未確認)。

回路の試作

今回試作した部品の一覧です。

製作に使用したパーツ

回路はブレッドボードを使って作ってみました。
M62421FPはピッチ変換基板を使ってブレッドボードに挿せるようにします。

ブレッドボードは2個使い、片方のブレッドボードの片側の電源ラインを取り除いて、2つのブレッドボードを横に並べてつなげると、ピッチ変換基板が丁度真ん中に挿せるようになります。

配線はFritzingを使って検討しつつ行いました。Fritzingの図では部品と配線が重なってしまって、わかりにくいかもしれませんが、下記のような感じです。もし、同じように製作されるかたは、写真と回路図も参考にして配線してください。

部品の配置と配線図
配線のみの図

制御用のマイコンには、とりあえず手持ちのArduino Leonardoを使いました。秋月のAE-ATMEGA328-MINIが安価で小さくて良いので、そのうち変更する予定です。サウンドコントローラーの制御インタフェースは+5Vなので、ラズパイなどのGPIOが3.3Vのマイコンを使う場合には、間にレベル変換を入れる必要があると思います。

音声信号の入出力は図の緑の線の部分です。

ちなみに、ブレッドボードの配線ですが、市販のジャンパー線は長さ毎に色分けされていて使いづらいので自分は使っていません。やっぱり、電源ラインは赤、GNDは黒など信号種別で色分けしたいので、単芯ケーブルを使って自分で作製しています。

電源ラインにバイパスコンデンサを入れた方が良いかなとも思いましたが、実際に動かして試聴しても特にノイズもないようなので、今は入れていません。

試作機の写真
Arduinoとの接続の様子
入出力を含めた動作中の様子

制御ソフトウェア

このチップの制御のコントロールデータは13ビット長となっています。
データの転送方法は簡単で、DATラインにビット値を設定し、CLKラインを立ち上げればセットされるので、それを13ビット分行えば良いだけです。13ビット送信した最後には、クロックの立ち下がりでラッチ信号を送ります。

制御速度は要求されないので、適当なGPIOが2本あれば制御できます。

データとクロックの関係(ルネサスエレクトロニクス M62421SP/FPデータシートより抜粋)

このチップをArduinoから制御するためのテストプログラムを製作しました。下記をダウンロードして展開し、ArduinoIDEで開けばビルドできると思います。

メインプログラムの例です。

#include "CM62421ToneControl.h"

#define CLK 7
#define DAT 8

CM62421ToneControl toneCont(CLK, DAT);

void setup() {
  Serial.begin(9600);
}

void loop() {
  toneCont.setVolume(-6);
  toneCont.setBass(0);
  toneCont.setTreble(0);

  delay(4000);
}

クロック用のピン番号とデータ用のピン番号を指定してCM62421ToneControlクラスを生成すれば、setVolume()関数でボリュームを、setBass()とsetTreble()の各関数でトーンコントロールを制御できます。また、setMute()関数でミュートのON/OFFができます。

ボリュームは0~-80、トーンコントロールは12~-12の値を指定できます。

トーンコントロールのレベルは2dBステップなので、0と1はともに0dB、2と3はともに2dBというようになります。

周波数特性

出力に10KΩの抵抗をつなぎ、入力に2Vp-pの正弦波を入れて周波数特性を測定してみました。

ボリューム制御時の周波数特性です。
20Hz~20KHzくらいの範囲ではほぼフラットで、制御値に合わせてほぼ正確に音量制御が行われているようです。-70dB以下の高音では制御が怪しくなりますが、おそらくここまで低くして使うことは無いかと思うので、ほとんど問題にならないように思います。

VOLUME制御時の周波数特性

次は、トーンコントロール時の周波数特性の測定です。VOLUMEコントロールは-6dBとしました。

BASSの制御時の周波数特性です。
データシートにある計算通り100Hzが中心周波数で制御されているようです。

BASS制御時の周波数特性

TREBLEの制御時の周波数特性です。
高音といってもかなり低い音(400Hzくらい)から全体が制御されるようです。

TREBLE制御時の周波数特性

BASSとTREBLEの両方を同じ量だけ制御したときの周波数特性です。
400Hzくらいを中心に低音と高音の制御がされるようです。

BASSとTREBLEを同時に制御時の周波数特性

周波数特性は以上のような感じです。

ひずみ率やS/N比なども測定したいところですが、機材がないので割愛します。

入力レベルですが、0dBのVOLUMEの状態では6.8Vp-p以上を入れると歪むようです。VOLUMEを下げればその分入力が大きくても大丈夫となるようです。

下記は測定した入出力電圧の特性です。
測定値から見ると入力が1.4Vrms以上では特性が悪くなっているようなので、1.4Vrms(≒4Vp-p)以下の入力で使うのが良さそうです。

入出力特性(Volume=0dB, Bass=0dB, Treble=0dB)

試聴

高音質オーディオを聞き分ける耳も装置も持っていないので、何とも言えませんが、ラズパイ5に搭載したDAC+の出力をこのボリュームコントローラの入力につなぎ、出力を秋月のヘッドフォンアンプにつないで聞いた感じでは、特に問題なく使えるように思いました。無入力でヘッドホンアンプのボリュームを最大にすればホワイトノイズは聞こえますが、それ以外は特に変なノイズは無さそうです。

まとめ

部品点数も少なく、考えていたより簡単に製作することができました。+9Vの単電源で動きますし、音質劣化もそれほどないように思いました。
トーンコントロールを使わずに単なる電子ボリューム(アッテネータ)として使うのも良いかと思います。

昔の機材はリモートで音量を調整できないものが多いので、これを使えば赤外線リモコンからでも、スマホからでも音量調整をさせるような機材が割に簡単に製作できるように思います。

続きはこちら。

いいなと思ったら応援しよう!