Виберіть свою мову

Відмітні особливості

  • Генерація синусоїдальних сигналів з використанням широтно-імпульсної модуляції (ШІМ)
  • Об'єднання різних синусоїдальних сигналів в один DTMF-сигнал
  • Вихідні коди на мовах асемблер і Сі
  • Розроблений для сумісної роботи з STK500
  • Розмір коду програми 260 байт/розмір таблиці констант 128 байт
  • Використання табличного методу перетворення

Введення

Даний документ описує методику генерації DTMF-сигналів (двутональные багаточастотні сигнали) з використанням будь-якого AVR-мікроконтролера, що містить блок широтно-імпульсної модуляції (ШІМ) і статичне ОЗП. Дані сигнали знаходять широке застосування в телефонії, де вони відтворюються при натисканні на кнопки набору телефонного номера апарату. Для правильної генерації DTMF-сигналу необхідно накласти дві частоти разом: низьку частоту (fb) і високу частоту (fa). В таблиці 1 показано як змішуються різні частоти для отримання DTMF-тонів при натискання на різні клавіші.


Малюнок 1. Схема генератора DTMF-сигналу

Таблиця 1. Матриця формування тонального сигналу

fb/fa 1209 Гц 1336 Гц 1477 Гц 1633 Гц 697 Гц 1 2 3 A 770 Гц 4 5 6 B 852 Гц 7 8 9 C 941 Гц * 0 # D

У рядках таблиці 1 представлені значення низької частоти, а в стовпцях значення високої частоти. Наприклад, в матриці показано, що при натискання на кнопку "5" повинні змішуватися частоти fb = 770 Гц і fa = 1336 Гц. У результаті складання двох синусоїдальних сигналів різних частот утворюється DTMF-сигнал

(1)

де відношення амплітуд K=Ab/Aa вихідних сигналів має відповідати умові

(2)

Принцип дії

Крім загальних відомостей про використання широтно-імпульсною модуляції далі буде показано як широтно-імпульсна модуляція дозволяє генерувати синусоїдальні сигнали. У наступному параграфі описується як, використовуючи базову частоту ШІМ отримати різні частоти. Після розгляду теоретичних основ буде дано опис безпосередньо генератора DTMF-сигналу. Генерація синусоїдальних сигналів

В залежності від співвідношення тривалості високого VH і низького VL рівнів середнє значення напруги на виході ШІМ змінюється. Якщо співвідношення між тривалостями обох рівнів утримувати постійним, то в результаті буде генеруватися постійний рівень напруги VAV. Рисунок 2 показує сигнал з широтно-імпульсною модуляцією.


Малюнок 2. Генерація рівня постійного напруги

Рівень напруги визначається виразом:

(3)

Синусоїдальний сигнал може генерирован за умови, що середнє значення напруги, що генерується широтно-імпульсною модуляцією буде змінюватися кожен період ШІМ. Співвідношення між високою і низькою рівнями повинне задаватися у відповідність з рівнем напруги синусоїдального сигналу при відповідному часі. На малюнку 3 ілюструється даний процес. Вихідні дані для ШІМ обчислюються для кожного її періоду і записуються в таблицю перетворення (ТП).

Малюнок 3 також ілюструє залежність між частотою основного синусоїдального сигналу і кількістю вибірок. Чим вище число вибірок (Nc) – тим вище точність моделювання результуючого сигналу:

(4)

де f – частота синусоїдального сигналу (1/T) f1 – частота ШІМ (fCK/510) T – період основного синусоїдального сигналу; fCK – тактова частота таймера; NC – кількість вибірок (=12 на рис. 3)

Частота ШІМ залежить від роздільної здатності ШІМ. При 8-розрядному дозволі, кінцеве значення (вершина рахунку) таймера одно 0xFF (255). Т. к. таймер виконує рахунок в прямому і зворотному напрямках, то це значення повинно бути подвоєна. Тому, частота ШІМ може бути обчислена шляхом ділення тактової частоти таймера fCK на 510. Таким чином, при частоті тактирования таймера 8 МГц результуюча частота ШІМ складе 15.6 кГц .


Малюнок 3. Генерація синусоїдального сигналу з використанням ШІМ

Зміна частоти синусоїдального сигналу

Припустимо, що синусоїдальні вибірки зчитуються з таблиці перетворення не послідовно, а через одну. У цьому випадку при тій же частоті читання вибірок буде генеруватися сигнал з подвоєною частотою (див. малюнок 4).


Малюнок 4. Подвоєння результуючої частоти (XSW = 2)

За аналогією, якщо зчитувати не кожне друге значення, а кожне третє, четверте, п'яте (відповідно, ширина кроку 3, 4, 5...) і т. д. можна генерувати Nc-частот у діапазоні [1/T Гц .. 0 Гц]. Зверніть увагу, що для високих частот результуюча форма сигналу не буде синусоїдальної. Ширину кроку по таблиці перетворення позначимо як XSW, де

(5)

Обчислення поточної позиції в ТП для наступного періоду ШІМ (при переповненні таймера) виконується з допомогою виразу (6). Нове значення позиції XLUT залежить від його попереднього стану в позиції ' LUT із збільшенням ширини кроку XSW

(6)

де XLUT - попередня позиція в таблиці перетворення; 'LUT - поточна позиція в таблиці перетворення.

Додавання різних частот для отримання DTMF-сигналу

DTMF-сигнал може бути згенерований за допомогою виразів (1) і (2). Для простоти арифметичних дій значення коефіцієнта К приймається рівним 0.75, щоб арифметичне дію замінити логічними зрушеннями. З урахуванням виразу (6) поточне значення для управління ШІМ може бути обчислено за виразом:

(7)

а з урахуванням, що XLUTa='LUTa + XSWa ,XLUTb='LUTb + XSWb, остаточно запишемо

(8)

Реалізація DTMF-генератора

У цьому додатку розглядається побудова DTMF тонального генератора з використанням виходу 8-розрядної ШІМ (OC1A) і таблиці з 128 вибірками значень синусоїдальної функції (Nc), кожна з яких задається 7 бітами (n). Наступні вирази показують цю залежність, а також показують як обчислити елементи таблиці перетворення:

(9)

Перевагою використання 7 біт є те, що сума значень сигналів високої і низької частоти має розмір одного байта. Для підтримка повного набору DTMF-тонів необхідно обчислити 8 значень для кожній DTMF-частоти з таблиці 1 і занести їх до таблиці перетворення.

Для досягнення більш високої точності виконано наступне рішення: значення, обчислені за висловом 5 вимагають всього 5 байт. Для використання всіх 8 байт, що дозволить зменшити похибку округлення, це значення множиться на 8. Покажчик на таблицю перетворення записується таким же способом. Але в цьому випадку потрібно два байти для запам'ятовування 8-кратного значення. Це означає, що необхідно виконати 3 правобічних зсуву і операцію модуля з підстави Nc (логічне множення на Nc-1) перед використанням цих байт як вказівника на значення синусоїди в

(10)

де XLUTa,b - поточна позиція елемента в таблиці перетворення (фактичний формат); XLUTa,bExt -попередня позиція елемента в таблиці перетворення (розширений формат); ROUND – функція округлення.


Малюнок 5. Схема модуля для підключення до STK500

ШІМ-сигнал формується на виведенні OC1A (PD5). Додатковий вихідний фільтр буде сприяти більшій відповідності синусоїдальної формою сигналу. При зменшенні частоти ШІМ може виникнути необхідність застосування фільтра з більш крутий АЧХ для одержання гарного результату.

Підключення клавіатури показано на малюнку 1. Робота клавіатури повинна бути організована таким чином, щоб була можливість визначення натиснутою клавіші. Це може бути виконано за наступною алгоритмом:

  • Визначення рядка натисніть клавіші
    • налаштувати молодшу тетраду порту на вихід і встановити лог. "0"
    • налаштувати старшу тетраду порту на вхід з підключенням підтягуючих резисторів
    • рядок з натиснутою кнопкою визначається як розряд старшої тетради з лог. "0"
  • Визначення стовпця натисніть клавіші
    • налаштувати старшу тетраду порту на вихід і встановити лог. "0"
    • налаштувати молодшу тетраду порту на вхід з підключенням підтягуючих резисторів
    • стовпець з натиснутою кнопкою визначається як розряд молодшої тетради з лог. "0"
  • Прим.: У STK200 між висновками роз'єму PORTB і висновками мікроконтролера BP5, PB6 і PB7 включені послідовно резистори (див. схему STK200). Це викличе проблеми якщо клавіатура підключена до роз'єму PORTB.

    Малюнок 6 ілюструє роботу підпрограми по визначенню натиснутій клавіші. В залежності від натиснутої клавіші визначається тривалість інтервалу. Процедура обробки переривання використовує це значення для обчислення установок ШІМ для двох синусоїд DTM-тони. Процедура обробки переривання показана на рисунках 7 і 8.

    Ця процедура обчислює значення для порівняння з виходом таймера на наступний період ШІМ. Процедура обробки переривань спершу обчислює позицію значення наступної вибірки в таблиці перетворення і зчитує збережене там значення.

    Позиція вибірки в таблиці перетворення визначається тривалістю імпульсу, а власне тривалість імпульсу визначається генерується частотою.

    Остаточне значення, яке записується в регістр порівняння таймера, визначається з використанням формули (7), де враховуються вибірок обох DTMF-частот.


    Малюнок 6. Блок-схема основної програми


    Малюнок 7. Блок-схема процедури обробки переривання по переповненню таймера


    Малюнок 8. Блок-схема процедури читання вибірки "GetSample"

    Публікація: www.cxem.net