Використання таймера в режимі захоплення

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

Завдання вимірювання довжини імпульсу, періоду і частоти зводиться до наступного:

1. Налаштовуємо шестнадцатіразрядний таймер / лічильник 1

Робоча частота мікроконтролера (Atmega8) 8 МГц. використовуємо переддільник на 8 для таймера / лічильника 1, тобто частота таймера 1 МГц і 1 тик таймера дорівнюватиме 1/1000000 Гц = 1 мкс. тобто за 65536 мкс відбудеться одне переривання таймера. Також використовуємо вхідний пригнічувач шуму, який активується записом лог. 1 в біт ICNC1 регістра TCCR1B. Дозволяємо переривання по захопленню і переповнення таймера.

2. Обробляємо переривання по таймеру / лічильника 1

Наш таймер вважає від 0 до 65536, потім відбувається переривання по переповнення, регістр TCNT1 обнуляється і починає тікати знову. Необхідно вважати кількість цих переривань для подальшого підрахунку тривалості. З кожним перериванням збільшуємо змінну OVF_counter.

Вимірюваний сигнал подається на висновок ICP1 (PB0). Поточне значення TCNT1 при кожній зміні на виведення ICP1 копіюється в ICR1 і залишається там до наступної зміни. Якщо на вході ICP1 наростаючий фронт імпульсу, поточне значення ICR1 поміщаємо в буфер rising, після Обнуляємо лічильник переривань по переповнення і перемикаємо режим захоплення по спадающему фронту. Якщо на вході ICP1 спадаючий фронт імпульсу, поточне значення ICR1 поміщаємо в буфер falling, після перемикаємо режим захоплення по наростаючому фронті. Обчислюємо довжину імпульсу за формулою:

t = falling - rising_1 + (OVF_counter * 65536);

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

3. Виводимо значення тривалості і періоду імпульсу (мкс) і частоти (Гц) на LCD дисплей.

Принцип вимірювання всіх величин показаний на графіку:

Використання таймера в режимі захоплення

Принципова схема вимірювача:

Використання таймера в режимі захоплення

Обговорення статті на форумі