Частотомір НА PIC-Контроллер

Д. Яблука, В. Ульріх, м. Санкт-Петербург

Цей прилад призначений для вимірювання частоти логічних сигналів, а також періодичних сигналів непрямокутної форми позитивної полярності. Він гранично простий за схемою і в роботі (межі вимірювань перемикаються автоматично) і може знайти застосування в тих випадках, коли відліку частоти з точністю до третього знака досить.

Частотомір, принципова схема якого зображена на малюнку, дозволяє вимірювати частоту періодичних сигналів у діапазоні 250 Гц … 50 МГц. Похибки вимірювань і відліку для кожного інтервалу частот наведено в табл. 1. Вхідний опір приладу – не менше 2 кОм. Рівень лог. 0 вхідної напруги повинен бути не більше 0,2, а лог. 1 – не менше 0,8 Uпіт, де Uпіт – напруга живлення, яке може бути яким завгодно у межах 3 … 6 В. Споживаний струм не перевищує 100 мА.

Як видно зі схеми, основний елемент частотоміра – мікроконтролер PIC16F84, що здійснює рахунок імпульсів зовнішнього сигналу, що надходить на вхід приладу, обробку отриманих значень та виведення результатів вимірювання на табло. Частота (у герцах) відображається індикаторами HG1-HG4 у форматі X, YZ-10 ^ E Гц, де X, YZ – десяткове значення частоти сигналу, а Е – порядок (наприклад, показання 2,25 3 відповідає частоті 2,25-103 = 2250 Гц; 4,32 5 – 4,32 – 105 = 432 000 Гц = = 432 кГц і т. д.).

Таблиця 1

Інтервал частот, кГц (МГц) Час вимірювання, мс Похибка, Гц (кГц)
виміру відліку
0,25…0,999 500 ±2 ±2
1…9,99 500 ±2 ±5
10…99,9 500 ±2 ±50
100…127 500 ±2 ±500
128…999 1 (±1) (±1)
(1…9,99) 1 (±1) (±5)
(10…50) 1 (±1) (±50)

Мікроконтроллер PIC16F84 має у своєму складі восьмирозрядний модуль таймера (TMR0), який може використовуватися з восьмирозрядний предделітелем. Останній функціонує асинхронно, тому таймер здатний вважати частоту сигналів значно вище частоти генератора мікроконтролера, яка в даному випадку дорівнює 4 МГц. Мінімальний час високого і низького рівнів вхідного сигналу – 10 нс, що дозволяє модулю TMR0 функціонувати від зовнішнього сигналу частотою до 50 МГц (а практично і вище). Предделітель задіяний для підвищення точності вимірювань. Так як його граничний коефіцієнт ділення дорівнює 256, максимальна роздільна здатність лічильника становить 16 двійкових розрядів. Однак вміст предделітеля неможливо вважати програмно, подібно регістру. На прикладі описуваного частотоміра показаний метод, що дозволяє "витягувати" восьмирозрядного значення предделітеля. Це забезпечує роздільну здатність вимірювання 16 розрядів: вісім старших розрядів зчитуються з TMR0, а вісім молодших – з предделітеля.

Вимірюваний сигнал через резистор R2 надходить на висновок RA4 DD1, що є входом зовнішнього сигналу (Т0СК1) таймера TMR0. Цей висновок з'єднаний з RB0, перемиканням якого здійснюється управління режимом рахунку. Перед вимірюванням проводиться скидання TMR0 (при цьому скидається і предделітель).

Для вимірювання частоти висновок RB0 конфігурується як вхід на точні інтервали часу, що дозволяє зовнішнім сигналом надходити на вхід таймера. Відлік тривалості інтервалів здійснюється "зашитою" в мікроконтроллер програмою і виконується як точна тимчасова затримка. Після закінчення її висновок RB0 конфігурується як вихід, TMR0 припиняє роботу, оскільки на RA4 встановлюється низький рівень, і зовнішній сигнал перестає надходити на його вхід.

Потім зчитується накопичене 16-розрядне значення числа періодів вхідного сигналу: у старші вісім розрядів записується вміст TMR0, а в молодші – предделітеля. Для отримання значення предделітеля виконується додаткова підпрограма (з цією метою на виведення RA4 командами BSF і BCF перемикається вихідний рівень, тобто програмно формується послідовність коротких імпульсів). Кожен імпульс інкрементує предделітель і лічильник імпульсів N, після чого перевіряється вміст TMR0, щоб визначити, збільшилося воно. Якщо воно зросло на 1, восьмирозрядного значення предделітеля визначається за вмістом лічильника імпульсів N як 256 – N. Далі 16-розрядне двійкове значення частоти перетвориться в шестіразрядное десяткове, яке округляється до тризначного, а потім формується вказаний вище експонентний формат для виводу на табло в динамічному режимі. Сканування індикаторів відбувається з частотою приблизно 80 Гц. Висока навантажувальна здатність мікроконтролера дозволила підключити індикатори безпосередньо до його висновків.

Вимірювання частоти відбувається в два етапи. Спочатку формується інтервал часу (програмна затримка) тривалістю 1 мс, що відповідає області високих частот. Якщо отримане значення частоти більше 127 (старший байт – значення TMR0-і старший розряд молодшого байта – значення предделітеля – не рівні 0), воно перетворюється, і результат виводиться на індикатори. Після цього цикл повторюється.

Якщо ж значення частоти менше 127, виконується друга вимір (для низьких частот), при якому формується інтервал часу тривалістю 0,5 с. Для оптимізації роботи мікроконтролера він об'єднаний з циклом виведення результату попереднього вимірювання на індикатори. Значення частоти більше 127 перетвориться для індикації, при меншому показники індикаторів обнуляються (частота вхідного сигналу – поза діапазону вимірювань або відсутній взагалі). Після цього в обох випадках повний цикл вимірювання повторюється.

Коди "прошивки" ПЗУ мікроконтролера в форматі Microchip.hex наведено в табл. 2.

Таблиця 2

Оригінальний текст програми бажаючі знайдуть на ftp-сервері редакції в Інтернеті (ftp://ftp.paguo.ru/pub/ або ftp://212.188.13.179/pub/).

Частотомір можна значно здешевити, якщо виконати його на базі PIC-контролера з однократно програмованим ПЗУ, наприклад, PIC16C54C, вартість якого вдвічі менше (при цьому буде потрібно незначна доопрацювання програми). Застосування РК індикатора з пристроєм управління, наприклад, НТ1621, дозволить знизити споживаний струм приблизно до 5 мА.

Збільшити вхідний опір приблизно до 1 МОм дозволить застосування буфера на одному транзисторі (див. замітку М. Васильєва "Підвищення вхідного опору частотоміра в" Радіо ", 1987, № 4, с. 57). Щоб зменшити похибку приладу в області середніх частот, в програму достатньо ввести ще один вимір тривалістю 10 мс, в результаті похибка в діапазоні 100 … 999 кГц знизиться до 100 Гц. А зто, у свою чергу, дозволить додати розряд на індикаторі і підвищити його дозвіл.

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

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

Можна вчинити інакше – змістити діапазон вимірювань в бік низьких частот, замінивши ZQ1 на 4 МГц кварцовим резонатором на частоту 400 кГц. Діапазон частот після такої заміни – 25 Гц … 500 кГц. Час вимірювання зросте до 5 с, і стане помітно мерехтіння індикаторів.

Радіо № 1, 2001 р., с. 21,22.