- Основи ШІМ-сигналу
- Налаштування обладнання та вимоги
- Схема мікросхеми мікроконтролера Nuvoton N76E003 затемнення
- ШІМ-шпильки на мікроконтролері N76E003 Nuvoton
- Регістри та функції ШІМ у мікроконтролері N76E003 Nuvoton
- ШІМ-режими роботи в мікроконтролері Nuvoton N6E003
- Програмування Nuvoton N76E003 для ШІМ
- Прошивання коду та тестування результату
Модуляція ширини імпульсу (ШІМ) - це загальноприйнята техніка в мікроконтролерах для створення безперервного імпульсного сигналу з заданою частотою та робочим циклом. Коротше кажучи, ШІМ - це зміна ширини імпульсу при постійній частоті.
ШІМ-сигнал в основному використовується для управління сервомотором або яскравістю світлодіода. Крім того, оскільки мікроконтролери можуть забезпечувати лише логіку 1 (висока) або логіка 0 (низька) на своїх вихідних виводах, він не може забезпечувати змінну аналогову напругу, якщо не використовується ЦАП або цифро-аналоговий перетворювач. У такому випадку мікроконтролер може бути запрограмований для виведення ШІМ із різноманітним робочим циклом, який потім може бути перетворений в змінну аналогову напругу. Раніше ми використовували ШІМ-периферію і в багатьох інших мікроконтролерах.
- Підручник з ШІМ ARM7-LPC2148: Керування яскравістю світлодіода
- Широтно-імпульсна модуляція (ШІМ) за допомогою MSP430G2: Керування яскравістю світлодіода
- Генерування ШІМ за допомогою мікроконтролера PIC з MPLAB та XC8
- Широтно-імпульсна модуляція (ШІМ) у STM32F103C8: регулювання швидкості вентилятора постійного струму
- Генерація ШІМ-сигналів на штифтах GPIO мікроконтролера PIC
- Підручник з ШІМ Raspberry Pi
- Підручник з ШІМ з ESP32
У цьому підручнику ми будемо використовувати інтерфейс світлодіода, яким буде керувати цей ШІМ-сигнал від мікроконтролера N76E003. Ми оцінимо, яке обладнання для налаштування нам потрібне, і як ми повинні програмувати наш мікроконтролер. До цього давайте розберемося з деякими основами ШІМ-сигналу.
Основи ШІМ-сигналу
На зображенні нижче показано постійний ШІМ-сигнал.
Наведене зображення - не що інше, як постійна квадратна хвиля з однаковим часом увімкнення та однаковим часом вимкнення. Припустимо, загальний період сигналу становить 1 секунду. Таким чином, час увімкнення та вимкнення становить 500 мс. Якщо через цей сигнал підключений світлодіод, світлодіод увімкнеться на 500 мс і вимкнеться на 500 мс. Отже, в перспективі світлодіод загоряється вдвічі менше від фактичної яскравості, якщо його ввімкнути до прямого сигналу 5 В без будь-якого часу вимкнення.
Як показано на наведеному вище зображенні, якщо робочий цикл змінено, світлодіод загориться 25% фактичної яскравості за тим самим принципом, що обговорювався раніше. Якщо ви хочете дізнатись більше та дізнатись про модуляцію ширини імпульсу (ШІМ), ви можете ознайомитися зі зв’язаною статтею.
Налаштування обладнання та вимоги
Оскільки вимога цього проекту - керувати світлодіодами за допомогою ШІМ. Для взаємодії з N76E003 потрібен світлодіод. Оскільки на платі розробки N76E003 є світлодіод, він буде використаний у цьому проекті. Інші компоненти не потрібні.
Не кажучи вже про те, що нам потрібна плата розробки на основі мікроконтролера N76E003, а також програміст Nu-Link. Якщо програміст не використовується як джерело живлення, може знадобитися додатковий блок живлення на 5 В.
Схема мікросхеми мікроконтролера Nuvoton N76E003 затемнення
Як ми бачимо на схемі нижче, тестовий світлодіод доступний всередині плати розробки і підключений до порту 1.4. У крайньому лівому куті показано підключення інтерфейсу програмування.
ШІМ-шпильки на мікроконтролері N76E003 Nuvoton
N76E003 має 20 контактів, з яких 10 контактів можна використовувати як ШІМ. На зображенні нижче зображені ШІМ-шпильки, виділені в червоному квадратному полі.
Як ми бачимо, виділені ШІМ-штирі також можуть бути використані для інших цілей. Однак це інше призначення висновків буде недоступним, коли висновки налаштовані на вихід ШІМ. Контакт 1.4, який використовується як вихідний ШІМ-штифт, втратить інші функції. Але це не проблема, оскільки для цього проекту не потрібна інша функціональність.
Причина вибору контакту 1.4 як вихідного контакту полягає в тому, що вбудований тестовий світлодіод підключений до цього контакту на платі розробки, тому ми не потребуємо зовнішніх світлодіодів. Однак у цьому мікроконтролері з 20 висновків 10 висновків можна використовувати як вихідний ШІМ-штир, а будь-які інші ШІМ-висновки можна використовувати для цілей, пов'язаних з виходом.
Регістри та функції ШІМ у мікроконтролері N76E003 Nuvoton
N76E003 використовує системний годинник або переповнення таймера 1, розділений на ШІМ-годинник з можливістю вибору прескалера від 1/1 ~ 1/128. Період ШІМ можна встановити, використовуючи 16-розрядний регістр періоду ШІМФ та ШІМП.
Мікроконтролер має шість індивідуальних ШІМ-регістрів, які генерують шість ШІМ-сигналів, які називаються PG0, PG1, PG2, PG3, PG4 та PG5. Однак період однаковий для кожного ШІМ-каналу, оскільки вони мають один і той же 16-розрядний лічильник періоду, але робочий цикл кожного ШІМ може відрізнятися від інших, оскільки кожен ШІМ використовує різний 16-розрядний регістр робочого циклу з іменем {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} і {PWM5H, PWM5L}. Таким чином, у N76E003 шість ШІМ-виходів можуть генеруватися незалежно з різними робочими циклами.
На відміну від інших мікроконтролерів, увімкнення ШІМ не встановлює штифти вводу-виводу на їх вихід ШІМ автоматично. Таким чином, користувачеві потрібно налаштувати режим виводу вводу-виводу.
Отже, що б не потрібно для програми, першим кроком є визначення або вибір, який один або два, а то і більше двох штифтів вводу-виводу як вихід ШІМ. Після вибору одного, штифти вводу-виводу повинні бути встановлені як режим Push-Pull або Квазідвонаправлений для генерації ШІМ-сигналу. Це можна вибрати за допомогою реєстру PxM1 та PxM2. Ці два регістри встановлюють режими вводу-виводу, де x означає номер порту (Наприклад, порт P1.0 реєстром буде P1M1 і P1M2, для P3.0 це буде P3M1 і P3M2 тощо)
Конфігурацію можна побачити на зображенні нижче -
Потім наступним кроком є увімкнення ШІМ у цьому конкретному штирі (кодах) вводу-виводу. Для цього користувачеві потрібно встановити регістри PIOCON0 або PIOCON1. Регістр залежить від відображення контактів, оскільки PIOCON0 та PIOCON1 керують різними контактами, що залежать від сигналів ШІМ. Конфігурацію цих двох регістрів можна побачити на зображенні нижче -
Як бачимо, наведений вище регістр управляє 6 конфігураціями. В іншому використовуйте реєстр PIOCON1.
Таким чином, наведений вище регістр управляє рештою 4 конфігураціями.
ШІМ-режими роботи в мікроконтролері Nuvoton N6E003
Наступним кроком є вибір режимів роботи ШІМ. Кожен ШІМ підтримує три режими роботи - незалежний, синхронний та режим включення мертвого часу.
Незалежний режим забезпечує рішення, де шість сигналів ШІМ можуть генеруватися незалежно. Це потрібно максимум разів, коли операції, пов'язані зі світлодіодами, або звукові сигнали потрібно вмикати та контролювати.
У синхронному режимі встановлює PG1 / 3/5 в тому ж виході ШІМ-в фазі, так само, як pg0 / 2/4, де PG0 / 2/4 забезпечує незалежні вихідні сигнали ШІМ. Це в основному потрібно для управління трифазними двигунами.
Режим Dead-Time вставки трохи складні і застосовуються в реальних автомобільних застосуваннях, особливо в промислових додатках. У таких додатках додатковим ШІМ-виходом має бути вставка "мертвого часу", яка запобігає пошкодженню пристроїв перемикання живлення, таких як GPIB. Конфігурації встановлюються в цьому режимі таким чином, що PG0 / 2/4 забезпечує вихідні сигнали ШІМ так само, як незалежний режим, але PG1 / 3/5 забезпечує вихід "позафазних ШІМ-сигналів" виходу PG0 / 2/4 відповідно та ігнорувати PG1 / 3/5 Черговий реєстр.
Вище трьох режимів можна вибрати за допомогою наведеної нижче конфігурації реєстру -
Наступна конфігурація - вибір типів ШІМ за допомогою реєстру PWMCON1.
Отже, як ми бачимо, доступні два типи ШІМ, які можна вибрати за допомогою наведеного вище реєстру. При вирівнюванні по краю 16-бітний лічильник використовує односхилу операцію, відлічуючи від 0000H до встановленого значення {PWMPH, PWMPL}, а потім починаючи з 0000H. Вихідна форма сигналу вирівняна за лівим краєм.
Але в режимі вирівнювання по центру 16-розрядний лічильник використовує функцію подвійного нахилу, відлічуючи від 0000H до {PWMPH, PWMPL}, а потім знову переходить від {PWMPH, PWMPL} до 0000H шляхом зворотного відліку. Вихід вирівняно по центру, і це корисно для генерації сигналів, що не перекриваються. Тепер, нарешті, операції управління ШІМ, які можна перевірити в наведених нижче реєстрах-
Щоб встановити джерело годинника, використовуйте регістр управління годинником CKCON.
Вихідний сигнал ШІМ також може маскуватися за допомогою реєстру PMEN. Використовуючи цей регістр, користувач може замаскувати вихідний сигнал на 0 або 1.
Далі - ШІМ-керуючий реєстр-
Наведений вище реєстр корисний для запуску ШІМ, завантаження нового періоду та робочого навантаження, керування прапором ШІМ та очищення лічильника ШІМ.
Відповідні конфігурації бітів показані нижче -
Щоб встановити дільник годинника, використовуйте регістр PWMCON1 для дільника годинника ШІМ. 5-й біт використовується для згрупованого ШІМ у режимі групового режиму та забезпечує однаковий робочий цикл для перших трьох пар ШІМ.
Програмування Nuvoton N76E003 для ШІМ
Кодування просте, а повний код, що використовується в цьому посібнику, можна знайти внизу цієї сторінки. Світлодіод підключений до контакту P1.4. Таким чином, штир P1.4 необхідний для використання для виведення ШІМ.
В основній програмі налаштування виконуються у відповідному порядку. Під рядками кодів встановлюється ШІМ і налаштовується штифт Р1.4 як вихід ШІМ.
P14_PushPull_Mode;
Це використовується для встановлення штифта P1.4 в режим push-pull. Це визначено в бібліотеці Function_define.h як-
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Наступні рядки використовуються для ввімкнення ШІМ на піні P1.4. Це також визначено в бібліотеці Function_define.h як-
#define PWM1_P14_OUTPUT_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS- = 0x01; PIOCON1- = 0x02; TA = 0xAA; TA = 0x55; SFRS & = 0xFE; EA = BIT Увімкнення виходу PWM1 PWM_IMDEPENDENT_MODE;
Наведений нижче код використовується для встановлення ШІМ у незалежний режим. У бібліотеці Function_define.h це визначається як-
#define PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Тоді ми повинні встановити вихідний ШІМ типу EDGE. У бібліотеці Function_define.h це визначається як-
#define PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Далі ми повинні очистити значення лічильника ШІМ, яке доступне в бібліотеці SFR_Macro.h-
#define set_CLRPWM CLRPWM = 1
Після цього ШИМ-годинник вибирається як годинник Fsys, а коефіцієнт поділу, що використовується, - 64 поділ.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Обидва вони визначаються як-
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Нижче рядка коду використовується для маскування вихідного сигналу ШІМ на 0, визначене як-
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Потім ми повинні встановити період часу сигналу ШІМ. Ця функція встановлює період у регістрі PWMPL та PWMPH. Оскільки це 16-розрядний регістр, функція використовує метод зсуву бітів для встановлення періоду ШІМ.
void set_PWM_period (непідписане значення int) { PWMPL = (значення & 0x00FF); ШІМФ = ((значення & 0xFF00) >> 8); }
Однак, крім 1023 та 8-бітного періоду, користувачі можуть також використовувати інші значення. Збільшення періоду призводить до плавного затемнення або вицвітання.
set_PWMRUN;
Це запустить ШІМ, який визначений у бібліотеці SFR_Macro.h як-
#define set_PWMRUN PWMRUN = 1
Далі, в циклі while , світлодіод вмикається і постійно згасає.
while (1) { for (value = 0; value <1024; value + = 10) { set_PWM1 (value); Таймер1_Затримка10мс (3); } for (value = 1023; value> 0; value - = 10) { set_PWM1 (value); Таймер1_Затримка10мс (2); } } }
Коефіцієнт завантаження встановлюється функцією set_PWM1 ();, функцією, яка встановлює робочий цикл у регістрі PWM1L та PWM1H.
void set_PWM1 (непідписане значення int) { PWM1L = (значення & 0x00FF); ШІМ1Н = ((значення & 0xFF00) >> 8); set_LOAD; }
Прошивання коду та тестування результату
Коли код готовий, просто скомпілюйте його та завантажте на контролер. Якщо ви новачок у навколишньому середовищі, ознайомтесь з початком роботи з підручником Nuvoton N76E003, щоб вивчити основи. Як ви можете бачити з наведеного нижче результату, код повернув попередження 0 та 0 помилок і промайнув, використовуючи метод мигання за замовчуванням від Keil. Додаток починає працювати.
Відновлення розпочато: Проект: ШІМ Відновити ціль "Ціль 1", збираючи STARTUP.A51… компіляція main.c… компіляція Delay.c… посилання… Розмір програми: дані = 35,1 xdata = 0 код = 709 створення шістнадцятковий файл із ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 Помилка (и), 0 Попередження (и). Час збірки минув: 00:00:05
Обладнання підключено до джерела живлення, і воно працювало, як очікувалося. Тобто яскравість вбудованого світлодіода зменшується, а потім збільшується, що вказує на зміну робочого циклу ШІМ.
Повну роботу цього підручника також можна знайти у відеозаписі нижче. Сподіваємось, вам сподобався підручник і ви дізналися щось корисне, якщо у вас виникли запитання, залиште їх у розділі коментарів або ви можете використовувати наші форуми для інших технічних питань.