Назначение #
Robointellect Controller 001 (далее модуль RI-PWM1) объединяет в себе три изделия:
![]() 16-канальный 12-битный ШИМ-контроллер на основе микросхемы PCA9685 | ![]() USB-I2C конвертер на основе микросхемы CH341T | ![]() модуль RGB светодиода |
|---|---|---|
![]() Модуль RI-PWM1 | ||
Устройство позволяет выполнить задачи автоматизации, в которых требуются выдача дискретных или ШИМ сигналов. Модуль имеет следующие характеристики:
Количество дискретных выходов/ШИМ каналов | 16 |
Количество портов I2C для подключения сторонних устройств | 5 |
Интерфейс управления | USB, I2C |
Напряжение питания | 5 В |
Светодиодная индикация работы каналов | есть |
Наличие RGB светодиода | есть |
Модуль может использоваться для управления светодиодами, сервоприводами, шаговыми двигателями, в качестве расширителя дискретных выходов.
Содержание
Запись всех регистров ALL_LED_ON
Регистры LEDX_OFF_H, LEDX_OFF_L
Регистры ALL_LED_ON_H, ALL_LED_ON_L
Подключение #
Схема подключения модуля RI-PWM1 показана на рисунке 1.

Характеристики сигналов представлены в таблице 1.
Таблица 1 - Сигналы модуля RI-PWM1
| Сигнал | Описание |
|---|---|
| 5V | Подача напряжения 5 В через адаптер питания или клеммную колодку. Максимальное потребление зависит подключенных к каналам устройств, не должно превышать 2 А |
| 3.3V | Напряжение 3.3 В от внутреннего стабилизатора напряжения, максимально допустимая нагрузка не должна превышать 100 мА |
| PWM | Канал для выдачи дискретных/ШИМ сигналов. Нагрузочная способность до 25 мА на канал в режиме открытого стока или до 10 мА в режиме дискретного выхода. Суммарная мощность не должна превышать 400 мВт. |
SDA SCL |
Линия данных и такта интерфейса I2C |
RGB светодиод #
Для включения RGB светодиода необходимо установить перемычку «ON/OFF RGB LED», расположенную в верхней правой части платы (см. рисунок 1). Светодиод подключается к каналам 14 - 16 в следующей последовательности:
- зеленый – канал 14;
- красный – канал 15;
- синий – канал 16.
Подключение датчика тока #
Модуль RI-PWM1 имеет возможность подключить внешний датчик тока INA219 для контроля потребления по каналам 1 – 16. Для этого необходимо снять перемычку «SHUNT», расположенную в верхней левой части платы (см. рисунок 1) и подключить датчик тока в разрыв цепи. В качестве датчика тока может служить модуль на основе микросхемы INA219.
Светодиодная индикация #
Каждый канал модуля RI-PWM1 имеет светодиод индикации состояния. Светодиод включается при работе выбранного канала. Светодиоды расположены около соответствующих каналам соединителей. При подключении сетевого адаптера 5 В, на устройстве включается индикатор сетевого питания (см. рисунок 1).
Варианты схем включения #
На рисунках 2 и 3 представлены варианты схем включения модуля RI-PWM1.

Три сервопривода MG90 подключены к 1 – 3 каналам модуля. Управление сервоприводами осуществляется при помощи компьютера. Датчик тока INA219 позволяет проверять токопотребение. Силовое реле, подключенное к каналу 16, коммутирует силовую нагрузку.

Сервоприводы подключены к каналам 1 и 2. Датчик тока INA219 позволяет проверять токопотребение. Модуль запитан от лабораторного блока питания с выходным напряжением 5 В. Работу сервоприводов контролирует плата Arduino UNO, подключенная к интерфейсу I2C.
Описание функционала #
Конфигурирование модуля RI-PWM1 осуществляется при помощи набора регистров (см. раздел «Регистры»). Обращаться к регистрам можно либо при помощи преобразователя USB-I2C, установленного на плате, либо напрямую при помощи внешнего контроллера. В первом случае необходимо воспользоваться драйвером, предоставляющим программный интерфейс. Во втором случае используется стандартный формат обмена протокола I2C. Установленная на модуле микросхема PCA9685 задает его функциональные возможности.
Выдача ШИМ #
Выдача ШИМ сигнала на любом из каналов задается при помощи двух регистров времени: LEDХ_ON и LEDХ_OFF (где X - номер канала). Регистры времени задают две метки, которые устанавливаются внутри периода ШИМ сигнала. Каждый период разделен на 4096 значений. Диаграмма сформированного сигнала показана на рисунке 4 (LEDx_ON = 819, LEDx_OFF = 1228).

Значение LEDX_ON может быть больше значения LEDX_OFF. В этом случае будет сформирован сигнал, представленный на рисунке 5.

Установка частоты ШИМ #
Установка частоты ШИМ сигнала выполняется при помощи коэффициента деления, записанного в регистр PRE_SCALE. Для расчета используется соотношение 1:

где:
- FOSC – тактовая частота микросхемы PCA9685 (12 МГц);
- PRE_SCALE – значение, записанное в регистр предделителя.
Из соотношения 1 получаем формулу для расчета значения регистра PRE_SCALE на основе желаемой частоты ШИМ сигнала:

Установка адреса #
Основной адрес чипа является 7-ми битным числом от 64 до 127. Старший бит адреса всегда равен единицы, биты 0…5 задаются движковым переключателем «I2C ADDRESS». Адрес предназначен для выбора устройства на шине I2C.
Модуль может иметь до 3-х дополнительных адресов, которые записываются в старшие 7 бит регистров SUBADR1, SUBADR2, SUBADR3. Дополнительные адреса действуют как основной, но могут совпадать у нескольких групп чипов на одной шине, что дает возможность передавать команды сразу группе ведомых устройств. Работа с дополнительными адресами разрешена при установке флагов SUB1, SUB2, SUB3.
Дополнительно имеется широковещательный адрес, который записывается в старшие 7 бит регистра ALLCALLADR. Адрес действует по аналогии с дополнительными адресами, но предназначен для всех чипов на шине. Работа широковещательного адреса разрешена при установке флага ALLCALL.
Программный сброс #
Устройство поддерживает команду программного сброса. Программный сброс выполняется подачей команды «SWRST Call» по шине I2C. Для программного сброса необходимо установить признак записи и сформировать посылку в формате:
адрес устройства → адрес 0x00 → данные 0x06
Протокол I2C #
Обращение к регистрам осуществляется при помощи стандартного протокола I2C. Далее представлено описание протокола, используются следующие обозначения:
S – признак начала обмена (START condition);
R/nW – признак чтения или записи (read/write);
A0…A5 – адрес ведомого устройства (slave address);
D0…D7 – данные (data);
A – признак подтверждения приема данных (acknowledge); P – признак окончания посылки (STOP condition).
Запись одного регистра
Для записи одного регистра необходимо установить признак записи и сформировать посылку в формате:
| адрес устройства → адрес регистра → данные регистра |
|---|
![]() |
Запись всех регистров
Для записи всех регистров необходимо установить признак записи и сформировать посылку в приведенном формате. В регистре MODE1 должен быть установлен флаг автоинкремента AI.
| адрес устройства → регистр MODE1 → данные регистра MODE1 → … → данные регистра LED15_OFF_H |
|---|
![]() |
Чтение всех регистров
Для чтения всех регистров необходимо установить сформировать посылку в приведенном формате. Сначала выполняется запись регистра MODE и устанавливается бит AI. Затем устанавливается признак чтения, повторно выдается адрес и происходит чтение.
адрес устройства → адрес регистр MODE1 → значение регистра MODE1 → адрес устройства ← данные регистра MODE1 ←… ← данные регистра LED15_OFF_H.

Запись всех регистров ALL_LED_ON
Для записи всех регистров ALL_LED_ON необходимо установить признак записи и сформировать посылку в приведенном формате. В регистре MODE1 должен быть установлен флаг автоинкремента AI.
адрес устройства → регистр ALL_LED_ON_L → данные регистра ALL_LED_ON_L → … → данные регистра ALL_LED_OFF_H

Регистры #
Микросхема PCA9685, установленная на модуле, имеет набор регистров, представленный в таблице 2.
Таблица 2 – Регистры PCA9685
Адрес (hex) | Название регистра | Доступ | Функция | |
|---|---|---|---|---|
00 | MODE1 | RW | настройка PCA9685 | |
01 | MODE2 | RW | ||
02 | SUBADR1 | RW | позволяют группировать несколько чипов на шине I2C, для одновременного выполнения команд в группе | |
03 | SUBADR2 | RW | ||
04 | SUBADR3 | RW | ||
05 | ALLCALLADR | RW | ||
06 | LED0_ON | L | RW | включение канала 0 |
07 | H | RW | ||
08 | LED0_OFF | L | RW | выключение канала 0 |
09 | H | RW | ||
0A | LED1_ON | L | RW | включение канала 1 |
0B | H | RW | ||
0C | LED1_OFF | L | RW | выключение канала 1 |
0D | H | RW | ||
0E | LED2_ON | L | RW | включение канала 2 |
0F | H | RW | ||
10 | LED2_OFF | L | RW | выключение канала 2 |
11 | H | RW | ||
12 | LED3_ON | L | RW | включение канала 3 |
13 | H | RW | ||
14 | LED3_OFF | L | RW | выключение канала 3 |
15 | H | RW | ||
16 | LED4_ON | L | RW | включение канала 4 |
17 | H | RW | ||
18 | LED4_OFF | L | RW | выключение канала 4 |
19 | H | RW | ||
1A | LED5_ON | L | RW | включение канала 5 |
1B | H | RW | ||
1C | LED5_OFF | L | RW | выключение канала 5 |
1D | H | RW | ||
1E | LED6_ON | L | RW | включение канала 6 |
1F | H | RW | ||
20 | LED6_OFF | L | RW | выключение канала 6 |
21 | H | RW | ||
22 | LED7_ON | L | RW | включение канала 7 |
23 | H | RW | ||
24 | LED7_OFF | L | RW | выключение канала 7 |
25 | H | RW | ||
26 | LED8_ON | L | RW | включение канала 8 |
27 | H | RW | ||
28 | LED8_OFF | L | RW | выключение канала 8 |
29 | H | RW | ||
2A | LED9_ON | L | RW | включение канала 9 |
2B | H | RW | ||
2C | LED9_OFF | L | RW | выключение канала 9 |
2D | H | RW | ||
2E | LED10_ON | L | RW | включение канала 10 |
2F | H | RW | ||
30 | LED10_OFF | L | RW | выключение канала 10 |
31 | H | RW | ||
32 | LED11_ON | L | RW | включение канала 11 |
33 | H | RW | ||
34 | LED11_OFF | L | RW | выключение канала 11 |
35 | H | RW | ||
36 | LED12_ON | L | RW | включение канала 12 |
37 | H | RW | ||
38 | LED12_OFF | L | RW | выключение канала 12 |
39 | H | RW | ||
3A | LED13_ON | L | RW | включение канала 13 |
3B | H | RW | ||
3C | LED13_OFF | L | RW | выключение канала 13 |
3D | H | RW | ||
3E | LED14_ON | L | RW | включение канала 14 |
3F | H | RW | ||
40 | LED14_OFF | L | RW | выключение канала 14 |
41 | H | RW | ||
42 | LED14_ON | L | RW | включение канала 15 |
43 | H | RW | ||
44 | LED14_OFF | L | RW | выключение канала 15 |
45 | H | RW | ||
- - - - - - - | зарезервировано | |||
FA | ALL_LED_ON | L | W | значение, записываемое в LEDX_ON всех регистров |
FB | H | W | ||
FC | ALL_LED_OFF | L | W | значение, записываемое в LEDX_OFF всех регистров |
FD | H | W | ||
FE | PRE_SCALE | RW | предделитель частоты, запись возможна только при установленном флаге SLEEP врегистре MODE 1 | |
FF | TEST_MODE | RW | зарезервировано | |
Регистр MODE1
| MODE1 | |||||||
|---|---|---|---|---|---|---|---|
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RESTART | EXTCLK | AI | SLEEP | SUB1 | SUB2 | SUB3 | ALLCAL |
7 | RESTART | указывает на то, что была совершена перезагрузка (по умолчанию «0») 0: игнорируется 1: сброс флага |
6 | EXTCLK | 0: использовать внутренний такт 1: разрешить работу от внешнего тактового сигнала |
5 | AI | 0: автоинкремент выключен 1: использовать автоинкремент (при работе с I2C) |
4 | SLEEP | 0: нормальный режим работы 1: режим низкого энергопотребления |
3 | SUB1 | 0: не отвечать на дополнительный адрес 1 1: отвечать на дополнительный адрес 1 |
2 | SUB2 | 0: не отвечать на дополнительный адрес 2 1: отвечать на дополнительный адрес 2 |
1 | SUB3 | 0: не отвечать на дополнительный адрес 2 1: отвечать на дополнительный адрес 2 |
0 | ALLCALL | 0: не отвечать на широковещательный адрес 1: отвечать на широковещательный адрес |
Регистр MODE2
MODE2 | |||||||
|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | INVRT | OCH | OUTDRV | OUTNE[1] | OUTNE[0] | ||
7 - 5 | - | только чтение |
4 | INVRT | 0: выходы не инвертированы 1: выходы инвертированы |
3 | OCH | 0: состояние выходов меняется по команде STOP (I2C) 1: состояние выходов меняется по команды ACK (I2C) |
2 | OUTDRV | 0: каналы сконфигурированы в режиме открытого стока 1: каналы сконфигурированы в режиме дискретного выхода |
1 - 0 | OUTNE[1:0] | определяет поведение выходов, при наличии логической «1» на входе OE - выходы отключены (по умолчанию «00»). 00: на всех выходах устанавливается уровень логического «0» 01 при установленном флаге OUTDRV: на всех выходах устанавливается уровень логической «1» 01 при сброшенном флаге OUTDRV: на всех выходах устанавливается состояние высокого импеданса 1X: на всех выходах устанавливается состояние высокого импеданса |
Схема коммутации выходов (управление N-канальным полевым транзистором, управление P-канальным полевым транзистором или прямое подключение) показана на рисунке 10.

Регистры LEDX_ON_H, LEDX_ON_L
LEDX_ON_H | LEDX_ON_L | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
reserved | FULL_ON | 0…4095 | |||||||||||||
старший байт | 7 - 5 | только чтение | |
4 | FULL_ON | постоянное включение канала | |
младший байт | 3 - 0 | 0…4095 | метка времени включения канала |
Регистры LEDX_OFF_H, LEDX_OFF_L
LEDX_OFF_H | LEDX_OFF_L | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
reserved | FULL_OFF | 0…4095 | |||||||||||||
старший байт | 7 - 5 | только чтение | |
4 | FULL_OFF | постоянное выключение канала | |
младший байт | 3 - 0 | 0…4095 | метка времени выключения канала байт |
7 - 0 |
Регистры ALL_LED_ON_H, ALL_LED_ON_L
ALL_LED_ON_H | ALL_LED_ON_L | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
reserved | ALL_LED_FULL_ON | 0…4095 | |||||||||||||
старший байт | 7 - 5 | только чтение | |
4 | ALL_LED_FULL_ON | постоянное включение всех каналов | |
младший байт | 3 - 0 | 0…4095 | метка времени включения всех каналов байт |
7 - 0 |
Регистры ALL_LED_OFF_H, ALL_LED_OFF_L
ALL_LED_OFF_H | ALL_LED_OFF_L | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
reserved | ALL_LED_FULL_OFF | 0…4095 | |||||||||||||
старший байт | 7 - 5 | только чтение | |
4 | ALL_LED_FULL_OFF | постоянное включение всех каналов | |
младший байт | 3 - 0 | 0…4095 | метка времени выключения всех каналов байт 15 |
7 - 0 |
Установка драйвера #
При управлении модулем RI-PWM1 через интерфейс USB необходимо установить драйвер преобразователя CH341T. Драйвер можно скачать с сайта производителя. После запуска установщика откроется окно, показанное на рисунке 11. Нажмите кнопку INSTALL для автоматической установки драйвера.

Дальнейшая работа с модулем через USB осуществляется при помощи программного интерфейса, описание которого можно найти по адресу http://docs.robointellect.ru/docs/.
Конструкция #
Габаритные размеры модуля RI-PWM1 приведены на рисунке 12. Высота модуля не превышает 20 мм, диаметр крепежных отверстий равен 3,5 мм.






