В роутере 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 должен быть выключен!