Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

dimich
2024-04-05 12:37:37

Дійсно, в режимах, де ICRn використовується як TOP, він не оновлюється автоматично. Тоді так, на одному 16-бітному таймері можна зробити два канала з довільною частотою. Для FastPWM це режим 14.

Honey
2024-04-05 08:27:52
dimich пише:
GmmC пише:

можливо одночасно буде реалізувати також шім по двух чи одному каналу?

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

Подивіться режими, коли верхня межа лічильника задається регістром ICR, тоді обидва регістри-компаратори доступні для ШІМ.

dimich
2024-04-05 02:40:14
GmmC пише:

можливо одночасно буде реалізувати також шім по двух чи одному каналу?

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

Є наступні варіанти:

1) Один таймер, два канала, фіксований набір частот. Для 16-бітного таймера максимальна частота 16 МГц / 65536 ≈ 244 Гц, решта нижчі. Для 8-бітного 62500 Гц, 7812.5 Гц і т.д, тобто 16 МГц / 256 і дільниками 1, 8, 64, 256, 1024 для TC0. Для TC2 також доступні дільники 32 і 128.

2) Два таймера, по одному на кожний канал. Для точного налаштування фази їх потрібно буде синхронізувати, наприклад, задаючи різні початкові значення TCCNT.

3) Таймер в режимі лічильника, з вимкненим Compare Output. Програмно опитувати TCCNT в циклі і відповідно смикати GPIO. Звернути увагу на можливі ґлітчі при взаємодії з UI та зміні параметрів.

4) Взагалі без таймерів, генерувати затримки програмно, смикати GPIO. Для досягнення хорошої точності прийдеться вираховувати час виконання окремих інструкцій. Сумістити це з UI - той ще челендж.

GmmC
2024-04-04 01:01:11
dimich пише:

Частота 32 кГц при тактовій 16 МГц доступна точно: це рівно 500 тіків. Наступна досяжна нижча частота буде при дільнику 501: [16e3/501] = 31936 Гц. Якщо округлювати задану користувачем частоту до найближчої досяжної, то відносна похибка виходить ≈ 0.1%. У китайських модулів заявлено 2%  smile

Якщо така точність задовільняє, то можна обійтись FastPWM режимом 16-бітного таймера.

Дякую, всё чітко і доступно. Я через FastPWM і вирішив питання, похибка дійсно мінімальна як показав ,,ослик,,
Такі показники мене ідеально влаштовують.

А ще не підкажете, потрібно буде двух канальний генератор з можливість здвиг фаз, скетч знайшов займуся. А питання, чи можливо одночасно буде реалізувати також шім по двух чи одному каналу?

dimich
2024-04-02 01:50:42

Частота 32 кГц при тактовій 16 МГц доступна точно: це рівно 500 тіків. Наступна досяжна нижча частота буде при дільнику 501: [16e3/501] = 31936 Гц. Якщо округлювати задану користувачем частоту до найближчої досяжної, то відносна похибка виходить ≈ 0.1%. У китайських модулів заявлено 2%  smile

Якщо така точність задовільняє, то можна обійтись FastPWM режимом 16-бітного таймера.
Для нижчих частот вмикати апаратний дільник таймера (prescaler), щоб не переповнювався 16-бітний лічильник. Розрахувати діапазони для зміни дільника, щоб зберегти баланс між похибкою по частоті і по коефіцієнту заповнення.

Також для 100% заповнення (або для 0% в інверсному режимі) вимикати керування піном по таймеру і виставляти відповідне значення через GPIO.

Доречі, на деяких платах ардуіно зустрічаються Atmega328PB (хоча марковані як 328P). У них є два додаткових 16-бітних таймера з окремим прескалером (а також додаткові UART, SPI, I2C).

GmmC
2024-04-01 00:15:08
dimich пише:
Honey пише:

Частоту і коефіцієнт заповнення ШІМ на AVR не вийде встановлювати абсолютно довільно

Для невиликих частот можна генерувати ШІМ програмно з раціональним дільником, в певних межах точності.
Питання в тому, чи хоче ТС розібратись сам, чи чекає на готове рішення.

Ні в якому разі я не хотів, щоб за мене писали, я хочу сам розібратися. Так, після перечитаної інформації є результат, як раз і невеликі частоти і точність можлива з відхиленням, звісно, що такі питання для точних значень контролери не вирішують. Допишу в код екран і готово. Дякую

dimich
2024-03-31 19:10:37
Honey пише:

Частоту і коефіцієнт заповнення ШІМ на AVR не вийде встановлювати абсолютно довільно

Для невиликих частот можна генерувати ШІМ програмно з раціональним дільником, в певних межах точності.
Питання в тому, чи хоче ТС розібратись сам, чи чекає на готове рішення.

Honey
2024-03-31 16:14:10

Частоту і коефіцієнт заповнення ШІМ на AVR не вийде встановлювати абсолютно довільно, лише ось такі дискретні значення:
Частота: f=16MHz/N, де N=1..65536
Коеф.заповнення: d=n/N, де N - те ж саме, яке використано для підбору частоти, n=0..N

GmmC
2024-03-31 12:16:43

Доброго дня шановні.
Багато хто в курсі про китайський модуль pwm-generator-150khz
Дуже потрібна допомога з кодом для atmega 328 (аналог роботи цього модуля)щоб не використовувати модуль, і навіть не потрібна максимальна частота вистачить 32кГц, але потрібно можливість регулювання частоти і шім.

Буду вдячний любій інформації. Дякую

Підвал форуму