В роутерах RTU предусмотрены 4 универсальных порта ввода-вывода GPIO (маркировка I1, I2, I3 и I4).
Выводы являются независимыми, могут быть программно сконфигурированы в Операционной системе и предполагают три режима использования:
1. Подключение резистивных датчиков.
2. Управление нагрузкой. В данном режиме выводы I1 - I4 можно объединять для увеличения нагрузочной способности выхода.
3. Измерение напряжения (режим работы по умолчанию).
PULLUP - "Подтягивающий" резистор к питанию.
PULLDOWN - "Подтягивающий" резистор к заземлению.
ADC - АЦП.
1. Конфигурирование GPIO через WEB
Для настройки GPIO через Web-интерфейс, необходимо перейти во вкладку Службы ---> I/O Lines
АЦП - измерение напряжения.
Сухой контакт - При включении аналоговый вход роутера с помощью резистора подтягивается к напряжению 5В. Подтяжка необходима для правильного функционирования аналогового входа в режиме сухой контакт.
Открытый коллектор - устанавливается активный уровень на выходе открытый коллектор.
Чтобы измененные через WEB-интерфейс настройки сохранились при следующем включении роутера, поставьте флажок в столбце "Сохранять настройки при загрузке".
2. Конфигурирование GPIO через Консоль
Каждый GPIO имеет определенный индекс и направление по умолчанию, в операционной системе, приведем таблицу соответствий:
# - инвертированный сигнал.
Все GPIO расположены по пути /sys/class/gpio/
Внимание:
- Если мы работаем с PULLDOWN, PULLUP# должен быть выключен!
- Если мы работаем с PULLUP#, PULLDOWN должен быть выключен!
Для примера включим на входе I1 режим "Измерения напряжения":
echo 66 > /sys/class/gpio/export echo in > /sys/class/gpio/gpio66/direction echo 65 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio65/direction echo 0 > /sys/class/gpio/gpio65/value
Пример измерения напряжения на входе I1:
cat /sys/bus/iio/devices/iio\:device0/in_voltage6_raw
in_voltage6_raw мы определили командой ls -la /dev/io*
Получаем N (для примера - 1493)
Формула для расчета:
N * 8,219 = XмВ
1493 * 8,219 = 12 270мВ
Теперь включим на I1 режим "Подключения резистивных датчиков":
echo 66 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio66/direction echo 0 > /sys/class/gpio/gpio66/value echo 65 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio65/direction echo 0 > /sys/class/gpio/gpio65/value
Формула определения зависимости сопротивления резистивного датчика от цифровых показаний adc_raw:
R = 0.543 * adc_raw
И третий режим "Управление нагрузкой":
echo 66 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio66/direction echo 1 > /sys/class/gpio/gpio66/value echo 65 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio65/direction echo 1 > /sys/class/gpio/gpio65/value
Тогда для управления током будем подавать команду:
echo 1 > /sys/class/gpio/gpio65/value - рабочий ток идет через нагрузку echo 0 > /sys/class/gpio/gpio65/value - рабочий ток НЕ идет через нагрузку
Для того, чтобы постоянно не подавать команды инициализации GPIO, их можно внести в файл /etc/rc.local
Тогда после перезагрузки будет включаться необходимый режим автоматически.