Градиентный процессор

Автор: Пользователь скрыл имя, 09 Декабря 2011 в 13:18, реферат

Описание работы

Цели работы:

Провести обзор по законам регулирования.
Освоить язык С и основы программирования микроконтроллера.
Освоить методику вычисления коэффициентов для закона ПИД- регулирования.
Написать программу для микроконтроллера Atmega16, контролирующую процесс термостабилизации.
Г л а в а I

Содержание

Введение………………………………………………………………………………3
Глава I. ЛИТЕРАТУРНЫЙ ОБЗОР………………………………..……………..5
ЗАКОНЫ РЕГУЛИРОВАНИЯ.……………………………………………………..…5
П- РЕГУЛЯТОРЫ……………………………………………………………………6
ПИ- РЕГУЛЯТОРЫ………………………………………………………………….7
ПИД- РЕГУЛЯТОРЫ………………………………………………………………...7
ИНТЕРФЕЙС I2C(TWI)……………………………………………………………….9
ФОРМАТ ПОСЫЛКИ ПЕРЕДАВАЕМЫХ ДАННЫХ………………………………..10
Условия СТАРТа и СТОПа……………………………………………………….10
Формат адресного пакета………………………………………………………...10
Формат пакета данных…………………………………………………………...11
ФОРМИРОВАНИЕ ШИМ СИГНАЛА……………………………………………….11
РЕЖИМ БЫСТРОЙ ШИМ……………………………………………………...…..12
Г л а в а I I.ПРОГРАМНОЕ ОБЕСПЕЧЕНИЕ………………………………...14
АЛГОРИТМЫ ЦИФРОВОГО ПИД РЕГУЛИРОВАНИЯ……………………………14
СИСТЕМА АВТОМАТИЧЕСКОГО РЕГУЛИРОВАНИЯ……………………………14
ПРОГРАМНОЕ ОБЕСПЕЧЕНИЕ……………………………………………………15
ОСНОВНЫЕ РЕГИСТРЫ МИКРОКОНТРОЛЛЕРА………………………………...15
ОПИСАНИЕ РЕГИСТРОВ TWI……………………………………………………..16
ОПИСАНИЕ РЕГИСТРОВ 8-РАЗРЯДНОГО ТАЙМЕРА- СЧЕТЧИКА 0……………...17
ЗАКЛЮЧЕНИЕ…………………………………………………………………….22
ПРИЛОЖЕНИЯ……………………………………………………………………23
СПИСОК ЛИТЕРАТУРЫ…………………………………

Работа содержит 1 файл

реферат.doc

— 411.50 Кб (Скачать)

     Разряд 2 - Резервный бит

    Данный  бит является резервным и считывается  как 0.

     Разряды 1..0 - TWPS: Биты предделителя TWI

    Данные  биты отличаются полным доступом (чтение/запись) и позволяют управлять предделителем  скорости связи. 

   Регистр данных шины TWI - TWDR

Разряд 7 6 5 4 3 2 1 0
  TWD7 TWD6 TWD5 TWD4 TWD3 TWD2 TWD1 TWD0
Исх. значение 1 1 1 1 1 1 1 1

    В режиме передатчика регистр TWDR содержит следующий байт для передачи. В  режиме приемника регистр TWDR содержит последний принятый байт. Запись в  регистр возможна только когда TWI не выполняет процесс сдвига данных. Такое состояние наступает, когда происходит аппаратная установка флага прерывания TWINT. Обратите внимание, что регистр данных не может инициализироваться пользователем перед возникновением первого прерывания. Данные в регистре TWDR остаются стабильными пока установлен бит TWINT. Во время сдвига последовательной передачи данных одновременно происходит сдвиг для последовательного ввода. TWDR всегда содержит последний байт представленный на шине, исключая ситуацию возобновления нормальной работы микроконтроллера по прерыванию TWI. В этом случае состояние TWDR является неопределенным. В случае потери арбитрирования шины данные, передаваемые от ведущего к подчиненному, не теряются. Управление битом ПОДТВ происходит автоматически под управлением схемы TWI, а ЦПУ непосредственного доступа к биту ПОДТВ не имеет.

     Разряды 7..0 - TWD: Регистр данных шины TWI

    Данные 8 бит составляют байт данных, который  необходимо передать следующим, или  последний принятый байт по двухпроводной  последовательной шине. 

   Регистр подчиненного адреса шины TWI - TWAR

Разряд 7 6 5 4 3 2 1 0
  TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE
Исх. значение 1 1 1 1 1 1 1 1
 

     Разряды 7..1 - TWA: Регистр подчиненного адреса TWI

    Данные  семь бит составляют подчиненный  адрес блока TWI.

     Разряд 0 - TWGCE: Бит разрешения обнаружения общего вызова по шине TWI

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

      Заключение 

    При разработке программного обеспечения был освоен язык «С». Изучены основы работы периферийных устройств процессора Atmega16 и подробно разобран процесс обмена данными между контроллером и термодатчиком по TWI интерфейсу. 

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

    В результате проведенной работы поставленная цель была достигнута. Создано программное  обеспечение, позволяющее регулировать значение температуры на основе ПИД закона. Программа занимает 2572 байта памяти контроллера и 21 байт энергонезависимой памяти. 
 
 
 
 
 
 
 
 
 
 
 
 
 

Приложение

Текст программы:

#include <iom16v.h> 
#include <macros.h> 
#include <eeprom.h> 
 
void port_init(void) //инициализация ножек контроллера 

PORTA = 0x00; 
DDRA  = 0xF0;        // 3 ножки настроены на выход 
PORTB = 0x00; 
DDRB  = 0x00; 
PORTC = 0x00;  
DDRC  = 0x00; 
PORTD = 0x00; 
DDRD  = 0x84; 

 
void watchdog_init(void) //инициализация сторожевого таймера, предделитель: 16K 

WDR(); 
WDTCR = 0x08;      //сторожевой таймер запущен 

 
void timer0_init(void) //инициализация таймера 

TCCR0 = 0x00; //остановка таймера 
TCNT0 = 0x64; //установка счета 
OCR0  = 0x9C;  //установка сравнения 
TCCR0 = 0x05; //запуск таймера 

 
#pragma interrupt_handler timer0_ovf_isr:10 
volatile char start; 
void timer0_ovf_isr(void

TCNT0 = 0x64; // 
start=1;  

 
void timer2_init(void

TCCR2 = 0x00;  
ASSR  = 0x00;  
TCNT2 = 0x01;  
OCR2  = 0xFF; 
TCCR2 = 0x79;  

 
void twi_init(void)                //инициализация TWI 

TWCR= 0X00; //отключение twi 
TWBR= 0x64; //установка скорости передачи 
TWSR= 0x00; //установка предделителя 
TWAR= 0x00; //установка адреса ведомого устройства 
TWCR= 0x04; //запуск twi 

 
void init_devices(void)           //функция инициализирующая 

CLI();                                      //отключение всех прерываний 
port_init(); 
watchdog_init(); 
timer0_init(); 
timer2_init(); 
twi_init(); 
 
MCUCR = 0x00; 
GICR  = 0x00; 
TIMSK = 0x01;  
SEI();                                       //запуск прерываний 

//n from 1 to 4 
void led(char n, char on)        //функция, зажигающая диод 

  if(on)   //зажечь 
    PORTA|=1<<(n+3); 
  else     //выключить 
    PORTA&=~( 1<<(n+3) ); 

void SetPWM(unsigned char val) 

OCR2 = val;                                    //запись val в регистр порога сравнения 

float GetTemp(char adr)              //чтение температуры 

  float temper; 
  short int t; 
  char t_high,s,t_low;                    // первый и второй байт считываемый с датчика 
   
  TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);   // передача условия старт 
   
  while (!(TWCR & (1<<TWINT)));       //Ожидание установки флага TWINT. Этим                         //индицируется завершение передачи условия СТАРТ  
 
  if ((TWSR & 0xF8) != 0x08)         //Проверка кода состояния TWI. Маскир. бит предделителя. //Если код состояния не равен СТАРТ=0x08, то возвращается ошибочное значение //температуры  
     return(130);                   
 

 TWDR=((adr&7+0x9)<<1) + 1; //Загрузка ПОДЧИН_УСТР_АДР + ЧТЕНИЕ в регистр TWDR 
  TWCR = (1<<TWINT) | (1<<TWEN); //Сброс бита TWINT в TWCR для начала передачи адр.    
 
  while (!(TWCR & (1<<TWINT)));     //Ожидание установки флага TWINT. Этим //сигнализируется завершение передачи ПОДЧИН_УСТР_АДР + ЧТЕНИЕ и //получение/неполучение подтверждения (ПОДТВ/НЕТ ПОДТВ) 
 
     
  if ((TWSR & 0xF8) != 0x40)        //Проверка значения регистра состояния.Маскирование бит предделителя  
      return(130);             //Если состояние отличается от MR_ADR_ACK=0x40,то возвращается ошибочное значение тем/ры  
 
    TWCR = (1<<TWINT) |(1<<TWEA) |  (1<<TWEN); //Сброс бита TWINT в TWCR для начала //операции чтения первого байта с датчика. Бит TWEA управляет генерацией импульса //подтверждения. Если в бит TWEA записана лог.1, то импульс ПОДТВ генерируется на шине //TWI   
 
    while (!(TWCR & (1<<TWINT)));     //Ожидание установки флага TWINT. Этим //сигнализируется завершение чтения первого байта 
 
  t_high=TWDR; 
 
  TWCR = (1<<TWINT) | (1<<TWEN);   //Сброс бита TWINT в TWCR для начала операции чтения второго байта с датчика 
     
   
  while (!(TWCR & (1<<TWINT)));     //Ожидание установки флага TWINT. Этим сигнализируется завершение чтения первого байта 
 
   t_low=TWDR; 
 
  TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //Передача условия СТОП  
       
t= t_low+(t_high<<8); 
s=(t&0x8000)==1; 
 
     t=t>>6;   
   
  if(s)                                 //если температура больше нуля 
 temper= t/4.0f; 
  else 
    temper= (t-512)/4.0f;   //если температура меньше нуля 
return temper; 

// 
#pragma data:eeprom // «прошивка» энергонезависимой памяти 
float eU= 40; 
float eK= 2; 
float eTd= 3; 
float eTi=4; 
float eTk=0.01; 
#pragma data:data 

void led_temper(float X) // эта функция зажигает один из диодов в зависимости от того в                                            //каком интервале лежит текущая температура  

if (X>20) 
  { 
   if (X<30)  
    { 
     led(1,1); return
    } 
   if(X<40)  
   { 
     led(2,1); return
    } 
   if(X==130) 
    { 
     led(3,1); return
    } 
  } 
else led(4,1); 

void main(void

float X_prev, summa, Y_val, X; 
int U,K,Td,Ti; 
float Tk; 
 
WDTCR=(0<<WDE);                          //сброс сторожевого таймера 
 
init_devices();  
 
EEPROM_READ((int)&eU, U);        //чтение из энергонезависимой памяти коэфициентов 
EEPROM_READ((int)&eK, K); 
EEPROM_READ((int)&eTd, Td); 
EEPROM_READ((int)&eTk,Tk); 
EEPROM_READ((int)&eTi,Ti); 
 
X_prev=GetTemp(1); 
 
while(1)                                   //бесконечный цикл 

  while(!start); start=0;             //задержка 10ms 
    
  X=GetTemp(1);  
  led_temper(X);        
  summa+=(U-X)*Tk; 
  Y_val=K*(U-X)+ summa/Ti+ Td*(X-X_prev)/Tk;                                                                                                 SetPWM(Y_val) 
  X_prev=X; 


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

СПИСОК ЛИТЕРАТУРЫ

  1. Б.И.Березин, С.Б.Березин  // Начальный курс С и С++.-М.:Диалог-МИФИ, 1999.-288с.
  2. В.В.Гребнев //Микроконтроллеры семейства AVR фирмы ATMEL. "Радиософт",2002г.
  3. М.С. Голубцов //Микроконтроллеры AVR: от простого к сложному. М., “СОЛОН-Пресс”, 2003г.
 
  1. В.Я. Хартов //Проектирование и отладка программ для микроконтроллеров AVR фримы ATMEL. Изд-во МГТУ им. Н.Э.Баумана, 2004г.
  2. Нимич Г.В. //Общие положения автоматического управления системами автоматического регулирования. СОК. – 2004. – №7. – с. 26–30.
  3. А. С. Клюев, А. Т. Лебедев, С. А. Клюев, А. Г. Товарнов; Под ред. А. С. Клюева //Наладка средств автоматизации и автоматических систем регулирования: Справочное пособие  – 2-е изд., перераб. и доп. – М.: Энергоатомиздат, 1999. –386 с.
  4. Магнитный резонанс в медицине.- под ред. проф. П.А.Ринка, 3-е изд., Blackwell Scientific Publications, 1996. – 210 с.
  5. www.nterm.ru/zakon.htm // Графическая иллюстрация законов регулирования.
  1. Измерители-регуляторы температуры. Общие сведения. //www.members.vicard.net/sensor/main1_10.htm
  1. Микроконтроллеры  AVR начинающим.//www.avr123.nm.ru/mkkurs01.htm

Информация о работе Градиентный процессор