АЦП PIC18F45xx - Аналого-Цифрове перетворення, PRO-діод

АЦП є найпоширенішим периферійним блоком, його намагаються запхати навіть у шестиніжкові PIC10. Модуль АЦП в МК зазвичай один, рідше два. Більше двох модулів АЦП — дуже велика рідкість. У встановленому на моїй налагоджувальній платі МК PIC18F45K20 один модуль АЦП, але якщо подивитися на розпинування МК з функціями, побачимо, що ніжок на яких можна виміряти аналоговий сигнал цілих13, функція позначена якAN0..AN12. На малюнку нижче ці ніжки позначені зеленим:

перетворення

Це не означає, що там встановлено 13 модулів АЦП!Модуль АЦП - один, але його вхід підключений до мультиплексора, з'єднаного з ніжками AN0.AN12. Мультиплексор по черзі підключає ніжки МК із функцією ANx до АЦП.

З усього цього багатства аналогових входів будемо використовувати два канали - AN0 і AN1. До входу AN0 підключено вже встановлений на налагоджувальній платі змінний резистор (схема плати DV164131), до входу AN1 підключений конденсатор RC-ланцюжка, на який заведений ШІМ. Особливості схеми з якою будемо працювати виділені кольором:

pro-діод

Доопрацювання схеми для роботи з АЦП

Найважливішою характеристикою АЦП є розрядність. АЦП застосованого МК може перетворювати аналоговий сигнал із розрядністю 10 біт. Вимірювання з точністю вище 8 біт має сенс робити з допомогою ІОН, т.к. низька точність напруги джерела живлення, його дрейф і шуми зведуть нанівець всі переваги точного перетворення.

Жовтий колір показує контакти, які можна використовувати для підключення зовнішнього ІОН.

Структурна схема АЦП МК. Синім показаний мультиплексор.

перетворення

АЦП - структурна схема

Налаштування АЦП МК PIC18 складається з етапів:

  • Налаштування портів I/O для роботи заналоговим сигналом
  • Вибір каналів
  • Налаштування опорного сигналу
  • Вибір джерела тактування та часу вимірювання
  • Налаштування переривань АЦП

Трохи про ADFM (вирівнювання). Десять біт з АЦП читаються у два 8-ми розрядні регістри, які спільно містять шістнадцять біт. Очевидно 10 біт необхідно якось розташувати в 16-ти бітах. Біт ADFM дає вибір, як це зробити:

pic18f45xx

Вплив біта ADFM у регістрі ADCON2

Якщо з даних АЦП передбачається використовувати лише вісім біт, краще використовувати вирівнювання вліво (ADFM = 0) і просто зчитувати регістр ADRESH до 8-бітної змінної (u8adc = ADRESH). Якщо ж з даних АЦП передбачається використовувати всі десять біт, то є сенс зробити вирівнювання вправо (ADFM = 1), в 16-бітну змінну вважати спочатку ADRESH, зробити зсув вліво на вісім біт, додати змінної значення ADRESL (u16adc = ADRESH; u16adc = u16adc , і якщо простіше, можна звернутися до ADRESH і ADRESL як до одного 16-битному регістру ADRES (u16adc = ADRES).

pic18f45xx

Оголошення ADRES, ADRESL, ADRESH

Ще одна корисна особливість АЦП МК - це можливість вибрати канал CHS = 15 (0b00001111), до якого підключений сигналFVR. FVR є внутрішнім ІОН МК, що має фіксовану напругу 1,2В. Здавалося б, навіщо вимірювати вже відому напругу? Однак це має практичний сенс, оскільки це ми з даташиту знаємо, що там 1,2 В, а МК цього не знає. Для нього там буде значення, яке залежить від величини опорної напруги. Якщо в якості опорної напруги виступає джерело живлення, вимірявши канал CHS = 15 можна дізнатися величину напруги живлення. Це буває корисно при батарейному живленні,самодіагностики пристрою, а також при використанні нестабільного живлення як опорного. Як розраховувати:

pic18f45xx

Приклад розрахунку живлення використовуючи FVR

До речі, реальний приклад, збіглося з показаннями мультиметра PMM-600 до сотих :).

Приклади програм з АЦП

1. Програма вимірювання аналогового сигналу на каналі AN0 (де змінний резистор). АЦП запускається у перериванні низького пріоритету. Оскільки це переривання викликається лише таймером 1, вважатимуться, що АЦП запускається по таймеру 1 із частотою 50 разів у секунду. За готовністю даних АЦП викликає переривання високого пріоритету, у якому і зчитуються показання АЦП змінну adresult1. В основному циклі програми значення змінної adresult1 присвоюється порту D, до якого підключені світлодіоди. Таким чином, світлодіоди показують значення старших восьми біт АЦП у двійковому вигляді.

На малюнку зверху синя лінія аналогова напруга на вході AN0, нижні графіки відповідні розряди порту D.