Яка частота виходу ШІМ на Arduino


22

Яку частоту використовують Arduinos для нормальної ШІМ, коли використовується analogWrite ()?

І чи відрізняється вона для різних моделей Arduino? Мене конкретно цікавить Mega 2560, але також хочу знати, чи відповідає він між моделями.

Я бачив попутні посилання на Arduino, використовуючи 500 Гц, що здається дуже повільним.


Це також залежить від штифта, який ви використовуєте.
Гербен

Відповіді:


31

ШІМ-сигнал генерується таймерами на мікросхемах AVR. Кожен таймер може генерувати ШІМ-сигнал на двох-трьох різних штирях. Кожен контакт може мати свій власний робочий цикл, але вони поділяють частоту ШІМ. Ви можете змінити частоту ШІМ, змінивши джерело тактових годин для таймерів. За замовчуванням вони використовують тактовий процесор, поділений на 64, тобто. їх код призначено на 64 за кодом ініціалізації Arduino. Для того, щоб більше плутати речі, існують два різних режими ШІМ: швидка ШІМ та фазова правильна ШІМ. У швидкій ШІМ таймер налічує до 255, потім переповнює і починається з 0 (256 різних станів). У правильній фазі ШІМ таймер нараховує до 255, потім змінює напрямок і відлічує вниз до нуля, змінює напрямок і так далі (510 різних станів).

Мега Arduino має 5 таймерів, timer0 - timer4. Оскільки timer0 також використовується для функцій millis та micros, він використовує швидку ШІМ, тоді як інші таймери налаштовані для коректної ШІМ фази. Це призводить до різної частоти на різних штифтах:

  • Контакт 4 і 13, керований таймером0:
    16 МГц / 64/256 = 976,56 Гц

  • Інші ШІМ-штифти, керовані таймером1-4:
    16 МГц / 64/510 = 490,20 Гц

Розрахунок становить: кількість станів у режимі тактового / дошкольного / ШІМ

Ситуація однакова для всіх інших плат Arduino, про які я знаю, за винятком того, що у них менше таймерів, які підключаються до різних штифтів.

Ви можете змінити частоту ШІМ, змінивши таймер передпуску. Дивіться цю сторінку: http://playground.arduino.cc/Main/TimerPWMCheatsheet

Також можна змусити таймери рахувати до іншого значення, ніж 255. На 8-бітових таймерах ви втратите вихідний штифт, але на 16-бітових таймерах ви можете скористатися Реєстром захоплення вводу для визначення значення TOP. Функція захоплення входу - це функція, яка рідко використовується в спільноті Arduino, тому ви, швидше за все, не пропустите її.

Бібліотеки Arduino дозволяють використовувати лише 8-бітну роздільну здатність навіть на 16-бітових таймерах. Якщо ви хочете більш високої роздільної здатності, вам доведеться написати власний analogWrite або використовувати бібліотеку, зроблену для цього. На Arduino Mega timer0 і timer2 - 8 біт, а решта - 16 біт.

Змінивши режим 16-ти бітових таймерів, щоб використовувати повну роздільну здатність, в поєднанні зі зміною довіра і значення TOP, ви можете досягти дуже широкого діапазону частот ШІМ.

Максимальна частота, яку ви можете досягти, - тактова / 4, встановивши дошкільник на 1 і TOP - 3 в режимі швидкого ШІМ - нижнє значення заборонено. Це дасть вам ШІМ 4 МГц з роздільною здатністю 2 біт. Це може бути на 0%, 25%, 50% або 75% часу. Більш високе значення TOP дасть вам більшу роздільну здатність з меншою частотою.

Для більш тривалого пояснення прочитайте цю статтю або зверніться до таблиці .

Зміна доскалера, режиму ШІМ або ТОП-значення для таймера0 зіпсується з millis()та micros().


1
Я вважаю, що найшвидша частота, яку ви можете отримати для ШІМ, становить 16 МГц / 256 (prescaler = 1), або 62,5 КГц?
Duncan C

А далі, що частота ШІМ має бути рівним фактором 62,5 КГц? Хтось із іншого потоку хотів контролювати швидкість вентилятора 4-контактного вентилятора ПК. Мабуть, він хоче отримати сигнал керування ШІМ 25 КГц. 62,5 / 25 - 2,5, що не є цілим значенням.
Duncan C

Я оновив відповідь, щоб детальніше розглянути можливості досягнення конкретних частот,
user2973

На кінці низької частоти ви можете заздалегідь призначити 16-бітний таймер у фазовому режимі 1024 докалером, щоб отримати 16e6 / 1024/2 ^ 16/2 = 0.119 Гц або 7,1 циклів / хвилину. Для нижчих за це потрібно перемикати біти на основі чогось на зразок millis (). А може спрацювати лічильник на зовнішньому вхідному штифті T ?.
Дейв X
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.