Мы не выдаем Китай за Италию. Платы от российского производителя по сниженным ценам.

Новинки: Freeduino Mini, FTDI Board, модули USB Host, Ethernet, Buffer, Relay, Freeduino 2013.

Назначение

Модуль предназаначен для коммутации до 16 каналов постоянного тока 50В/0.5А (реле, двигатели и пр.).

Модуль подключается к основной плате по шине SPI/I2C (в зависимости от установленной в панельку микросхемы MCP23S17 или MCP23017).

  • Нагрузка до 0.5А по каждому из 16 каналов
  • Встроенные обратные диоды
  • Возможна работа с платами в формате Nano

!!! Внимание !!!

Модуль поставляется без микросхемы MCP23x17, поскольку возможно применение как микросхем для I2C, так и для SPI интерфейсов.

Необходимую микросхему нужно заказать отдельно, либо использовать имеющеюся. Так, обладатели модуля Expander Shield вполне могут переставить одну из микросхем, если не требуются все 32 вывода Expander Shield, а достаточно 16.

Модуль поставляется в двух вариантах монтажа - для плат стандартного формата Arduino, и для плат формата Nano. Немонтируемые в той или иной версии разъемы высылаются вместе с платой для возможного последующего монтажа.

Buffer Shield      Временно недоступно для заказа
Buffer Shield Nano      Временно недоступно для заказа

Конструктивно модуль представляет из себя расширитель портов MCP23x17 и подключенные к нему две буферные микросхемы ULN2803.

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

Принципиальная схема по лицензии Creative Commons Attribution-ShareAlike 2.5

Подключение нагрузки

Модуль спроектирован под два различных варианта силовых микросхем (модификации модуля A и B). В настоящий момент доступны только модули с микросхемами ULN2803 (модификация A). Схема подключения для модификации A показана на рисунке ниже.

Источник питания коммутируемой нагрузки подключаетя к клеммникам J1 и J2. Положительный вывод источника питания нагрузки подключается к выводу P1 клеммника (левый со стороны подключения), а отрицательный (земля) - к выводу P2 (правый со стороны подключения).

Это может быть как один, так и два различных источника питания - каждый для своей группы из 8 силовых выходов. Отрицательные выводы источников питания будут соединены друг с другом, и с выводом Gnd платы Arduino. Если плата Arduino питается от внешнего достаточно мощного блока питания, он же может использоваться и для питания коммутируемой нагрузки.

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

На рисунке приведен пример подключения нагрузки (это могут быть три реле, например), управляемой по выводам 4, 5 и 7.

Конфигурирование модуля

Конфигурирование модуля производится с помощью групп перемычек Addr_bits, JSS, JRS, а также DIP-переключателя.

При установке в модуль микросхемы MCP23S17 обмен данными осуществляется по шине SPI, и движки 1-4 DIP-переключателя должны быть выставлены в положение ON (включено), движки 5-8 - выключено. Перемычкой JSS необходимо выбрать номер вывода Slave Select - 10, 9 либо 8.

При установке в модуль микросхемы MCP23017 обмен данными осуществляется по шине I2C, и движки 1-4 DIP-переключателя должны быть выставлены в положение выключено, движки 5 и 6 - ON (включено), движки 7 и 8, включающие подтяжку шины, в необходимое по условиям работы (при одном I2C устройстве на шине - в положение ON). Перемычка JSS должна быть снята совсем, либо установлена в соответствии с рисунком.

Адрес устройства на шине задается в обоих случаях с помощью перемычек Addr_bits.

Группа перемычек JRS задает варианты работы цепи сброса. Нормальное состояние приведено на рисунке, а положения перемычек и внешних цепей для нестандартных режимов работы могут быть получены из анализа принципиальной схемы модуля.

Библиотека MCP23xxx

Для упрощения работы с этим, и рядом других модулей, разработана библиотека MCP23xxx, предоставляющая простой интерфейс к функционалу микросхем серии MCP23xxx. Библиотека доступна для свободного скачивания: http://www.freeduino.ru/arduino/files/MCP23xxx.zip Библиотека совместима с ПО Arduino версии 1.0.5 (также предполагается совместимость и с более поздними версиями).

Фактически, это набор из двух библиотек: MCP23xxx и LiquidCrystal_MCP23x17.

Более подробно установка библиотек описана в разделе подключение библиотек. Структура каталогов папки libraries после установки должна стать такой:

/libraries/LiquidCrystal_MCP23x17
/libraries/MCP23xxx

В библиотеке MCP23xxx реализованы шаблоны классов, организующие работу с расширителями портов MCP23017, MCP23S17, MCP23008 и MCP23S08. Библиотека LiquidCrystal_MCP23x17 - это модифицированная стандартная библиотека LiquidCrystal, поддерживающая русский язык, и работающая через расширитель портов.

К библиотеке прилагаются примеры, поясняющие работу с ней. Также доступна для скачивания предыдущая версия библиотеки: http://www.freeduino.ru/arduino/files/MCP23x17.zip

Пример работы с модулем

Для коммутации нагрузки достаточно менять состояние выводов микросхемы MCP23x17 с помощью метода digitalWrite, предварительно переключив их в режим выхода с помощью метода pinMode, как в предлагаемом примере.

////Для SPI версии подключаем SPI.h:
//#include <SPI.h>
//Для I2C версии подключаем Wire.h:
#include <Wire.h>
//подключаем библиотеку
#include <MCP23xxx.h>

////Для SPI версии создаем объект класса CMCP23S17:
//CMCP23S17 MCP;
//Для I2C версии создаем объект класса CMCP23017:
CMCP23017 MCP;
//но не инициализируем объект, т.к. шина не готова

void setup()
{
//  //Для SPI версии конфигурируем шину SPI и объект MCP номером линии CS (10) и адресом (0)
//  SPI.begin();
//  MCP.init(10, 0);
  //Для I2C версии конфигурируем шину I2C и объект MCP адресом (0)
  Wire.begin();      //TWBR = 12;  // <- так можно сделать 400kHz I2C
  MCP.init(0);

  //Все выводы чипа нужно сделать выходами либо в цикле
  for (int i=0; i<16; i++) {
    MCP.pinMode(i, OUTPUT);
  }
  //или за один раз, вызовом метод pinMode16
  //MCP.pinMode16(0x00000);
}

void loop()
{
  int i;
  //Последовательно включаем и отключаем выводы микросхемы MCP с помощью digitalWrite
  //соответственно состояниям выводов будет переключаться нагрузка
  for (i=0; i<16; i++) {
    MCP.digitalWrite(i, HIGH);
    delay(1000);
    MCP.digitalWrite(i, LOW);
  }
}