在本項(xiàng)目中,我們將連接數(shù)字電位計(jì)與arduino。在本演示中,使用MCP41010,但您可以使用MC41**系列的任何數(shù)字電位計(jì)。
MC41010簡介
數(shù)字電位計(jì)就像任何具有三個端子的模擬電位計(jì)一樣,只有一個區(qū)別。而在模擬中,您必須手動更改游標(biāo)位置,而在數(shù)字電位計(jì)的情況下,游標(biāo)位置是根據(jù)使用任何微控制器或微處理器提供給電位計(jì)的信號設(shè)置的。
MC41010是一款8引腳雙列直插式封裝IC。與任何模擬電位計(jì)一樣,該IC有5k、10k、50k和100k三種規(guī)格。本電路采用10k電位計(jì)
MC4131,有以下8個端子:
引腳編號 引腳名稱 很少描述
1 CS 此引腳用于選擇連接到 arduino 的從機(jī)或外設(shè)。如果為“低”,則選擇MC41010,如果為“高”,
則取消選擇MC41010。
2 SCLK共享/串行時鐘,arduino提供時鐘,用于初始化從Arduino到IC的
數(shù)據(jù)傳輸,反之亦然。
3 SDI/SDO 串行數(shù)據(jù)通過此引腳在 arduino 和 IC 之間傳輸 4 個 arduino 的 VSS 接地端子連接到 IC
的此引腳
。
5 PA0 這是電位器的一個端子。
6 PW0 此端子是電位器的游標(biāo)端子(用于改變電阻)
7 PB0 這是電位器的另一個端子。
8 VCC 通過此引腳為 IC 供電。
該IC僅包含一個電位計(jì)。有些IC最多內(nèi)置兩個電位計(jì)。此
游標(biāo)和任何其他端子之間的電阻值以 256 步變化,從 0 到 255。由于我們使用10k電阻,電阻值以10和256之間的步長變化:
39k/0= 255歐姆/步進(jìn)《》到《》
組件
我們需要此項(xiàng)目的以下組件。
- 阿杜伊諾
2.MC41010 集成電路
3.220歐姆電阻器
4.指示燈
5.連接線
如圖所示進(jìn)行連接。
- 將 cs 引腳連接到數(shù)字引腳 10。
- 將 SCK 引腳連接到數(shù)字引腳 13。
- 將SDI/SDO引腳連接到數(shù)字引腳11。
- VSS 到阿杜伊諾的接地引腳
5.PA0 至 5v 引腳的 arduino
6。PB0 到地面
arduino 7.PWO 到阿杜伊諾的模擬引腳 A0。
- VCC 至 5 V 的 arduino。
程序代碼 1
此代碼在Arduino IDE的串行監(jiān)視器上打印游標(biāo)端子和接地的電壓變化。
#include 《SPI.h》
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(“t 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(“t 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:
要將數(shù)字電位計(jì)與arduino一起使用,您需要首先包含arduino IDE本身提供的SPI庫。只需使用以下命令調(diào)用庫:
#include 《SPI.h》
在空隙設(shè)置中,引腳被指定為輸出或輸入。還給出了開始 SPI 和 arduino 和 ic 之間的串行通信的命令,它們是:
SPI.begin(); and
Serial.begin(9600);
在空隙回路中,for回路用于以總共256步改變數(shù)字電位器的電阻。首先從 0 到 255,然后再次返回到 0,每步之間有 10 毫秒的延遲:
for (int i = 0; i 《= 255; i++) and
for (int i = 255; i 》= 0; i--)
digitalPotWrite(i) 函數(shù)寫入值以改變 ic 特定地址的電阻。
游標(biāo)和終端之間的電阻可以使用以下公式計(jì)算:
R1= 10k*(256 電平)/256 + Rw 和
R2= 10k*電平/256 + Rw
這里R1=游標(biāo)和一個端子之間的電阻R2=游標(biāo)和其他端子
之間的電阻 電平=特定時刻的步進(jìn)(for回路中使用的變量“I”)
Rw=游標(biāo)端子
的電阻(可以在ic的數(shù)據(jù)表中找到)
使用digitalPotWrite()功能,通過將低電壓分配給CS引腳來選擇數(shù)字電位器芯片?,F(xiàn)在,當(dāng)選擇IC時,必須調(diào)用一個地址,該地址將寫入數(shù)據(jù)。在代碼的最后一部分:
SPI.transfer(B00010001);
調(diào)用地址B00010001,以選擇將在其上寫入數(shù)據(jù)的IC的游標(biāo)端子。因此,對于循環(huán)的值,即 i 被寫入以改變電阻。
電路工作:
只要 i 的值不斷將輸入更改為 arduino 的 A0 引腳,也會在 0 到 1023
之間不斷變化。這是因?yàn)橛螛?biāo)端子直接連接到A0引腳,電位計(jì)的其他端子分別連接到5伏和地?,F(xiàn)在,當(dāng)電阻發(fā)生變化時,兩端的電壓也會發(fā)生變化,Arduino直接將其作為輸入,因此我們在串行監(jiān)視器上獲得特定電阻值的電壓值。
模擬 1:
以下是該電路在i的各種值下的一些仿真圖片:
現(xiàn)在只需將一個串聯(lián)的 LED 與 220 歐姆電阻連接到 IC 的游標(biāo)端子,如圖所示。
代碼 2:
#include 《SPI.h》
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);
}
解釋代碼 2:
此代碼與代碼 1 類似,只是此代碼中沒有串行命令。因此,不會在串行監(jiān)視器上打印任何值。
工作說明
由于 LED 在游標(biāo)端子和接地之間連接,電阻隨電阻變化而變化,因此 LED 兩端的電壓也會發(fā)生變化。因此,隨著 LED 連接的電阻從 0
歐姆上升到最大值,LED 的亮度也會增加。由于電阻從最大值降低到0v,它再次緩慢消失。
模擬2
模擬3
-
引腳圖
+關(guān)注
關(guān)注
28文章
111瀏覽量
35226 -
數(shù)字電位計(jì)
+關(guān)注
關(guān)注
0文章
100瀏覽量
10558 -
Arduino
+關(guān)注
關(guān)注
187文章
6458瀏覽量
186504
發(fā)布評論請先 登錄
相關(guān)推薦
評論