В статье расскажу о сети TinyOneWireNet и о конфигурации ее с помощью простого устройства - монитора на базе платы ArduinoNano.
Предыдущая статья Навигация по рубрике Следующая статья
Сетевой интерфейс TinyOneWireNet.
При разработке сетевого интерфейса на первом месте ставилась задача обеспечить мизерное потребление тока в режиме ожидания. Второе обязательное условие - обмен данными должен происходить с использованием только одного сигнала.
С пользовательской точки зрения необходимо знать следующие свойства организации сети TinyOneWireNet.
- Ведущее устройство в сети одно, все остальные ведомые.
- Ведущее устройство передает данные на ведомое и в ответ получает данные от ведомого.
- Используется следующий типовой кадр передачи данных.
Адрес ->КОП ->D0 ->CRC -><- State + Адрес <- D0 <- D1 <- CRC
- Ведущее устройство передает адрес, код операции, байт данного и контрольный циклический код.
- В ответ ведомое присылает байт с адресом и состоянием операции, 2 байта данных и контрольный циклический код.
- Таким образом, ведущее устройство за один кадр передает
- код операции (6 разрядов);
- байт данных.
- Получает от ведомого;
- 2 байта данных.
- В случае, когда операция требует длительного времени выполнения у ведомого устройства, например запись EEPROM, ведомое устройство ответ не формирует.
- Время выполнения операции обмена примерно 8,5 мс.
- В момент ожидания данных ведомое устройство потребляет ток не более 0,5 мА.
- Типичная работа с датчиками выглядит так.
- Все ведомые устройства находятся в состоянии ожидания, потребляемый ток мал.
- Ведущее устройство посылает команду на датчик запустить преобразование.
- Выбранный датчик начинает работать, ток потребления его повышается.
- По окончанию преобразования датчик переходит в режим ожидания, ток потребления опять небольшой.
- Ведущее устройство считывает результат преобразования.
- Сеть поддерживает адреса в диапазоне 0…63.
- Адрес 63 используется для “залетевших”устройств, т.е. те, в которых адрес не был установлен.
- Адрес сетевого устройства хранится в его EEPROM и может быть задан пользователем.
- Кроме того, в сетевом устройстве содержится уникальный идентификатор, своеобразный MAC-адрес.Он используется для идентификации контроллера и разрешения программирования адреса.
Аппаратное формирование сети.
Все сетевые устройства подключаются к сети TinyOneWireNet параллельно. От нее получают питание.
Есть несколько схемотехнических вариантов формирования сети.
- Самый простой - подключение к выводу микроконтроллера.Необходимо только добавить один подтягивающий резистор сопротивлением 1 кОм. Выше пример для Arduino Nano.
- Допустимый ток потребления сети определяется нагрузочной способностью выводов микроконтроллера. Для ATmega328 лучше ограничиться 20 мА, хотя предельно-допустимый параметр – 40 мА.
- Для организации сети под управлением микроконтроллеров с питанием 3,3 В, например ESP32, используются буферные логические элементы. Самый простой вариант - 74HC125.
- Разработан модуль с использованием 74HC125, который формирует 2 сети TinyOneWireNet.
- Ток потребления сети для него – до 35 мА.
- Есть вариант блока формирования сети с использованием MOSFET-транзистора. Ток питания сети при этом достигает 100 мА и более.
Программное управление сетями TinyOneWireNet.
Программное управление интерфейсом TinyOneWireNet происходит с помощью библиотек Ардуино. При необходимости я разработаю библиотеки для STM32 и PIC-контроллеров.
Сейчас существуют:
- Библиотека TinyOneWireNet.h для формирования сети непосредственно на выводах плат Ардуино.
- Библиотека TinyOneWireNet_Buf125.h для формирования сети с использованием буферных элементов 74HC125.
Все библиотеки используют класс с одним именем TinyOneWireNet и с одинаковыми методами. Программы с разными библиотеками отличаются только одной строчкой, в которой конструктор задает номера выводов.
Конфигурация сети.
В сети могут работать несколько устройств. Естественно у них должны быть разные адреса. Под конфигурацией сети, прежде всего, понимается раздача адресов. Еще необходимо знать какие типы устройств есть в сети и соответствие типов адресам.
У всех сетевых устройств есть одинаковые функции, не зависящие от типа устройства. Так называемые сетевые функции. Это:
- чтение типа, версии ПО устройства;
- программирование адреса;
- чтение уникального идентификатора;
- диагностика обмена;
- разрешение программирования адреса;
- запуск таймера калибровки частоты;
- чтение таймера калибровки частоты;
- загрузка значения калибровки частоты;
- запись уникального идентификатора.
Сетевые функции позволяют задать адреса устройств, идентифицировать устройства по типу и уникальному коду, произвести диагностику обмена, калибровать внутренний генератор. Т.е. конфигурировать сеть, подготовить устройства для работы в ней.
Для выполнения этих операций в данный момент существуют следующие средства:
- Монитор с использованием платы ArduinoNano.
- Программа верхнего уровня с помощью компьютера.
- Web-интерфейс в конвертере WiFi TinyOneWireNet.
Но есть возможность произвести эти операции через методы стандартных библиотек. Я думаю, большинство воспользуются готовыми средствами. С одного из них я и начну.
Итак, у нас есть сеть с устройствами TinyOneWireNet. Я соединил 3 датчика 2х проводной линией. Вот схема.
Конфигурация сети через монитор на базе платы ArduinoNano.
К плате ArduinoNano надо припаять дисплей и энкодер.
У меня выглядит так
Установить библиотеку TinyOneWireNet.h, загрузить программу монитора.
Подключить сеть c устройствами TinyOneWireNet.
В главном меню 2 пункта, нас интересует НАСТРОЙКА СЕТИ.
Входим в него нажатием энкодера. Видим такое сообщение, означающее, что когда-то монитор нашел 3 устройства, и будет работать с этой конфигурацией.
Если надо, задаем новую конфигурацию. В режиме ПОИСК нажимаем кнопку энкодера.
С этой конфигурацией сети монитор будет работать, пока не зададим новую. При выключении питания она сохраняется.
Переходим к следующему пункту меню.
В нем можно просмотреть адреса и типы найденных устройств. У меня 3 устройства с адресами 10, 47 и 58.
В следующем пункте меню можно произвести диагностику обмена сети.
Энкодером выбираем устройство, в окне отображается число циклов обмена и ошибок.
В следующем пункте меню можно считать уникальные идентификаторы устройств.
Главная цель конфигурации сети – раздать адреса устройствам. Это производится в следующем пункте.
Давайте, для примера, устройству с 58м адресом зададим адрес 53.
Поворотом энкодера надо задать подтверждение операции.
Эта операция считывает с устройства уникальный идентификатор, разрешает программирование адреса по нему и загружает новый адрес.
В мониторе используется упрощенный режим установки адреса. Если в сети будет 2 устройства с одинаковыми адресами, то такой вариант не допустим. Надо отключить одно из устройств.
При полном варианте программирования адреса необходимо выполнить следующие операции: разрешить программирование адреса по уникальному идентификатору и загрузить новый адрес. В этом случае даже в сети содержащей несколько устройств с одинаковыми адресами новый адрес загрузится только в одно устройство.
После изменения адреса хотя бы одного устройства необходимо заново задать конфигурацию.
Сетевые устройства используют внутренний тактовый генератор PIC-контроллеров. Стабильности его вполне достаточно для надежной работы сети. Но есть возможность посмотреть текущую погрешность частоты и подкорректировать ее.
Значение калибровочного коэффициента лежит в диапазоне -32…31.
В пункте НАСТРОЙКА СЕТЕВЫХ УСТРОЙСТВ можно посмотреть измеренные значения параметров, т.е. сделать окончательную проверку работы устройств.
В этом пункте для устройств с режимом калибровки можно ее произвести. Например, если бы в сети присутствовал датчик влажности почвы, можно было бы откалибровать значения влажности для пределов 0 и 100%.
Монитор на плате ArduinoNano работает и от батарейки напряжением 4,5 В. В этом случае получается удобное автономное устройство для настройки сети на реальном объекте.
Но если в системе используется устройство, позволяющее управлять сетью через WiFi (конвертерWiFi TinyOneWireNet), то операцию конфигурации сети можно производить через него. Для этого есть встроенные функции доступные через WEB-интерфейс. Можно конфигурировать сеть через компьютер, планшет, смартфон и любое другое устройство подключенное к сети WiFi.
О cпособах конфигурации сети с помощью компьютера и конвертера WiFi TinyOneWireNet я расскажу в последующих статья об этих устройствах.
В следующей статье покажу, как работать с сетевыми функциями в библиотеке TinyOneWireNet.h.