В роутере LT5x предусмотрены 3 универсальных порта ввода-вывода GPIO (маркировка I1, I2, I3).
Выводы являются независимыми, могут быть сконфигурированы в Операционной системе и предполагают три режима использования:
1. Подключение резистивных датчиков
2. Управление нагрузкой. В данном режиме выводы I1 - I3 можно объединять для увеличения нагрузочной способности выхода. Питание можно использовать как внешнее
3. Измерение напряжения (режим работы по умолчанию)
PULLUP - "Подтягивающий" резистор к питанию.
PULLDOWN - "Подтягивающий" резистор к заземлению.
ADC - АЦП.
1. Конфигурирование GPIO через WEB
Необходимо перейти во вкладку Сервисы -> Линии I/O
Описание:
АЦП - Режим "Измерение напряжения"
Сухой контакт - Режим "Подключение резистивных датчиков"
Открытый коллектор - Режим "Управление нагрузкой"
Выбирая нужные пункты, включаются необходимые режимы.
Чтобы измененные через WEB-интерфейс настройки сохранились при следующем включении роутера, поставьте флажок в столбце "Сохранять настройки при загрузке".
Чтобы прочитать текущие значения с роутера, нажмите кнопку "Обновить" в колонке "Обновить замеры".
2. Конфигурирование GPIO через Консоль
Каждый GPIO имеет определенный индекс и направление по умолчанию, в операционной системе, приведем таблицу соответствий:
Порт | Назначение | Индекс в ОС | Направление по умолчанию |
IO1 | IO1PULLUP# | /dev/pu1 | OUT |
IO1PULLDOWN | /dev/pd1 | OUT | |
IO2 | IO2PULLUP# | /dev/pu2 | OUT |
IO2PULLDOWN | /dev/pd2 | OUT | |
IO3 | IO3PULLUP# | /dev/pu3 | OUT |
IO3PULLDOWN | /dev/pd3 | OUT |
- PULLDOWN— “нижний ключ”, притягивающий линии I/O к земле. Может принимать следующие состояния:
- 1 – PULLDOWN включен,
- 0 – PULLDOWN выключен,
- PULLUP#— “верхний ключ”, включает источник тока в линии I/O. Обратите внимание: сигнал инвертирован, поэтому команды подаются следующим образом:
- 1 – PULLUP# выключен,
- 0 – PULLUP# включен.
Узнать состояние сигналов PULLUP и PULLDOWN на каждом входе можно с помощью команды:
cat /dev/pux/value - где x - номер входа I/O.
Переключение линий I/O в режим "АЦП" (измерение напряжения)
Чтобы переключить вход (например, вход IO1) в режим АЦП, подайте следующую команду:
echo high > /dev/pu1/direction – настраиваем порт на вход (отключаем “верхний ключ”).
echo low > /dev/pd1/direction – отключаем “нижний ключ”.
Переключение линий I/O в режим "Сухой контакт" (определения состояния входной линии)
Чтобы переключить вход (например, вход IO1) в режим "Сухой контакт", подайте следующую команду:
echo low > /dev/pd1/direction – отключаем "нижний ключ".
Далее можно работать с "верхним ключом":
echo low > /dev/pu1/direction – включаем “верхний ключ”.
echo high > /dev/pu1/direction – отключаем “верхний ключ”.
Переключение линий I/O в режим "Открытый коллектор" (управление нагрузкой)
Чтобы переключить вход (например, вход IO1) в режим "Открытый коллектор", подайте следующую команду:
echo high > /dev/pu1/direction – отключаем "верхний ключ".
Далее можно работать с "нижним ключом":
echo high > /dev/pd1/direction – включаем "нижний ключ".
echo low > /dev/pd1/direction – отключаем "нижний ключ".
Для остальных портов настройка режима работы осуществляется аналогичным образом.
3. Считывание значений с линий I/O
Считать непреобразованные значения с каждого входа АЦП можно с помощью команды:
getinfo adcx , где x - номер входа I/O
Получить непреобразованные значения с АЦП в формате .json можно с помощью системного сервиса ubus.
Запрос всех значений:
ubus call iolines raw '{"adc": "all"}'
Запрос одиночного значения:
ubus call iolines raw '{"adc": "adc2"}'
Вычислить значение напряжения для режима АЦП (в мВ), используя непреобразованное значение, можно по следующей формуле:
Vin = N * 38
где
N – непреобразованное значение АЦП,
38 – коэффициент для пересчёта непреобразованных значений АЦП в напряжение в мВ.
Получить преобразованные значения напряжения со входа АЦП (в мВ) также можно с помощью следующих команд:
Запрос всех значений:
ubus call iolines voltage '{"adc": "all"}'
Запрос одиночного значения:
ubus call iolines voltage '{"adc": "adc2"}'
Внимание:
- Если мы работаем с PULLDOWN, PULLUP# должен быть выключен!
- Если мы работаем с PULLUP#, PULLDOWN должен быть выключен!