Контролер температури і вологості, лічильник імпульсів з протоколом MODBUS

  • Час 17-12-2014, 15:29
  • Автор admin
  • Коментарів 0 Комент.
  • Силка url

При розробці пристроїв промислової електроніки або систем "розумний будинок" доводиться стикатися з необхідністю передачі даних на великі відстані (понад 100 метрів) в умовах досить сильних індустріальних перешкод. Стандарт RS-232 не дозволяє в таких умовах забезпечити безпомилкову передачу даних, тому в якості фізичного середовища передачі даних використовують лінії типу "вита пара" за стандартом RS-485. Як же протоколу передачі даних часто використовують протокол MODBUS. Як виявилося в інтернеті досить мало інформації в цій області. Цією статтею я спробую хоч трохи заповнити цей пробіл.

У багатьох інтерфейс RS-485 асоціюється відразу з чим-то промисловим, далеким від аматорської електроніки. А при слові MODBUS - майже всі говорять що це і є RS-485. Насправді це зовсім різні галузі передачі даних. Протокол RS-485 описує фізичне середовище передачі даних, тобто дроти, їх взаємне розташування, рівні сигналів і інше, інше, інше. MODBUS описує формат передачі даних, тобто логічно закінчений кадр (фрейм), що містить у собі як самі дані у певному порядку, так і інформацію про відправника/одержувача, виконаної операції і контрольну суму для контролю достовірності даних. Сама ж середовище передачі даних може бути будь-яка (дроти, радіохвилі, інтернет-пакети та інше). Якщо провести аналогію, наприклад, з доставкою посилки від відправника до одержувача, то RS-485 - це дороги (автомобільні, морські, повітряні), а MODBUS - це накладна до вантажу, де вказані всі вміст посилки, дані про відправника/одержувача і контрольний вагу посилки і друку для підтвердження достовірності посилки.

Реалізувати фізичну лінію передачі даних RS-485 навіть простіше, ніж RS-232. Для цього досить використовувати мікросхему MAX485 і два простих скручених провідники. І це забезпечує дальність зв'язку понад 1 км. Для RS-232 необхідний перетворювач рівня MAX232 з 4-ма конденсаторами і, бажано екранована, лінія зв'язку з трьома проводами. При цьому дальність зв'язку рідко перевищує 20 метрів і повинні бути виконані умови заземлення і вирівнювання потенціалів сполучених пристроїв.

У даній статті наводиться опис спрощеного контролера, здатного відображати на індивідуальному LCD-дисплеї температуру і вологість, а також вести підрахунок кількості надійшли імпульсів. Дані з контролера надходять на центральний керуючий блок по протоколу MODBUS. При мінімальній доопрацювання можливе застосування даного контролера для самостійного управління електронагрівачами та зволожувачами, що дозволяє отримати автономний контролер, здатний не тільки контролювати, але й підтримувати задані параметри.

Для налагодження контролера і роботи з комп'ютером використовувався перехідник RS-232 lt;-gt; RS-485. В принципі ця схема аналогічна багатьом іншим, але мені вона попалася першої. Перехідник зібраний на односторонній друкованій платі, живлення здійснюється від блоку зарядки для стільникового телефону. Оскільки блок зарядки видає 5,5 Вольт, то виявилося можливим відмовитися від установки стабілізатора 78L05, хоча для нього місце на платі передбачено, і замість нього встановлена перемичка.

Контролер температури і вологості, лічильник імпульсів з протоколом MODBUS

Вид з боку друкованої плати.

Контролер температури і вологості, лічильник імпульсів з протоколом MODBUS

Файл друкованої плати в форматі Sptint-Layout додається (файл RS232-485). При роботі з даними перехідником з'ясувалося, що перехідник відмінно працює з фізичними COM-портами (грубо кажучи - це ті, які вбудовані на материнській платі), але не працює з адаптером USB-COM чіп ProLific PL-2003 (В черговий раз отримав підтвердження, що для електронника потрібні старі комп'ютери, які доводиться тримати вдома для цих цілей).

Для роботи з протоколом MODBUS на комп'ютері був встановлений OPC-сервер. В комплекті до цього сервера йде утиліта перегляду MODBUS-регістрів, якою зручно користуватися у процесі налагодження. Ну і не забуваємо про термінал. Особисто я використовував програму RH_Com - термінал. (Хоча термінал мені знадобився у розширеній версії даного контролера).

На цьому вступну частину закінчуємо і переходимо до самого контролера і описом його роботи. Схема, як і більшість схема на мікроконтролерах, містить мінімум деталей. Тому, а також через відсутність у PROTEUS моделі датчика DHT-11, окремо принципову схему не малював. На друкованій платі є вказівки на використовувані елементи і номінали резисторів, а конденсатори ставляться максимально більшої ємності з наявних. За основу взято мікроконтролер ATTiny2313. Датчик температури і вологості типу DHT11 приєднаний безпосередньо до мікроконтролера. Для його нормальної роботи необхідно тільки встановити підтягуючий резистор (10 кОм) до харчування, оскільки внутрішнього підтягуючого резистора мікроконтролера не вистачить. Дисплей через роз'єм також безпосередньо приєднаний до виводів МК.

Контролер температури і вологості, лічильник імпульсів з протоколом MODBUS

Мікросхема MAX-485 приєднана до висновків RX і TX мікроконтролера і додатково задіяний ще один висновок 4 для перемикання режиму приймання-передавання. Можна було б і не використовувати цей висновок і зробити автоматичне визначення напрямку передачі, як це реалізовано в адаптер RS-232 lt;-gt; RS-485, але висновків і пам'яті у МК вистачає, так навіщо добру пропадати.

Вся схема розміщена на платі 40*50 мм Живлення схеми здійснюється від зарядки для стільникового телефону через стабілізатор 7805, також розміщеному на платі. Правда довелося підшукати зарядку, яка видає напругу близько 7 Вольт.

Контролер температури і вологості, лічильник імпульсів з протоколом MODBUS

А ось таку інформацію ми бачимо на табло в роботі:

Контролер температури і вологості, лічильник імпульсів з протоколом MODBUS

Програма для мікроконтролера написана на BASCOM-AVR. Програма детально комментирована і, думаю, при бажанні в ній легко можна розібратися.

При роботі спільно з пристроєм MASTER, в якості якого може виступати комп'ютер з встановленим на ньому OPC-сервер, контролер при отриманні запиту зі своїм номером SLAVE обробляє отриману команду і, якщо в команді вказано код виконуваної функції "3" і збігається контрольна сума посилки, у відповідь контролер посилає послідовність даних про температурі, вологості та кількості імпульсів. На комп'ютері в цьому випадку відображається наступне:

Контролер температури і вологості, лічильник імпульсів з протоколом MODBUS

або

Контролер температури і вологості, лічильник імпульсів з протоколом MODBUS

Також даний контролер можна прописати і в іншому сервері, наприклад AggreGate. (Свідчення на малюнках трохи відрізнятися, оскільки знімки з LCD і екрану монітора робилися в різний час.)

Особливо слід відзначити, оскільки використовується включення мікроконтролера на роботу з внутрішнім осцилятором, то не всі екземпляри мікроконтролера забезпечують безперебійну роботу при передачі даних по MODBUS (комп'ютер визначає помилки контрольної суми). У мене з 6 мікроконтролерів 3 працювали стабільно в кімнатних умовах, один починав давати збої помилка контрольної суми) приблизно через 10 хвилин роботи, а два інших одразу передавали дані з помилкою. Можливо це пов'язано з частотою і стабільність внутрішнього осцилятора. Тому бажано використання мікроконтролера або з зовнішнім кварцом, або здійснити підбір мікроконтролера.

В архіві DHT-11+Impuls.rar розташовані: друкована плата в форматі Sprint Layout 5, HEX файл для прошивки МК, вихідний код в середовищі BASCOM-AVR. При програмуванні МК треба виставити fuse-біти наступним чином:

Контролер температури і вологості, лічильник імпульсів з протоколом MODBUS

Тобто на роботу від внутрішнього тактового генератора на 8 МГц.

Список радіоелементів

Позначення Тип Номінал Кількість U1 LCD1
МК AVR 8-бітATtiny2313-20PU1
ІВ RS-422/RS-485 інтерфейсівMAX4851
Лінійний регуляторL7805AB1
LCD-дисплей20041
Датчик температуриDHT111
Резистор10 кОм1
Резистор10 Ом2
Резистор-перемичка0 Ом2
Конденсатор1 мкФ2
Tags

Коментарі до новини