#1 2024-03-31 12:16:43

GmmC
Учасник
Зареєстрований: 2019-04-12
Повідомлень: 5

Генератор частоти з регулюванням шім

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

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

Неактивний

#2 2024-03-31 16:14:10

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Генератор частоти з регулюванням шім

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

Неактивний

#3 2024-03-31 19:10:37

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 137

Re: Генератор частоти з регулюванням шім

Honey пише:

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

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

Остання редакція dimich (2024-03-31 19:11:03)

Неактивний

#4 2024-04-01 00:15:08

GmmC
Учасник
Зареєстрований: 2019-04-12
Повідомлень: 5

Re: Генератор частоти з регулюванням шім

dimich пише:
Honey пише:

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

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

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

Неактивний

#5 2024-04-02 01:50:42

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 137

Re: Генератор частоти з регулюванням шім

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

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

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

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

Неактивний

#6 2024-04-04 01:01:11

GmmC
Учасник
Зареєстрований: 2019-04-12
Повідомлень: 5

Re: Генератор частоти з регулюванням шім

dimich пише:

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

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

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

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

Неактивний

#7 2024-04-05 02:40:14

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 137

Re: Генератор частоти з регулюванням шім

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 - той ще челендж.

Неактивний

#8 2024-04-05 08:27:52

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Генератор частоти з регулюванням шім

dimich пише:
GmmC пише:

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

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

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

Неактивний

#9 2024-04-05 12:37:37

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 137

Re: Генератор частоти з регулюванням шім

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

Неактивний

Швидке повідомлення

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

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