
- •1. Мета і методи дослідження
- •1.1. Загальні положення
- •1.2. Основні теоретичні залежності
- •Коротка інформація з Assembler avr
- •1.3. Загальна схема виконання робіт
- •2. Вказівки до виконання лабораторних робіт Лабораторна робота № 1 Вивчення принципів роботи та особливостей програми моделювання електричних ланцюгів Electronic Work Bench
- •Лабораторна робота № 2 Моделювання роботи елементів цифрової системи керування у статичному режимі
- •Лабораторна робота № 3 Моделювання роботи елементів цифрової системи керування у динамічних режимах
- •Лабораторна робота № 4 Побудова та дослідження послідовних схем
- •Лабораторна робота № 5 Побудова та дослідження керуючого пристрою на базі жорсткої логіки
- •Лабораторна робота № 6 Дослідження властивостей ліній зв'язку
- •Лабораторна робота № 7 Побудова та дослідження генератора сигналів спеціальної форми
- •Лабораторна робота № 8 Побудова та дослідження моделей схем аналогового вводу даних
- •Лабораторна робота № 9 Вивчення системи проектування керуючих програм avr Studio
- •Лабораторна робота № 10 Виконання найпростіших програм і використання засобів налагодження у системі avr Studio
- •Лабораторна робота № 11 Напис і налагодження циклічних програм з використанням зовнішніх сигналів контролера в системі avr Studio
- •Лабораторна робота № 12 Напис і налагодження програм для роботи з таймером-лічильником по формуванню імпульсів заданої тривалості у системі avr Studio
- •Лабораторна робота № 13 Побудова системи динамічної індикації у системі avr Studio
- •Лабораторна робота № 14 Реалізація законів пропорційного та пропорційно-інтегрального керування
- •Список використаної літератури
Коротка інформація з Assembler avr
Типова структура програми на Assembler AVR:
необов’язковий заголовок (у виді коментарю з назвою проекту);
директива включення текстового файлу опису контролера;
розділ опису констант;
розділ опису перемінних;
розділ векторів переривань;
основна програма;
підпрограми обробки переривань;
підпрограми користувача.
Основні директиви Assembler
; – коментар
.include – уключити вміст зазначеного текстового файлу в це місце вихідного файлу, наприклад:
.include “8535def.inc”
.include “D:\ATMEL\MYLib\Subr1.asm”
Дана директива може застосовуватися в будь-якому місці програми.
.equ – директива завдання константи
Наприклад:
.equ Tsink=45
.equ TS2=Tsinc 4 – 2
.def – директива опису змінної
Наприклад
.def A=r16
.def uf_l=r23; кут завдання фази, молодший байт
.def uf_h=r24; кут завдання фази, старший байт
.csed – директива завдання початку сегмента коду
.org – розміщення по зазначеній адресі
Директиви визначення даних
.db – завдання однобайтного числа
.dw – завдання двохбайтного числа
.dq – завдання четирьохбайтного числа
Наприклад:
TABL 01:
.db 100, 103, 110…..
.db 202……
Загальний вид рядка програми мовою асемблера для контролера AVR:
Мітка |
код |
операнди |
примітки |
Loop 1: |
add |
A, zh |
; |
Способи адресації команд і даних у МК сімейства AVR
Контролери сімейства AVR підтримують чотири способи адресації команд і даних.
Реєстрова – джерело і приймач даних – це робочий регістр процесора (r0-r31).
Безпосередня – приймачем є робочий регістр, а джерелом – дані безпосередньо представлені в коді команди (допускається використовувати регістри r16-r31).
Непряма – джерелом або приймачем даних є осередок ОЗП, адреса якого знаходиться в реєстровій парі.
Пряма:
а) для команд передачі даних: джерелом або приймачем даних є осередок ОЗП або порт ввід – висновку, адреса яких прямо зазначений у коді команди;
б) для команд передачі керування: наступною виконуваною командою буде команда, адреса якої зазначений у коді команди.
Система команд
Арифметичні і логічні команди, наприклад:
add Rd, Rr ; Rd Rd+Rr ; Z, C, N, V, X, 1
біти ознак:
Z – ознака 0;
С – ознака переносу;
N – ознака знака.
Команд переходів, наприклад:
rjmp <мітка> – відносний
ijmp <мітка> – непрямий
rcall <мітка> – виклик підпрограм
ret – повернення з підпрограми
Команди порівняння, наприклад:
cp Rd, Rr ;Rd – Rr
cpc Rd, Rr ;Rd – Rr – C
Команди умовних переходів, наприклад:
Усі є відносними, але є два різновиди:
sbrc Rr, bit
sbrs Rr, bit
(Пропустити наступну команду, якщо біт у регістрі очищений або встановлений, bit 0 – 7)
sbic Port, bit
sbis Port, bit
Приклад:
sbis PINA, 0
rjmp LABEL1
(аналізуємо нульовий біт порту А)
breq – виконати перехід, якщо Z=1
brne – виконати перехід, на мітку, якщо Z=0
brcc – теж, тільки з бітом C
brcs – теж, тільки з бітом C
Приклад:
ldi r16, 0b10100110
ldi r17, 0b01011010
cp r16, r17
breq label 1
brcc label 2
rjmp label 3
Перевірка:
10100110
01011010
01001100
Z=0 C=0
Перехід здійснюється на label 3
Система переривань мікро-контролерів
Система переривань – це комплекс апаратно – програмних засобів що дозволяють реалізувати роботу керуючої системи в реальному часі шляхом здійснення програмної реакції системи керувань на апаратно – виникаючу подію.
У мікро-контролері AT90S8535 мається сімнадцять апаратно – програмних переривань:
0 – скидання, може виникати як апаратно, так і програмно зокрема при використанні режиму зменшеного енергоспоживання.
1 – переривання від зовнішнього джерела IRQ0;
2 – переривання від зовнішнього джерела IRQ1;
3 – переривання в порівнянні другого таймера лічильника
4 – переривання по переповненню другого таймера лічильника
5 – переривання по захопленню першого таймера лічильника
6 – переривання в порівнянні А першого таймері лічильника
7 – переривання в порівнянні В першого таймера лічильника
8 – переривання по переповненню першого таймера лічильника
9 – переривання по переповненню нульового таймера лічильника
10 – SPI – передача завершена
11 – прийом по UART завершений
12 – регістр збереження передавача UART порожній
13 – передача UART завершена
14 – АЦП – кінець перетворення
15 – EEPROM – готовий
16 – переривання від аналогового компаратора.
Ввід-вивід дискретної інформації
Ввід дискретної інформації ззовні в контролер можливий двома основними способами – програмним і по перериванню.
Рис. 2.
Розглянемо введення програмним способом на наступному прикладі.
Приклад:
Скласти блок – схему алгоритму програм введення інформації.
Вихідні дані:
вхід синхронізації РВ4;
вхід даних РС3.
Необхідно виконати чекання появи імпульсу на вході синхронізації тобто переходу від значення «0» до значення «1». Після цього виконати одну підпрограму, якщо рівень сигналу на вході даних дорівнює «0» і іншу, якщо він дорівнює «1».
Блок-схема алгоритму програми приведена на рис. 7.
Програма, що відповідає цьому алгоритму приведена нижче:
rjmp RESET
{таблиця переривань}
MAIN: rcall INIT
L001: sbic PINB, PB4
rjmp L001
L002: sbis PINB, PB4
rjmp L002
sbic PINC, PC3
rjmp SUBR1
rjmp SUBR0
RESET: ldi r16, low(RAMEND)
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16
rjmp MAIN
INIT: ldi r16, 0Bxxx0xxxx
out DDRB, r16
ldi r16, 0Bxxxx0xxx
out DDRc, r16
ret
Ініціалізація передбачає настроювання апаратних засобів контролера на необхідну роботу – настроювання стека, напрямки роботи портів вводу-виводу і т.п.
Рис. 7
Використання апаратних ресурсів контролерів для реалізації алгоритмів реального часу
Алгоритми реального часу це виконання операцій з чіткою прив’язкою до зовнішніх сигналів або в строгому програмному часі.
Найбільш розповсюдженим прикладом є програмно-керована динамічна індикація фрагмент принципової електричної схеми якої приведений на рис. 8.
Недоліком такої схеми є те, що немає захисту від випадкового включення відразу декількох індикаторів (при помилковій інформації на лініях порту В) що може привести до перевантаження ліній порту С.
Рис. 8.
Додавши дешифратор “3 на 8” можна уникнути цієї неприємності й одночасно звільнити 3 лінії порту В. Виходи дешифратора будуть керувати анодними ключами – транзисторами (рис. 9).
Рис. 9
Перевагою схеми є можливість керування будь-якою комбінацією сегментів, але для зручності виводу числової інформації можна застосувати табличний метод перекодування. На рисунку 5 наведені стандартні позначення сегментів одного розряду індикатора. Як що підключення індикаторів виконано відповідно до схеми на рис. 8, то таблиця відповідності знаків, що відображаються, і їх бітового представлення буде мати вигляд, наведений у таблиці 3. (Сегмент індикатора буде світитися, якщо відповідний біт буде скинути у нуль – для того, щоб додати до відображеного знака сому треба у нуль скинути біт 7.)
Таблиця 3.
|
Біти |
|||||||
Знаки |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
2 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
3 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
4 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
5 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
6 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
7 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
8 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
9 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
Фрагмент програми, що реалізує такого роду перетворення інформації, приведений нижче:
TABL:
.db 0b11000000, 0b11111001 …
flash2r0: push ZH
push ZL
ldi ZH, high (TABL2)
ldi ZL, low (TABL2)
add ZL, r0
lpm
pop ZL
pop ZH
ret
Для стабільної роботи (постійної частоти відновлення інформації на індикаторі) звичайно використовуються таймери-лічильники разом з перериваннями по їх переповненню.
Визначимо, як потрібно набудовувати таймер-лічильник для одержання частоти відновлення 25 Гц (вважається мінімальною частотою відновлення інформації, при якій око людини не зауважує мерехтіння).
Переддільник таймера-лічильника ділить частоту кварцового генератора в 8, 64, 256 або 1024 рази:
Таймер-лічильник вважає до свого переповнення, потрібно вибрати кратність:
Для восьми бітного таймера-лічильника переповнення відбувається при переході з 255 у 0, або з 11111111 у 100000000 (у двоїчному представленні).
У такий спосіб шукане число, що завантажується в регістр даних таймера-лічильника буде дорівнювати – 256 – 156 = 100.
Це число необхідно перезавантажувати в регістр даних таймера-лічильника щораз при виникненні переривання по його переповненню.
Блок-схема алгоритму підпрограми перезавантаження регістра даних таймера-лічильника приведена на рис. 11, а листинг самої підпрограми – нижче:
TC0Reloаd: push r16
ldi r16, 0
out TCCR0, r16 ; стіп TC 0
ldi r16, 100
out TCNT0, r16
ldi r16, 0b00000011 ; ck/64
out TCCR0, r16
pop r16
ret
Для передачі інформації між основною програмою і підпрограми обробки переривань, що виконує фізичний вивід (керування апаратними ресурсами) інформацію зручно використовувати буфер в ОЗП контролера.
.еqu BUF_RAM = $60
Припустимо мається підпрограма, що виконує обчислення і повертає результат своєї роботи у виді 3-х десяткових цифр у 3-х регістрах процесора. Тоді фрагмент підпрограми, що виконує запис цієї інформації в ОЗП буде мати вигляд:
; 67,66,65…,61,60 - місце розміщення даних в ОЗП
; BIN2DEC - підпрограма перекладу чисел
; input R11: R10 - її вхідна інформація
; output R3: R2: R1 - регістри, через які повертається
; результат
rcall TC0Reload
ldi ZH, high (BUF_ RAM)
ldi ZL, low (BUF_ RAM)
rcall BIN2DEC
std z+0, r1
std z+1, r2
std z+2, r3
Рис. 11
Складемо блок-схему алгоритму підпрограми обробки переривання по переповненню таймера-лічильника (рис. 12).
Вважаємо, що в регістрі r9 завжди зберігається значення поточної позиції індикації (тому що в кожен окремий момент часу реально світиться тільки один з індикаторів). Усіх позицій 8 – від 0 до 7, причому вивід відбувається починаючи з 7-й позиції – це особливість організації циклів на більшості мікро-контролерів – програма виходить трохи коротше, ніж якби вивід починався з 0-й позиції.
Оскільки підпрограма обробки переривання може виконуватися в кожній, стосовно основної програми момент часу, на початку її роботи в стеці необхідно зберегти, а наприкінці – з нього відновити уміст використовуваних регістрів у тому числі і статусному регістрі (у ньому зберігаються прапори ознак) SREG.
Листинг підпрограми обробки переривання від таймера-лічильника 0 для реалізації програмно-керованої динамічної індикації приведений нижче:
TIM0OVF: push r16
in r16, SREG
push r16
push r17
push zh
push zl
ldi zh, high(buf_ram)
ldi zl, low(buf_ram)
mov r16, r9
cbi portb, pb3
out portb, r16
add zl, r16
mov r17,zl
mov r0, r17
rcall flash2r0
out portc, r0
tst r16
brne no_zerr
ldi r16, 7
no_zerr: mov r9, r16
pop zl
pop zh
pop r17
pop r16
out sreg, r16
pop r16
reti
Доповнення до раніше розглянутої підпрограми ініціалізації.
Настроювання РС 7
РС 0 – вивід, РВ3
РВ 0 – вивід
ldi r16, 0b11111111
out DDRC,r16
ldi r16, 0b00001111
out DDRB,r16
ldi r16, 0b00000000
out PORTB, r16
cbi PORTB, PB3
Настроювання переривання
sbi TIMSK, TOIE0 ; переривання від
;ТС дозволено
Заборона всіх переривань на початку підпрограми ініціалізації (команда cli) і дозвіл усіх наприкінці (команда sei).
Доповнення в таблицю векторів переривань:
rjmp RESET
reti ; EXT0
reti ; EXT1
reti ;
reti ;
reti ;
reti ;
reti ;
reti ;
rjmp TIM0_OVF
Рис. 12
Реалізація типових законів керування програмно-апаратними методами
Апаратні засоби
При побудові програмно-апаратних систем керування звичайно використовують мікро-контролер з достатньою швидкодією і убудованим в нього АЦП (якщо розрядність АЦП задовольняє вимогам точності). Як правило для формування керуючого впливу (аналоговий сигнал) на виконавчий пристрій використовують убудований у мікро-контролер ШИМ - перетворювач. Для невеликої кількості сигналів з низькою частотою – цифро-аналогові перетворювачі – зовнішні стосовно мікро-контролера. При використанні схем аналогової пам’яті вдається реалізувати багатоканальний динамічний програмно керований ЦАП з мінімальною кількістю елементів.
Рис. 13
Робота багатоканального ЦАП заснована на здатності, конденсатора тривалий час зберігати свій заряд (напруга на конденсаторі залишається постійним тривалий час у випадки відсутності зовнішніх ланцюгів розряду). Застосування мультиплексорів з малими струмами витоку й операційних підсилювачів з високим вхідним опором забезпечують збереження напруги на конденсаторі практично постійним протягом часу від одиниць секунд до декількох хвилин (у залежності від якості конденсатора).
Принцип роботи пристрою:
Мікро-контролер на початку циклу роботи відключає мультиплексор, потім видає код, що відповідає необхідній напрузі на нульовому виході на ЦАП. На адресу входу мультиплексора подається код нульового каналу, очікується встановлення напруги на виході ЦАП і включається мультиплексор. Деякий час мультиплексор залишається включеним для забезпечення гарантованого заряду конденсатора до необхідної вихідної напруги, після чого відключається. Далі алгоритм повторюється для наступного каналу.
Керування динамічним ЦАП зручне організувати за допомогою переривання від таймера лічильника за аналогією з керуванням динамічною індикацією.
При реалізації в одному пристрої і динамічній індикації і динамічного багатоканального ЦАП для керування ними можна використовувати один загальний таймер лічильника й одну підпрограму переривання – якщо часові параметри мультиплексора це дозволяють.
При відсутності динамічної індикації, та наявності багатоканального АЦП також можливо об’єднання процесів програмного зчитування АЦП з виводом на ЦАП.
Програмна частина
Будемо вважати, що процес вводу інформації від датчиків з використанням багатоканального АЦП і виводу інформації на виконавчий пристрій з використанням багатоканального ЦАП здійснюється по перериваннях (аналогічно розглянутої раніше динамічної індикації).
Дані між підпрограмами обробки переривань і основною програмою зручно передавати через буферні ділянки ОЗП мікро-контролера. У цьому випадку основна частина програми буде містити тільки власне реалізацію алгоритму законів керування.
Загальний вид алгоритму основної частини керуючої програми буде мати вигляд, наведений на рис. 14.
Побудова алгоритму реалізації закону керування базується на понятті ґратчастої функції і механізмів прямій і зворотної різниці, прямої і зворотної суми.
Рис. 14
Реалізація пропорційного керування
Uвых =к (Uз – Uд)
Для спрощення будемо вважати, що:
вхідну і вихідну перемінні будуть мати однакову розрядність у 1 байт;
вхідній і вихідній перемінні представлені в беззнаковій формі;
коефіцієнт К може приймати значення в діапазоні від 1 до 10;
у випадку виходу за межі діапазону припустимих значень вихідний перемінної настає її обмеження.
Блок-схема алгоритму обробки наведена на рис. 15. При цьому вважається, що є готова підпрограма множення MUL8 двох однобайтних чисел з результатом у вигляді двобайтного числа. Множники на вході у підпрограму знаходяться у регістрах a і b, а на її виході там же знаходиться результат (у а – старший байт). Така підпрограма справді існує и наведена у прикладах програмування, що включені у стандартний набір системи AVR Studio.
Рис. 15
Реалізація пропорційно – інтегрального закону керування
У результаті перетворень і аналізу отриманого рівняння (у кінцевих різницях) звичайно удається виконати угруповання перемінних і тим самим зменшити їхню кількість і кількість математичних операцій, типу множення і ділення. Як правило, загальна кількість довгих операцій відповідає порядкові вихідного рівняння.
Наступним етапом розробки алгоритму керування є переклад вираження в ціло-чисельний формат і перехід до машинних перемінних.
Наступним кроком є перевірка даних умов і визначення збіжності алгоритму з урахуванням необхідної точності обчислення.
Процес розробки блок-схеми алгоритмів і самої керуючої програми є таким же, як і для пропорційного закону керування.