Arduino와 함께 디지털 전위차계 MCP41xx 사용

문제를 제거하기 위해 도구를 사용해보십시오





이 프로젝트에서 우리는 arduino와 디지털 전위차계를 인터페이스 할 것입니다. 이 데모에서는 MCP41010이 사용되지만 MC41 ** 시리즈의 모든 디지털 전위차계를 사용할 수 있습니다.

작성자 : Ankit Negi



MC41010 소개

디지털 전위차계는 단 하나의 차이 만있는 세 개의 단자가있는 아날로그 전위차계와 같습니다. 아날로그 방식에서는 와이퍼 위치를 수동으로 변경해야하는 반면, 디지털 포텐셔미터의 경우 와이퍼 위치는 마이크로 컨트롤러 나 마이크로 프로세서를 사용하여 포텐셔미터에 주어진 신호에 따라 설정됩니다.

무화과. MC41010 IC 핀아웃

무화과. MC41010 IC 핀아웃



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 이것은 전위차계의 또 다른 단자입니다.

이 핀을 통해 IC에 대한 8 VCC 전력이 제공됩니다.

이 IC에는 전위차계가 하나만 포함되어 있습니다. 일부 IC에는 최대 2 개의 전위차계가 내장되어 있습니다. 이
와이퍼와 다른 단자 사이의 저항 값은 0에서 255까지 256 단계로 변경됩니다. 10k 저항기를 사용하기 때문에 저항기 값은 다음 단계로 변경됩니다.
10k / 256 = 0에서 255 사이의 단계 당 39 옴

구성 요소

이 프로젝트에는 다음 구성 요소가 필요합니다.

1. 아르 두 이노
2. MC41010 IC
3. 220 옴 저항기
4. LED
5. 연결 배선

그림과 같이 연결하십시오.

1. cs 핀을 디지털 핀 10에 연결합니다.
2. SCK 핀을 디지털 핀 13에 연결합니다.
3. SDI / SDO 핀을 디지털 핀 11에 연결합니다.
4. arduino의 접지 핀에 VSS
5. arduino의 PA0 ~ 5v 핀
6. arduino의 접지에 PB0
7. arduino의 아날로그 핀 A0에 대한 PWO.
8. arduino의 VCC에서 5V로.

프로그램 코드 1

이 코드는 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(' 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(' 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 라이브러리를 포함해야합니다. 다음 명령으로 라이브러리를 호출하십시오.
#포함

무효 설정에서 핀은 출력 또는 입력으로 지정됩니다. 그리고 arduino와 ic 간의 SPI 및 직렬 통신을 시작하는 명령도 제공됩니다.

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

void 루프에서 for 루프는 총 256 단계로 디지털 포트의 저항을 변경하는 데 사용됩니다. 먼저 0에서 255까지 그리고 다시 0으로 돌아가서 각 단계 사이에 10 밀리 초 지연 :

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

digitalPotWrite (i) 함수는 ic의 특정 주소에서 저항을 변경하기 위해이 값을 기록합니다.

와이퍼와 끝단 사이의 저항은 다음 공식을 사용하여 계산할 수 있습니다.

R1 = 10k * (256 수준) / 256 + Rw

R2 = 10k * 레벨 / 256 + Rw

여기서 R1 = 와이퍼와 한 단자 사이의 저항
R2 = 와이퍼와 다른 단자 사이의 저항
레벨 = 특정 순간의 단계 (for 루프에서 사용되는 변수 'I')
Rw = 와이퍼 단자의 저항 (IC 데이터 시트에서 찾을 수 있음)
digitalPotWrite () 함수를 사용하여 CS 핀에 LOW 전압을 할당하여 디지털 전위차계 칩을 선택합니다. 이제 IC가 선택되면 데이터가 기록 될 주소를 호출해야합니다. 코드의 마지막 부분에서 :

SPI.transfer (B00010001)

데이터가 기록 될 IC의 와이퍼 단자를 선택하기 위해 B00010001이라는 주소가 호출됩니다. 따라서 for 루프의 값, 즉 i는 저항을 변경하도록 작성되었습니다.

회로 작동 :

i의 값이 계속해서 arduino의 A0 핀으로 입력을 변경하는 한 0과 1023 사이에서 계속 변경됩니다. 이는 와이퍼 단자가 A0 핀에 직접 연결되고 전위차계의 다른 단자가 각각 5 볼트와 접지에 연결되어 있기 때문에 발생합니다. 이제 저항이 변하면 arduino에 의해 직접 입력되는 전압이 변경되므로 특정 저항 값에 대해 직렬 모니터에서 전압 값을 얻습니다.

시뮬레이션 1 :

다음은 i의 다양한 값에서이 회로에 대한 몇 가지 시뮬레이션 사진입니다.

이제 220ohm 저항과 직렬로 연결된 LED를 그림과 같이 IC의 와이퍼 단자에 연결하십시오.

코드 2 :

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

코드 설명 2 :

이 코드는이 코드에 직렬 명령이 없다는 점을 제외하면 코드 1과 유사합니다. 따라서 직렬 모니터에는 값이 인쇄되지 않습니다.

작업 설명

led는 저항이 변함에 따라 와이퍼 단자와 접지 사이에 연결되므로 led 양단의 전압도 마찬가지입니다. 따라서 led가 연결된 저항이 0ohm에서 최대로 증가함에 따라 led의 밝기도 증가합니다. 저항이 최대에서 0v로 감소하기 때문에 다시 천천히 사라집니다.

시뮬레이션 2

시뮬레이션 3




이전 : 조이스틱을 사용하여 서보 모터를 제어하는 ​​방법 다음 : Arduino를 사용하여 고급 디지털 전류계 만들기