ポテンショメータは、必要な値に応じて抵抗を設定し、それを通過する電流を変化させることができる機械装置です。ポテンショメータには多くの用途がありますが、ほとんどの場合、ポテンショメータはオーディオアンプのボリュームコントローラとして使用されます。
ポテンショメータは信号のゲインを制御しませんが、分圧器を形成するため、入力信号が減衰します。したがって、このプロジェクトでは、IC PT2258を使用してデジタルボリュームコントローラーを構築し、Arduinoとインターフェイスしてアンプ回路のボリュームを制御する方法を紹介します。また、VUメーター、トーンコントロール回路など、オーディオ関連のさまざまな回路をここで確認できます。
IC PT2258
先に述べたように、PT2258は6チャンネル電子ボリュームコントローラーとして使用するために作られたICであり、このICはマルチチャンネルオーディオビデオアプリケーション用に特別に設計されたCMOSテクノロジーを使用しています。
このICは、1dB /ステップで0〜-79dBの減衰範囲を持つI2C制御インターフェースを提供し、20ピンDIPまたはSOPパッケージで提供されます。
基本機能のいくつかは次のとおりです。
- 6-入力および出力チャンネル(5.1ホームオーディオシステムの場合)
- 選択可能なI2Cアドレス(デイジーチェーンアプリケーション用)
- 高チャネル分離(低ノイズアプリケーション用)
- S / N比> 100dB
- 動作電圧は5〜9Vです
PT2258ICのしくみ
このICは、SCLおよびSDAラインを介してマイクロコントローラとデータを送受信します。SDAとSCLはバスインターフェースを構成します。これらのラインは、安定した動作を保証するために、2つの4.7K抵抗によってハイにプルアップする必要があります。
実際のハードウェア操作に進む前に、ICの詳細な機能説明を示します。これらすべてを知りたくない場合は、すべての機能部分がArduinoライブラリによって管理されているため、この部分をスキップできます。
データ検証
- SCL信号がHIGHの場合、SDAラインのデータは安定していると見なされます。
- SDAラインのHIGH状態とLOW状態は、SCLがLOWの場合にのみ変化します。
開始条件と停止条件
開始条件は、次の場合にアクティブになります。
- SCLがHIGHに設定され、
- SDAがHIGH状態からLOW状態に移行します。
停止条件は、次の場合にアクティブになります。
- SCLがHIGHに設定され、
- SDAがLOWからHIGH状態に移行します
注意!この情報は、信号のデバッグに非常に役立ちます。
データ形式
SDAラインに送信されるすべてのバイトは、1バイトを形成する8ビットで構成されます。各バイトの後には確認応答ビットが続く必要があります。
了承
謝辞は、安定した適切な操作を保証します。Acknowledge Clock Pulseの間、マイクロコントローラは、周辺機器(オーディオプロセッサ)がSDAラインをプルダウン(LOW)するこの瞬間に、SDAピンをHIGHにプルします。
周辺機器(PT2258)がアドレス指定され、バイトの受信後に確認応答を生成する必要があります。そうしないと、SDAラインは9番目(9番目)のクロックパルスの間Highレベルのままになります。これが発生した場合、マスタートランスミッターは転送を中止するためにSTOP情報を生成します。
これにより、有効なデータ転送を行う必要がなくなります。
アドレスの選択
このICのI2Cアドレスは、CODE1(ピンNo.17)とCODE2(ピンNo.4)の状態によって異なります。
CODE1(PIN No.17) |
CODE2(PIN No. 4) |
16進アドレス |
0 |
0 |
0X80 |
0 |
1 |
0X84 |
1 |
0 |
0X88 |
1 |
1 |
0X8C |
ロジックハイ= 1
ロジックロー= 0
インターフェイスプロトコル
インターフェイスプロトコルは、次のもので構成されています。
- スタートビット
- チップアドレスバイト
- ACK =確認ビット
- データバイト
- ストップビット
少しハウスキーピング
ICの電源を入れた後、最初のデータビットを送信する前に少なくとも200ms待機する必要があります。そうしないと、データ転送が失敗する可能性があります。
遅延後、最初に行うことは、I2Cラインに「0XC0」を送信してレジスタをクリアすることです。これにより、適切な動作が保証されます。
上記の手順でレジスタ全体がクリアされます。次に、レジスタに値を設定する必要があります。そうしないと、レジスタにガベージ値が格納され、問題のある出力が返されます。
適切な音量調整を確実にするには、10dBの倍数に続いて1dBコードを減衰器に順番に送信する必要があります。そうしないと、ICが異常に動作する可能性があります。下の図はそれをさらに明確にしています。
上記の両方の方法が正しく機能します。
適切な動作を保証するために、I2Cデータ転送速度が100KHzを超えないようにしてください。
このようにして、バイトをICに送信し、入力信号を減衰させることができます。上記のセクションではICの機能を学習しますが、前述したように、Arduinoライブラリを使用してすべてのハードコードを管理するICと通信し、いくつかの関数呼び出しを行う必要があります。
上記の情報はすべてデータシートから取得したものです。詳細については、データシートを参照してください。
回路図
上の画像は、PT2258ベースのボリューム制御回路のテスト回路図を示しています。データシートから取得し、必要に応じて変更します。
デモンストレーションでは、回路は上記の回路図を使用して無はんだブレッドボード上に構築されます。
注意!すべてのコンポーネントは、寄生容量のインダクタンスと抵抗を減らすために、可能な限り近くに配置されます。
必要なコンポーネント
- PT2258 IC – 1
- Arduino Nanoコントローラー– 1
- ジェネリックブレッドボード– 1
- ネジ留め式端子5mmx 3 – 1
- プッシュボタン– 1
- 4.7K抵抗、5%-2
- 150K抵抗、5%-4
- 10k抵抗、5%-2
- 10uFコンデンサ– 6
- 0.1uFコンデンサ– 1
- ジャンパー線-10
Arduinoコード
簡単にするために、sunrutconによって作成されたGitHubのPT2258ライブラリを使用します。
これは非常によく書かれたライブラリであるため、私はそれを使用することにしましたが、非常に古いため、少しバグがあり、使用する前に修正する必要があります。
まず、GitHubリポジトリからライブラリをダウンロードして抽出します。
抽出後、上記の2つのファイルを取得します。
#include #include
次に、お気に入りのテキストエディタで PT2258.cpp ファイルを開きます。私はNotepad ++を使用しています。
ワイヤーライブラリの「w」が小文字であることがわかります。これは最新のArduinoバージョンと互換性がなく、キャップ「W」に置き換える必要があります。それだけです。
PT2258ボリュームコントローラーの完全なコードは、このセクションの最後にあります。ここでは、プログラムの重要な部分について説明します。
必要なすべてのライブラリファイルを含めることからコードを開始します。ワイヤーライブラリは、ArduinoとPT2258の間の通信に使用されます。PT2258ライブラリには、すべての重要なI2Cタイミング情報と確認応答が含まれています。 ezButtonの ライブラリーは、プッシュボタンとのインターフェースに使用されます。
以下のコードイメージを使用する代わりに、コードファイルからすべてのコードインスタンスをコピーして、他のプロジェクトで行っていたようにフォーマットします。
#include
次に、2つのボタンのオブジェクトとPT2258ライブラリ自体を作成します。
PT2258 pt2258; ezButton button_1(2); ezButton button_2(4);
次に、音量レベルを定義します。これは、このICが開始するデフォルトの音量レベルです。
Int volume = 40;
次に、UARTを開始し、I2Cバスのクロック周波数を設定します。
Serial.begin(9600); Wire.setClock(100000);
I2Cクロックを設定することは非常に重要です。そうしないと、このICでサポートされる最大クロック周波数が100KHzであるため、ICは機能しません。
次に、ICがI2Cバスと適切に通信していることを確認するために、 ifelse ステートメントを使用して少しハウスキーピングを行います。
If(!pt2258.init())Serial.printIn(“ PT2258 Successfully Initiated”); それ以外の場合、Serial.printIn( "PT2258の開始に失敗しました");
次に、プッシュボタンのデバウンス遅延を設定します。
Button_1.setDebounceTime(50); Button_2.setDebounceTime(50);
最後に、デフォルトのチャネルボリュームとピン番号を設定してPT2258ICを起動します。
/ *デフォルトのボリュームとピンでPTを開始します* / Pt2258.setChannelVolume(volume、4); Pt2258.setChannelVolume(volume、5);
これは、 Void Setup() セクションの終わりを示し ます 。
では ループ セクション、我々は、ボタンクラスからループ機能を呼び出す必要があります。それは図書館の規範です。
Button_1.loop(); //ライブラリの基準Button_2.loop(); //ライブラリの規範
以下の if セクションは音量を下げることです。
/ *条件が真の場合にボタン1が押された場合* / If(button_1.ispressed()){Volume ++; //ボリュームカウンターをインクリメントします。//このifステートメントは、ボリュームが79を超えないようにしますIf(volume> = 79){Volume = 79; } Serial.print(“ volume:“); //ボリュームレベルを印刷しますSerial.printIn(volume); / * PT2558ICのPIN9にあるチャネル4の音量を設定します* / Pt2558.setChannelVolume(volume、4); / * PT2558ICのPIN10であるチャネル5の音量を設定します* / Pt2558.setChannelVolume(volume、5); }
以下の if セクションは音量を上げるためのものです。
//ボタン2についても同じことが起こりますIf(button_2.isPressed()){Volume--; //このifステートメントは、音量レベルがゼロを下回らないようにします。If(volume <= 0)Volume = 0; Serial.print( "ボリューム:"); Serial.printIn(ボリューム); Pt2258.setChannelVolume(volume、4); Pt2558.setChannelVolume(volume、5); }
デジタルオーディオボリュームコントロール回路のテスト
回路をテストするために、次の装置が使用されました
- 13-0-13タップのトランス
- 24Ω20Wスピーカーを負荷として。
- オーディオソース(電話)
前回の記事では、TDA2050 ICを使用したシンプルな2x32ワットのオーディオアンプの作り方を紹介しましたが、これをこのデモンストレーションにも使用します。
機械式ポテンショメータを乱し、2本の小さなジャンパーケーブルで2本のリード線を短絡しました。
これで、2つの押しボタンを使用して、アンプの音量を制御できます。
さらなる強化
回路は、その性能を向上させるためにさらに変更することができます。回路のような改善をPCBに加えて、ICのデジタルセクションによって生成されるノイズをさらに排除することができます。高周波ノイズを除去するために、フィルターを追加することもできます。また、他のオーディオアンプ回路や他のオーディオ関連プロジェクトもチェックしてください。
この記事が気に入って、そこから何か新しいことを学んだことを願っています。疑問がある場合は、以下のコメントで質問するか、フォーラムを使用して詳細なディスカッションを行うことができます。