Создание устройства для удалённого мониторинга, состояния датчиков на основе микроконтроллеров

Оглавление

    Введение 2

    Теоретические сведения: 3

    Цель работы: 5

    Задание: 5

    Ход работы: 6

    1. Основные блоки функциональной схемы: 7

    1.1  Микроконтроллер 7

    1.2 Приёмо-передатчик 8

    1.3 Цепи тактирования 9

    1.4 Геркон 9

    1.5 Клавиатура 10

    1.6 Устройства вывода 10

    2. Программная реализация алгоритма. 11

    2.1 Алгоритм работы 11

    2.2 Пульт оператора 11

    Заключение 11

      Приложение…………….………………………………………………………………………………………….12

      3.1 Принципиальная схема…………………………………………………………………………………12

      3.2 Листинг АРМ ..…………………….…………………………………………………………………………13

     3.2 Листинг устройства низкого уровня ..…………………….…………….…………………...…23  

     Список литературы 29

    Введение

    Системы автоматического управления эффективно решают задачи на уровнях, начинающихся от управления отдельными узлами и  устройствами и заканчивающихся  управлением технологическими установками  и целыми производствами. В системах автоматизации применяются различные  средства реализации алгоритмов управления. В настоящее время, несмотря на определенные особенности применения, наиболее эффективными являются цифровые методы и средства.

    Вес и роль аналоговых средств существенно  снизилась в силу недостаточной  точности, стабильности, функциональной гибкости и технологичности. Основная область применения аналоговых устройств  – предварительная подготовка сигналов для преобразования в цифровой формат.

          Решение задач управления невозможно без анализа состояния объекта управления, необходимая информация от объекта поступает от датчиков. Как правило, для ввода поступающей от датчиков информации требуется ее преобразование в форму, удобную для дальнейшей обработки. Основным элементом системы управления является контроллер, реализующий основные алгоритмы преобразования информации и управления. Результатом решения задач управления являются команды, поступающие от контроллера на исполнительные устройства. Эти команды определяют состояние объекта управления в соответствии с решаемыми задачами.

    Микроконтроллеры являются весьма универсальным средством и применяются для решения самых разнообразных задач. Их универсальность определяется особенностями микропроцессорной организации обработки данных. Существует много аналогичных по характеристикам микроконтроллеров, но среди выпускаемых в настоящее время выделяются микроконтроллеры семейства AVR фирмы ATMEL. Они обладают низким уровнем потребления, невысокой стоимостью при весьма значительных функциональных возможностях. Поэтому в рамках нашей курсовой работы был выбран микроконтроллер ATmega8, удовлетворяющий всем требованиям необходимых для реализации системы управления.   

    Теоретические сведения:

 

    Промышленная  сеть — сеть передачи данных, связывающая  различные датчики, исполнительные механизмы, промышленные контроллеры  и используемая в промышленной автоматизации. Термин употребляется преимущественно  в автоматизированной системе управления технологическими процессами (АСУТП). Описывается стандартом IEC 61158.

Устройства  используют сеть для:

передачи  данных, между датчиками, контроллерами  и исполнительными механизмами

диагностики и удалённого конфигурирования датчиков и исполнительных механизмов

калибрования  датчиков

питания датчиков и исполнительных механизмов

передачи  данных между датчиками и исполнительными  механизмами минуя центральный  контроллер

связи между датчиками, исполнительными  механизмами, ПЛК и АСУ ТП верхнего уровня

связи между контроллерами и системами  человеко-машинного интерфейса (SCADA)

В промышленных сетях для передачи данных применяют:

кабели;

волоконно-оптические линии;

беспроводную  связь (радиомодемы и Wi-Fi).

Промышленные  сети могут взаимодействовать с  обычными компьютерными сетями, в  частности использовать глобальную сеть Internet. 

Достоинства промышленных сетей.

В сравнении  с подключением периферийного оборудования к контроллеру отдельными проводами  промышленная сеть имеет следующие  достоинства:

в несколько  раз снижается расход на кабель и  его прокладку;

увеличивается допустимое расстояние до подключаемых датчиков и исполнительных устройств;

упрощается  управление сетью датчиков и исполнительных механизмов;

упрощается  модификация системы при изменении  типа датчиков, используемого протокола  взаимодействия, добавлении устройств  ввода-вывода;

позволяют дистанционно настраивать датчики  и проводить их диагностику. 
 

Недостатки промышленных сетей.

При обрыве кабеля теряется возможность получать данные и управлять не одним, а  несколькими устройствами (в зависимости  от места обрыва и топологии сети остаётся возможность автономного  функционирования сегмента сети и схемы  управления).

Для повышения  надёжности приходится резервировать  каналы связи или использовать кольцевую  топологию сети. 

Виды  промышленных сетей.

Modbus/RS-485 — самая простая, дешёвая и широко распространённая промышленная сеть

P-NET — Электрическая спецификация P-NET основана на стандарте RS-485, использующем защищенную витую пару.

Так же существует множество других видов  промышленных сетей, предназначенных  для узконаправленных задач. 

     Протокол  связи RS-485 является наиболее широко используемым промышленным стандартом, использующим двунаправленную сбалансированную линию передачи. Протокол поддерживает многоточечные соединения, обеспечивая  создание сетей с количеством  узлов до 32 и передачу на расстояние до 1200 м. Использование повторителей RS-485 позволяет увеличить расстояние передачи еще на 1200 м или добавить еще 32 узла. Стандарт RS-485 поддерживает полудуплексную связь. Для передачи и приема данных достаточно одной  скрученной пары проводников. 

     В данном проекте для написания  программы используется интегрированная  среда разработки программного обеспечения  для микроконтроллеров семейства Atmel AVR – CodeVisionAVR.

Что значительно  упрощает создание кода инициализации  всего МК, так как.

CodeVisionAVR включает в себя следующие  компоненты:

компилятор  Си-подобного языка для AVR;

компилятор  языка ассемблер для AVR;

генератор начального кода программы, позволяющего произвести инициализацию периферийных устройств;

модуль  взаимодействия с отладочной платой STK-500;

модуль  взаимодействия с программатором;

терминал.

Выходными файлами CodeVisionAVR являются:

HEX, BIN или  ROM-файл для загрузки в микроконтроллер  посредством программатора;

COFF —  файл, содержащий информацию для  отладчика;

OBJ —  файл

    Цель  работы:

    Создать устройство для удалённого мониторинга, состояния датчиков на основе микроконтроллеров, промышленной сети RS485 и программного обеспечения. Устройство должно выполнять следующие задачи: отслеживание состояния датчиков, сбор данных, передачу данных, приём данных, вывод данных на LCD.

    Задание:

    На  первом этапе производится выбор технических средств для построения системы управления. В соответствии с вычислительной сложностью алгоритмов управления определяется способ построения контроллера. При его выборе необходимо учитывать не только требования по непосредственному решению задач управления, но и программно-аппаратные ресурсы, которые необходимы для выполнения функций ввода-вывода данных для всех интерфейсов. Исполнительные устройства выбираются, в первую очередь, в соответствии со свойствами и требованиями объекта управления. Другим, важным для проектирования системы управления требованием является удобство их сопряжения с контроллером. Результатом разработки на этом этапе является определение комплекса технических средств, необходимого для решения задач управления

    На  следующем этапе проектирования для выбранных основных технических  средств разрабатывается принципиальная схема системы управления. Основная задача этого этапа - согласование свойств, параметров и характеристик сигналов для узлов функциональной схемы. Решение этой задачи требует применения различных аналоговых и цифровых устройств для преобразования сигналов.

    На  последнем этапе разрабатываются  алгоритмы и рабочие программы  для контроллера.

    Ход работы:

Структурная схема  устройства приведена на рис.1: 
 

    

      

    Для поставленной задачи был выбраны контроллеры семейства AVR ATmega8, удовлетворяющий требованиям алгоритма по производительности и имеющий необходимую периферию. Рассмотрим подробно реализацию этих задач: 
 

  1. Основные  блоки функциональной схемы:

 

    1. Микроконтроллер

ATmega8

Отличительные особенности:

8-разрядный  AVR микроконтроллер.

Тактовая  частота до 16 МГц.

Два 8-разрядных  таймера/счетчика с отдельным предварительным  делителем, один с режимом сравнения.

Один 16-разрядный  таймер/счетчик с отдельным предварительным  делителем и режимами захвата  и сравнения.

Три канала PWM .

Программируемый последовательный USART.

Структурная схема микроконтроллера имеет вид:

    1. 2  Приёмо-передатчик

Малопотребляющий  приемопередатчик RS-485 с защитой от электростатического разряда 15 кВ.

Основные параметры:

 
 
 
 
 

    1.3 Цепи тактирования

    Общим недостатком как внутренней, так  и внешней частотозадающей RC цепи является относительно низкая точность и недостаточная стабильность тактовой частоты, как правило, она не выше 3-5 процентов. Требуемую точность можно получить применением кварцевого резонатора в качестве частотозадающего элемента. Погрешность тактовых частот в этом случае не превышает 10-6 .

    Для обеспечения нормальной работоспособности  для данной задачи будем использовать внутреннею RC цепочку МК, настроенную на 4МГц.

        1.4 Геркон

В качестве датчиков у нас используются герконы - КЭМ1.

    1. 5 Клавиатура

    По  условию задачи мы начинаем обмен данными между АРМ и Устройством низкого уровня по нажатию кнопки «Считать».

    

    Кнопки  имеют такой недостаток как дребезг  контактов который затрудняет отслеживание  момента нажатия кнопки, так как контроллер может отследить не одно нажатия, что может привести к нежелательным последствия.  Есть несколько методов борьбы с этим. Один из них, который используется в данной системе - это введение временной задержки по появлению лог 0, которая должна быть больше времени дребезга контактов.

        1.6 Устройство вывода (LCD)

    В качестве устройства вывода информации был использован стандартный  LCD с двумя строками по шестнадцать символов в каждой строке на микроконтроллере hd44780, с стандартной схемой включения.

    2. Программная реализация алгоритма.

    2.1 Алгоритм работы

После нажатия кнопки «Считать» на АРМ формируется временная задержка для антидребезга, далее проверяется условие разрешения передачи данных (бит UDRE). После передаём символ G в устройство низкого уровня по интерфейсу RS485. После прихода символа G в устройство низкого уровня, считываем состояние всех датчиков в переменную  Data_Ger. Далее проверяем условие разрешения передачи данных . После передаём переменную Data_Ger  в АРМ.

По приходу  переменной в USART, присваиваем значение входного буфера данных переменной  Data_Ger и выводим эту переменную на LCD в двоичном виде.

    2.2 Пульт оператора

    Практически в любой системе управления необходимы функции настройки режимов работы. Как правило, функции настройки и отображения, доступны оператору системы управления жестко определяются при проектировании и строго ограничены. Это позволяет создать специализированный интерфейс оператора с заранее заданным набором функций и поэтому использовать для его реализации алгоритм «меню».

    В нашей системе управления в качестве пульта оператора выступает одна кнопка «Считать».

С которой и производится запуск обмена данных.

    Заключение

    В проделанной работе я ознакомилась с архитектурой микроконтроллера семейства AVR ATmega 8  и приобрела навыки разработки системы управления на основе микроконтроллера с использованием периферийных устройств. В итоге я получила алгоритм для проектирования устройства, основными задачами которого являются, отслеживание состояния датчиков, сбор данных, передача данных, приём данных, вывод данных на LCD. 
 
 

Приложение:

3.2Листинг  программы АРМ

 

include <mega8.h>

  #define RXB8 1

#define TXB8 0

#define UPE 2

#define OVR 3

#define FE 4

#define UDRE 5

#define RXC 7 

#define FRAMING_ERROR (1<<FE)

#define PARITY_ERROR (1<<UPE)

#define DATA_OVERRUN (1<<OVR)

#define DATA_REGISTER_EMPTY (1<<UDRE)

#define RX_COMPLETE (1<<RXC) 

// USART Receiver buffer

#define RX_BUFFER_SIZE 8

char rx_buffer[RX_BUFFER_SIZE]; 

#if RX_BUFFER_SIZE<256

unsigned char rx_wr_index,rx_rd_index,rx_counter;

#else

unsigned int rx_wr_index,rx_rd_index,rx_counter;

#endif 

// This flag is set on USART Receiver buffer overflow

bit rx_buffer_overflow; 

// USART Receiver interrupt service routine

interrupt [USART_RXC] void usart_rx_isr(void)

{

char status,data;

status=UCSRA;

data=UDR;

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)

   {

   rx_buffer[rx_wr_index]=data;

   if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;

   if (++rx_counter == RX_BUFFER_SIZE)

      {

      rx_counter=0;

      rx_buffer_overflow=1;

      };

   };

} 

#ifndef _DEBUG_TERMINAL_IO_

// Get a character from the USART Receiver buffer

#define _ALTERNATE_GETCHAR_

#pragma used+

char getchar(void)

{

char data;

while (rx_counter==0);

data=rx_buffer[rx_rd_index];

if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;

#asm("cli")

--rx_counter;

#asm("sei")

return data;

}

#pragma used-

#endif 

// USART Transmitter buffer

#define TX_BUFFER_SIZE 8

char tx_buffer[TX_BUFFER_SIZE]; 

#if TX_BUFFER_SIZE<256

unsigned char tx_wr_index,tx_rd_index,tx_counter;

#else

unsigned int tx_wr_index,tx_rd_index,tx_counter;

#endif 

// USART Transmitter interrupt service routine

interrupt [USART_TXC] void usart_tx_isr(void)

{

if (tx_counter)

   {

   --tx_counter;

   UDR=tx_buffer[tx_rd_index];

   if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;

   };

} 

#ifndef _DEBUG_TERMINAL_IO_

// Write a character to the USART Transmitter buffer

#define _ALTERNATE_PUTCHAR_

#pragma used+

void putchar(char c)

{

while (tx_counter == TX_BUFFER_SIZE);

#asm("cli")

if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))

   {

   tx_buffer[tx_wr_index]=c;

   if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;

   ++tx_counter;

   }

else

   UDR=c;

#asm("sei")

}

#pragma used-

#endif

// Alphanumeric LCD Module functions

#asm

   .equ __lcd_port=0x18 ;PORTB

#endasm

#include <lcd.h>       

void ZADERGKA_knopok (void){                                          // Функция формирования временной задержки для knopok

TCNT0=0x00;                                                        // Обнуление счётного регистра

while(TCNT0<0x32){};                                               // Условие значения счётного регистра

}                                                                  // Сидим здесь пока значение  счётного регистра не превысит  значение переменной   

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void)

{

ZADERGKA_knopok(); 

while (!(UCSRA.5));                                       // дожидаемся освобождение регистра  передачи  

UDR = 'G';                                                            // отправляем символ G 

} 

// Standard Input/Output functions

#include <stdio.h> 

// Declare your global variables here 

   unsigned char Data_Ger;        //Переменная состояния  всех датчиков

     unsigned char buffer_bin [7];

void main(void)

{

// Declare your local variables here 

// Input/Output Ports initialization

PORTB=0x00;

DDRB=0x00; 

PORTC=0x00;

DDRC=0x00; 

PORTD=0x04;

DDRD=0x00; 

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

TCCR0=0x00;

TCNT0=0x00; 

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: 0,977 kHz

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: On

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x05;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00; 

// External Interrupt(s) initialization

// INT0: On

// INT0 Mode: Low level

// INT1: Off

GICR|=0x40;

MCUCR=0x00;

GIFR=0x40;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud Rate: 9600 (Double Speed Mode)

UCSRA=0x02;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x33;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00; 

// LCD module initialization

lcd_init(16); 

// Global enable interrupts

#asm("sei") 

while (1)

      {

      // Place your code here

          if (rx_counter) {

/* выполнить  ЭТОТ код если в буфере есть  не считанные символы, данные */   

Data_Ger = getchar();

                     

                lcd_clear();                                              // очистить экран

                lcd_gotoxy(0,0);                                          // установить координаты

                lcd_putsf("Сос-е датчиков");                               // выводим надпись на ЖКИ       

                sprintf (buffer_bin, %7b, Data_Ger);

                lcd_gotoxy(0,1);

                lcd_puts(buffer_bin);          

                };

      };

} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

3.3Листинг  программы устройства низкого уровня

 

#include <mega8.h>

// Standard Input/Output functions

#include <stdio.h>

 bit dat_1;           //Переменные состояния датчиков

  bit dat_2;

  bit dat_3;  

  bit dat_4;

  bit dat_5; 

  bit dat_6;

  bit dat_7; 

  bit dat_8;