20kΩデジタルポテンショメータ(AD5280BRU20)
1. デジタルポテンショメータとは?
※以下「AD5280/AD5282*」の仕様書より引用させて頂きました
1.1 デジタルポテンショメータの構造
図1右赤点枠部より、端子A~B間には256個の抵抗(Rs=78Ω/個)が直列に並んでいます。
それぞれの抵抗間からはワイパー端子Wが引き出されており、RDACラッチ内の8ビット・データをデコードして、256の可能な設定値の中から選択された位置のワイパー端子Wのみ通電します。
その結果、端子A-W(B-W)間の抵抗値が変化します。

1.2 使用例
使用例として従来アナログ機器に使用されている手動式ポテンショメータ(可変抵抗)を、単純にデジタルポテンショメータに置き換える事が可能です。
1.3 AD5280BRU20とは
参考ワイパー端子の接続位置における抵抗値は以下の通りです。起動時はミッドスケール(10,060Ω以上)からスタートします。
〇1番目の接続
データ00HのB端子から始まります。60Ωのワイパー接触抵抗があるため、この接続によって端子Wと端子B間に最小60Ωの抵抗が生じます。
〇2 番目の接続
データ01Hの138Ω(RWB=RAB/256+RW= 78Ω+60Ω)に対応する最初のタップ・ポイントです。
〇3番目 の接続
データ02Hの216Ω(78×2+60)を表す次のタッ プ・ポイントです。※以下同様
〇最後の接続
最後のタップ・ポイント が19982Ω(RAB-1 LSB+RW)になるまで、各LSBデータ値の増加でワイパーが抵抗ラダーを上に移動します。
D(DEC) | RWB(Ω) | 出力状態 |
255 | 19982 | フルスケール(RAB-1LSB+RW) |
128 | 10060 | ミッドスケール |
1 | 138 | 1LSB |
0 | 60 | ゼロスケール(ワイパー抵抗) |
D(DEC) | RWA(Ω) | 出力状態 |
255 | 138 | フルスケール |
128 | 10060 | ミッドスケール |
1 | 19982 | 1LSB |
0 | 20060 | ゼロスケール |
1.4 AD5280BRU20の仕様
AD5280BRU20の仕様は表1の通りです。
ICがTSSOPと非常に小さいので、電子工作で使う場合はSSOP-DIP変換基盤等を使ってDIP化しておくと便利です。
1.5 AD5280BRU20のピン配置
AD5280BRU20の端子図及び説明を図2に示します。
このICは図2に示すAD0・AD1ピンの状態に応じて、4つのスレーブアドレスを指定できます。
その為、最大4個のICを一つのSDA・SCLバス上(要プルアップ)に接続しスレーブアドレス別に個別制御する事が可能です。
今回はIC一つを制御するので、AD0・AD1ピンは共にGNDに接続し「0」とします。

図2:AD5280-IC PinOut
1.6 AD5280BRU20のI2 C通信
AD5280BRU20のI2 C通信方法を図3に示します。
〇スレーブ・アドレス・バイト
I2 C通信時に最初に送信する7ビットのスレーブアドレスは以下の通りです。
※AD0・AD1ピンをGNDに接続時
「2進数:B0101100」= 「10進数:44」= 「16進数:0x2C」
〇インストラクション・バイト
以下の通り「0」を送信します。
※インストラクション・バイトのMSBは、RDACサブアドレス選択です。デュアル・チャンネルAD5282の場合、「ロー」でRDAC1を選択し、「ハイ」でRDAC2を選択します。AD5280の場合、A/Bをローに設定します。
※O1・O2ビットは、特別なプログラマブル・ロジック出力で、他のデジタル負荷、ロジック・ゲート、LEDドライバ、アナログ・スイッチなどを駆動できます。
「2進数:B0000000」= 「10進数:0」= 「16進数:0x00」
〇データ・バイト
書き込みモードでの最後のバイトはデータ・バイトです。
データは、9つのクロック・パルス(8つのデータ・ビットとそれに続くアクノレッジ・ビット)の連続でシリアル・バス上に送信されます。
この値に応じた表1,2に示す抵抗値に端子A~W(B~W)間の抵抗値が変化します。
「10進数:0~255」

図3:AD5280BRU20のI2 C通信詳細
2.1 接続
回路接続図をFritzingを使って図4の様に書いてみました。
また図4の通り実際に繋げた状態を図5に示します。


図5:実際に作ったもの
2.2 プログラム

#include <Wire.h> byte val = 0; void setup() { Wire.begin(); // i2cバスに参加する(マスタの場合はアドレスはオプション) } void loop() { Wire.beginTransmission(44); //デバイス#44(0x2c)に送信する // デバイスアドレスはデータシートで指定されています Wire.write(byte(0x00)); // 命令バイト Wire.write(val); // ポテンショメータ値のバイトを送信する Wire.endTransmission(); // 送信を停止する val++; // 増加 if (val == 256) { // 256番目の位置に達した場合(最大) val = 0; // 最小値から再スタートする } delay(100); }

図1:プログラム例

3. まとめ
これで古いアナログ機器を自在に?制御出来そうです!


