Принципиальная схема.
Контроллер системы полива собран на микроконтроллере ATMega32 (DD1). Тактовая частота работы микроконтроллера 11,0592 МГц, задается внешним кварцевым резонатором (ZQ1). Частота выбрана исходя из минимальной ошибки скорости обмена по сети.
Резистор R1 подтягивает вход reset микроконтроллера к напряжению питания, конденсатор C3 обеспечивает небольшую задержку запуска микроконтроллера при включении напряжения питания.
Управление и программирование контроллером производится пятью кнопками S1..S5 .
Информация о состоянии системы, данные настроек, состояние датчиков выводятся на LCD дисплей. В системе используется дисплей на базе контроллера HD44780 (4 строки по 20 символов), подключенный по четырехбитной шине. Резистором R7 регулируется контрастность дисплея. С вывода 37 (PA3) микроконтроллера через резистор R8 включается подсветка дисплея.
Блоки системы объединены между собой в сеть с интерфейсом RS-485. Для обмена данными с устройствами, подключенными к сети, используется модуль USART микроконтроллера. Он подключается к сети через приемопередатчик ST485B (DA1). Резисторы R2, R4 обеспечивают защитное смещение, а резистор R3 согласование линий связи. Резистор R5 подтягивает вход RX к напряжению питания, чтобы во время работы приемопередатчика RS-485 на передачу, обеспечить уровень стопового бита на входе приемника модуля USART. Резистор R6 обеспечивает включение приемопередатчика на прием при запуске микроконтроллера. Конденсаторы С6 и С7 являются фильтром напряжения питания. Для индикации состояния обмена по сети предусмотрены три светодиода HL1..HL3 (передача данных, прием данных, ошибка обмена). Резисторы R9..R11 ограничивают ток через них.
Для обращения контроллера, к какому либо конкретному устройству сети, каждое устройство должно иметь свой уникальный адрес. Кроме того все устройства, в зависимости от типа (датчик влажности, датчик осадков, блок управления) имеют код типа устройства.
Поскольку система полива работает в реальном времени, используется микросхема часов реального времени DS1307 (DA2). Кроме того что она обеспечивает функцию отсчета часов, минут, секунд и дней недели, для ее питания используется резервная батарея, что исключает сбой хода часов при аварийном отключении питания системы. Тактируется микросхема кварцевым резонатором частотой 32,768 кГц (QZ2). Установка текущего времени, и синхронизация происходит по шине I2C. На выводе 7 микросхемы формируются прямоугольные импульсы с периодом 1 секунда. Резисторы R12 и R13 подтягивают линии шины I2C к напряжению питания. Конденсаторы С11 и С12 являются фильтром напряжения питания микросхемы часов.
Конденсаторы С1, С2, С8, С9, С10 являются фильтром напряжения питания микроконтроллера.
После монтажа системы нужно произвести инициализацию устройств сети и программирование системы.
Краткое описание программы.
Программа контроллера системы полива написана на СИ. Все процедуры программы выполняются по прерываниям, поэтому в основном цикле контроллер находится в режиме энергосбережения.
По приходу импульса от микросхемы часов, вызывается обработчик прерывания INT1, в котором происходит увеличение регистров текущего времени. Далее, программа сравнивает текущее время со временем начала полива в том или ином режиме. Если время совпадает, программа контроллера формирует управляющие посылки для модулей управления, включая или выключая электроклапаны, определенные при программировании системы. Кроме того, с заданной периодичностью программа контроллера опрашивает датчики. Обмен по сети RS-485, так же происходит по прерываниям.
При нажатии любой кнопки вызывается обработчик внешнего прерывания INT2. В зависимости от нажатой кнопки происходит переход по пунктам меню или изменение параметра системы. Все настройки системы сохраняются в энергонезависимой памяти EEPROM микроконтроллера.
Управление системой, кнопки, дисплей, меню.
Для управления работой системы и перемещением по меню, в контроллере используются 5 кнопок управления, UP (вверх), Down (вниз), Forward (вперед), Return (назад), Ok (подтверждение). Нажатие кнопок обрабатывается прерыванием INT2. Это позволяет не выполнять постоянное сканирование клавиатуры.
После подачи напряжения питания, во время инициализации периферии микроконтроллера, выводы к которым подключена клавиатура (PB3..PB7) настраиваются как выход с низким логическим уровнем. Вывод PB2, общий для всех кнопок, настраивается как вход с подтяжкой. Разрешается работа прерывания INT2 по спадающему фронту.
Пока кнопки не нажаты, за счет внутренней подтяжки, на входе PB3 присутствует высокий логический уровень. При нажатии любой кнопки вызывается обработчик внешнего прерывания INT2. В обработчике происходит гашение дребезга контактов и сканирование клавиатуры. После определения нажатой кнопки производится переход по пунктам меню.
Для отображения пунктов меню и информации о состоянии системы используется 4- строчный LCDдисплей. После подачи напряжения питания дисплей инициализируется и включается подсветка дисплея. При загрузке системы на дисплей выводится строка прогресса загрузки.
После этого, на дисплее отображается меню режима ожидания.
В первой строке отображается текущий день недели, дата и время. Во второй строке выводится температура воздуха и состояние датчика осадков. В третьей строке выводится температура и уровень воды в резервной емкости. Следует отметить, что данные датчиков отображаются только в том случае, если они присутствуют в системе, подключены и при программировании системы их работа разрешена.
Через 3 минуты после отпускания кнопки подсветка дисплея выключается, а еще через 2 минуты дисплей переходит в режим ожидания и информация на него не выводится.
Для входа в главное меню или в подменю выбранного пункта меню следует нажать кнопку Forward (>). Перехода по пунктам меню осуществляется кнопками Up (/\) или Down (\/), при этом активный пункт меню выделяется значком курсора >. Для возврата из подменю следует нажать кнопку Return (<). Для сохранения изменений следует нажать кнопку Ok. Обратите внимание, что на дисплей выводится название текущего меню/подменю и три пункта вложенных подменю. При переходе по пунктам, меню прокручивается вверх или вниз.
Ниже представлена диаграмма перехода по пунктам меню:
Главное меню системы состоит из следующих пунктов:
- Режим «Автоматический полив»;
- Режим «Полив по расписанию»;
- Режим «Полив вручную»;
- Настройка системы.
Подменю «Автоматический полив» состоит из следующих пунктов:
- Включение/выключение режима «Автоматический полив»;
- Настройки режима.
Подробнее настройки режимов будут описаны в разделе «Программирование системы».
Подменю «Полив по расписанию» состоит из следующих пунктов:
- Включение/выключение режима «Полив по расписанию»;
- Настройки режима.
Подменю «Полив вручную» состоит из следующих пунктов:
- Выбор зоны полива;
- Продолжительность полива.
Подменю «Настройка системы» состоит из следующих пунктов:
- Включение/выключение контроля уровня воды;
- Включение/выключение контроля осадков;
- Определение адресов подключенных устройств;
- Настройки устройств;
- Установка даты/времени;
- Просмотр журнала ошибок.
Все настройки подробно будут описаны в разделе «Программирование системы».
Обмен данными по сети.
Обмен данными между устройствами в системе происходит по сети с интерфейсом RS-485. Протокол обмена построен на использовании мультипроцессорного режима работы модуля USART. Для обмена используется формат посылки – 9 битов данных, с одним стоп-битом и включенным контролем четности.
При обмене данными, первым байтом передается адрес устройства, к которому обращается ведущий сети. При передаче адреса 9-й бит устанавливается в «1», при передаче остальных данных 9-й бит сброшен. Таким образом, все устройства в сети принимают адрес, и если принятый байт не совпадает с собственным адресом устройства, прием и обработка следующих байтов не производится. При совпадении первого байта с собственным адресом устройства, программа выключает мультипроцессорный режим работы, и обрабатывает поступающие данные. Кроме собственного адреса, устройства так же откликаются на широковещательные пакеты с адресом общего вызова – 0х00. Это удобно, например, для перезагрузки всех устройств системы. Контроллер системы полива в сети имеет собственный адрес 0х01.
Устройство, принимая данные, обрабатывает каждый байт. При этом проверяются ошибки кадрирования, переполнения и четности. Целостность всей посылки проверяется верностью контрольной суммы, вычисляемой по алгоритму CRC8.
ПРОТОКОЛ ОБМЕНА С ДАТЧИКАМИ.
При опросе состояния датчиков, контроллер системы передает в сеть запрос на чтение данных, например:
0x12, 0x3C, 0x60
где: 0x12 – адрес устройства, 0х3С – команда на чтение данных (символ «<» в ASCII коде), 0x60 – контрольная сумма. После передачи запроса по сети, контроллер переключается на прием и ожидает данные от датчика.
Датчик с адресом 0x12 после успешного получения команды, формирует посылку данных состояния, например
0x01, 0xCA, 0x02, 0x17, 0x05, 0x21, 0x1D
где: 0x01 – адрес контроллера системы, 0xCA – тип устройства (датчик уровня и температуры воды), 0x02, 0x17, 0x05 – три байта состояния датчика (уровень воды – максимум, температура воды 17,5ОС), 0x21 – признак удачного приема данных (символ «!» в ASCII коде), 0x1D – контрольная сумма. После передачи данных, датчик переключается на прием.
Если устройство не отвечает в течении определенного времени, контроллер повторяет запрос на чтение данных.
В случае если при приеме данных произошла ошибка (например, не совпала принятая и вычисленная контрольные суммы), датчик формирует посылку данных, устанавливая значение признака удачного приема – 0x3F (символ «?» в ASCII коде), информируя программу контроллера системы об ошибке обмена. При возникновении ошибки обмена по сети, программа контролера системы повторно отправляет запрос на чтение данных.
В случае если ошибка обмена повторяется несколько раз подряд, контроллер системы формирует команду на перезагрузку устройства, например
0x12, 0x52, 0x1A
где: 0x12 – адрес устройства, 0х52 – команда на перезагрузку устройства (символ «R» в ASCII коде), 0x1A – контрольная сумма.
ПРОТОКОЛ ОБМЕНА С МОДУЛЯМИ УПРАВЛЕНИЯ.
Для подачи команды на включение/выключение реле каналов блоков управления, контроллер передает в сеть пакет данных управления, например
0x20, 0x3E, 0x41, 0x7D
где: 0x20 – адрес блока управления, 0х3E – команда на запись данных (символ «>» в ASCII коде), 0x41 – управляющий байт (0x41 = 0100 0001, то есть включить только 1 и 7 каналы блока управления), 0x7D – контрольная сумма. После передачи запроса по сети, контроллер переключается на прием и ожидает данные от датчика.
Блок управления с адресом 0x20 после успешного получения команды, формирует посылку данных состояния, например
0x01, 0xD8, 0x41, 0x00, 0x00, 0x21, 0x45
где: 0x01 – адрес контроллера системы, 0xD8 – тип устройства (8-ми канальный блок управления), 0x41, 0x00, 0x00 – три байта состояния (включены каналы 1 и 7), 0x21 – признак удачного приема данных, 0x45 – контрольная сумма. После передачи данных, датчик переключается на прием.
Часы реального времени.
Система полива работает в режиме реального времени. Программа контроллера системы постоянно сравнивает текущее время со значением регистров начала полива в том или ином режиме работы. Для отсчета текущего времени, в системе используется отдельная микросхема. Эта микросхема отсчитывает текущее время в часах, минутах, секундах, текущую дату в годах, месяцах, днях месяца и днях недели. Кроме высокой точности хода, преимуществом использования данной микросхемы является возможность подключения батареи резервного питания, что позволяет избежать сбоев при отключении напряжения питания системы. Управление микросхемой, установка текущего времени и даты, чтение текущего времени и даты происходит по шине I2C.
При первом включении напряжения питания системы, автоматически происходит инициализация микросхемы часов. Программа контроллера устанавливает в «1» значение бита SQWE регистра конфигурации. При этом на выходе SQW/OUT (вывод 7) будут формироваться импульсы с периодичностью 1 сек.
Импульсы от микросхемы поступают на вход PD3 микроконтроллера, который совмещен с входом обнаружения внешнего прерывания INT1. Обработчик прерывания, при поступлении импульсов увеличивает значение счетных регистров текущего времени микроконтроллера.
При повторном включении напряжения питания, после перезагрузки системы и раз в сутки в 00:00, происходит синхронизация часов. При этом программа контроллера считывает по шине I2C данные регистров микросхемы и переписывает их в свои регистры текущего времени.
Установка текущего времени производится при программировании системы полива и будет описана в разделе «Программирование системы».