340 likes | 582 Views
Особливості роботи мікроконтролерів. Лекція 7 Судаков О.О, Радченко С.П. « Сучасна мікропроцесорна техніка ». Особливості застосування MCU. Застосування процесора Тактова частота Опитування Переривання Зупинка, очікування Застосування периферії Генератори GPIO Таймери Компаратори
E N D
Особливості роботи мікроконтролерів Лекція 7 Судаков О.О, Радченко С.П. «Сучасна мікропроцесорна техніка»
Особливості застосування MCU • Застосування процесора • Тактова частота • Опитування • Переривання • Зупинка, очікування • Застосування периферії • Генератори • GPIO • Таймери • Компаратори • АЦП • Режими роботи мікроконтролерів • Максимально допустимі параметри • Енергозбереження
Тактові генератори • Мікроконтролер може мати декілька тактових генераторів з різною частотою, стабільністю, енергоспоживанням • RC високочастоний (~104-108 Гц) • RC низькочастотний (~до 104 Гц) • Кварцевий високочастоний (~104-106 Гц) • Кварцевий низькочастотний (~до 104 Гц) • Тактові генератори можуть приєднуватись до різних системних годинників • Головний, Допоміжний, Периферійний… • Системний годинник видає тактовий сигнал • Різні системні годинники можуть тактувати різні пристрої мікроконтролера • Процесор, Таймер, АЦП • … • Різні системні годинники можуть ділити частоту генератора в певні кількість разів • 1,2,4,8,16 … Пристрій 1 Генератор1 Тактовий сигнал1 Генератор2 Пристрій 2 Тактовий сигнал2 Генератор3 Пристрій 3 Тактовий сигнал3 Генератор4
Керування тактовими сигналами • Ввімкнення/вимкнення тактових генераторів • Зміна частоти тактових генераторів • Підключення тактових генераторів до системних годинників • Зміна коефіцієнтів поділу системних годинників • Кеування синхронізацією генераторів • Є спеціальні регістри керування, які відображаються на пам’ять процесора
Зміна тактової частоти • В широких межах • Зміна резистора чи конденсатора RC генератора • В вузьких межах • Підстроювання генератора керованого напругою • Точне підстроювання • Модуляція • Утримання частоти • Автопідстроювання
Модуляція nhig N=32 • Генератор по черзі перемикається між вищою і нижчою частотою • N-кількість рівнів квантування частоти • nhig –скільки разів включали високу частоту • tlow – період низької частоти • thigh – період високої частоти • t – період змішаної частоти Нижча частота Вища частота
Підстроювання Стабільний кварцевий генератор низької частоти • Рахують кількість імпульсів нестабільного генератора за період стабільного • Кількість імпульсів менша – збільшити частоту • Кількість імпульсів більша- зменшити частоту • Коли частоти високі підстроюють f1/M під f2/N • Чим більше відношення частот – тим точніше підстроювання • Nhigh=fhigh/flow Опорна (референтна) частота Старт-стоп Лічильник імпільсів такт Керування частотою Нестабільний генератор високої частоти
Синхронізація і порівняння фази • Синхронізація – коли одна система знаходиться в якомусь одному стані, інша система знаходиться в якомусь одному стані • Генератор запускається, коли синхросигнал в певному стані • Оцінка фази • Рахуємо кількість імпульсів тактового генератора за період 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 – не було • Після обробки біти цього регістра треба очищати
Застосування переривань GPIO 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; } int 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; } }
Коли не вистачає «ніжок» • Заміна паралельного введення виведення на послідовний • Приклад:опитування клавіатури • Запис 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
Генерація вихідного сигналу з ШИМ • Таймер рахує тактові імпульси • Коли досягається значення в регістрі змінюється напруга на виводі • Записом в регістри можна змінювати параметри • Постійний період • Зміна скважності R Таймер C Регістр 1 Регістр 2 Генерація сигналів Керування сервомоторами Вихідний сигнал
ЦАП на основі ШИМ U Дискретизація • Кожна точка сигналу представляється імпульсом із скважністю, яка відповідає рівню квантування • 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 T t Приклад Sin -250 Гц Кількість відліків 256 Частота дискретизації >500 Гц Мінімальна тактова частота 128 КГц Для передискретизації 32 тактова частота 2,048 МГц
Вибір частоти і фільтра ШИМ • Частота – повинні правильно дискретизуватись гармоніки для відтворення сигналу із заданою точністю • Фільтр – повинен пропускати всі гамоніки сигналу і придушувати гармоніки несучої • F=1/(2*3.14*RC)
Застосування таймерів для UART • Передача • Перемикаємо напругу залежності від значення бітів • Чекаємо період передачі біта tbit • Прийом • При перемиканні стоп-старт запускається таймер на tbit/2 • Зчитуємо сатровий біт • Чекаємо tbit • Зчитуємо наступний біт