在本项目中,我们将连接数字电位计与arduino。在本演示中,使用MCP41010,但您可以使用MC41**系列的任何数字电位计。
MC41010简介
数字电位计就像任何具有三个端子的模拟电位计一样,只有一个区别。而在模拟中,您必须手动更改游标位置,而在数字电位计的情况下,游标位置是根据使用任何微控制器或微处理器提供给电位计的信号设置的。
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 之间传输 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.连接线
如图所示进行连接。
5.PA0 至 5v 引脚的 arduino
6。PB0 到地面
arduino 7.PWO 到阿杜伊诺的模拟引脚 A0。
程序代码 1
此代码在Arduino IDE的串行监视器上打印游标端子和接地的电压变化。
#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的游标端子。因此,对于循环的值,即 i 被写入以改变电阻。
电路工作:
只要 i 的值不断将输入更改为 arduino 的 A0 引脚,也会在 0 到 1023
之间不断变化。这是因为游标端子直接连接到A0引脚,电位计的其他端子分别连接到5伏和地。现在,当电阻发生变化时,两端的电压也会发生变化,Arduino直接将其作为输入,因此我们在串行监视器上获得特定电阻值的电压值。
模拟 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 类似,只是此代码中没有串行命令。因此,不会在串行监视器上打印任何值。
工作说明
由于 LED 在游标端子和接地之间连接,电阻随电阻变化而变化,因此 LED 两端的电压也会发生变化。因此,随着 LED 连接的电阻从 0
欧姆上升到最大值,LED 的亮度也会增加。由于电阻从最大值降低到0v,它再次缓慢消失。
模拟2
模拟3
全部0条评论
快来发表一下你的评论吧 !