Лабораторна робота № 1 Тема роботи: Конфігурація компоненту Timer Counter Pulse Width Modulator (TCPWM) як ШІМ з можливістю переривання. Мета роботи: Налаштувати компонент TCPWM та реалізувани обробник переривання. Як результат провести керування вбудованим LED за допомогою кнопки на платі. Короткі теоретичні відомості Широтно-імпульсна модуляція (ШІМ) – це метод перетворення сигналу, при якому змінюється тривалість імпульсу (шпаруватість), а частота залишається константою. В англійській термінології позначається як PWM (pulse-width modulation). Компонент TCPWM - це багатофункціональний компонент, який, використовуючи блок PSoC 4 TCPWM, реалізує основні функції мікроконтролера, включаючи таймер / лічильник, PWM та дефрагментатор квадратур. Кожен доступний як попередньо сконфігурований схематичний макрос у каталозі компонентів PSoC Creator, позначений як "TCPWM Mode". Рис. 1 Базові режими роботи TCPWM Базовий компонент в каталозі встановлюється в неконфігурованому режимі. Неконфігурований компонент налаштовується під час виконання через виклики функцій для виконання будь-якого режиму роботи. Компонент заснований на апаратній структурі, призначеній для спільного використання того самого обладнання в усіх режимах роботи. Ця структура дозволяє такому ж апаратному забезпеченню реалізовувати гнучкий набір функцій з невеликим збільшенням використання ресурсів. Ви можете визначити функціональність під час створення, щоб відповідати одному з основних режимів роботи, підтримуваної обладнанням. Ви також можете зберегти компонент як неконфігурований TCPWM та вказати конкретну конфігурацію під час виклику інтерфейсу API. Таблиця 1. Входи компонента TCPWM Вхід Режим Опис clock All Визначає робочу частоту цього компонента. Максимальна частота 48 МГц. reload Timer, PWM Дозволяє перезавантажувати події для ініціалізації та запуску лічильника. У режимі підрахунку вгору / вниз лічильник ініціалізується за допомогою "0" (для пристроїв PSoC 4000, PSoC 4100, пристроїв PSoC 4200). Для інших пристроїв лічильник ініціалізується за допомогою "1" для режиму підрахунку вгору / вниз. У нижньому лічильному режимі лічильник ініціалізується за значенням періоду. Коли в псевдовипадковому режимі ШІМ, сигнал перезавантаження виконує ту ж саму функцію, що і сигнал початку. Для всіх пристроїв, крім PSoC 4000, PSoC 4100, PSoC 4200, його слід використовувати лише тоді, коли лічильник не працює. index QuadDec Визначає еталонну позицію для квадратурного декодера. Подія на цьому сигналі генерує потік терміналів (TC) та події CC і ініціює лічильник з значенням лічильника середньої точки "0x8000". Якщо індексний термінал присутній, то лічильник буде перезавантажувати на основі цього сигналу, інакше TCPWM_TriggerCommand () з появою перезавантаження буде використовуватися під час виклику TCPWM_Enable () або TCPWM_Start () API. count Timer, PWM Залежно від конфігурації, сигнал підрахунку збільшує або зменшує значення лічильника. phiA QuadDec Контролює значення рахунку, інкремент і декремент залежно від їх співвідношення та режиму. start Timer, PWM Сигнал запуску не ініціалізує лічильник, але продовжує підраховуватись від поточного значення лічильника. Якщо пусковий термінал присутній, тоді лічильник буде запускатися на основі цього сигналу, інакше TCPWM_TriggerCommand () з початковою подією буде використовуватися під час виклику TCPWM_Enable () або TCPWM_Start () API. Використовується лише тоді, коли лічильник не працює. phiB QuadDec Контролює значення рахунку, інкремент і декремент залежно від їх співвідношення та режиму. stop All Зупиняє лічильник. Подія не знищить поточне значення лічильника. Зупинка події має більш високий пріоритет, ніж перезавантаження та запуск подій. capture Timer Фіксує поточне значення лічильника. Отже, подія захоплення копіює значення реєстру до регістру захоплення і копіює значення регістра захоплення у регістр захоплення буфера. switch PWM Заміщує період (період, періодBuf) та / або порівняння (порівняти, порівнювати) регістрів у наступній події TC. Таблиця 2. Виходи компонента TCPWM Вихід Режим Опис ov Timer, PWM Вказує на стан лічильника переповнення. Він високий, коли відбувається переповнення. Не застосовується до ШІМ у псевдовипадковому режимі. Подія переповнення вказує на те, що в режимі підрахунку вгору COUNTER змінено з штату, де він дорівнював PERIOD, до стану, де він не дорівнює PERIOD. un Timer, PWM Вказує на те, що відбувся зворотний запуск лічильника. Не застосовується до ШІМ у псевдовипадковому режимі. Подія з заниженим потоком показує, що в режимі лічильника вниз COUNTER змінився з стану, коли він дорівнює "0", до стану, де він не дорівнює "0". cc All Порівняння або захоплення виходу. Порівняльна поведінка: подія cc вказує на те, що регістр COUNTER дорівнює REQUIRES. line PWM Вихідне значення ШІМ. Цей сигнал генерується лише внутрішніми подіями cc, un і ov. Це залежить від параметрів вирівнювання ШІМ або параметрів API TCPWM_SetPWMMode (). line_n PWM Інвертоване значення вихідного ШІМ (під час підрахунку). Компонент переривання описує апаратні переривання. Існує три типи системних сигналів переривань, які можуть оброблятися контролером переривань: • Level – джерело IRQ є сталим і залишається активним, доки прошивка не очищає джерело запиту за допомогою дії (наприклад, очищається від прочитання). Більшість периферійних пристроїв з фіксованою функціональністю мають рівні чутливі переривання, включаючи FIFO UDB та регістри стану. • Pulse – імпульсний IRQ - це одиночний шинний годинник, який реєструє очікувану дію і гарантує, що дія ISR виконується лише один раз. Дії прошивки на периферію не потрібні. • Edge – довільна синхронна сигнальна форма є входом в схему виявлення краю, а позитивний край цієї форми сигналу стає синхронним одноцикловим імпульсом (імпульсний режим). Рис. 2 Символьне позначення переривання Хід роботи: 1. Добавимо на схему компонент PWM з папки Digital-Functions. Рис. 2 Створення компоненту PWM 2. Добавимо на схему компоненти Interrupt та Clock з папки System та компонент Digital Input Pin (папка Ports and Pins). Рис. 3 Створення компонентів Interrupt, Clock та Digital Input Pin 3. Утворюємо схему проекту, додаючи компоненти SwitchSPST (папка Electro-Mechanical), Ground (папка Power). Також будуємо ланку LED для індикації роботи ШІМ. Для цього додаємо компоненти Digital Output Pin, LED (папка Diodes), Resistor (папка Passive) та Power. Рис. 4 Готова схема проекту 4. Переходимо до налаштувань компонентів. Налаштовуємо компонент Digital Input Pin як показано на рисунку 5. Рис. 5 Налаштування компоненту Digital Input Pin 5. Налаштовуємо компонент TCPWM згідно завданя як показано на рис. 6. Рис. 6 Налаштування компоненту TCPWM 6. Звіритись з таблицею 3, де наведено список компонентів PSoC Creator, використаних у цьому прикладі, показано як вони використовуються в проекті, а також необхідні налаштування, щоб вони функціонували як передбачено. Таблиця 3. Список використаних компонентів Компонент Ім’я на схемі Призначення Налаштування Digital Input Pin Pin_Switch Опрацювання нажаття кнопки див. рис. 5 PWM (TCPWM mode) PWM Генерація ШІМ див. рис. 6 Digital Output Pin LED Опрацювання LED будь-якого кольору на платі переконайтесь, що external terminal є обраним 7. Вибір портів, які будуть використовуватись. На платі знаходиться RGB світлодіод, керування кожним кольором відбувається незалежно. Для червоного світлодіоду потрібно вибрати порт P1[6], для зеленого – P0[2], а для синього – P0[3]. Рис.7 Вибір активних портів 8. Переходимо у файл main.c та реалізуємо функцію ISR_TC. Ця функція виконується, коли відбувається переривання для термінального рахунку. Ця ISR очищує всі переривання та перемикає стан LED. Рис.8 Функція ISR_TC 9. Далі реалізуємо функцію main, яка налаштує PWM та його переривання і запустить сам компонент. Рис.9 Функція main 10. Збираємо проект та завантажуємо його на плату комбінацією клавіш Ctrl+F5. Завдання до лабораторної роботи Розробити програмне забезпечення для управління LED згідно варіанту (який визначається порядковим номером n в журналі). Таблиця варіантів № Колір LED Період при ініціалізації, мс Період після нажаття кнопки 1. Червоний 1000 5000 2. Зелений 2000 10000 3. Синій 3000 15000 4. Червоний 2500 500 5. Зелений 5000 1000 6. Синій 10000 2000 7. Червоний 8000 3000 8. Зелений 7000 1000 9. Синій 10000 1500 10. Синій 0 1000 Зміст звіту 1. Титульна сторінка та тема роботи. 2. Сформулювати мету роботи. 3. Текст програми відповідно до заданого варіанту. 4. Скріншоти налаштувань компонентів. 5. Висновки. Література 1. Wikipedia: [Електронний ресурс] – Режим доступу World Wide Web: https://en.wikipedia.org/wiki/Pulse-width_modulation 2. Cypress: [Електронний ресурс] – Режим доступу World Wide Web: http://www.cypress.com/file/445126/download 3. Cypress: [Електронний ресурс] – Режим доступу World Wide Web: http://www.cypress.com/documentation/component-datasheets/pulse-width- modulator-pwm 4. Cypress: [Електронний ресурс] – Режим доступу World Wide Web: http://www.cypress.com/interrupt Додаток А Лістинг програми #include /******************************************************************************* * * Function Name: ISR_TC ******************************************************************************** / CY_ISR (TC_ISR_Handler) { /* Interrupt is cleared */ PWM_ClearInterrupt( PWM_INTR_MASK_TC ); /* LED is toggled ON and OFF */ LED_Write(LED_Read()); } /******************************************************************************* * Function Name: main *******************************************************************************/ int main( void ) { /* Enable global interrupts. */ CyGlobalIntEnable ; /* Enable interrupt component and set up handler */ TC_ISR_StartEx(TC_ISR_Handler); /* Start the PWM Component */ PWM_Start(); for (;;) { } } |