Особливості роботи мікроконтролерів

Preview:

DESCRIPTION

Особливості роботи мікроконтролерів. Лекція 7 Судаков О.О, Радченко С.П. « Сучасна мікропроцесорна техніка ». Особливості застосування MCU. Застосування процесора Тактова частота Опитування Переривання Зупинка, очікування Застосування периферії Генератори GPIO Таймери Компаратори - PowerPoint PPT Presentation

Citation preview

Особливості роботи мікроконтролерів

Лекція 7

Судаков О.О, Радченко С.П. «Сучасна мікропроцесорна техніка»

Особливості застосування MCU Застосування процесора

Тактова частота Опитування Переривання Зупинка, очікування

Застосування периферії Генератори GPIO Таймери Компаратори АЦП

Режими роботи мікроконтролерів Максимально допустимі параметри Енергозбереження

Тактові генератори Мікроконтролер може мати декілька тактових генераторів з різною

частотою, стабільністю, енергоспоживанням RC високочастоний (~104-108 Гц) RC низькочастотний (~до 104 Гц) Кварцевий високочастоний (~104-106 Гц) Кварцевий низькочастотний (~до 104 Гц)

Тактові генератори можуть приєднуватись до різних системних годинників Головний, Допоміжний, Периферійний… Системний годинник видає тактовий сигнал

Різні системні годинники можуть тактувати різні пристрої мікроконтролера Процесор, Таймер, АЦП …

Різні системні годинники можуть ділити частоту генератора в певні кількість разів 1,2,4,8,16 …

Генератор1

Генератор2

Генератор3

Тактовий сигнал1

Тактовий сигнал2

Тактовий сигнал3Генератор4

Пристрій 1

Пристрій 2

Пристрій 3

Керування тактовими сигналами Ввімкнення/вимкнення тактових

генераторів Зміна частоти тактових генераторів Підключення тактових генераторів до

системних годинників Зміна коефіцієнтів поділу системних

годинників Кеування синхронізацією генераторів Є спеціальні регістри керування, які

відображаються на пам’ять процесора

Зміна тактової частоти В широких межах

Зміна резистора чи конденсатора RC генератора

В вузьких межах Підстроювання генератора керованого

напругою Точне підстроювання

Модуляція Утримання частоти

Автопідстроювання

Модуляція Генератор по черзі

перемикається між вищою і нижчою частотою N-кількість рівнів

квантування частоти nhig –скільки разів

включали високу частоту

tlow – період низької частоти

thigh – період високої частоти

t – період змішаної частоти Нижча частота Вища частота

high highlow high

N n nt t t

N N

nhig N=32

Підстроювання Рахують кількість імпульсів

нестабільного генератора за період стабільного Кількість імпульсів менша –

збільшити частоту Кількість імпульсів більша-

зменшити частоту Коли частоти високі

підстроюють f1/M під f2/N

Чим більше відношення частот – тим точніше підстроювання Nhigh=fhigh/flow

Стабільний кварцевий генератор низької частоти

Нестабільний генератор високої частоти

Лічильник імпільсів

Опорна (референтна)частотаСтарт-стоп

такт

Керуваннячастотою

2 2

high low lowf Nf N f 2 2

0.25high low low

high high low

f f f

f f f

Синхронізація і порівняння фази Синхронізація – коли одна система

знаходиться в якомусь одному стані, інша система знаходиться в якомусь одному стані

Генератор запускається, коли синхросигнал в певному стані

Оцінка фази Рахуємо кількість імпульсів тактового

генератора за період N Фаза – кількість імпульсів, які пораховано n

Тактова частота процесора Процесор можна приєднати до різних тактових генераторів Різні команди мають різну кількість тактів

1-6 як правило Процесор виконує команди у декілька разів повільніше, ніж

тактова частота Приклад затримка за допомогою цикла while(i--); Машинний код

loop: dec R1 // 1такт jnz loop; // 2 такта

Затримка на i*3/Fтакт секунд Продуктивність

Кількість операцій в одиницю часу Затримки (латентність)

Час між подією і реакцією на неї

Параметри тактового генератора Максимальна тактова частота Діапазон перебудови частоти Час ввімкнення після «сну» Тривалість фронту імпульсу Скважність імпульсів (duty cycle)

Тривалість імпульсу/період

Процесор в режимі опитування Періодично зчитує значення із регістрів

периферії і реагує на події while(1){ //вічний цикл

while (!подія1 || !подія2||..){ дії не пов’язані з подіями Відкладені дії

} if(подія1) {виконати, або відкласти} if(подія2) {виконати, або відкласти} …

} Найбільша продуктивність Великі затримки

Процесор в режимі переивань Реєcтруються функції, які виконуються при настанні події Функції виконуються коли подія наступає register_interrupt(подія,обробник) enable_interrupt() while(1){

Якість дії, часто зупинка процесора } … обробник(){

Виконати обробку події, часто просто вийти з режиму сну

Іноді зареєструвати відкладений обробник події } Малі затримки, мала продуктивність

GPIO – Цифрове введення-виведення Виведення - перемикання високого чи низького рівня на

виводах мікросхеми Введення – визначення високого чи низького рівня на

виводах мікросхеми Операції

Підключення/відключення порта GPIO до виводів мікросхеми Переведення порту в режим введення/виведення

Виведення Запис 1 чи 0 в порт – на виводі встановиться висока чи низька

напруга Введення

Зчитування поточного рівня напруги на виводі мікросхеми - порт буде містити 1 чи 0

Дозвіл/заборона резистора підтягування Підключення підтягуючого резистора (до 1 чи 0) Дозвіл/заборона переривань Зчитування прапорця переривання

Реалізація обробника переривання

Підключення портів до виводів Спеціальні регістри вибору периферії

Наприклад P1SEL.x P1SEL2.x Кожен біт відповідає виводу Запис комбінації бітів підключає порти до

виводів Приклад

P1SEL=0x00; P1SEL2=0x00; Підключили всі виводи до портів GPIO Як правило за замовчанням так і є

Переведення портів в режим вводу/виводу Є спеціальні регістри вибору режиму

Наприклад P1DIR.x Кожен біт – вибір режиму відповідного порту

0 – введення 1 - виведення

Приклад «Ніжка» P1.0 в режимі вводу, всі інші в режимі виводу

P1DIR=11111110b;

Краще виводи, які не використовуються превести в режим виводу, щоб не було наведень

Запис значень в порти вводу-виводу Є спеціальний регістр запису в порт

Наприклад P1OUT.x Запис 0 або 1 переводить відповідний пін у низький, або

високий рівень Приклад – керування світлодіодом

На виводі, який відповідає порту P1.0 – світлодіод P1DIR=0xff; //тільки виведення P1OUT|=00000001b ;// вмикаємо лише P1.0 P1OUT&=00000001b ;// вимикаємо лише P1.0 P1OUT^=BIT1; // змінюємо лише P1.0 на протилежне

Застосування GPIO виводу Керування зовнішніми

пристроями Вмикання світлодіодів Керування індикатором Керування кроковим

двигуном Синхронні шини

передачі SPI,I2C

void loop() { digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); delay(delayTime);}

Читання портів вводу-виводу Є спеціальний регістр читання порту

Наприклад P1IN.x При зміні значення напруги на виводі

змінюється значення в регістрі Приклад

Читання стану кнопки на виводі P1.3 Замкнута – 0, Розімкнута – 1

P1DIR=11110111b; //порт 3 введення while(P1IN & BIT3);//чекаємо події дії по натисненню кнопки

Підтягуючий резистор Порт в режимі введення повинен бути до чогось підключений

Якщо не підключений – будуть наводки стан не визначений Підтягуючий (pull-up, pull-down) резистор – примусове

підключення до 1 або 0 через резистор 10ком-100ком Є спеціальний гегістр

Наприклад P1REN.x Запис 1 – резистор підключений 0 - вимкнений

Є спеціальний регістр Наприклад P1OUT.x Запис 1 – pull-up, 0 – pull-down

Приклад за замовченням на піні кнопки високий рівень P1DIR=11110111b; //порт 3 введення P1REN=00001000b; //порт 3 резистор ввімкнено P1OUT|=00001000b; //порт 3 pull-up

Використання переривань GPIO Введення – невідомо коли відбувається Переривання зручний спосіб реагування н події Керування

Весь порт (всі біти) обробляються одним обробником Необхідно зареєструвати обробник

Переривання повинны бути дозволены глобально Наприклад команда INTE

Необхідно дозволити переривання по GPIO Спеціальний регістр наприклад P1IE

Необхідно встановити перериваня по фронту, чи по спаду Спеціальний регістр P1ES (Edge select)

1-спад (зверху вниз) 0-фронт (знизу вверх) Є спеціальний регістр для визначення джерела переривання

Наприклад P1IFG 1 – було переривання, 0 – не було Після обробки біти цього регістра треба очищати

Застосування переривань GPIOint main( void )

{ P1DIR &= ~BIT3; P1REN |= BIT3; P1OUT |= BIT3; P1IES |= BIT3; P1IFG &= ~BIT3; P1IE |= BIT3; //led P1DIR |= BIT0; P1OUT &= ~BIT0; while(1){ if(P1IFG&BIT3){ P1OUT^=BIT0; P1IFG &= ~BIT3; } }

int main( void ){ P1DIR &= ~BIT3; P1REN |= BIT3; P1OUT |= BIT3; P1IES |= BIT3; P1IFG &= ~BIT3; P1IE |= BIT3; //led P1DIR |= BIT0; P1OUT &= ~BIT0; } __bis_SR_register(LPM4_bits+GIE); return 0;}#pragma vector=PORT1_VECTOR__interrupt void port1_interrupt(void){ P1IFG &= ~BIT3; P1OUT^=BIT0;}

Коли не вистачає «ніжок» Заміна паралельного введення

виведення на послідовний Приклад: опитування

клавіатури Запис 1,0,0 на виводи 1,2,3 Очикування вводу Запис 0,1,0 на виводи 1,2,3 Очикування вводу Запис 0,0,1 на виводи 1,2,3 Очикування вводу

Виведення 1 2 3

введення

Особливості GPIO Застосвується для інтелектуального вводу-

виводу Необхідно обмежувати струм на виводах

резисторами Світлодіод: Напруга 2В, струм 1мА, резистор 470 Ом

Виводи мікросхеми не витримують великого навантаження і необхідно зстосовувати ключі Транзисторні, реле

Швидкість перемикань обмежується швидкістю виконання команд процесором Fout<=Fclock/2

Таймери Таймер – лічильник тактових імпульсів

Скільки імпульсів за певний час Скільки імпульсів між певними подіями Запис значення лічильника в регістр при настанні певної події Зміна значення на “ніжці” мікросхеми при досягнення

таймером певного значення Процесор не може точно відміряти часові інтервали

Різні команди мають різний час виконання Наближено можна здійснювати затримку циклом Таймер – незалежний від процесора пристрій контролю часу

Процесор не може точно генерувати імпульси стабільнної частоти на виводах Таймер може

Таймер-лічильник – підрахунок і генерація імпульсів Вартовий таймер – reset, коли таймер не перезапускається

Режими таймерів Режим захоплення (capture)

При настанні певної події значення лічильника записується в спеціальний регістр

Викликається переривання Для точного слідкування за зовнішніми подіями

Режим порівняння (compare) При досягненні таймером значення в спеціальному

регістрі змінюється напруга на виводі таймера Викликається переривання Для точного керування зовнішніми процесами

Переривання таймерів

По переповненню Для врахування ходу часу процесором

По захопленню Для збереження процесором моменту часу

настання події По порівнянню

Для повідомлення процесору, що запланована дія виконана

Асинхронний процесор може керувати синхронними подіями

Використання таймерів Вимірювання тривалості і частоти сигналів

Скільки імпульсів тактового генератора проходить за період сигналу

Генерування імпульсів заданої тривалості і частоти Зміна стану “ніжки” при нарахування певної кількості

імпульсів тактового генератора Керування

Кроковими двигунами ЦАП (ШИМ і сигма-дельта) Схема співпадінь

Вимірювання Ємності

Підключення таймера

Керування за допомогою спеціальних регістрів

Вхід-Тактовий генератор Вхід-Зовнішні сигнали

З ніжки мікросхеми Вхід-Внутрішні сигнали

З генераторів З компаратора …

Вихід-ніжка мікросхеми

Лічильник

Регістри захоплення-порівняння

Таймер-лічник

Вмірювання частоти і часу

Таймер рахує тактові імпульси По фронту (або спаду) значення лічильника

збільшується на 1 Вимірюваний сигнал керує режимом

захоплення По фронту (спаду) вимрюваного сигналу

значення лічильника записується в регістр таймера СC

Період вхідного сигналу більше паріоду тактового в СС разів Fin=Ftakt/CC

Генерація вихідного сигналу з ШИМ Таймер рахує тактові імпульси

Коли досягається значення в регістрі змінюється напруга на виводі

Записом в регістри можна змінювати параметри Постійний період Зміна скважності

Регістр 2

Регістр 1

Вихідний сигнал

Таймер

Генерація сигналівКерування сервомоторами

R

C

ЦАП на основі ШИМ Кожна точка сигналу

представляється імпульсом із скважністю, яка відповідає рівню квантування t=T*U/Umax n=N*u/Umax

Частота дискретизації T<1/2/Fmax Краще T<1/10/Fmax

Передискретизація Чим більше рівнів

квантування тим вища має бути тактова частота

Період тактового генератора Ttakt=T/N= 1/10/Fmax/N

Тактова частота > 10*N*Fmax Кількість рівнів 32-256

Дискретизація

t

U

T

t

ПрикладSin -250 Гц Кількість відліків 256Частота дискретизації >500 ГцМінімальна тактова частота 128 КГцДля передискретизації 32 тактова частота 2,048 МГц

Вибір частоти і фільтра ШИМ Частота – повинні

правильно дискретизуватись гармоніки для відтворення сигналу із заданою точністю

Фільтр – повинен пропускати всі гамоніки сигналу і придушувати гармоніки несучої

F=1/(2*3.14*RC)

Застосування таймерів для UART Передача

Перемикаємо напругу залежності від значення бітів

Чекаємо період передачі біта tbit Прийом

При перемиканні стоп-старт запускається таймер на tbit/2

Зчитуємо сатровий біт Чекаємо tbit Зчитуємо наступний біт

Recommended