NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

デジタルポテンショメータの使い方(AD5820BRU20)

https://cdn-ak.f.st-hatena.com/images/fotolife/n/nobita_RX7/20190803/20190803105801.jpg

20kΩデジタルポテンショメータ(AD5280BRU20)
 
 はんだ付けに苦労したしたデジタルポテンショメータ「AD5280BRU20」を実際に使って実験してみました!

1. デジタルポテンショメータとは?

 「AD5280BRU20」を例にデジタルポテンショメータに内蔵されているRDAC(英:Resistor Analog-Digital Conversion)回路を図1に示します。
※以下「AD5280/AD5282*」の仕様書より引用させて頂きました
 
1.1 デジタルポテンショメータの構造
 図1右赤点枠部より、端子A~B間には256個の抵抗(Rs=78Ω/個)が直列に並んでいます。
 それぞれの抵抗間からはワイパー端子Wが引き出されており、RDACラッチ内の8ビット・データをデコードして、256の可能な設定値の中から選択された位置のワイパー端子Wのみ通電します。
 その結果、端子A-W(B-W)間の抵抗値が変化します
イメージ 4
図1:デジタルポテンショメータ(AD5280BRU20)の内部構造
 
1.2 使用例
 端子Aに正電圧、端子BにGNDを接続する事で、端子Wに分圧された電圧が出力されます。デジタルポテンショメータはこの電圧をデジタルで制御する事が可能になります。
 使用例として従来アナログ機器に使用されている手動式ポテンショメータ(可変抵抗)を、単純にデジタルポテンショメータに置き換える事が可能です。
 目的に有ったセンサーとArduino等のマイコンを併用する事で、従来手動で操作していたアナログ機器を、僅かな改良で自動制御化する事も出来る優れものです!
 
1.3 AD5280BRU20とは
 Arduino等のマイコンからI2 C通信により、端子A~W(B~W)間の抵抗を0~20kΩの範囲で256段階に変化させる事が出来ます。
 参考ワイパー端子の接続位置における抵抗値は以下の通りです。起動時はミッドスケール(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データ値の増加でワイパーが抵抗ラダーを上に移動します。
表1:RDAC回路及びコードに対応する抵抗値(端子B~W間)
D(DEC) RWB(Ω) 出力状態
255 19982 フルスケール(RAB-1LSB+RW)
128 10060 ミッドスケール
1 138 1LSB
0 60 ゼロスケール(ワイパー抵抗)

 

表2:RDAC回路及びコードに対応する抵抗値(端子A~W間)
D(DEC) RWA(Ω) 出力状態
255 138 フルスケール
128 10060 ミッドスケール
1 19982 1LSB
0 20060 ゼロスケール
 
1.4 AD5280BRU20の仕様
 AD5280BRU20の仕様は表1の通りです。
 ICがTSSOPと非常に小さいので、電子工作で使う場合はSSOP-DIP変換基盤等を使ってDIP化しておくと便利です。

 

表1:AD5280BRU20の仕様
項目 内容
ポジション数 256
チャンネル数 1チャンネル
AB端子間固定抵抗値 20kΩ(他に50,200kΩ有)
AWB端子間最大電流 ±5mA
パワーオン時の抵抗 10kΩ
使用温度(℃) -40~+85℃
制御方式 I2C互換インターフェース
ピン数 14pin
ICパッケージ TSSOP
用途 ポテンショメータの置き換え
電源(VDD) 5~15V単電源or±4.5~5.5V両電源
ロジック電源(VLOGIC) 2.7~5.5V
A端子電圧(VA) +VDD(max15V)
B端子電圧(VB) 0V
 
1.5 AD5280BRU20ピン配置
 AD5280BRU20の端子図及び説明を図2に示します。
 このICは図2に示すAD0・AD1ピンの状態に応じて、4つのスレーブアドレスを指定できます。
 その為、最大4個のICを一つのSDA・SCLバス上(要プルアップ)に接続しスレーブアドレス別に個別制御する事が可能です。
 今回はIC一つを制御するので、AD0・AD1ピンは共にGNDに接続し「0」とします。
イメージ 6
図2:AD5280-IC PinOut
 
1.6 AD5280BRU20I2 C通信
 AD5280BRU20I2 C通信方法を図3に示します。
 ArduinoIDE による制御方法としては、Wire.h」ライブラリを使用して以下に示す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」
 
イメージ 5
図3:AD5280BRU20I2 C通信詳細

2. 実験!

 デジタルポテンショメータArduinoUNOからI2 C通信で制御してみました!
 
2.1 接続
 回路接続図をFritzingを使って図4の様に書いてみました。
 また図4の通り実際に繋げた状態を図5に示します。
イメージ 1
図4:ブレッドボード回路図
 
イメージ 2
図5:実際に作ったもの
 
2.2 プログラム
 図5の回路で、ArduinoUNOからI2 C通信により、端子A~W(B~W)間の抵抗値を0~20kΩの範囲で0~256段階で増加させるプログラムです
#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
図1:プログラム例
 
2.3 実験!
 図5の回路に、テスターを抵抗測定モードで図7の通り接続し、図6のプログラムを実行してみました。
 実行した結果、大体100Ωから20kΩ迄自動で抵抗値を変化出来ました!
イメージ 3
図7:実験結果

3. まとめ

 デジタルポテンショメータAD5280BRU20」の端子A~W間の抵抗値をArduinoUNOで自在に制御出来ました!
 これで古いアナログ機器を自在に?制御出来そうです
 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【NOBのArduino日記!】目次に戻る