Projetos de circuito eletrônicoProjetos de engenharia do ArduinoUsando o potenciômetro digital MCP41xx com Arduino

Usando o potenciômetro digital MCP41xx com Arduino

Relacionados

Neste projeto vamos fazer a interface de um potenciômetro digital com arduino. Nesta demonstração é usado o potenciômetro MCP41010, mas você pode usar qualquer potenciômetro digital da série MC41**.

Por Ankit Negi

INTRODUÇÃO AO MC41010

Os potenciômetros digitais são como qualquer potenciômetro analógico com três terminais com apenas uma diferença. Considerando que no analógico você tem que mudar manualmente a posição do limpador, no caso do potenciômetro digital a posição do limpador é ajustada de acordo com o sinal dado ao potenciômetro usando qualquer microcontrolador ou microprocessador.

FIGO.  PINAGEM IC MC41010

FIGO. Pinagem IC MC41010

O MC41010 é um IC de pacote duplo em linha de 8 pinos. Assim como qualquer potenciômetro analógico, este IC vem em 5k, 10k, 50k e 100k. Neste circuito é usado potenciômetro de 10k
MC4131 tem os seguintes 8 terminais:

Número do pino Pin Name Pequena descrição

1 CS Este pino é usado para selecionar o escravo ou periférico conectado ao arduino. Se isso é
Low então MC41010 é selecionado e se for alto então MC41010 é desmarcado.

2 SCLK Shared/Serial Clock, arduino dá clock para inicialização de transferência de dados de
Arduino para IC e vice-versa.

3 Dados seriais SDI/SDO são transferidos entre o arduino e o IC através deste pino
4 O terminal de terra VSS do arduino está conectado a este pino do IC.

5 PA0 Este é um terminal do potenciômetro.

6 PW0 Este terminal é o terminal do limpador do potenciômetro (para alterar a resistência)
7 PB0 Este é outro terminal do potenciômetro.

8 VCC Power to IC é dado através deste pino.

Este CI contém apenas um potenciômetro. Alguns IC têm no máximo dois potenciômetros embutidos. este
O valor da resistência entre o limpador e qualquer outro terminal é alterado em 256 etapas, de 0 a 255. Como estamos usando um resistor de 10k, o valor do resistor é alterado em etapas de:
10k/256= 39 ohms por passo entre 0 e 255

COMPONENTES

Precisamos dos seguintes componentes para este projeto.

1. ARDUINO
2. MC41010 IC
3. RESISTOR DE 220 OHM
4. LED
5. FIOS DE CONEXÃO

IMG 6244787453B24

Faça as conexões conforme mostrado na fig.

1. Conecte o pino cs ao pino digital 10.
2. Conecte o pino SCK ao pino digital 13.
3. Conecte o pino SDI/SDO ao pino digital 11.
4. VSS ao pino terra do arduino
5. pino PA0 a 5v do arduino
6. PB0 para terra do arduino
7. PWO para pino analógico A0 do arduino.
8. VCC a 5 v de arduino.

CÓDIGO DO PROGRAMA 1

Este código imprime a mudança de tensão no terminal do limpador e no terra no Serial Monitor do Arduino IDE.

#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("\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);

CÓDIGO DE EXPLICAÇÃO 1:

Para usar o potenciômetro digital com o arduino, você precisa incluir a biblioteca SPI primeiro, que é fornecida no próprio IDE do arduino. Basta chamar a biblioteca com este comando:
#incluir

Na configuração void, os pinos são atribuídos como saída ou entrada. E comandos para iniciar a comunicação serial e SPI entre arduino e ic também são fornecidos, que são:

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

No loop vazio, o loop for é usado para alterar a resistência do potenciômetro digital em um total de 256 passos. Primeiro de 0 a 255 e depois de volta a 0 com 10 milissegundos de atraso entre cada etapa:

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

A função digitalPotWrite(i) escreve esses valores para alterar a resistência em um endereço específico de ic.

A resistência entre o limpador e o terminal final pode ser calculada usando estas fórmulas:

R1= 10k*(nível 256)/256 + Rw
E
R2= 10k*nível/256 + Rw

Aqui R1= resistência entre o limpador e um terminal
R2= resistência entre o limpador e outro terminal
Nível = passo em um determinado instante (variável “I” usada no loop for)
Rw= resistência do terminal do limpador (pode ser encontrado na folha de dados do ic )
Usando a função digitalPotWrite(), o chip do potenciômetro digital é selecionado atribuindo tensão BAIXA ao pino CS. Agora que o ic é selecionado, um endereço deve ser chamado no qual os dados serão gravados. Na última parte do código:

SPI.transfer(B00010001);

É chamado o endereço que é B00010001 para selecionar o terminal de limpeza do ic no qual os dados serão gravados. E, portanto, para o valor do loop, ou seja, i é escrito para alterar a resistência.

FUNCIONAMENTO DO CIRCUITO:

Enquanto o valor de i continua mudando a entrada para o pino A0 do arduino também continua mudando entre 0 e 1023. Isso acontece porque o terminal do limpador está diretamente conectado ao pino A0, e o outro terminal do potenciômetro está conectado a 5 volts e terra respectivamente. Agora, quando a resistência muda, também muda a tensão através dela, que é diretamente tomada pelo arduino como entrada e, assim, obtemos um valor de tensão no monitor serial para um valor específico de resistência.

SIMULAÇÃO 1:

IMG 62447874A10A9

Estas são algumas imagens de simulação para este circuito em vários valores de i:

IMG 62447874D9AD4

Agora é só conectar um led em série com resistor de 220ohm ao terminal do limpador do IC conforme mostrado na figura.

CÓDIGO 2:

#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);
}

CÓDIGO DE EXPLICAÇÃO 2:

Este código é semelhante ao código 1, exceto que não há comandos seriais neste código. Portanto, nenhum valor será impresso no monitor serial.

EXPLICAÇÃO DE TRABALHO

Como o led está conectado entre o terminal do limpador e o terra conforme a resistência muda, o mesmo acontece com a tensão no led. E, portanto, à medida que a resistência através da qual o led está conectado aumenta de 0ohm para o máximo, o brilho do led também aumenta. Que novamente desaparecem lentamente devido à diminuição da resistência do máximo para 0v.

Simulação2

IMG 624478752481D

Simulação3

IMG 624478756D02E

Hashtags: #Usando #potenciômetro #digital #MCP41xx #Arduino
 

FONTE


Nota: Este conteúdo foi traduzido do Inglês para português (auto)
Pode conter erros de tradução

Olá, se tiver algum erro de tradução (AUTO), falta de link para download etc…
Veja na FONTE até ser revisado o conteúdo.
Status (Ok Até agora)


Se tiver algum erro coloque nos comentários

Mas se gostou compartilhe!!!

Relacionados

Relacionados