Сегодня мы поговорим о решении, достойном помещения в Книгу рекордов Гиннеса — это контроллер Kincony KC868-A128, имеющий на борту аж 128 цифровых входов и 128 транзисторных (MOSFET) выходов. Как говорится, «раззудись плечо, размахнись рука» — с такими ТТХ KC868-A128 может стать основой весьма нетривиальных проектов.

Обратной стороной таких впечатляющих возможностей является размер контроллера — он переходит все пределы и чем-то напоминает «крыло от Боинга». Это произведение креативной китайской мысли не влезет ни в один «бытовой» щиток, для его размещения нужен либо промышленный щит, либо какой-то отдельный бокс с автоматикой.

Но управляется KC868-A128 при помощи нашего любимого ESP32, что делает его доступным для самостоятельного программирования и включения в ваши DIY проекты по автоматизации. Далее мы подробно рассмотрим устройство KC868-A128 и создадим скетчи для управления всеми его 256-ю входами/выходами.

Kincony KC868-A128


Если продолжить образные аналогии, то Kincony KC868-A128 можно сравнить с океаническим контейнеровозом — большая часть платы занята «контейнерами» (элементами цифровых входов и MOSFET выходов), а сам контроллер («рубка управления» — ESP32, Ethernet и т. д.) скромно примостилась с одного края платы. Тут даже непонятно, что является основной частью, а что — дополнением: то ли входы и выходы дополняют ESP32, то ли ESP32 дополняет входы и выходы.

И даже закрадываются крамольные мысли: а не стоило ли разделить сам контроллер и гипертрофированный блок входов/выходов на два отдельных устройства, соединённых по интерфейсу I2C, благо на плате KC868-A128 это так и сделано. В этом случае периферийные блоки можно было бы подключать, в зависимости от конкретной задачи, к основному контроллеру. Но это только архитектурные предпочтения, видимо компании Kincony легче снабдить каждый блок входов/выходов встроенным контроллером, чем «мудрить» межконтроллерные разъёмы и интерфейсы.

KC868-A128 содержит:

  • Микроконтроллер ESP32 (ESP-WROOM-32E)
  • 128 цифровых опторазвязанных входов («сухой контакт»)
  • 2 аналоговых входа 0–5 В
  • 2 аналоговых входа 4–20 мА
  • 128 MOSFET выходов 12/24 В/0,5 А для управления реле и прочим оборудованием
  • 128 светодиодов состояний выходов
  • Возможность подключения внешних блоков реле KC868-E16 или аналогичных
  • Интерфейс RS485
  • Два отдельных I2C разъёма
  • Отдельный Serial разъём
  • Ethernet LAN8270A
  • Разъём USB для программирования и заливки прошивок
  • Кнопки «Reset» и «Download»
  • Питание от 12/24 В постоянного тока

Видно, что KC868-A128 имеет всё необходимое для реализации самых разнообразных проектов по автоматизации, я даже не буду подробно останавливаться на описании всех его подсистем, замечу только, что всё это богатство легко и просто программируется самостоятельно, в моём случае в среде Ардуино (а вы можете это делать в вашей любимой IDE).

Ну и необходимо ещё раз упомянуть основную «фишку» и основную роль KC868-A128 — это 128 цифровых входов и 128 MOSFET выходов, которые предполагают использование KC868-A128 в проектах, где нужно получать данные со множества входов и управлять множеством исполнительных устройств.


KC868-A128 в собранном виде, готовый для установки на DIN-рейку (осталось только найти соответствующий щиток)

Подключаемые блоки реле


В KC868-A128 используются транзисторные (MOSFET) выходы, которые могут управлять не только реле, но и прочим оборудованием, например, электромагнитными клапанами. Если же требуется управлять именно реле, то в этом случае нужно подключить внешние блоки, например, блок Kincony KC868-E16 или аналогичный от другого производителя.


Дополнительный блок реле Kincony KC868-E16

Поскольку KC868-A128 имеет 128 выходов, то для полного их использования понадобятся 8 блоков KC868-E16, или нужно искать блоки на большее количество реле, например 32, 64 и т. д. (если таковые имеются в продаже).

Внешний вид и конструкция


KC868-A128 комплектуется специальным нарезным профилем для установки и крепления на DIN-рейку. Всё разбирается и разбирается довольно просто — достаточно выкрутить несколько шурупов по краям этого профиля и «выдвинуть» вбок плату контроллера.



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



Схемотехника


В этом разделе я не буду приводить тотальное описание всех подсистем контроллера KC868-A128 (Kincony в своих изделиях использует типовые решения, которые я многократно описывал в предыдущих статьях), разберу только некоторые из них, характерные и специфичные для рассматриваемой модели.

Для начала вид платы сверху. 80% платы занято входами/выходами, а оставшиеся 20% — всем остальным содержимым контроллера.



Обратная сторона платы во всей красе. Интересно, а последует ли выпуск KC868-A256 и какие размеры в этом случае будет иметь контроллер?



Цифровые входы


Контроллер имеет 128 цифровых оптоизолированных входов «сухой контакт» на оптронах EL357, распределённых на 16 колодок по 8 контактов. Для обеспечения их работы в связке с ESP32 в KC868-A128 применены расширители цифровых входов/выходов c I2C интерфейсом на 8-и микросхемах PCF8575TS.



Принципиальная схема подсистемы цифровых входов. Для наглядности и чтобы не загромождать схему показан только один из 16-и блоков оптронов, остальные полностью ему аналогичны. Расширители портов на PCF8575TS показаны все 8 штук. Обслуживает цифровые входы один из двух I2C интерфейсов (I2C №2).



Отдельно схема колодок для подключения цифровых опторазвязанных входов «сухой контакт». Каждая колодка имеет по два контакта GND (для замыкания).



MOSFET выходы


Ещё одна большая подсистема контроллера KC868-A128, взаимодействие которой с микроконтроллером ESP32 осуществляется при помощи 8-и расширителей входов/выходов c I2C интерфейсом PCF8575TS. Далее управляющие сигналы поступают на оптопары TLP181, которые в свою очередь управляют 128-ю мосфетами NCE40P05Y (40В/5,3А).

Здесь же присутствуют индикаторные светодиоды, по свечению которых можно определить текущее состояние выходов контроллера KC868-A128.



Принципиальная схема подсистемы MOSFET выходов. На схеме показан только один из 16-и MOSFET блоков (остальные полностью ему аналогичны). Управление выходами осуществляется посредством I2C интерфейса (I2C №1).



Отдельно схема колодок для подключения MOSFET выходов. Каждая колодка имеет контакт для подключения питающего напряжения 12/24 В.



Разъёмы I2C


Два очень полезных для подключения различных дополнительных компонентов разъёма I2C. К ним можно подключить, например, дисплей, дополнительные сенсоры и прочие элементы. Причём, обратите внимание, в эти разъёмы выведены разные интерфейсы (I2C №1 и I2C №2).



Принципиальная схема подсистемы (разъёмов) I2C:



Serial разъём


Не менее полезное дополнение — к этому разъёму можно подключить много интересного оборудования, использующего Serial интерфейс для приёма и передачи данных.



Принципиальная схема подсистемы (разъёма) Serial:



Распиновка


Распиновка KC868-A128. Исчерпывающая информация по тому, что и как подключено к микроконтроллеру ESP32 на плате KC868-A128.



Схема внешних подключений


Оригинальная схема разъёмов и внешних подключений контроллера KC868-A128 от производителя. Тут можно наглядно увидеть все места расположения и распиновки разъёмов.



Программирование


Теперь разберём несколько примеров программирования KC868-128. Поскольку для обслуживания цифровых входов и MOSFET выходов используются микросхемы I2C расширителей портов PCF8575, то для работы с ними нам понадобится соответствующая библиотека PCF8574_library.

Программирование цифровых входов


Для примера создадим скетч получения данных со всех 128 цифровых входов контроллера KC868-A128 и вывода этой информации в Serial. Чтобы понятно было, что наш скетч реально работает, замкнём первый цифровой вход на землю перемычкой — в выходных данных это должно соответствующим образом отражаться.

/*
  KC868-A128 DI example
*/

#include "Arduino.h"
#include "PCF8575.h"

#define SDA 15
#define SCL 4

PCF8575 pcf_1(0x24, SDA, SCL);
PCF8575 pcf_2(0x25, SDA, SCL);
PCF8575 pcf_3(0x21, SDA, SCL);
PCF8575 pcf_4(0x22, SDA, SCL);
PCF8575 pcf_5(0x26, SDA, SCL);
PCF8575 pcf_6(0x27, SDA, SCL);
PCF8575 pcf_7(0x20, SDA, SCL);
PCF8575 pcf_8(0x23, SDA, SCL);

void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.println(F("KC868-128 DI example start..."));
  
  pcf_1.begin();
  pcf_2.begin();
  pcf_3.begin();
  pcf_4.begin();
  pcf_5.begin();
  pcf_6.begin();
  pcf_7.begin();
  pcf_8.begin();

  for (byte i = 0; i < 16; i++) {
    pcf_1.pinMode(i, INPUT);
    pcf_2.pinMode(i, INPUT);
    pcf_3.pinMode(i, INPUT);
    pcf_4.pinMode(i, INPUT);
    pcf_5.pinMode(i, INPUT);
    pcf_6.pinMode(i, INPUT);
    pcf_7.pinMode(i, INPUT);
    pcf_8.pinMode(i, INPUT);
  }
  
  delay(1000);
}

void loop() {
  Serial.println();
  
  for (byte i = 0; i < 16; i++) {Serial.print(pcf_1.digitalRead(i));} Serial.print(' ');
  for (byte i = 0; i < 16; i++) {Serial.print(pcf_2.digitalRead(i));} Serial.print(' ');
  for (byte i = 0; i < 16; i++) {Serial.print(pcf_3.digitalRead(i));} Serial.print(' ');
  for (byte i = 0; i < 16; i++) {Serial.print(pcf_4.digitalRead(i));} Serial.print(' ');
  for (byte i = 0; i < 16; i++) {Serial.print(pcf_5.digitalRead(i));} Serial.print(' ');
  for (byte i = 0; i < 16; i++) {Serial.print(pcf_6.digitalRead(i));} Serial.print(' ');
  for (byte i = 0; i < 16; i++) {Serial.print(pcf_7.digitalRead(i));} Serial.print(' ');
  for (byte i = 0; i < 16; i++) {Serial.print(pcf_8.digitalRead(i));} Serial.print(' ');
  
  delay(300);
}

Поскольку на плате KC868-128 интерфейс I2C работает на нестандартных GPIO15 и 4 (I2C №2), то нам нужно явным образом указать это в скетче. Тут же указываем адреса (0x24, 0x25, 0x21, 0x22, 0x26, 0x27, 0x20, 0x23) расширителей портов PCF8575.

#define SDA 15
#define SCL 4

PCF8575 pcf_1(0x24, SDA, SCL);
PCF8575 pcf_2(0x25, SDA, SCL);
PCF8575 pcf_3(0x21, SDA, SCL);
PCF8575 pcf_4(0x22, SDA, SCL);
PCF8575 pcf_5(0x26, SDA, SCL);
PCF8575 pcf_6(0x27, SDA, SCL);
PCF8575 pcf_7(0x20, SDA, SCL);
PCF8575 pcf_8(0x23, SDA, SCL);

Далее инициализируем линии расширителей как входы и в цикле печатаем матрицу состояний всех 128-и цифровых входов KC868-128 (обратите внимание на ноль в первой позиции каждой строки — это 1-й вход замкнут на землю).



Поражает воображение наглядная визуализация количества цифровых входов: каждая строка — это 128 отдельных входов, которые может обслуживать KC868-128. Это вам не 1-2 цифровых входа, как на некоторых других контроллерах (смайл).

Программирование выходов


Теперь давайте попробуем попрограммировать вторую киллер-фишку KC868-128 — это 128 MOSFET выходов. Только представьте себе электрощит, где к контроллеру подключены 128 реле или 128 клапанов.

/*
  KC868-A128 DO example
*/

#include "Arduino.h"
#include "PCF8575.h"

#define SDA 5
#define SCL 16

PCF8575 pcf_1(0x24, SDA, SCL);
PCF8575 pcf_2(0x25, SDA, SCL);
PCF8575 pcf_3(0x21, SDA, SCL);
PCF8575 pcf_4(0x22, SDA, SCL);
PCF8575 pcf_5(0x26, SDA, SCL);
PCF8575 pcf_6(0x27, SDA, SCL);
PCF8575 pcf_7(0x20, SDA, SCL);
PCF8575 pcf_8(0x23, SDA, SCL);

void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.println(F("KC868-128 DO example start..."));
  
  pcf_1.begin();
  pcf_2.begin();
  pcf_3.begin();
  pcf_4.begin();
  pcf_5.begin();
  pcf_6.begin();
  pcf_7.begin();
  pcf_8.begin();

  for (byte i = 0; i < 16; i++) {
    pcf_1.pinMode(i, OUTPUT);
    pcf_2.pinMode(i, OUTPUT);
    pcf_3.pinMode(i, OUTPUT);
    pcf_4.pinMode(i, OUTPUT);
    pcf_5.pinMode(i, OUTPUT);
    pcf_6.pinMode(i, OUTPUT);
    pcf_7.pinMode(i, OUTPUT);
    pcf_8.pinMode(i, OUTPUT);
  }
  
  delay(1000);
}

void loop() {
  Serial.println();
  
  pcf_1.digitalWrite(P0, HIGH); Serial.println(F("OUT1 HIGH"));
  delay(3000);
  
  pcf_1.digitalWrite(P0, LOW); Serial.println(F("OUT1 LOW"));
  delay(3000);
}

Здесь всё аналогично обслуживанию цифровых входов, только микросхемы PCF8575 подключены к 1-у I2C (GPIO5, 16). Далее инициализируем объекты и конфигурируем линии как выходы.

#define SDA 5
#define SCL 16

PCF8575 pcf_1(0x24, SDA, SCL);
PCF8575 pcf_2(0x25, SDA, SCL);
PCF8575 pcf_3(0x21, SDA, SCL);
PCF8575 pcf_4(0x22, SDA, SCL);
PCF8575 pcf_5(0x26, SDA, SCL);
PCF8575 pcf_6(0x27, SDA, SCL);
PCF8575 pcf_7(0x20, SDA, SCL);
PCF8575 pcf_8(0x23, SDA, SCL);

Затем в цикле манипулируем одним (первым) выходом, включая и выключая его. Аналогичным образом можно управлять любым из 128 выходов, имеющихся на плате KC868-128.



Заключение


Теперь, когда вам понадобится в каком-то проекте получать данные с сотни с лишним датчиков и управлять сотней с лишним актуаторов, вы знаете, что нужно делать (смайл). Мне же в KC868-128 больше всего нравится простота программирования — можно с лёгкостью как угодно запрограммировать KC868-128 как на управление оборудованием, так и на коммуникации по различным протоколам с вашей IoT системой автоматизации.

Комментарии (32)


  1. red_dragon
    26.12.2022 12:02
    +1

    Плохо себе представляю назначение этого девайса, но пусть будет, наверное. А вот "распиновка", нарисованная в электронной таблице, это да. Ни разу до этого не видел.


    1. smart_alex Автор
      26.12.2022 12:17

      Ну, всё-таки бывают проекты, которые требуют много входов и выходов.


      1. red_dragon
        26.12.2022 12:20

        Пример был бы интересен. Ну и входов здесь не особо много, в вашем девайсе.


      1. vbifkol
        26.12.2022 12:22
        +9

        Ну хорошо, вот у меня проект на 128 входов. Допустим, я поставил эту .... (сложно нематерное слово подобрать), ну, скажем, штуковину. Подключил, поработало, и внезапно - сжег один вход. Мне дальше снимать всю эту хренацию и ставить на ее место такую же, перекоммутировав 256 контактов? Извините, но модульность придумали не от нищеты. Если у меня в машинке горит один вход, я выкручиваю 8 проводков, снимаю блок входов, ставлю такой же и закручиваю обратно. А тут - ремонтопригодность уровня бог.


        1. smart_alex Автор
          26.12.2022 12:35
          +1

          Разумный аргумент. А с другой стороны, кто мешает из 128 каналов оставить несколько для резерва?


          1. smart_pic
            26.12.2022 12:59

            Ардуино среда программирования где все назначения входов прописываются в коде. Как минимум придется править проект и перекомпилировать.


            1. smart_alex Автор
              26.12.2022 13:17

              О чём вы говорите? В Ардуино без проблем можно сделать загрузку конфигурации и даже логики из веб-интерфейса, из конфигурационного файла или хоть из командной строки через Serial или удалённо вынести интерпретатор командной строки в веб-интерфейс.

              Да вообще можно сделать как угодно - в этом то и есть вся фишка DIY микроконтроллеров - можно сделать как угодно, как нужно именно вам, и как не пришло в голову сделать никому другому.


              1. vbifkol
                26.12.2022 16:30

                можно сделать загрузку конфигурации и даже логики из веб-интерфейса, из конфигурационного файла или хоть из командной строки через Serial или удалённо вынести интерпретатор командной строки в веб-интерфейс.

                если через 5 лет исходники еще будут и будет живой человек, который умеет их загружать.

                можно сделать как угодно, как нужно именно вам, и как не пришло в голову сделать никому другому.

                Я не то что логику не помню того, что делал лет 5 назад - я не всегда сам факт того что я это делал помню. Особенно если делал дома в режиме поделок. На работе под это есть документация, но это не путь ардуинщика.


                1. smart_alex Автор
                  26.12.2022 17:43

                  Во-первых, использование KC868-A128 - это не обязанность, а возможность.

                  Во вторых, если вам не нравится DIY, то вы можете использовать любые другие решения.

                  В третьих, ардуинщику никто не мешает задокументировать проект.


                1. nafikovr
                  26.12.2022 22:05

                  В защиту девайса (нет) - через 5 лет и аналогичного девайса на замену не будет. Наверно так себе выбор для долгоживущих вопросов.


                  1. smart_alex Автор
                    27.12.2022 05:28

                    Это общая проблема для DIY контроллеров - с уверенностью сказать, что модель будет выпускаться и через 10 лет можно только об Arduino Mega 2560.

                    Я вижу тут только одно решение - купить дополнительный контроллер в резерв.


            1. Tabke
              27.12.2022 12:57

              Ардуино среда программирования где все назначения входов прописываются в коде.

              Ваши сведения устарели. Здесь используется ESP32. Я, к примеру, в своих ардуино-проектах на ESP, храню все настройки в json файлах, которые храняться во внутренней памяти микроконтроллера, а меняю настройки через веб-морду или телеграм-бота.


          1. vbifkol
            26.12.2022 16:27

            Хорошо, оставил 5 для резерва. В первый год выгорело 2, во второй - 1, в третий - 2. На четвертый год мы оказываемся в той же ситуации. А 4 года для автоматизации - не срок, у меня машинки по десять лет стоят и еще столько же как минимум стоять будут.


            1. smart_alex Автор
              26.12.2022 17:45

              Оставьте 28 для резерва. И почему у вас постоянно что-то горит?


              1. vbifkol
                26.12.2022 22:12

                Оставьте 28 для резерва.

                можно и 100 оставить. Только тогда радость 128 портов пропадет.

                И почему у вас постоянно что-то горит?

                В курортно-промышленно-торговых городках центральной Сибири электросети неидеальные. Ну и режимы эксплуатации на производстве не домашние. Не горит только то что никуда не включено.


        1. semmaxim
          26.12.2022 13:20

          У Вас проект может быть на 100 входов. И вот вам уже в базе 28 "запасных".


          1. smart_alex Автор
            26.12.2022 13:24

            И я о том же.


  1. tzlom
    26.12.2022 12:07
    +5

    А потом вопросы "куда ушло 3км кабеля в однушке"


  1. scruff
    26.12.2022 12:12

    Интересно, с помощью данного девайса прописать логику для бензинового двигателя средней навороченности возможно? На входы подать все датчики - ДПКВ, ДПРВ, МАФ, давление, Температуры и т.д. На выходах - катушки зажигания, форсунки, дроссель, фазы. Думаю прикольная вещь для чиптюнинга вышла бы, которую в любой момент можно перепрошить как хочешь, а лучше иметь набор прошивок на все случаи жизни. Проект бомба.


    1. smart_alex Автор
      26.12.2022 12:20

      Прописать можно любую логику. Про автомобильную тематику не очень понял.


    1. smart_pic
      26.12.2022 12:24

      Для авто точно не пойдет, так как идет чтение входов через расширители входов по I2C , причем нужно вычитать все 8 микросхем и потом определить какой именно вход поменял свое состояние. Для авто часть функционала делается на аппаратном уровне в МК.


    1. nikolay666
      26.12.2022 15:08

      Здесь входы/выходы организованы через i2c, скорость чтения/записи будет недостаточной для управления мотором. Да и не нужно там столько входов/выходов.


  1. 00DVS
    26.12.2022 12:30
    +1

    На пианину с лампочками годится) Чтобы светодиоды подсвечивали куда нажимать


  1. nafikovr
    26.12.2022 14:39

    а в миллиметрах это сколько? присоединяясь к вышенедоумевающим - а зачем?


    1. smart_alex Автор
      26.12.2022 14:51

      Если вы о длине контроллера, то это 38 см.


      1. nafikovr
        26.12.2022 14:53

        а как с жесткостью девайса учитывая крепление на рейке с двух концов? при закручивании винтов в середине плату не крутит?


        1. smart_alex Автор
          26.12.2022 15:14

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

          Субъективно, если руки у пользователя растут из анатомически правильного места, то жесткости платы достаточно для нормальной эксплуатации.


  1. shadrap
    26.12.2022 16:09

    Если я не ошибаюсь частота работы у PCF8575 400 кГц, т.е. сильно шустро управлять выходами не получится (это в плане авто).


  1. smart_pic
    26.12.2022 16:14

    при таком количестве подходящих к устройству проводов и отсутствия корпуса и крышки , шансов что отвалившийся провод попадет в "самое нужное место" и еще под напряжением , составляет все 128% (шутка)


  1. sav13
    26.12.2022 16:55
    +2

    Мечта настоящего ардуинщика

    Помигать 128-ю светодиодами и умереть!


    1. smart_alex Автор
      26.12.2022 17:46

      Смешно :)


  1. tormozedison
    29.12.2022 09:23

    Да оно по-настоящему может в какую-нибудь книгу рекордов попасть.