ArduinoでデジタルポテンショメータMCP41xxを使用する

問題を排除するために楽器を試してください





このプロジェクトでは、デジタルポテンショメータをarduinoとインターフェースさせます。このデモンストレーションでは、ポテンショメータMCP41010が使用されていますが、MC41 **シリーズの任意のデジタルポテンショメータを使用できます。

アンキット・ネギ



MC41010の紹介

デジタルポテンショメータは、3つの端子を備えたアナログポテンショメータとまったく同じですが、違いは1つだけです。アナログではワイパーの位置を手動で変更する必要がありますが、デジタルポテンショメータの場合、ワイパーの位置はマイクロコントローラまたはマイクロプロセッサを使用してポテンショメータに与えられた信号に従って設定されます。

図。 MC41010ICのピン配列

図。 MC41010ICのピン配列



MC41010は、8ピンデュアルインラインパッケージICです。他のアナログポテンショメータと同様に、このICには5k、10k、50k、および100kがあります。この回路では、10kポテンショメータが使用されています
MC4131には次の8つの端子があります。

ピン番号ピン名簡単な説明

1 CSこのピンは、arduinoに接続されているスレーブまたは周辺機器を選択するために使用されます。これが
低の場合はMC41010が選択され、これが高の場合はMC41010の選択が解除されます。

2 SCLK共有/シリアルクロック、arduinoはからのデータ転送の初期化のためのクロックを提供します
ArduinoからICへ、またはその逆。

3 SDI / SDOシリアルデータはこのピンを介してarduinoとICの間で転送されます
4arduinoのVSSグランド端子はICのこのピンに接続されています。

5PA0これはポテンショメータの1つの端子です。

6 PW0この端子はポテンショメータのワイパー端子です(抵抗を変更するため)
7PB0これはポテンショメータのもう1つの端子です。

8 VCCICへの電力はこのピンを介して供給されます。

このICにはポテンショメータが1つしか含まれていません。一部のICには、最大2つのポテンショメータが組み込まれています。この
ワイパーと他の端子間の抵抗値は、0から255まで256ステップで変更されます。10kの抵抗を使用しているため、抵抗の値は次のステップで変更されます。
10k / 256 = 0〜255のステップあたり39オーム

コンポーネント

このプロジェクトには、次のコンポーネントが必要です。

1. ARDUINO
2. MC41010 IC
3. 220OHM抵抗器
4. LED
5.ワイヤーの接続

図のように接続します。

1.csピンをデジタルピン10に接続します。
2.SCKピンをデジタルピン13に接続します。
3. SDI / SDOピンをデジタルピン11に接続します。
4.arduinoのグランドピンへのVSS
5.arduinoのPA0から5vピン
6.PB0からarduinoのグラウンドへ
7.arduinoのアナログピンA0へのPWO。
8.5vのarduinoへのVCC。

プログラムコード1

このコードは、ArduinoIDEのシリアルモニターのワイパー端子とアース間の電圧変化を出力します。

#include
int CS = 10 // initialising variable CS pin as pin 10 of arduino
int x // initialising variable x
float Voltage // initialising variable voltage
int I // this is the variable which changes in steps and hence changes resistance accordingly.
void setup()
{
pinMode (CS , OUTPUT) // initialising 10 pin as output pin
pinMode (A0, INPUT) // initialising pin A0 as input pin
SPI.begin() // this begins Serial peripheral interfece
Serial.begin(9600) // this begins serial communications between arduino and ic.
}
void loop()
{
for (int i = 0 i <= 255 i++)// this run loops from 0 to 255 step with 10 ms delay between each step
{
digitalPotWrite(i) // this writes level i to ic which determines resistance of ic
delay(10)
x = analogRead(A0) // read analog values from pin A0
Voltage = (x * 5.0 )/ 1024.0// this converts the analog value to corresponding voltage level
Serial.print('Level i = ' ) // these serial commands print value of i or level and voltage across wiper
Serial.print(i) // and gnd on Serial monitor of arduino IDE
Serial.print(' Voltage = ')
Serial.println(Voltage,3)
}
delay(500)
for (int i = 255 i >= 0 i--) // this run loops from 255 to 0 step with 10 ms delay between each step
{
digitalPotWrite(i)
delay(10)
x = analogRead(A0)
Voltage = (x * 5.0 )/ 1024.0 // this converts the analog value to corresponding voltage level
Serial.print('Level i = ' ) // these serial commands print value of i or level and voltage across wiper
Serial.print(i) // and gnd on Serial monitor of arduino IDE
Serial.print(' Voltage = ')
Serial.println(Voltage,3)
}
}
int digitalPotWrite(int value) // this block is explained in coding section
{
digitalWrite(CS, LOW)
SPI.transfer(B00010001)
SPI.transfer(value)
digitalWrite(CS, HIGH)

コードの説明1:

arduinoでデジタルポテンショメータを使用するには、最初にarduinoIDE自体で提供されるSPIライブラリを含める必要があります。次のコマンドでライブラリを呼び出すだけです。
#include

ボイド設定では、ピンは出力または入力として割り当てられます。また、arduinoとic間のSPIおよびシリアル通信を開始するコマンドも提供されています。

#include
int CS = 10
int x
float Voltage
int i
void setup()
{
pinMode (CS , OUTPUT)
pinMode (A0, INPUT)
SPI.begin()// this begins Serial peripheral interfece
}
void loop()
{
for (int i = 0 i <= 255 i++)// this run loops from 0 to 255 step with 10 ms delay between each step
{
digitalPotWrite(i)// this writes level i to ic which determines resistance of ic
delay(10)
}
delay(500)
for (int i = 255 i >= 0 i--)// this run loops from 255 to 0 step with 10 ms delay between each step
{
digitalPotWrite(i)
delay(10)
}
}
int digitalPotWrite(int value)// this block is explained in coding section
{
digitalWrite(CS, LOW)
SPI.transfer(B00010001)
SPI.transfer(value)
digitalWrite(CS, HIGH)
}

ボイドループでは、forループを使用してデジタルポットの抵抗を合計256ステップで変更します。最初に0から255まで、次に再び0に戻り、各ステップの間に10ミリ秒の遅延があります。

SPI.begin() and Serial.begin(9600)

digitalPotWrite(i)関数は、これらの値を書き込んで、icの特定のアドレスの抵抗を変更します。

ワイパーとエンドターミナル間の抵抗は、次の式を使用して計算できます。

R1 = 10k *(256レベル)/ 256 + Rw
そして
R2 = 10k *レベル/ 256 + Rw

ここで、R1 =ワイパーと1つの端子間の抵抗
R2 =ワイパーと他の端子間の抵抗
レベル=特定の瞬間のステップ(forループで使用される変数「I」)
Rw =ワイパー端子の抵抗(icのデータシートに記載されています)
digitalPotWrite()関数を使用して、CSピンにLOW電圧を割り当てることにより、デジタルポテンショメータチップを選択します。これで、icが選択されたときに、データが書き込まれるアドレスを呼び出す必要があります。コードの最後の部分:

SPI.transfer(B00010001)

データが書き込まれるICのワイパー端子を選択するためにB00010001であるアドレスが呼び出されます。したがって、forループの値、つまりiは抵抗を変更するように記述されています。

回路動作:

iの値がarduinoのA0ピンへの入力を変更し続ける限り、0から1023の間でも変化し続けます。これは、ワイパー端子がA0ピンに直接接続され、ポテンショメータの他の端子がそれぞれ5ボルトとグランドに接続されているために発生します。抵抗が変化すると、その両端の電圧も変化します。これは、arduinoによって直接入力として取得されるため、シリアルモニターで特定の抵抗値の電圧値を取得します。

シミュレーション1:

これらは、iのさまざまな値でのこの回路のシミュレーション画像です。

次に、図に示すように、220オームの抵抗と直列に接続されたLEDをICのワイパー端子に接続します。

コード2:

for (int i = 0 i <= 255 i++) and for (int i = 255 i>= 0 i--)

コード2の説明:

このコードは、このコードにシリアルコマンドがないことを除いて、コード1と同様です。したがって、シリアルモニターには値は出力されません。

作業説明

抵抗が変化するとLEDがワイパー端子とアースの間に接続されるため、LEDの両端の電圧も変化します。したがって、LEDが接続されている抵抗が0オームから最大に上昇すると、LEDの輝度も上昇します。最大から0vへの抵抗の減少により、これもゆっくりと消えていきます。

シミュレーション2

シミュレーション3




前:ジョイスティックを使用してサーボモーターを制御する方法 次へ:Arduinoを使用してこの高度なデジタル電流計を作成します