MCP41xxx — цифровой потенциометр (Arduino)

ИМС MCP41xxx представляет собой цифровой потенциометр с микроконтроллерным управлением. Выпускается в трех вариантах на 100, 50 и 10 кОм.

Основные характеристики:

  • Функциональная характеристика … линейная
  • Число шагов регулировки сопротивления … 256
  • Сопротивление … 100, 50 и 10 кОм
  • Допустимое отклонение … ±30%
  • Цифровой интерфейс … SPI
  • Температурный коэффициент … 800 ppm/°C
  • Напряжение питания … 2.7 — 5.5 В
  • Рабочая температура …  -40…+85 °C
  • Корпус … soic-8 (3.9 мм)

Управление цифровым потенциометром MCP41xxx осуществляется при помощи шины SPI.

http://forum.rcl-radio.ru/uploads/images/2020/07/4f987c7071cf5121fa7efffa7cb0a2e8.png

 

  • PA0: вывод A потенциометра
  • PB0: вывод B потенциометра
  • PW0: контакт цифрового «ползунка» потенциометра
  • CS: линия выбора микросхемы
  • SCK: тактовый сигнал SPI
  • SI: линия входных последовательных данных SPI
  • VDD:  2.7 В-5.5 В
  • VSS: GND

Управление потенциометром осуществляется при помощи двух байт (по 8 бит).

Первый байт, это байт команды:

Биты С1 С0:

  • 00 — N/A
  • 01 — записать данные
  • 10 — отключение потенциометра
  • 11 — N/A

Биты P1 P0

  • 00 — не выбран ни один потенциометр
  • 01 — выбран первый потенциометр
  • 10 — выбран второй потенциометр (для сдвоенных потенциометров)
  • 11 — выбраны оба потенциометра (для сдвоенных потенциометров)

Соответственно из описания байта отправляем значение 0B00010001

Во второй байт отсылаем значение сопротивления которое необходимо получить, то есть от 0B00000000 до 0B11111111 (0…255).

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

10%

100%50%

Максимальное значение сопротивления в моем потенциометре 93 кОм, что входит в допустимый диапазон.

В скетче можно использовать две функции:

mcpWrite_byte(127); // передаем число от 0 до 255 (0-100%) 

mcpWrite(100, 25); // предел (100 кОм), сопротивление (25 кОм)

#include <SPI.h>
#define CS   10
 
void setup(){
  pinMode (CS, OUTPUT); // D10
  SPI.begin();
  }
 
void loop(){
     mcpWrite_byte(127); // byte 0-255
  // mcpWrite(100, 25);  // предел (100 кОм), сопротивление (25 кОм)
  delay(100);
  }  
 
void mcpWrite(byte pred, byte sopr){
  digitalWrite(CS, LOW);
  delayMicroseconds(1);
  SPI.transfer(0x11);
  byte x = 255 * sopr / pred;
  SPI.transfer(x);
  digitalWrite(CS, HIGH);
  }  
 
void mcpWrite_byte(byte b){
  digitalWrite(CS, LOW);
  delayMicroseconds(1);
  SPI.transfer(0x11);
  SPI.transfer(b);
  digitalWrite(CS, HIGH);
  }

Форум — http://forum.rcl-radio.ru/viewtopic.php?id=177

mcp41xx0.pdf

Добавить комментарий

Войти с помощью: