Как стать автором
Обновить
1995.98
Timeweb Cloud
То самое облако

KC868-A128: заявка на Книгу рекордов Гиннеса

Время на прочтение8 мин
Количество просмотров4.9K


Сегодня мы поговорим о решении, достойном помещения в Книгу рекордов Гиннеса — это контроллер 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 системой автоматизации.

Теги:
Хабы:
Всего голосов 13: ↑12 и ↓1+11
Комментарии32

Публикации

Информация

Сайт
timeweb.cloud
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия
Представитель
Timeweb Cloud