Розробка функціональної схеми 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Розробка функціональної схеми



Содержание

Введення.. 5

1 Розробка структурної схеми. 6

2 Розробка функціональної схеми. 9

3. Розробка джерела напруги. 11

3.3 Разработка подключения индикатора. 12

3.4 Блок гальванической развязки. 17

3.5 Блок дискретного вивода. 18

3.6 Разработка подключения АЦП.. 20

4 Розробка програмного забеспечення. 23

4.1 Общая структура программы.. 23

4.3 Розробка протоколів зв'язку пк з ПЕОМ. 24

Заключення. 26

Список используемой литературы.. 27

Приложение №1 Текст программы. 28

Реалізація практичної частини на Arduino. 38

Приложение №2 Текст программы. 38

Приложение №2 Блок-схема. 48


 

ЗАВДАННЯ НА ВИКОНАННЯ КП ПО КУРСУ МПТ

Необхідно розробити мікроконтролер для управління і контролю зовнішнім об'єктом на базі сімейства однокристальних МІКРОЕОМ «AVR|». Мікроконтролер повинен містити центральний процесор на базі заданого в завданні мікропроцесора, блоку ОЗУ, ПЗП для зберігання тимчасових таблиць, вузла вимірювання аналогового сигналу із схемами узгодження і захисту, вузла видачі аналогового сигналу, що управляє, вузла узгодження із стандартним послідовним портом введення виведення персонального комп'ютера, вузла індикації на базі рідкокристалічних індикаторів і блоку живлення розробляється контроллера, що забезпечує живлення.

 

1.2. Мікроконтролер повинен приймати інформацію, що поступає з дискретних датчиків і аналогового джерела, проводити її обробку, згідно завдання і передавати інформацію на ПЕВМ збору інформації по послідовному каналу зв'язку.

1.3. Для налаштування системи необхідно написати програму ініціалізації, яка розміщуватиметься у внутрішній FLASH пам'яті мікроконтролера, а для обробки даних - програму розрахунку результатів.

 

Вибір варіанту завдання

2.1. Номер варіанту вибирається крізною нумерацією студентів всіх груп курсу за прикладеним списком.

2.2. По таблиці №1, відповідно до номера варіанту вибирається код завдання і операція обробки.

Відповідно до заданих вимого для виконання курсової роботи були вибрані такі параметри.

1. Тип мікропроцесора ATmega16-16AC, робоча частота 8МГц.

1.1. Об’єм зовнішнього RАM – 16 Kbytes,.

1.2. Кількість вхідних аналогових каналів 8.

1.3. Динамічний діапазон вхідних каналів 10V.

1.4. Частота зміни вхідного сигналу 100 Гц.

2. Розрядність вихідного ШИМ – 8 bit

2.1. Кількість гальванічних розв’язаних дискретних каналів(виходи) 8

2.2. Кількість гальванічних розв’язаних дискретних каналів(входи) 1

2.3. Інтерфейс зв’язку з ПЭВМ RS-232

2.4. Індикатор 4 рядки 20 символів.

 

 

Введення

Адаптація мікропроцесорів до вирішення і особливостям конкретного завдання здійснюється в основному шляхом розробки відповідного програмного забезпечення, яку пізніше зашивають в пам'ять. Апаратна адаптація в більшості випадків здійснюється шляхом підключення необхідних інтегральних схем звернення і організація введення-виведення, відповідна розв'язуваної задачі.

Технологія flash-пам'яті забезпечила різке зниження вартості мікроконтролерів з перезаписуваною пам'яттю програм, дозволивши відкотитися від металокерамічних корпусів з кварцовим склом, які були необхідні для пам'яті з ультрафіолетовим стиранням. Важливим аспектом для надійності і мобільності систем стала поява мікроконтролерів із незалежною пам'ятю даних.


Розробка структурної схеми

В даній курсовій роботі дане завдання побудови пристрою на заданому мікропроцесорі ATmega16-16AC.

Основні відомості мікропроцесора даного сімейства.

Вид монтажу: SMD / SMT

Вбудований в чіп АЦП: так

Висота: 1 мм

Діапазон напруги живлення: 4.5 В... 5.5 В

Довжина: 10 мм

Доступні аналогові / цифрові канали: 8

Інтерфейс: JTAG, SPI, UART

Кількість ліній введення / виводу: 32

Кількість таймерів: 2 x 8 біт

Робоча напруга живлення: 4.5 В... 5.5 В

Робочий діапазон температрур: 0 C... + 70 C

Розмір ОЗУ: 1 Кб

Розмір ПЗУ даних: 512 B

Розмір пам'яті програм: 16 Кб

Розрядність АЦП: 10 біт

Тактова частота максимальна: 16 МГц

Тип пам'яті програм: Flash

Шина даних: 8 біт

Ширина: 10 мм

Ядро: ATmega

 

 

 

Розробка джерела напруги

 

Живлення мікроконтролера буде організовано від струму 24 В.

Даний перетворювач напруги "робить" 5 вольт з будь-якого, більш висого напруги (8-28 вольт), аналогічно стабілізатора напруги Крен5а (LM7805). Напруга на виході залежить від номіналів резисторів R1 і R2, можете переналаштувати схему на будь-яку напругу.

 

 

Блок дискретного вивода

 

Вихідний блок складемо на основі схеми Дарвінгктона, Як транзистора в ній використовуємо транзистор Т1 - BCX53 (виробництва Philips). Оптрон вибираємо аналогічний, тому, який вибрали у вхідному блоці - PC817.

Берем номинальный резистор на 1.7 к Ом.

Значит ток будет

Рассчитываем мощность резистора

Берем рядовую мощность в 0.25W


Разработка подключения АЦП

ATMega16 містить в собі 10-бітовий АЦП, вхід якого може бути з'єднаний з одним з восьми висновків Port A. АЦП Mega16, як і будь-якого іншого АЦП, потрібно опорна напруга для цілей порівняння з вхідним (якщо вимірюється одно опорного, то отримуємо максимальний код в двійковому вигляді). Опорна напруга подається на висновок ADRef або може використовуватися внутрішній генератор з фіксованою напругою 2,65 В. Отриманий результат можна уявити в такому вигляді:

 

АЦП включається установкою біта ADEN в регістрі ADCSRA. Після перетворення, 10-бітний результат виявляється в 8-бітних регістрах ADCL і ADCH. За замовчуванням, молодший біт результату знаходиться праворуч (тобто в bit 0 регістра ADCL, так зване праве орієнтування). Але порядок проходження бітів на ліве орієнтування можна змінити встановивши біт ADLAR в регістрі ADMUX. Це зручно, якщо потрібно отримати 8-бітовий результат. У такому випадку потрібно прочитати тільки регістр ADCH. В іншому випадку, Ви повинні спочатку прочитати регістр ADCL першим, а ADCH другим, щоб бути впевненим в тому, що читання цих двох регістрів відноситься до результату одного перетворення.

Одиночне перетворення може бути викликано записом біта ADSC в регістр ADCSRA. Цей біт залишається встановленим весь час, займане перетворенням. Коли перетворення закінчено, біт автоматично встановлюється в 0. Можна також починати перетворення щодо подій з різних джерел. Модуль АЦП також може працювати в режимі "вільного польоту". В такому випадку АЦП постійно виробляє перетворення і оновлює регістри ADCH і ADCL новими значеннями.

Ви зможете конвертувати модулю АЦП необхідна тактова частота. Чим вище ця частота, тим швидше буде відбуватися перетворення (воно, звичайно, займає 13 тактів, перше перетворення займає 25 тактів). Але чим вище частота (і вище швидкість перетворення), тим менш точним виходить результат. Для отримання максимально точного результату, модуль АЦП повинен тактуватися частотою в межах від 50 до 200 КГц. Якщо необхідний результат з точністю менше 10 біт, то можна використовувати частоту більше 200 КГц. Модуль АЦП містить дільник частоти, щоб отримувати потрібну тактову частоту для перетворення з частоти процесора.

Регістр ADMUX задає вхідний контакт порту A для підключення АЦП, орієнтування результату і вибір опорної частоти. Якщо встановлений біт ADLAR, то результат ліво-орієнтований. Опорна частота від внутрішнього генератора задається виставленими в 1 битами REFS1 і REFS0. Якщо обидва біта скинуті, то опорна частота береться від контакту AREF. У разі, якщо REFS1 = 0 а REFS0 = 1, опорна частота береться від AVCC із зовнішнім конденсатором, підключеним до AREF. Вибір контакту введення виконується наступним чином:

 

Регістр контролю та статусу АЦП ADCSRA:

 

 

Біт ADEN = 1 включає модуль АЦП.

Запис одиниці в ADSC запускає цикл перетворення. У режимі "вільного польоту" запис одиниці запускає перше перетворення, наступні запускаються автоматично.

ADIF - прапор переривання АЦП. Цей біт встановлюється в 1 коли АЦП завершено перетворення і в регістрах ADCL і ADCH знаходяться актуальні дані. Цей прапор встановлюється навіть в тому випадку, якщо переривання заборонені. Це необхідно для випадку програмного опитування АЦП. Якщо використовуються переривання, то прапор скидається автоматично. Якщо використовується програмний опитування, то прапор може бути скинутий записом лог.1 в цей біт.

ADIE - Якщо в цьому біті встановлена ​​одиниця, і переривання дозволені глобально, то при закінченні перетворення буде виконано перехід по вектору переривання від АЦП.

Біти ADPS2..0 задають коефіцієнти приділитиля частоти:

 

Общая структура программы

Опис програми (реалізованій на arduino);

Setup: Данная процедура инициализирует линии порта.
crateMenuSpeedCool: Дана процедура ініціалізує ШИМ,завдяки чому при подачі сигнаала на порт, із різним ШИМ,можемо корегувати швидкість обертання кулера.
createStartInfo: Дана процедура виводить інформацію на ЖК дисплей по 4х-бітному зєднанню.
loadTemperature: Дана процедура по підключеній шині із цифровим датчиком температури, по 1-write протоколі отримує інформацію про температуру, після чого ми її конвертуємо в шкалу по С*.  

Заключення

В результаті виконання курсового проекту - розробка мікроконтролера (МК) управління зовнішнім об'єктом на базі комплекту БІС мікропроцесора сімейства AVR виробництва фірми "ATMEL", були закріплені навички роботи з мікропроцесорами.

В даний час дані мікропроцесори знайшли широке застосування мікропроцесорних пристроях і системах.

 

Список используемой литературы

 

Сташин В.В., Урусов А.В., Мологонцева О.Ф. Проектирование цифровых устройств на однокристальных микроконтроллерах. М.: Энергоатомиздат, 1990. 224 с.

Однокристальные микроЭВМ/ А.В.Боборыкин, Г.П.Липовецкий, Г.В.Литвин­ский и др. М.: МИКАП, 1994. 400 с.

Ваша первая программа для микроконтроллера Intel 8051: Методические указания к лабораторной работе №1 по курсу “Микропроцессоры и вычислительные устройства”/ Добряк В.А. Екатеринбург: УГТУ, 1999. 32 с.

Микропроцессоры. В 3-х кн. Кн. 1. Архитектура и проектирование микро-ЭВМ. Организация вычислительных процессов: Учебник для втузов/ П.В.Нестеров, В.Ф.Шаньгин, В.Л.Горбунов и др.; Под ред. Л.Н.Преснухина. М.: Высшая школа, 1986. 495 с.

А.В. Евстифеев. Микроконтроллеры AVR семейства классик фирмы «АTMEL»Додека 21. 2002 -208 стр.

 

 

Приложение №1 Текст программы.

/*

* GccApplication4.c

*

* Created: 17.06.2016 7:39:31

* Author: dmitry

*/

 

 

#include <avr/io.h>

#define F_CPU 1000000UL

#include <avr/io.h>

#include <util/delay.h>

#include <stdio.h>

 

// Установка лог. "1" на лінії E

#define LCD_E_SET PORTA | = 0x02

/ * Установка лог. "0" на лінії E * /

#define LCD_E_CLR PORTA & = 0xFD

/ * Установка лог. "1" на лінії RS * /

#define LCD_RS_SET PORTA | = 0x01

/ * Установка лог. "0" на лінії RS * /

#define LCD_RS_CLR PORTA & = 0xFE

 

/ * Макрос, який вказує функції, що

передаються команди * /

#define LCD_COMMAND 0

/ * Макрос, який вказує функції, що

передаються дані * /

#define LCD_DATA 1

 

#define lcd_putc(x) lcd_putbyte(x, LCD_DATA)

 

unsigned int ACP;

ISR(TIMER0_OVF_vect){

 

PORTD&=~(1<<0);

}

ISR(TIMER0_COMP_vect){

 

PORTD|=(1<<0);

}

ISR(ADC_vect){

ACP=ADCW;

ADCSRA|=(1<<ADSC);

}

int main(void)

{

DDRD=0b11111111;

OCR0=150;

TIMSK|(1<<1);

TIMSK|(1<<0);

asm("sei");

//////////////////////

// НАСТРОЙКА АЦП //

////////////////////

DDRB&=~(1<<0);

ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);

ADMUX|=(1<<REFS0)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0);

ADCSRA|=(1<<ADSC);

 

init_port();

 

// ініціалізація жк дисплея

lcd_init();

 

char buf[10];

sprintf(buf,"%d","Done At Home");

 

lcd_gotoxy(0,0);

lcd_putstring("helloq");

 

while(1){};

}

while(1)

{

asm("nop");

}

}

 

/* ініціалізація портів підключення до жк */

void init_port()

{

PORTD=0x00;

DDRD=0xFF;

}

* Функція передачі символ в жк * /

void lcd_putnibble(char t)

{

t<<=4;

LCD_E_SET;

_delay_us(50);

PORTD&=0x0F;

PORTD|=t;

LCD_E_CLR;

_delay_us(50);

}

 

/ * Функція передачі байта в ки.

char c - сам байт

char rs - змінна, яка вказує що передається:

rs = 0 - команда (встановлюється лінія RS)

rs = 1 - дані (скидається лінія RS) * /

void lcd_putbyte(char c, char rs)

{

char highc=0;

highc=c>>4;

if (rs==LCD_COMMAND) LCD_RS_CLR;

else LCD_RS_SET;

lcd_putnibble(highc);

lcd_putnibble(c);

}

 

void lcd_putchar(char c)

{

char highc=0;

highc=c>>4;

LCD_RS_SET;

lcd_putnibble(highc);

lcd_putnibble(c);

}

 

/* функция инициализации работы жки

в 4-битном режиме, без курсора */

 

void lcd_init()

{

_delay_ms(15);

lcd_putnibble(0b00000011);

_delay_ms(4);

lcd_putnibble(0b00000011);

_delay_us(100);

lcd_putnibble(0b00000011);

_delay_ms(1);

lcd_putnibble(0b00000010);

_delay_ms(1);

lcd_putbyte(0x28, LCD_COMMAND);

_delay_ms(1);

lcd_putbyte(0x0C, LCD_COMMAND);

_delay_ms(1);

lcd_putbyte(0x06, LCD_COMMAND);

_delay_ms(1);

}

 

/ * Функція очищення дисплея і повернення

курсору в початкову позицію * /

void lcd_clear()

{

lcd_putbyte(0x01, LCD_COMMAND);

_delay_us(1500);

}

 

/ * Функція переміщення курсора в задану позицію

col - номер знакоместа по горизонтальній осі (від 0 до 15)

row - номер рядка (0 або 1) * /

void lcd_gotoxy(char col, char row)

{

char adr;

adr=0x40*row+col;

adr|=0x80;

lcd_putbyte(adr, LCD_COMMAND);

}

 

void lcd_putstring (char stroka[])

{ char i;

for(i=0;stroka[i]!='\0';i++)

lcd_putchar(stroka[i]);

}

 

Повна схема дана по завданю

8 аналогових датчиків підключених до каналів АЦП, ЖК екран 4бітного звязку

 

Гальванічна розвязка дискертих входів(цифровий датчик) та виходів(нагрузка представлена кулером)

 

Схема пониження напруги джерела живлення МК

 

Приложение №2 Текст программы.

// include the library code:#include <LiquidCrystal.h>#include "OneWire.h"#include <MsTimer2.h>OneWire ds(3); // on pin 10 (a 4.7K resistor is necessary)// initialize the library with the numbers of the interface pins LiquidCrystal lcd(8, 9, 4, 5, 6, 7);///////////menu///////////// int selectKey=0; int depthMenu=0; int selectingMenu=1;//////------cooler int countMenuSpeedCuuler; int speedCooler=255;/////////////////////////// int i=0; int pinCooler=10; int countMenu=1; int pinLed=A1; ///////cooler///// int coolrPin; int countMenuCuuler=1; int hightTemperature=30; int lowTemperatura=20; float celsius; boolean updateTemperature=false; ////////////////// int coolerMenuId=0; int coolerPort=2;void setup() { //initial main menu pinMode(pinCooler, OUTPUT); pinMode(pinLed, OUTPUT); lcd.begin(16, 2); lcd.setCursor(0,0); lcd.print("---Main menu----"); lcd.setCursor(0,1); lcd.print("1.set t* diapazon");} void loop() { int x; x = analogRead (0); ////////////////////////////////////////////////////////////////////_RIGHT_/////////////////////////////////////////////////////////////////// if (x < 60) { if(depthMenu==1&&countMenuCuuler==1){ hightTemperature++; crateMenuCooler(); } if(depthMenu==1&&countMenuCuuler==2){ lowTemperatura++; crateMenuCooler(); }//////////////////////////////////speed cooler///////////if(depthMenu==3&&countMenuSpeedCuuler==3){ ///////При свиборі пункта меню із швидкістю блокується усі перемінні,countMenuSpeedCuuler надається ключ по якому усі дії відбуваються if(speedCooler<255){ speedCooler= speedCooler+5; } //////лише із перемінними які відносяться до даного пункта меню crateMenuSpeedCool(); ////// } //////////////////////////////////speed cooler/////////// } ////////////////////////////////////////////////////////////////////_UP_////////////////////////////////////////////////////////////////////////// else if (x < 200) { //up if(depthMenu==0){ menuSelect(--countMenu); } if(depthMenu==1){ countMenuCuuler=1; crateMenuCooler(); } } ///////////////////////////////////////////////////////////////////_DOWN_//////////////////////////////////////////////////////////////////// else if (x < 400){ //down/ if(depthMenu==0){ menuSelect(++countMenu); } if(depthMenu==1){ countMenuCuuler=2; crateMenuCooler(); } } ///////////////////////////////////////////////////////////////_LEFT_/////////////////////////////////////////////////////////////////////////// else if (x < 600){ if(!depthMenu<1){ } if(depthMenu==1&&countMenuCuuler==1){ hightTemperature--; crateMenuCooler(); } if(depthMenu==1&&countMenuCuuler==2){ lowTemperatura--; crateMenuCooler(); } //////////////////////////////////speed cooler///////////if(depthMenu==3&&countMenuSpeedCuuler==3){ ///////При свиборі пункта меню із швидкістю блокується усі перемінні,countMenuSpeedCuuler надається ключ по якому усі дії відбуваються speedCooler-=5; //////лише із перемінними які відносяться до даного пункта меню crateMenuSpeedCool(); } //////////////////////////////////speed cooler/////////// } ////////////////////////////////////////////////////////////////_SELECT_///////////////////////////////////////////////////////////// else if (x < 800){ //selectswitch(selectingMenu){ case 1:crateMenuCooler();//createdMenuCooler selectKey++; depthMenu=1; break; case 2:crateMenuSpeedCool(); selectKey++; depthMenu=3; if(selectKey==2){ digitalWrite(pinCooler, LOW); clearLCD(3); } break case 3:createStartInfo(); selectKey++; depthMenu=2; if(selectKey==2){ MsTimer2::stop(); clearLCD(3); } break; } if(selectKey==2){ depthMenu=0; selectKey=0; menuSelect(1); lcd.setCursor(0,0); lcd.print("---Main menu----"); } } } void menuSelect(int downCount){ lcd.setCursor(0,1); delay(300); if(countMenu<1){ countMenu=3; downCount=3; }else if(countMenu>3){ countMenu=1; downCount=1; } switch(downCount){ case 1:lcd.print("1.set t' diapazon"); selectingMenu=1; break; case 2:lcd.print("2.set speed cool"); selectingMenu=2; break; case 3:lcd.print("3.start"); selectingMenu=3; } lcd.print(" "); }void crateMenuCooler(){ delay(300); clearLCD(3); depthMenu=1; lcd.setCursor(0,0); lcd.print("1. t* diapazon"); lcd.setCursor(0,1); if(countMenuCuuler==1){ lcd.print("High t*: "); lcd.print(hightTemperature); lcd.print(" T"); } if(countMenuCuuler==2){ lcd.print("Low t*: "); lcd.print(lowTemperatura); lcd.print(" T"); }; } void crateMenuSpeedCool(){ delay(300); clearLCD(3); depthMenu=3; lcd.setCursor(0,0); lcd.print("2.speed cooler"); lcd.setCursor(0,1); countMenuSpeedCuuler=3; lcd.print("speed: "); lcd.print(speedCooler); lcd.print(" rpm"); analogWrite(pinCooler, speedCooler); };void createStartInfo(){ delay(300); clearLCD(3); depthMenu=4; lcd.setCursor(0,0); lcd.print("3.--about info--"); lcd.setCursor(0,1); updateTemperature=true; MsTimer2::set(100, loadTemperature); // 500ms period MsTimer2::start(); lcd.print("L:"); lcd.print(lowTemperatura); lcd.print("T:"); lcd.print(celsius); lcd.print("H:"); lcd.print(hightTemperature); if(hightTemperature<celsius){ analogWrite(pinCooler, speedCooler); }else if(celsius<hightTemperature){ digitalWrite(pinCooler, LOW); } if(celsius<lowTemperatura){ digitalWrite(pinLed,HIGH);} else if(celsius>lowTemperatura){ digitalWrite(pinLed,LOW);} } void clearLCD(int i){ switch(i){ case 1: lcd.setCursor(0,0); lcd.print(" "); break; case 2: lcd.setCursor(0,1); lcd.print(" "); break; case 3: lcd.setCursor(0,0); lcd.print(" "); lcd.setCursor(0,1); lcd.print(" "); break; } } void loadTemperature(){ byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; if (!ds.search(addr)) { ds.reset_search(); delay(250); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // start conversion, with parasite power on at the end delay(1000); // maybe 750ms is enough, maybe not // we might do a ds.depower() here, but the reset will take care of it. present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for (i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } // Convert the data to actual temperature // because the result is a 16 bit signed integer, it should // be stored to an "int16_t" type, which is always 16 bits // even when compiled on a 32 bit processor. int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data[7] == 0x10) { // "count remain" gives full 12 bit resolution raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); // at lower res, the low bits are undefined, so let's zero them if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms //// default is 12 bit resolution, 750 ms conversion time } celsius = (float)raw / 16.0; if(updateTemperature==true){ createStartInfo(); } }

 


Приложение №2 Блок-схема

 

 

 

 

Граф

 

 

Состояния:

a1 – Начало программы

a2 – Переход на верхнее меню

а3 – Переход на нижнее меню

а4 – Выбор меню

а5 – Находимся на меню №3

а6 – Находимся на меню №1

а7 – Переход на верхнее подменю

а8 – Переход на нижнее подменю

а9 – Находимся в подменю №2

а10 – Находимся в подменю №1

Условия:

Х1 – Если нажата кнопка вверх

Х2 – Если нажата кнопка вниз

Х3 – Если нажата кнопка выбора

Х4 – Если нажата кнопка сброса

Х5 – Если счётчик меню меньше 1

Х6 – Если счётчик меню больше 3

Х7 – Если кнопка выбора нажата больше одного раза

Х8 – Если нажата кнопка вверх в подменю

Х9 – Если нажата кнопка вниз в подменю

Х10 – Если счётчик подменю меньше 1

Х11 – Если счётчик подменю больше 2

 

Содержание

Введення.. 5

1 Розробка структурної схеми. 6

2 Розробка функціональної схеми. 9

3. Розробка джерела напруги. 11

3.3 Разработка подключения индикатора. 12

3.4 Блок гальванической развязки. 17

3.5 Блок дискретного вивода. 18

3.6 Разработка подключения АЦП.. 20

4 Розробка програмного забеспечення. 23

4.1 Общая структура программы.. 23

4.3 Розробка протоколів зв'язку пк з ПЕОМ. 24

Заключення. 26

Список используемой литературы.. 27

Приложение №1 Текст программы. 28

Реалізація практичної частини на Arduino. 38

Приложение №2 Текст программы. 38

Приложение №2 Блок-схема. 48


 

ЗАВДАННЯ НА ВИКОНАННЯ КП ПО КУРСУ МПТ

Необхідно розробити мікроконтролер для управління і контролю зовнішнім об'єктом на базі сімейства однокристальних МІКРОЕОМ «AVR|». Мікроконтролер повинен містити центральний процесор на базі заданого в завданні мікропроцесора, блоку ОЗУ, ПЗП для зберігання тимчасових таблиць, вузла вимірювання аналогового сигналу із схемами узгодження і захисту, вузла видачі аналогового сигналу, що управляє, вузла узгодження із стандартним послідовним портом введення виведення персонального комп'ютера, вузла індикації на базі рідкокристалічних індикаторів і блоку живлення розробляється контроллера, що забезпечує живлення.

 

1.2. Мікроконтролер повинен приймати інформацію, що поступає з дискретних датчиків і аналогового джерела, проводити її обробку, згідно завдання і передавати інформацію на ПЕВМ збору інформації по послідовному каналу зв'язку.

1.3. Для налаштування системи необхідно написати програму ініціалізації, яка розміщуватиметься у внутрішній FLASH пам'яті мікроконтролера, а для обробки даних - програму розрахунку результатів.

 

Вибір варіанту завдання

2.1. Номер варіанту вибирається крізною нумерацією студентів всіх груп курсу за прикладеним списком.

2.2. По таблиці №1, відповідно до номера варіанту вибирається код завдання і операція обробки.

Відповідно до заданих вимого для виконання курсової роботи були вибрані такі параметри.

1. Тип мікропроцесора ATmega16-16AC, робоча частота 8МГц.

1.1. Об’єм зовнішнього RАM – 16 Kbytes,.

1.2. Кількість вхідних аналогових каналів 8.

1.3. Динамічний діапазон вхідних каналів 10V.

1.4. Частота зміни вхідного сигналу 100 Гц.

2. Розрядність вихідного ШИМ – 8 bit

2.1. Кількість гальванічних розв’язаних дискретних каналів(виходи) 8

2.2. Кількість гальванічних розв’язаних дискретних каналів(входи) 1

2.3. Інтерфейс зв’язку з ПЭВМ RS-232

2.4. Індикатор 4 рядки 20 символів.

 

 

Введення

Адаптація мікропроцесорів до вирішення і особливостям конкретного завдання здійснюється в основному шляхом розробки відповідного програмного забезпечення, яку пізніше зашивають в пам'ять. Апаратна адаптація в більшості випадків здійснюється шляхом підключення необхідних інтегральних схем звернення і організація введення-виведення, відповідна розв'язуваної задачі.

Технологія flash-пам'яті забезпечила різке зниження вартості мікроконтролерів з перезаписуваною пам'яттю програм, дозволивши відкотитися від металокерамічних корпусів з кварцовим склом, які були необхідні для пам'яті з ультрафіолетовим стиранням. Важливим аспектом для надійності і мобільності систем стала поява мікроконтролерів із незалежною пам'ятю даних.


Розробка структурної схеми

В даній курсовій роботі дане завдання побудови пристрою на заданому мікропроцесорі ATmega16-16AC.

Основні відомості мікропроцесора даного сімейства.

Вид монтажу: SMD / SMT

Вбудований в чіп АЦП: так

Висота: 1 мм

Діапазон напруги живлення: 4.5 В... 5.5 В

Довжина: 10 мм

Доступні аналогові / цифрові канали: 8

Інтерфейс: JTAG, SPI, UART

Кількість ліній введення / виводу: 32

Кількість таймерів: 2 x 8 біт

Робоча напруга живлення: 4.5 В... 5.5 В

Робочий діапазон температрур: 0 C... + 70 C

Розмір ОЗУ: 1 Кб

Розмір ПЗУ даних: 512 B

Розмір пам'яті програм: 16 Кб

Розрядність АЦП: 10 біт

Тактова частота максимальна: 16 МГц

Тип пам'яті програм: Flash

Шина даних: 8 біт

Ширина: 10 мм

Ядро: ATmega

 

 

 

Розробка функціональної схеми

Всі AVR мають Flash-пам'ять програм, яка може бути завантажена як за допомогою звичайного програматора, так і за допомогою SPI-інтерфейсу, в тому числі безпосередньо на цільової платі. Число циклів перезапису - не менше 1000

Всі AVR мають блок енергонезалежної електрично стирається пам'яті даних EEPROM. Цей тип пам'яті, доступний програмі мікроконтролера безпосередньо в ході її виконання, зручний для зберігання проміжних даних, різних констант, таблиць перекодування, калібрувальних коефіцієнтів і т.п

Внутрішній тактовий генератор AVR може запускатися від декількох джерел опорної частоти (зовнішній генератор, зовнішній кварцовий резонатор, внутрішня або зовнішня RC-ланцюжок). Оскільки AVR-мікроконтролери повністю статичні, мінімальна допустима частота нічим не обмежена (аж до покрокового режиму). Максимальна робоча частота визначається конкретним типом мікроконтролера.

Сторожовий (WATCHDOG) таймер призначений для захисту мікроконтролера від збоїв в процесі роботи. Він має свій власний RC-генератор, що працює на частоті 1 МГц. Ця частота є наближеною і залежить перш за все від величини напруги живлення мікроконтролера і від температури. WATCHDOG-таймер забезпечений своїм власним перед дільником вхідної частоти з програмованим коефіцієнтом ділення, що дозволяє підлаштовувати часовий інтервал переповнення таймера і скидання мікроконтролера. WATCHDOG-таймер може бути відключений програмним чином під час роботи мікроконтролера як в активному режимі, так і в будь-якому з режимів зниженого енергоспоживання. В останньому випадку це призводить до значного зниження споживаного струму.

Мікроконтролери AVR мають у своєму складі від 1 до 4 лічильників загального призначення з розрядністю 8 або 16 біт, які можуть працювати і як таймери від внутрішнього джерела опорної частоти, і як лічильники зовнішніх подій із зовнішнім тактуванням.

Наявність різних векторів переривань для декількох різних подій (переповнення, захоплення, порівняння).

Порти введення / виводу AVR мають число незалежних ліній "Вхід / Вихід" від 3 до 53. Кожен розряд порту може бути запрограмований на введення або на висновок інформації. Потужні вихідні драйвери забезпечують струмовий навантажувальну здатність 20 мА на лінію порту при максимальному значенні 40 мА, що дозволяє, наприклад, безпосередньо підключати до мікроконтролера світлодіоди і біполярні транзистори. Загальна струмовий навантаження на всі лінії одного порту не повинна перевищувати 80 мА (всі значення наведені для напруги живлення 5 В).

Існує два способи управління станом виведення RESET

• У першому випадку напруга на виводі RESET «повторює» напруга живлення.

Для реалізації цього способу висновок RESET можна або noдключіть до джерела живлення, або залишити непідключеним, тому що цей висновок вже підтягнутий до джерела живлення внутрішнім резистором опором 100... 500 кОм

Для підключення до зовнішнього індикатору використовується 4 разрядное підключення шини індикатора до портів введення виведення мікропроцесора. Так як даний процесор не має зовнішньої шини даних для підключення до зовнішніх пристроїв індикатор підключається в цьому випадку на вільні ноги введення-виведення.


Розробка джерела напруги

 

Живлення мікроконтролера буде організовано від струму 24 В.

Даний перетворювач напруги "робить" 5 вольт з будь-якого, більш висого напруги (8-28 вольт), аналогічно стабілізатора напруги Крен5а (LM7805). Напруга на виході залежить від номіналів резисторів R1 і R2, можете переналаштувати схему на будь-яку напругу.

 

 



Поделиться:


Последнее изменение этой страницы: 2016-08-01; просмотров: 301; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.12.172 (0.248 с.)