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