07_mcu_work.ppt
- Количество слайдов: 33
Особливості роботи мікроконтролерів Лекція 7 Судаков О. О, Радченко С. П. «Сучасна мікропроцесорна техніка»
Особливості застосування MCU n Застосування процесора q q n Застосування периферії q q q n Тактова частота Опитування Переривання Зупинка, очікування Генератори GPIO Таймери Компаратори АЦП Режими роботи мікроконтролерів q q Максимально допустимі параметри Енергозбереження
Тактові генератори n Мікроконтролер може мати декілька тактових генераторів з різною частотою, стабільністю, енергоспоживанням q q n Тактові генератори можуть приєднуватись до різних системних годинників q q n Головний, Допоміжний, Периферійний… Системний годинник видає тактовий сигнал Різні системні годинники можуть тактувати різні пристрої мікроконтролера q q n RC високочастоний (~104 -108 Гц) RC низькочастотний (~до 104 Гц) Кварцевий високочастоний (~104 -106 Гц) Кварцевий низькочастотний (~до 104 Гц) Процесор, Таймер, АЦП … Різні системні годинники можуть ділити частоту генератора в певні кількість разів Пристрій 1 q 1, 2, 4, 8, 16 … Генератор1 Генератор2 Генератор3 Генератор4 Тактовий сигнал 1 Тактовий сигнал 2 Тактовий сигнал 3 Пристрій 2 Пристрій 3
Керування тактовими сигналами n n n Ввімкнення/вимкнення тактових генераторів Зміна частоти тактових генераторів Підключення тактових генераторів до системних годинників Зміна коефіцієнтів поділу системних годинників Кеування синхронізацією генераторів Є спеціальні регістри керування, які відображаються на пам’ять процесора
Зміна тактової частоти n В широких межах q n В вузьких межах q n Підстроювання генератора керованого напругою Точне підстроювання q n Зміна резистора чи конденсатора RC генератора Модуляція Утримання частоти q Автопідстроювання
Модуляція n Генератор по черзі перемикається між вищою і нижчою частотою q N-кількість рівнів квантування частоти q nhig –скільки разів включали високу частоту q tlow – період низької частоти q thigh – період високої частоти q t – період змішаної частоти nhig N=32 Нижча частота Вища частота
Підстроювання n Рахують кількість імпульсів нестабільного генератора за період стабільного q q n Кількість імпульсів менша – збільшити частоту Кількість імпульсів більшазменшити частоту Коли частоти високі підстроюють f 1/M під f 2/N n Чим більше відношення частот – тим точніше підстроювання q Nhigh=fhigh/flow Стабільний кварцевий генератор низької частоти Опорна (референтна) частота Старт-стоп Лічильник імпільсів такт Керування частотою Нестабільний генератор високої частоти
Синхронізація і порівняння фази n n n Синхронізація – коли одна система знаходиться в якомусь одному стані, інша система знаходиться в якомусь одному стані Генератор запускається, коли синхросигнал в певному стані Оцінка фази q q Рахуємо кількість імпульсів тактового генератора за період N Фаза – кількість імпульсів, які пораховано n
Тактова частота процесора n n n Процесор можна приєднати до різних тактових генераторів Різні команди мають різну кількість тактів q 1 -6 як правило Процесор виконує команди у декілька разів повільніше, ніж тактова частота q Приклад затримка за допомогою цикла while(i--); q Машинний код n n q n n loop: dec R 1 // 1 такт jnz loop; // 2 такта Затримка на i*3/Fтакт секунд Продуктивність q Кількість операцій в одиницю часу Затримки (латентність) q Час між подією і реакцією на неї
Параметри тактового генератора n n n Максимальна тактова частота Діапазон перебудови частоти Час ввімкнення після «сну» Тривалість фронту імпульсу Скважність імпульсів (duty cycle) q Тривалість імпульсу/період
Процесор в режимі опитування n n Періодично зчитує значення із регістрів периферії і реагує на події while(1){ //вічний цикл q while (!подія 1 || !подія 2||. . ){ n n q q n n n дії не пов’язані з подіями Відкладені дії } if(подія 1) {виконати, або відкласти} if(подія 2) {виконати, або відкласти} … } Найбільша продуктивність Великі затримки
Процесор в режимі переивань n n n n n Реєcтруються функції, які виконуються при настанні події Функції виконуються коли подія наступає register_interrupt(подія, обробник) enable_interrupt() while(1){ q Якість дії, часто зупинка процесора } … обробник(){ q Виконати обробку події, часто просто вийти з режиму сну q Іноді зареєструвати відкладений обробник події } Малі затримки, мала продуктивність
GPIO – Цифрове введення-виведення n n n Виведення - перемикання високого чи низького рівня на виводах мікросхеми Введення – визначення високого чи низького рівня на виводах мікросхеми Операції q q n Виведення q n Запис 1 чи 0 в порт – на виводі встановиться висока чи низька напруга Введення q q q n Підключення/відключення порта GPIO до виводів мікросхеми Переведення порту в режим введення/виведення Зчитування поточного рівня напруги на виводі мікросхеми - порт буде містити 1 чи 0 Дозвіл/заборона резистора підтягування Підключення підтягуючого резистора (до 1 чи 0) Дозвіл/заборона переривань Зчитування прапорця переривання Реалізація обробника переривання
Підключення портів до виводів n Спеціальні регістри вибору периферії q q q n Наприклад P 1 SEL. x P 1 SEL 2. x Кожен біт відповідає виводу Запис комбінації бітів підключає порти до виводів Приклад q q q P 1 SEL=0 x 00; P 1 SEL 2=0 x 00; Підключили всі виводи до портів GPIO Як правило за замовчанням так і є
Переведення портів в режим вводу/виводу n Є спеціальні регістри вибору режиму q Наприклад P 1 DIR. x q Кожен біт – вибір режиму відповідного порту n n n Приклад q «Ніжка» P 1. 0 в режимі вводу, всі інші в режимі виводу n n 0 – введення 1 - виведення P 1 DIR=11111110 b; Краще виводи, які не використовуються превести в режим виводу, щоб не було наведень
Запис значень в порти вводу-виводу n Є спеціальний регістр запису в порт q q n Наприклад P 1 OUT. x Запис 0 або 1 переводить відповідний пін у низький, або високий рівень Приклад – керування світлодіодом q q q На виводі, який відповідає порту P 1. 0 – світлодіод P 1 DIR=0 xff; //тільки виведення P 1 OUT|=00000001 b ; // вмикаємо лише P 1. 0 P 1 OUT&=00000001 b ; // вимикаємо лише P 1. 0 P 1 OUT^=BIT 1; // змінюємо лише P 1. 0 на протилежне
Застосування GPIO виводу n Керування зовнішніми пристроями q q q n Вмикання світлодіодів Керування індикатором Керування кроковим двигуном Синхронні шини передачі q SPI, I 2 C void loop() { digital. Write(motor. Pin 1, digital. Write(motor. Pin 2, digital. Write(motor. Pin 3, digital. Write(motor. Pin 4, delay(delay. Time); } HIGH); LOW); LOW); HIGH); LOW); HIGH);
Читання портів вводу-виводу n Є спеціальний регістр читання порту q n n Наприклад P 1 IN. x При зміні значення напруги на виводі змінюється значення в регістрі Приклад q Читання стану кнопки на виводі P 1. 3 n q q q Замкнута – 0, Розімкнута – 1 P 1 DIR=11110111 b; //порт 3 введення while(P 1 IN & BIT 3); //чекаємо події по натисненню кнопки
Підтягуючий резистор n n Порт в режимі введення повинен бути до чогось підключений q Якщо не підключений – будуть наводки стан не визначений q Підтягуючий (pull-up, pull-down) резистор – примусове підключення до 1 або 0 через резистор 10 ком-100 ком Є спеціальний гегістр q Наприклад P 1 REN. x q Запис 1 – резистор підключений 0 - вимкнений Є спеціальний регістр q Наприклад P 1 OUT. x q Запис 1 – pull-up, 0 – pull-down Приклад за замовченням на піні кнопки високий рівень q P 1 DIR=11110111 b; //порт 3 введення q P 1 REN=00001000 b; //порт 3 резистор ввімкнено q P 1 OUT|=00001000 b; //порт 3 pull-up
Використання переривань GPIO n n n Введення – невідомо коли відбувається Переривання зручний спосіб реагування н події Керування q Весь порт (всі біти) обробляються одним обробником n q Переривання повинны бути дозволены глобально n q Наприклад команда INTE Необхідно дозволити переривання по GPIO n q Необхідно зареєструвати обробник Спеціальний регістр наприклад P 1 IE Необхідно встановити перериваня по фронту, чи по спаду n Спеціальний регістр P 1 ES (Edge select) q q 1 -спад (зверху вниз) 0 -фронт (знизу вверх) Є спеціальний регістр для визначення джерела переривання n Наприклад P 1 IFG q q 1 – було переривання, 0 – не було Після обробки біти цього регістра треба очищати
Застосування переривань GPIO int main( void ) { P 1 DIR &= ~BIT 3; P 1 REN |= BIT 3; P 1 OUT |= BIT 3; P 1 IES |= BIT 3; P 1 IFG &= ~BIT 3; P 1 IE |= BIT 3; //led P 1 DIR |= BIT 0; P 1 OUT &= ~BIT 0; while(1){ if(P 1 IFG&BIT 3){ P 1 OUT^=BIT 0; P 1 IFG &= ~BIT 3; } } int main( void ) { P 1 DIR &= ~BIT 3; P 1 REN |= BIT 3; P 1 OUT |= BIT 3; P 1 IES |= BIT 3; P 1 IFG &= ~BIT 3; P 1 IE |= BIT 3; //led P 1 DIR |= BIT 0; P 1 OUT &= ~BIT 0; } __bis_SR_register(LPM 4_bits+GIE); return 0; } #pragma vector=PORT 1_VECTOR __interrupt void port 1_interrupt(void) { P 1 IFG &= ~BIT 3; P 1 OUT^=BIT 0; }
Коли не вистачає «ніжок» n n Заміна паралельного введення виведення на послідовний Приклад: опитування клавіатури q q q Запис 1, 0, 0 на виводи 1, 2, 3 Очикування вводу Запис 0, 1, 0 на виводи 1, 2, 3 Очикування вводу Запис 0, 0, 1 на виводи 1, 2, 3 Очикування вводу Виведення 1 2 3 в в е д е н н я
Особливості GPIO n n Застосвується для інтелектуального вводувиводу Необхідно обмежувати струм на виводах резисторами q n Виводи мікросхеми не витримують великого навантаження і необхідно зстосовувати ключі q n Світлодіод: Напруга 2 В, струм 1 м. А, резистор 470 Ом Транзисторні, реле Швидкість перемикань обмежується швидкістю виконання команд процесором q Fout<=Fclock/2
Таймери n n n Таймер – лічильник тактових імпульсів q Скільки імпульсів за певний час q Скільки імпульсів між певними подіями q Запис значення лічильника в регістр при настанні певної події q Зміна значення на “ніжці” мікросхеми при досягнення таймером певного значення Процесор не може точно відміряти часові інтервали q Різні команди мають різний час виконання q Наближено можна здійснювати затримку циклом q Таймер – незалежний від процесора пристрій контролю часу Процесор не може точно генерувати імпульси стабільнної частоти на виводах q Таймер може Таймер-лічильник – підрахунок і генерація імпульсів Вартовий таймер – reset, коли таймер не перезапускається
Режими таймерів n Режим захоплення (capture) q q q n При настанні певної події значення лічильника записується в спеціальний регістр Викликається переривання Для точного слідкування за зовнішніми подіями Режим порівняння (compare) q q q При досягненні таймером значення в спеціальному регістрі змінюється напруга на виводі таймера Викликається переривання Для точного керування зовнішніми процесами
Переривання таймерів n По переповненню q n По захопленню q n Для збереження процесором моменту часу настання події По порівнянню q n Для врахування ходу часу процесором Для повідомлення процесору, що запланована дія виконана Асинхронний процесор може керувати синхронними подіями
Використання таймерів n Вимірювання тривалості і частоти сигналів q n Генерування імпульсів заданої тривалості і частоти q n Зміна стану “ніжки” при нарахування певної кількості імпульсів тактового генератора Керування q q q n Скільки імпульсів тактового генератора проходить за період сигналу Кроковими двигунами ЦАП (ШИМ і сигма-дельта) Схема співпадінь Вимірювання q Ємності
Підключення таймера n n n Керування за допомогою спеціальних регістрів Вхід-Тактовий генератор Вхід-Зовнішні сигнали q n Вхід-Внутрішні сигнали q q q n З ніжки мікросхеми З генераторів З компаратора … Вихід-ніжка мікросхеми Таймер-лічник Лічильник Регістри захопленняпорівняння
Вмірювання частоти і часу n Таймер рахує тактові імпульси q n Вимірюваний сигнал керує режимом захоплення q n По фронту (або спаду) значення лічильника збільшується на 1 По фронту (спаду) вимрюваного сигналу значення лічильника записується в регістр таймера СC Період вхідного сигналу більше паріоду тактового в СС разів q Fin=Ftakt/CC
Генерація вихідного сигналу з ШИМ n Таймер рахує тактові імпульси q n n n Коли досягається значення в регістрі змінюється напруга на виводі Записом в регістри можна змінювати параметри Постійний період Зміна скважності R Таймер C Регістр 1 Регістр 2 Вихідний сигнал Генерація сигналів Керування сервомоторами
ЦАП на основі ШИМ n n n Кожна точка сигналу представляється імпульсом із скважністю, яка відповідає рівню квантування q t=T*U/Umax q n=N*u/Umax Частота дискретизації q T<1/2/Fmax q Краще T<1/10/Fmax Передискретизація q Чим більше рівнів квантування тим вища має бути тактова частота q Період тактового генератора Ttakt=T/N= 1/10/Fmax/N q Тактова частота > 10*N*Fmax q Кількість рівнів 32 -256 U Дискретизація t T t Приклад Sin -250 Гц Кількість відліків 256 Частота дискретизації >500 Гц Мінімальна тактова частота 128 КГц Для передискретизації 32 тактова частота 2, 048 МГц
Вибір частоти і фільтра ШИМ n n n Частота – повинні правильно дискретизуватись гармоніки для відтворення сигналу із заданою точністю Фільтр – повинен пропускати всі гамоніки сигналу і придушувати гармоніки несучої F=1/(2*3. 14*RC)
Застосування таймерів для UART n Передача q q n Перемикаємо напругу залежності від значення бітів Чекаємо період передачі біта tbit Прийом q q При перемиканні стоп-старт запускається таймер на tbit/2 Зчитуємо сатровий біт Чекаємо tbit Зчитуємо наступний біт
07_mcu_work.ppt