STM32 АЦП

Режим регулярних перетворень.У цьому режимі задається група від 1 до 16 каналів, обробка яких проводиться послідовно, а результат поміщається в один-єдиний 12-розрядний регістр, мається на увазі, що дані будуть зберігатися за допомогою DMA . Ще раз хотілося б наголосити, що не можна просто вибрати один канал, треба задати групу, а в ній вибрати кількість каналів. Перетворення можуть бути циклічними та періодичними, запускатися за таймером або зовнішнім перериванням.
Режим інжектованих перетворень.У послідовність інжектованих перетворень може входити до 4 каналів, вони мають власні регістри для збереження результату. Відразу після запуску інжектованих перетворень, зупиняється оцифрування регулярних, потім після інжектованих, відновлюється оцифрування регулярних. У регістри компенсації можна записати число, яке автоматично відніматиметься з результату перетворення, якщо в результаті віднімання виходить негативне число, регістр інжектованого перетворення доповнюється знаком.
Віконний компаратор.У спеціальних регістрахADC_HTRтаADC_LTRми задаємо верхнє та нижнє значення результату перетворення, при виході за які встановлюється прапорAWD.
Для роботи з АЦП в STM32 виділено 1 регістр статусу -SRі два регістри налаштуванняCR1, CR2.
AWD(Analog watchdog flag) - прапор віконного компаратора, встановлюється в 1, коли результат перетворення пересікADC_HTRіADC_LTR.
EOC(End of conversion) – прапор закінчення групового перетворення, встановлюється в 1 після закінчення регулярного чи інжектованого перетворення.
JEOC(Injected channel end ofconversion) - прапор закінчення інжетованого перетворення, встановлюється в 1 після закінчення інжектованого перетворення.
JSTRT(Injected channel Start flag) — прапор запуску інжектованого перетворення, що встановлюється в 1 при старті інжектованого перетворення.
STRT(Regular channel Start flag) - прапор запуску регулярного перетворення, встановлюється в 1 при старті регулярного перетворення.Описані вище прапори виставляються апаратно, а скидати їх треба програмно.
ADC_CR1(ADC control register 1)
AWDCH[4:0](Analog watchdog channel select bits) - вибір каналу для віконного компаратора, за умови, що бітAWDSGL=1. 00000: Канал № 0. 00001: Канал № 1. ……… 10001: Канал №17.
EOCIE(Interrupt enable for EOC) - дозвіл переривання після закінчення перетворення, 1 - дозволити, 0 - заборонити.
AWDIE(Analog watchdog interrupt enable) — роздільна здатність переривання по сигналу віконного компаратора, 1 — дозволити, 0 — заборонити.
JEOCIE(Interrupt enable for injected channels) - дозвіл переривання після закінчення інжектованого перетворення, 1 - дозволити, 0 - заборонити.
SCAN(Scan mode) — дозволити сканування каналів за списком вказаним у регістрах ADC_SQRx, 1 — дозволити, 0 — заборонити.
AWDSGL(Enable the watchdog on a single channel in scan mode) — задає режим сканування віконного компаратора, 0 — всі канали, 1 — лише канал вказаний у AWDCH[4:0].
JAUTO(Automatic Injected Group conversion) - безперервне перетворення інжектованих каналів, 1 - дозволити, 0 - заборонити.
DISCEN(Discontinuous mode on regular channels) — дискретний(переривчастий) режим перетворення регулярних каналів, 1 — дозволити,0 - заборонити.
JDISCEN(Discontinuous mode on injected channels) - дискретний (переривчастий) режим перетворення інжектованих каналів, 1 - дозволити, 0 - заборонити.
DISCNUM[2:0](Discontinuous mode channel count) — кількість каналів регулярного перетворення. 000: 1 канал 001: 2 канали ….. 111: 8 каналів
DUALMOD[3:0](Dual mode selection) - визначає режим спільної роботи двох АЦП.
JAWDEN(Analog watchdog enable on injected channels) — підключення віконного компаратора до інжектованих каналів, 1 дозволити, 0 заборонити.
AWDEN(Analog watchdog enable on regular channels) - підключення віконного компаратора до регулярних каналів, 1 - дозволити, 0 - заборонити.
ADC_CR2(ADC control register 2)
ADON(A/D converter ON / OFF) - управління АЦП, 1 - дозволяє роботу АЦП, 0 - перериває перетворення/калібрування і переводить АЦП в режим зниженого енергоспоживання.
CONT(Continuous conversion) - режим перетворення, 0 - одноразовий, 1 - безперервний.
CAL(A/D Calibration) - запуск калібрування, 1 - запустити калібрування, 0 - встановлюється апаратно після завершення калібрування. Виробляти до включення АЦП, щоразу після подачі харчування.
RSTCAL(Reset calibration) - скидання значень калібрування, 1 - скинути, 0 - встановлюється після завершення скидання.
DMA(Direct memory access mode) - дозволяє роботу DMA, 1 - дозволяє, 0 - забороняє.
ALIGN(Data alignment) - вирівнювання даних, 1 - по правому краю, 0 - по лівому. Тут добре буде подивитися на картинку, так як при інжектованих перетвореннях з'являється ще й знак, на малюнку комірки зі знаком позначені як SEXT.

JEXTSEL[2:0](External event select for injected group) – вибір зовнішнього джерела запуску інжектованих каналів.

JEXTTRIG(External trigger conversion mode for injected channels) — дозволяô запуску інжектованого перетворення зовнішнім сигналом, 1 — дозволити, 0 — заборонити.
EXTSEL[2:0](External event select for regular group) — вибір зовнішнього джерела запуску регулярних каналів.

EXTTRIG(External trigger conversion mode for regular channels) — дозволяє запускати регулярного перетворення зовнішнім сигналом, 1 — дозволити, 0 — заборонити.
JSWSTART(Start conversion of injected channels) - запуск перетворення інжектованих каналів, 1 - запустити перетворення, скидається після запуску перетворення апаратно. Також для запуску JEXTSEL[2:0] джерелом запуску повинен бути обраний JSWSTART.
SWSTART(Start conversion of regular channels) - запуск перетворення регулярних каналів, 1 - запустити перетворення, скидається після запуску перетворення апаратно. Також для запуску EXTSEL[2:0] джерелом запуску повинен бути обраний SWSTART.
TSVREFE(Temperature sensor and VREFINT enable) — включає вимірювання температури та ІОН, 1 — увімкнути, 0 — вимкнути. Є тільки ADC1.
SMPR[2:1](Channel x Sample time selection). У цих регістрах задається кількість тактів між вибірками, окремо для кожного каналу. УSMPR1з 10 по 17 каналу.

Т = час між вибірками + 12.5 циклуВиходить мінімальний період вибірок дорівнюєТ = 12.5 + 1.5 = 14 тактівМаксимальна частота, з якою може тактуватися АЦП становить 14MHz, таким чином, мінімальний період вибірок дорівнює 1uS.
JOFRx(x=1..4)Компенсаційні регістри інжектованих каналів, в ці регістри можна записати значення, яке після закінчення перетворення буде відніматися з результату.
HTR та LTRВерхня та нижня межа віконного компаратора.
SQRх[3:1]– цей регістр можна умовно розділити на дві частини: бітиL[3:0]і бітиSQx[4:0].

А бітамиL[3:0]у регістрі SQR1 задається довжина регулярної послідовності 0000: 1 перетворення 0001: 2 перетворення …. 1111: 16 перетворень
Наприклад L = 0010 SQ1=00000, SQ2=00100, SQ3=00010 Означає, що довжина послідовності дорівнює 3 і виконуватися вона буде в наступному порядку 1-й, 5-й, 3-й канал.
JSQR— у цих регістрах задається довжина інжектованої послідовності та порядок перетворень. БітамиJL[1:0]задається довжина послідовності 00: 1 перетворення 01: 2 перетворення 10: 3 перетворення 11: 4 перетворення
Номер секціїJSQxвизначає номер у групі інжектованих перетворень, а число записане в секцію визначає номер каналу. description . Якщо кількість перетворень менше 4, наприклад 3, то порядок перетворення для запису ADC_JSQR[21:0] = 10 00011 00011 00111 00010 Буде 7-й,3-й,3 -й, а не 2-й, 7-й, 3-й.
JDR(x = 1. 4)Регістри даних інжектованих перетворень.
DRРегістр даних регулярних перетворень.
Нижче наведено приклад коду для запуску АЦП.