Использование цифрового потенциометра MCP41xx с Arduino

Попробуйте наш инструмент устранения неполадок





В этом проекте мы собираемся связать цифровой потенциометр с Arduino. В этом демонстрационном потенциометре используется MCP41010, но вы можете использовать любой цифровой потенциометр серии MC41 **.

Анкит Неги



ВВЕДЕНИЕ В MC41010

Цифровые потенциометры похожи на любой аналоговый потенциометр с тремя клеммами только с одной разницей. В то время как в аналоговом вы должны вручную изменить положение стеклоочистителя, в случае цифрового потенциометра положение стеклоочистителя устанавливается в соответствии с сигналом, подаваемым на потенциометр с помощью любого микроконтроллера или микропроцессора.

ИНЖИР. Распиновка микросхемы MC41010

ИНЖИР. Распиновка микросхемы MC41010



MC41010 - это 8-контактная двухлинейная ИС в корпусе. Как и любой аналоговый потенциометр, эта ИС может иметь значения 5 кОм, 10 кОм, 50 кОм и 100 кОм. В этой схеме используется потенциометр 10k.
MC4131 имеет следующие 8 клемм:

№ контакта Название булавки Краткое описание

1 CS Этот вывод используется для выбора подчиненного устройства или периферийного устройства, подключенного к Arduino. Если это
Низкий, тогда выбирается MC41010, а если высокий, то MC41010 отменяется.

2 SCLK Shared / Serial Clock, arduino дает часы для инициализации передачи данных из
Arduino к IC и наоборот.

3 SDI / SDO Последовательные данные передаются между Arduino и IC через этот вывод
4 VSS Заземляющий терминал Arduino подключен к этому выводу IC.

5 PA0 Это одна клемма потенциометра.

6 PW0 Эта клемма является клеммой стеклоочистителя потенциометра (для изменения сопротивления)
7 PB0 Это еще один вывод потенциометра.

8 VCC Питание на IC подается через этот вывод.

Эта ИС содержит только один потенциометр. Некоторые ИС имеют не более двух встроенных потенциометров. Этот
Значение сопротивления между стеклоочистителем и любой другой клеммой изменяется с шагом 256, от 0 до 255. Поскольку мы используем резистор 10 кОм, значение резистора изменяется с шагом:
10 кОм / 256 = 39 Ом на шаг от 0 до 255

СОСТАВНЫЕ ЧАСТИ

Нам нужны следующие компоненты для этого проекта.

1. АРДУИНО
2. Микросхема MC41010
3. РЕЗИСТОР 220 ОМ
4. Светодиод
5. СОЕДИНИТЕЛЬНЫЕ ПРОВОДА

Выполните соединения, как показано на рис.

1. Подключите вывод cs к цифровому выводу 10.
2. Подключите вывод SCK к цифровому выводу 13.
3. Подключите вывод SDI / SDO к цифровому выводу 11.
4. VSS к контакту заземления Arduino
5. PA0 к контакту 5 В Arduino
6. PB0 на массу Arduino
7. PWO к аналоговому выводу A0 Arduino.
8. VCC на 5 В Arduino.

КОД ПРОГРАММЫ 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, вам необходимо сначала подключить библиотеку SPI, которая предоставляется в самой Arduino IDE. Просто вызовите библиотеку с помощью этой команды:
#включают

В настройке void контакты назначаются как выход или вход. Также даются команды для запуска SPI и последовательной связи между arduino и ic, а именно:

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

В пустом цикле цикл for используется для изменения сопротивления цифрового потенциометра всего на 256 шагов. Сначала от 0 до 255, а затем снова обратно к 0 с задержкой 10 миллисекунд между каждым шагом:

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

Функция digitalPotWrite (i) записывает это значение для изменения сопротивления по определенному адресу ic.

Сопротивление между грязесъемником и концевым выводом можно рассчитать по формулам:

R1 = 10k * (256 уровней) / 256 + Rw
И
R2 = 10к * уровень / 256 + Rw

Здесь R1 = сопротивление между стеклоочистителем и одной клеммой.
R2 = сопротивление между стеклоочистителем и другим выводом
Уровень = шаг в определенный момент (переменная «I» используется в цикле for)
Rw = сопротивление клеммы стеклоочистителя (можно найти в спецификации микросхемы)
Используя функцию digitalPotWrite (), микросхема цифрового потенциометра выбирается путем назначения НИЗКОГО напряжения на вывод CS. Теперь, когда выбран ic, необходимо вызвать адрес, по которому будут записаны данные. В последней части кода:

SPI.transfer (B00010001)

Вызывается адрес B00010001 для выбора клеммы очистителя микросхемы, на которую будут записаны данные. И, следовательно, для значения цикла, т.е. i, написано, чтобы изменить сопротивление.

ЦЕПИ РАБОТЫ:

Пока значение i продолжает изменяться, вход на вывод A0 Arduino также продолжает меняться между 0 и 1023. Это происходит потому, что вывод стеклоочистителя напрямую подключен к выводу A0, а другой вывод потенциометра подключен к 5 вольт и земле соответственно. Теперь, когда сопротивление изменяется, изменяется и напряжение на нем, которое напрямую принимается Arduino как вход, и, таким образом, мы получаем значение напряжения на последовательном мониторе для определенного значения сопротивления.

МОДЕЛИРОВАНИЕ 1:

Вот некоторые изображения моделирования для этой схемы при различных значениях i:

Теперь просто подключите светодиод последовательно с резистором 220 Ом к клемме стеклоочистителя IC, как показано на рисунке.

КОД 2:

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

ПОЯСНЯЮЩИЙ КОД 2:

Этот код похож на код 1, за исключением того, что в этом коде нет последовательных команд. Таким образом, никакие значения не будут печататься на последовательном мониторе.

РАБОЧЕЕ ОБЪЯСНЕНИЕ

Поскольку светодиод подключается между клеммой стеклоочистителя и землей, при изменении сопротивления изменяется и напряжение на светодиоде. И, следовательно, по мере того, как сопротивление, к которому подключен светодиод, увеличивается с 0 Ом до максимума, увеличивается яркость светодиода. Которые снова медленно угасают из-за снижения сопротивления с максимального до 0в.

Моделирование2

Моделирование3




Предыдущая статья: Как управлять серводвигателем с помощью джойстика Далее: Сделайте этот усовершенствованный цифровой амперметр с помощью Arduino