Sử dụng chiết áp kỹ thuật số MCP41xx với Arduino

Hãy Thử Công Cụ CủA Chúng Tôi Để LoạI Bỏ Các VấN Đề





Trong dự án này, chúng ta sẽ giao tiếp một chiết áp kỹ thuật số với arduino. Trong phần trình diễn này chiết áp MCP41010 được sử dụng nhưng bạn có thể sử dụng bất kỳ chiết áp kỹ thuật số nào của dòng MC41 **.

Bởi Ankit Negi



GIỚI THIỆU VỀ MC41010

Chiết áp kỹ thuật số cũng giống như bất kỳ chiết áp tương tự nào có ba thiết bị đầu cuối chỉ có một điểm khác biệt. Trong khi ở chế độ tương tự, bạn phải thay đổi vị trí gạt nước theo cách thủ công, Trong trường hợp vị trí gạt nước của chiết áp kỹ thuật số được đặt theo tín hiệu được cung cấp cho chiết áp bằng bất kỳ bộ vi điều khiển hoặc bộ vi xử lý nào.

QUẢ SUNG. Sơ đồ chân IC MC41010

QUẢ SUNG. Sơ đồ chân IC MC41010



MC41010 là một IC gói dòng kép 8 chân. Cũng giống như bất kỳ chiết áp tương tự nào, IC này có các loại 5k, 10k, 50k và 100k. Trong mạch này chiết áp 10k được sử dụng
MC4131 có 8 thiết bị đầu cuối sau:

Ghim số. Tên ghim Mô tả nhỏ

1 CS Chân này được sử dụng để chọn nô lệ hoặc thiết bị ngoại vi được kết nối với arduino. Nêu Đây la
Thấp thì MC41010 được chọn và nếu mức này cao thì MC41010 được bỏ chọn.

2 Đồng hồ Nối tiếp / Chia sẻ SCLK, arduino cung cấp đồng hồ để khởi tạo truyền dữ liệu từ
Arduino sang IC và ngược lại.

3 SDI / SDO Dữ liệu nối tiếp được chuyển giữa arduino và IC thông qua chân này
4 VSS Đầu nối đất của arduino được kết nối với chân này của IC.

5 PA0 Đây là một đầu cuối của chiết áp.

6 PW0 Đầu cuối này là đầu cuối gạt nước của chiết áp (để thay đổi điện trở)
7 PB0 Đây là một đầu nối khác của chiết áp.

8 VCC Nguồn cấp cho IC được cấp qua chân này.

IC này chỉ chứa một chiết áp. Một số vi mạch có nhiều nhất hai chiết áp sẵn có. Điều này
Giá trị của điện trở giữa gạt nước và bất kỳ thiết bị đầu cuối nào khác được thay đổi trong 256 bước, từ 0 đến 255. Vì chúng tôi đang sử dụng giá trị điện trở 10k của điện trở được thay đổi theo các bước:
10k / 256 = 39 ohms mỗi bước từ 0 đến 255

CÁC THÀNH PHẦN

Chúng tôi cần các thành phần sau cho dự án này.

1. ARDUINO
2. IC MC41010
3. ĐIỆN TRỞ 220 OHM
4. LED
5. DÂY KẾT NỐI

Tạo kết nối như trong hình.

1. Kết nối chân cs với chân số 10.
2. Kết nối chân SCK với chân số 13.
3. Kết nối chân SDI / SDO với chân số 11.
4. VSS đến chân nối đất của arduino
5. Chân PA0 đến 5v của arduino
6. PB0 đến mặt đất của arduino
7. PWO đến chân analog A0 của arduino.
8. VCC đến 5 v của arduino.

MÃ CHƯƠNG TRÌNH 1

Mã này in sự thay đổi điện áp trên đầu cuối cần gạt và mặt đất trên Serial Monitor của 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)

GIẢI THÍCH MÃ 1:

Để sử dụng chiết áp kỹ thuật số với arduino, trước tiên bạn cần đưa vào thư viện SPI được cung cấp trong chính arduino IDE. Chỉ cần gọi thư viện bằng lệnh này:
#include

Trong thiết lập void, các chân được chỉ định làm đầu ra hoặc đầu vào. Và các lệnh để bắt đầu SPI và giao tiếp nối tiếp giữa arduino và ic cũng được đưa ra là:

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

Trong vòng lặp void, vòng lặp for được sử dụng để thay đổi điện trở của nồi kỹ thuật số trong tổng số 256 bước. Đầu tiên từ 0 đến 255 và sau đó quay lại 0 với độ trễ 10 mili giây giữa mỗi bước:

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

Hàm digitalPotWrite (i) ghi giá trị này để thay đổi điện trở tại địa chỉ cụ thể của ic.

Có thể tính toán điện trở giữa cần gạt nước và thiết bị đầu cuối bằng các công thức sau:

R1 = 10k * (256 cấp) / 256 + Rw

R2 = 10k * mức / 256 + Rw

Ở đây R1 = điện trở giữa gạt nước và một thiết bị đầu cuối
R2 = điện trở giữa cần gạt nước và thiết bị đầu cuối khác
Mức = bước tại một thời điểm cụ thể (biến “I” được sử dụng trong vòng lặp for)
Rw = điện trở của thiết bị đầu cuối gạt nước (có thể tìm thấy trong biểu dữ liệu của ic)
Sử dụng hàm digitalPotWrite (), chip chiết áp kỹ thuật số được chọn bằng cách gán điện áp THẤP cho chân CS. Bây giờ khi ic được chọn, một địa chỉ phải được gọi trên đó dữ liệu sẽ được ghi. Trong phần cuối cùng của mã:

SPI.transfer (B00010001)

Địa chỉ được gọi là B00010001 để chọn đầu cuối gạt nước của ic mà dữ liệu sẽ được ghi trên đó. Và do đó đối với giá trị của vòng lặp, tức là tôi được viết để thay đổi điện trở.

MẠCH LÀM VIỆC:

Miễn là giá trị của tôi tiếp tục thay đổi đầu vào đến chân A0 của arduino cũng tiếp tục thay đổi trong khoảng từ 0 đến 1023. Điều này xảy ra vì đầu cuối của cần gạt nước được kết nối trực tiếp với chân A0 và đầu cuối khác của chiết áp được kết nối với 5volt và đất tương ứng. Bây giờ khi điện trở thay đổi, điện áp trên nó sẽ được arduino trực tiếp lấy làm đầu vào và do đó chúng ta nhận được giá trị điện áp trên màn hình nối tiếp cho một giá trị cụ thể của điện trở.

MÔ PHỎNG 1:

Đây là một số hình ảnh mô phỏng cho mạch này ở các giá trị khác nhau của i:

Bây giờ chỉ cần kết nối một led nối tiếp với điện trở 220ohm vào đầu cuối gạt nước của IC như trong hình.

MÃ 2:

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

GIẢI THÍCH MÃ 2:

Mã này tương tự như mã 1 ngoại trừ không có lệnh nối tiếp trong mã này. Vì vậy, không có giá trị nào sẽ được in trên màn hình nối tiếp.

GIẢI THÍCH CÔNG VIỆC

Vì led được kết nối giữa thiết bị đầu cuối gạt nước và mặt đất khi điện trở thay đổi, do đó, điện áp trên led. Và do đó, điện trở mà led được kết nối tăng từ 0ohm đến tối đa, độ sáng của led cũng vậy. Mà lại từ từ biến mất do điện trở giảm từ cực đại xuống 0v.

Mô phỏng2

Mô phỏng3




Trước: Cách điều khiển động cơ Servo bằng cần điều khiển Tiếp theo: Tạo Ampe kế kỹ thuật số nâng cao này bằng Arduino