首页 > 其他 >特殊应用电路 > 如何连接数字电位计与Arduino

如何连接数字电位计与Arduino

来源:互联网发布者:念慈菴 关键词: 数字电位计 Arduino 更新时间: 2024/04/17

在本项目中,我们将连接数字电位计与arduino。在本演示中,使用MCP41010,但您可以使用MC41**系列的任何数字电位计。

MC41010简介

数字电位计就像任何具有三个端子的模拟电位计一样,只有一个区别。而在模拟中,您必须手动更改游标位置,而在数字电位计的情况下,游标位置是根据使用任何微控制器或微处理器提供给电位计的信号设置的。

FIG. MC41010 IC pinout

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欧姆/步进《》到《》

组件

我们需要此项目的以下组件。

  1. 阿杜伊诺

2.MC41010 集成电路

3.220欧姆电阻器

4.指示灯

5.连接线

如图所示进行连接。

  1. 将 cs 引脚连接到数字引脚 10。
  2. 将 SCK 引脚连接到数字引脚 13。
  3. 将SDI/SDO引脚连接到数字引脚11。
  4. VSS 到阿杜伊诺的接地引脚

5.PA0 至 5v 引脚的 arduino

6。PB0 到地面

arduino 7.PWO 到阿杜伊诺的模拟引脚 A0。

  1. VCC 至 5 V 的 arduino。

程序代码 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

提问/讨论

这里还没有内容,您有什么问题吗?

我要提问/讨论

推荐帖子 最新更新时间:2024-11-21 19:34

浅淡测试夹具制作的制作策略
浅淡测试夹具制作的制作策略 【来源:SMT论坛网】【作者:skyline82】【时间: 2005-8-2 9:09:48】【点击: 3724】 随着印刷线路板技术向多层、细线、小孔、高密度方向发展(其实已经来临并快速普及),
 fighting模拟电子
LCD无显示
小弟最近做LCD显示,出现下面状况,程序烧写进去后可以显示,但是过了一会就显示乱码,再过一会直接蓝屏了 下面是我的程序,麻烦过往 大侠赐教啊 #include \"stm32f10x_lib.h\" #include \"lcd.h\" /* Private t
 carsonqin1314stm32/stm8
关于时序分析中时钟的设置.
请教 各位:当 系统 中有一个20MHz的 输入 时钟时,经过PLL倍频后,产生一100MHz和一20MHz的内部时钟时,Clock Setting那里如何 设置 ,是不是应填最大的100MHz? PLL出来的100MHz和20MHz是不是相对于20MHz的输入时钟为衍生时
 swfc_qinmmFPGA/CPLD
多旋翼自主飞行器(C题)
多旋翼自主飞行器(C题) 多旋翼自主飞行器(C题) 这个要看看了。
 哲人心雨电子竞赛
■■■■■★千元征集优秀IT培训教师线索★■■■■■
千元征集优秀IT培训教师线索 北京传智播客教育科技有限公司是一家专门致力于高素质软件开发人才培养的高科技公司,公司自成立以来,以其独到的培训理念和教学方式,取得了骄人的成绩,迅速在IT培训界获得盛誉。为满足社会快速膨胀的培训需求,公司急需扩大培训规模,现隆重推出“千元征集优秀
 2042嵌入式系统
【USB充电器DIY】器件选择:其它(及完整清单)
其它使用到的一些器件/模块: ACS712ELCTR,电流传感器,¥3.18。 PCF8563时钟模块,¥2.7。 一位WS2812模块,¥0.4。 温度传感器,NTC,¥0.1。 2芯电源线,¥1。 2510风扇,¥
 dcexpert电源技术

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

EEWORLD 电路图 站点相关: 下载中心 Datasheet 参考设计

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved