Прерывистый режим опроса каналов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Прерывистый режим опроса каналов



Ещё одна возможность, предоставляемая модулями ADC, — прерывистый режим (discontinuous mode). Для обычной и инжектированной групп этот режим задаётся отдельно битами DISCEN и JDISCEN соответственно (в библиотеке StdPeriph для этого есть функции ADC_DiscModeCmd и ADC_InjectedDiscModeCmd). Прерывистый режим позволяет разделить каждую группу каналов на подгруппы и по событиям триггера по очереди выполнять оцифровку этих подгрупп. Размер подгруппы для обычной группы задаётся битами DISCNUM[2:0] регистра ADC_CR1 (в библиотеке StdPeriph — функцией ADC_DiscModeChannelCountConfig), для группы инжектированных каналов размер подгруппы равен 1 (то есть просто все каналы перебираются по очереди). Чтобы было понятнее как это устроено — приведу примеры из официальной доки:

· 1. Оцифровка обычных каналов. Пусть у нас в регистрах ADC_SQRx прописаны каналы 0, 1, 2, 3, 6, 7, 9, 10, длина списка обычных каналов установлена равной 8, выбран прерывистый режим (discontinuous mode), а размер подгуппы установлен равным 3. В этом случае каждое срабатывание триггера группы обычных каналов будет запускать оцифровку очередной подгруппы:

o 1 срабатывание триггера: оцифровываются каналы 0, 1, 2. После оцифровки каждого канала устанавливается бит EOC.

o 2 срабатывание триггера: оцифровываются каналы 3, 6, 7. После оцифровки каждого канала устанавливается бит EOC.

o 3 срабатывание триггера: оцифровываются каналы 9, 10 (в этой подгруппе всего 2 канала, поскольку на этом заканчивается общий список). После оцифровки каждого канала устанавливается бит EOC.

o 4 срабатывание триггера: оцифровка списа каналов начинается сначала, снова оцифровываются каналы 0, 1, 2. После оцифровки каждого канала устанавливается бит EOC.

· 2. Оцифровка инжектированных каналов. Пусть у нас в регистре ADC_JSQR прописаны каналы 1, 2, 3, длина списка инжектированных каналов установлена равной 3 и выбран прерывистый режим (discontinuous mode). В этом случае каждое срабатывание триггера для группы инжектированных каналов будет запускать оцифровку очередной подгруппы:

o 1 срабатывание триггера: оцифровывается канал 1.

o 2 срабатывание триггера: оцифровывается канал 2.

o 3 срабатывание триггера: оцифровывается канал 3. После оцифровки канала устанавливаются биты EOC и JEOC.

o 4 срабатывание триггера: оцифровка списа каналов начинается сначала, снова оцифровывается канал 1.

Режим калибровки

Все модули ADC имеют режим автоматической самокалибровки, которую рекомендуется проводить каждый раз после включения питания. Делается это очень просто:

· Сначала нужно очистить регистры калибровки, установив в единицу бит RSTCAL регистра ADC_CR2 (в библиотеке StdPeriph для этого есть функция ADC_ResetCalibration). После окончаниия процедуры сброса бит RSTCAL аппаратно сбросится в ноль.

· Далее нужно запустить самокалибровку, установив в единицу бит CAL в регистре ADC_CR2 (в библиотеке StdPeriph для этого есть функция ADC_StartCalibration). После окончаниия процедуры калибровки бит CAL аппаратно сбросится в ноль.

Процедуру калибровки нельзя запускать ранее чем через два такта после включения модуля ADC. После окончания калибровки в регистре ADC_DR сохраняется калибровочный код (калибровочное значение).

Предельный компаратор

В каждом модуле ADC есть такая штука как предельный компаратор (analog watchdog). Он может отслеживать, не выходит ли результат оцифровки за установленные границы. Если результат получился больше верхней границы или меньше нижней границы, то компаратор автоматически устанавливает бит AWD в регистре ADC_SR. Границы компаратора задаются в специальных регистрах — ADC_HTR и ADC_LTR (в библиотеке StdPeriph для этого есть функция ADC_AnalogWatchdogThresholdsConfig). Для компаратора не важно как настроено выравнивание результата оцифровки, он в любом случае использует для сравнения только 12 значащих бит.

Предельный компаратор можно настроить для отслеживания результата преобразования одного или сразу группы каналов. Режим работы определяется битами AWDSGL, AWDEN и JAWDEN (в StdPeriph для этого есть функция ADC_AnalogWatchdogCmd). Ниже приведена таблица различных режимов.

Двойной режим подробно описывать не буду, и так статья получается очень длинной. Лучше как-нибудь потом отдельно про это напишу, тем более там тоже много всяких подрежимов. Скажу только, что в двойном режиме можно различными способами синхронизировать работу сразу двух АЦП для ускорения оцифровки большого количества каналов.

Регистры

ADC_SR — регистр статуса. Младшие 5 бит этого регистра позволяют отслеживать состояние и различные события модуля ADC. Все эти биты устанавливаются аппаратно, а сбрасываются программно, записью в них нуля.

ADC_CR1 — регистр настройки.

ADC_CR2 — регистр настройки.

ADC_SMPR1, ADC_SMPR2 — регистры настройки времени сэмплирования для каждой линии ввода.


ADC_JOFRx (x=1..4) — регистры смещения для инжектированных каналов. Записанные в эти регистры значения будут вычтены из сырых результатов оцифровки перед записью результатов в регистры данных.

ADC_HTR — регистр верхней уставки предельного компаратора.

ADC_LTR — регистр нижней уставки предельного компаратора.

ADC_SQRx — регистры задания списка каналов для обычной группы, а также определения размера этой группы.



ADC_JSQR — регистр задания списка каналов для инжектированной группы, а также определения размера этой группы.

ADC_JDRx — регистры данных каналов инжектированной группы. Младшие 16 бит каждого регистра содержат выровненные к старшему или младшему биту результаты оцифровки. Поскольку для инжектированной группы каналов результаты вычисляются вычитанием смещения из сырых значений, то они могут быть как положительными, так и отрицательными. В связи с этим, для каждого канала этой группы результат занимает 13 бит (старший бит результата отводится под знак).

ADC_DR — регистр данных каналов обычной группы. Младшие 16 бит этого регистра содержат выровненные к старшему или младшему биту результаты оцифровки обычного канала обработанного последним. Результат беззнаковый и занимает 12 бит выровненных влево или вправо. Если включен двойной режим, то старшие 16 бит регистра данных ADC1 содержат результат работы ADC2.

 

 

Вместо предисловия.

Таймер – одна из самых полезных вещей в микроконтроллере и основная его задача – отсчитывание точных интервалов времени. На отладочной плате STM32F4 Discovery установлен микроконтроллер STM32F407VG, который имеет следующие таймеры:

· Basic timers (TIM6, TIM7) – самый простой таймер, который умеет только генерировать прерывания в заданный промежуток времени, но при этом очень легко настраивается и управляется.

· General-purpose timers (TIM2-TIM5, TIM9-TIM14) – более продвинутый таймер, позволяющий генерировать ШИМ, считывать состояние ног, обрабатывать данные от энкодера и т.д.

· Advanced-control timers (TIM1, TIM8) – самый продвинутый таймер, может использоваться как трехфазный ШИМ генератор.

ТМR2 - 8-разрядный таймер с программируемыми предделителем и выходным делителем, 8-разрядным регистром периода РR2, ТМR2 может быть опорным таймером для ССР модуля в ШИМ режиме. Регистры ТМR2 доступны для записи/чтения и очищаются при любом виде сброса.

 

Модуль ТМR3 (18 серия)

16 – разрядный таймер-счетчик.

Вторичный генератор тактового сигнала

Модуль Р WR Т

 

Таймер включения питания обеспечивает задержку в 72мс (номинальное значение) по сигналу схемы сброса РОR. Таймер включения питания работает от внутреннего RС генератора и удерживает микроконтроллер в состоянии сброса по активному сигналу от РWRТ. Задержка РWRТ позволяет достигнуть напряжению VDD номинального значения.

Модуль О S Т

Таймер запуска генератора обеспечивает задержку в 1024 такта генератора (вход OSС1) после окончания задержки от РWRТ (если она включена). Это гарантирует, что частота кварцевого/керамического резонатора стабилизировалась. Задержка OSТ включается только в режимах НS, ХТ и LР тактового генератора после сброса РОR или выхода микроконтроллера из режима SLЕЕР.

 

Модуль WD Т

Встроенный сторожевой таймер WDТ (Watch Dog Timer) работает от отдельного RС генератора, не требующего внешних компонентов. Это позволяет работать сторожевому таймеру WDТ при выключенном тактовом генераторе (выводы OSC1, OSC2) в SLЕЕР режиме микроконтроллера. В нормальном режиме работы при переполнении WDТ происходит сброс микроконтроллера. Если микроконтроллер находится в SLЕЕР режиме, переполнение WDТ выводит его из режима SLЕЕР с продолжением нормальной работы.

 

 



Поделиться:


Последнее изменение этой страницы: 2019-12-14; просмотров: 151; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.42.168 (0.013 с.)