Функция оконного компаратора 


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



ЗНАЕТЕ ЛИ ВЫ?

Функция оконного компаратора



 

Помимо двух режимов преобразования, АЦП поддерживают функцию оконного компаратора, которая заключается в генерации прерывания при выходе результата преобразования за пределы заданных пользователем нижней и верхней границ (условия снижения и превышения напряжения, соответственно). Оконный компаратор может использоваться для мониторинга выбранного регулярного или инжектированного канала, или же всех регулярных или инжектированных каналов. Помимо мониторинга напряжения, функция оконного компаратора может использоваться в качестве детектора пересечения нуля.

 

 

Функция оконного компаратора предназначена для мониторинга одного или всех каналов на предмет выхода за пределы заданной пользователем верхней и нижней границ

 

Оконный компаратор

У каждого модуля АЦП имеется оконный компаратор, который генерирует прерывание при выходе контролируемого напряжения за заданные верхнюю и нижнюю границы.

 

Базовая конфигурация АЦП

 

 

Регистры АЦП разделены на шесть групп. Конфигурация работы АЦП осуществляется через регистры управления и статуса

 

АЦП имеет блоки регистров для настройки: индивидуального времени преобразования, регулярных и инжектированных последовательностей преобразований, значений смещения для инжектированной группы и пороговых значений оконного компаратора. Вся настройка АЦП выполняется через регистры управления и статуса.

 

Режим работы АЦП задается через два регистра управления. Ниже показан пример конфигурации преобразования одного канала с генерацией прерывания.

ADC1->CR2 = 0x005E7003; //Включение АЦП и разрешение  
непрерывного

преобразования

//установка длины последовательности

 
ADC1->SQR1 = 0x0000;  
равной 1

=

0x0000;

//выбор преобразования канала 0

 
ADC1->SQR2  
ADC1->SQR3 = 0x0001;

//перезапись бита разрешения работы

 
ADC1->CR2 |= 0x005E7003;  
ADC1->CR1 = 0x000100; //запуск преобразования регулярных  
каналов,        

//разрешение прерывания АЦП

 

NVIC->Enable[0] = 0x00040000; //разрешение прерывания АЦП

 

NVIC->Enable[1] = 0x00000000;

В процедуре обработки прерывания результат преобразования считывается из регистра результата и выводится на линии порта ввода-вывода.

void ADC_IRQHandler (void)

 {

GPIOB->ODR = ADC1->DR<<5; // копирование результата АЦП в ПВВ

}

Вместо процедуры обработки прерывания, для передачи результата АЦП в ПВВ можно использовать канал ПДП.

DMA_Channel1->CCR     = 0x00003A28;                 //кольцевой режим,

памяти отключено

  //инкрементирование УВВ и
   

//Задание адреса назначения - регистр данных ПВВ

DMA_Channel1->CPAR

= (unsigned int) 0x4001244C;

//Загрузка адреса источника в регистр памяти

DMA_Channel1->CMAR

= (unsigned int) 0x40010C0C;

DMA_Channel1->CNDTR = 0x1; //количество слов для
передачи  

//Разрешение ПДП передачи

DMA_Channel1->CCR |= 0x00000001;

 

У АЦП должна быть включена поддержка ПДП.

 

ADC1->CR2 |= 0x0100;

Режимы сдвоенных преобразований

АЦП микроконтроллеров STM32, как для недорогих МК общего назначения, является чрезвычайно многофункциональным. Не следует жалеть времени на изучение всех возможностей АЦП, т.к. после соответствующей настройки он может аппаратно выполнять те же действия, выполнения которых при использовании обычного модуля АЦП можно добиться только написанием дополнительного кода программы. Мало того, в семействе STM32 имеются МК с двумя интегрированными АЦП, которые поддерживают дополнительные режимы сдвоенных преобразований

 

 

 

 

В Режимы сдвоенных преобразований позволяют синхронизировать работу двух встроенных АЦП, предоставляя восемь дополнительных режимов. В режимах сдвоенных преобразований АЦП2 подчинен АЦП1, обеспечивая поддержку восьми дополнительных режимов преобразования.

Режимы одновременного преобразования инжектированных групп и одновременного преобразования регулярных групп

 

В первых двух режимах сдвоенных преобразований синхронизируется преобразование регулярной и инжектированной групп преобразования двух АЦП. Этот режим полезен при необходимости одновременного измерения двух физический величин, например, ток и напряжение.

Комбинированный режим одновременного преобразования регулярных/инжектированных групп

Данный режим предоставляет возможность синхронизировать преобразование, как регулярных, так и инжектированных групп обоих АЦП.

Режимы быстрых и медленных преобразований со смещением во времени

В режимах быстрых и медленных преобразований со смещением во времени

синхронизируется работа регулярных групп преобразования обоих АЦП, однако в отличие от режима непрерывных преобразований, здесь перед запуском преобразования АЦП1 вводится небольшая задержка. В режиме быстрого преобразования со смещением во времени эта задержка равна семи циклам синхронизации АЦП и исчисляется по отношению к моменту запуска преобразования АЦП2. В режиме медленных преобразований со смещением во времени задержка равна 14 циклам синхронизации АЦП. Каждый из этих режимов может использоваться для увеличения частоты дискретизации за счет комбинирования работы двух преобразователей.

 Режим поочередного запуска

 

 

 

В    режиме поочередного запуска аппаратный запуск АЦП1 вначале приведет к запуску преобразований инжектированной группы АЦП1, а затем - к запуску преобразований инжектированной группы АЦП2.

Комбинирование режима одновременного преобразования регулярной группы и режима поочередного запуска

 

Режим поочередного запуска можно скомбинировать с режимом одновременного преобразования регулярных групп. Вследствие этого, преобразования регулярных групп обоих АЦП будут выполняться синхронно, а инжектированных групп - поочередно.

Комбинирование режима одновременного преобразования инжектированной группы и режима со смещением во времени.

 

 

В последнем режиме преобразования преобразование регулярных групп обоих АЦП выполнятся   со смещением во времени, а инжектированных - одновременно.

АЦП в линейке STM32F10x.

Каналы АЦП микроконтроллеров STM32 делятся на две группы: регулярные каналы (regular) и инжектированные (injected). Количество регулярных каналов для одного АЦП равняется 18, среди них 16 внешних и два внутренних — опорное напряжение и температурный датчик. Количество приоритетных каналов равняется четырем. Регулярные каналы подразумевают сохранение результатов преобразования через DMA-контроллер в памяти микроконтроллера, а инжектированные каналы имеют собственные регистры для хранения результата. Существует возможность настраивать работу каналов АЦП в произвольном порядке, несколько раз преобразовывать подряд одни и те же каналы, использовать внешние и программные события для старта преобразования.

Особенность АПЦ семейства STM32 — многообразие режимов как в одиночном, так и в парном режиме двух АЦП с различными конфигурациями регулярных и инжектированных каналов. В общем случае возможны два варианта: независимая и парная работа. В семействе STM32 также существует вариант работы АЦП в качестве аналогового сторожевого таймера, т.е. задаются верхний и нижний пороги чувствительности, и происходит отслеживание сигнала в фактически созданном окне. При выходе сигнала за один из порогов генерируется прерывание.

 

- есть два АЦП (ADC1 и ADC2)

регулярные каналы (regular channels)  У регулярных каналов всего одна ячейка на всех. То есть если каналы РА0, РА1, РА2, РА3 настроить как регулярные, то результат работы каждого канала будет записываться в одну и ту же ячейку, затирая предыдущие данные. Своевременно забирать результаты нам поможет DMA.

инжектированные (Injected channels) Любой аналоговый вход можно настроить как инжектированный. Инжектированных каналов может быть не больше четырёх (РА0, РА1, РА2, РА3), результаты будут сохранены в четыре разные ячейки.

Настройте тактирование ADC (ADC Prescaler)

Частота АЦП не должна превышать 14МГц. 1.5 такта (заряд конденсатора)+12.5 тактов (алгоритм расчета)=14 тактов. При частоте 12 МГц получается примерно 1,5 микросекунды на 1 измерение.

АЦП после завершения преобразования отдает сырые данные в регистр DR, который содержит значение от 0 до 4095 (212). Чтобы пересчитать данное значение в напряжение нужно умножить его на шаг квантования. В моем случае напряжение на выводе VDDA, с которого АЦП берет опору, составляло 3,3072В и соответственно шаг равен 3,3072В / 4096 = 0,000807В, я его округлил до 0,0008. Чтобы получить напряжение на входе устройства, полученное напряжение нужно умножить на коэффициент делителя напряжения, в моем случае резистор в верхнем плече 100 кОм, а в нижнем 4,7 кОм, что дает делитель 22,2765. Исходя из этого напряжение на входе устройства, то есть напряжение АКБ, находится с помощью формулы:
float voltageReference = 0.0008;

float voltageDivider = 22.2765;

adcVoltageResult = (float)adcData * voltageReference * voltageDivider;

Независимая работа

1. Одноканальный (Single-channel)

2. Многоканальный (Scan)

3. Одноканальный продолжительный (Single continuous)

4. Многоканальный продолжительный (Scan continuous)

5. Прерывистый (Discontinuous)

 

Парная работа

1. Одновременный для обычных и приоритетных каналов
(Regular/Injected simultaneous).

2. Быстрый попеременный
(Fast interleaved).

3. Медленный попеременный
(Slow interleaved).

4. Переменный по триггеру
(Alternate trigger).

5. Комбинированный одновременный режим для регулярных/инжектированных каналов (combined regular/injected simultaneous mode). Происходит преобразование обоих групп каналов. Но особенность заключается в том, что инжектированная группа каналов может прервать регулярную группу (рис. 1). Данный режим может быть полезен в системах с критичным временем реакции на измерение каких-либо параметров, например — в управлении двигателями. При завершении преобразования группы останавливаются все остальные преобразования обеих групп, и результаты обработки сохраняются в регистрах данных каждого АЦП.

6. Комбинированные одновременный регулярный и переменный по триггеру режимы (combined regular simultaneous + alternate trigger mode). Регулярная группа каналов может быть прервана поочередным запуском инжектированных каналов. При завершении преобразования группы останавливаются все остальные преобразования обеих групп, и результаты обработки сохраняются в регистрах данных каждого АЦП.

    7. Комбинированные инжектированный одновременный режим и режим со смещением каналов (combined regular simultaneous            + alternate trigger mode). Преобразование регулярных каналов осуществляется со смещением по времени и происходит одновременное преобразование двух групп инжектированных каналов.

Немаловажная часть — задание времени преобразования для каждого канала. Всего можно задать восемь значений времени для каждого канала в диапазоне 1,5…239,5 циклов тактирования модуля АЦП.

Независимая работа

Этот режим имеет место, когда в составе МК имеется только один АЦП, или когда несколько АЦП настроены на работу без взаимодействия друг с другом. В этом случае возможны следующие режимы работы.

1. Одноканальный (Single-channel)

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

 

2. Многоканальный (Scan)

В этом режиме возможно сконфигурировать АЦП для выполнения определенного количества (например, 16) последовательных преобразований значений из различных каналов в любой последовательности (например, Канал1-Канал7-Канал12-Канал12-Канал5…). Делается это с помощью записи в специальный регистр последовательности номеров каналов в том порядке, в котором мы желаем осуществить преобразование. Время преобразования также настраивается отдельно для каждого канала. После обработки указанного числа каналов (от 1 до 16) АЦП останавливается. Этот режим может быть полезен, например, при периодическом оценивании среды или обстановки с помощью нескольких датчиков.

 

3. Одноканальный продолжительный (Single continuous)

Этот режим аналогичен первому, за тем исключением, что после окончания однократного преобразования АЦП не останавливается, а продолжает выбирать отсчеты из одного определенного канала. Широко применяется при непрерывном мониторинге аналоговых сигналов. Для хранения результатов всех обычных каналов выделен один и тот же регистр. Поэтому перед получением следующего значения необходимо позаботиться о сохранении в памяти предыдущего (например, с помощью контроллера DMA).

 

4. Многоканальный продолжительный (Scan continuous)

То же самое что многоканальный (Scan), только АЦП не останавливается после опроса всех каналов, а снова продолжает выбирать отсчеты, начиная с первого.

 

5. Прерывистый (Discontinuous)

Особенность этого режима в том, что будут просканированы не все каналы за раз, а лишь их некоторое заранее установленное число. В следующий раз при наступлении события, запускающего преобразование, будет просканирована следующая группа каналов и т.п.

uint16_t offsetVoltage = 72; float voltageReference = 0.0008; float voltageDivider = 22.2765; adcVoltageResult = ((float)(adcData+offsetVoltage))*voltageReference*voltageDivider;

Парная работа

Необходимо отметить, что парный режим работы возможен, если в составе МК имеются два или более АЦП. Это значительно расширяет возможности по оцифровке сигналов и добавляет несколько более сложных режимов работы.

После этих несложных манипуляций мое устройство начало точно измерять напряжение и данные перестали плавать. До этого же момента оно врало на 72 * 0,0008В * 22,2768 = 1,28В, что в случае контроля одного АКБ очень критично. Свинцовый АКБ конечно не взрывается как Li-ion, но все равно быстро выходит из строя, особенно если его разряжать постоянно не до 10.2В, а до 8,92В.

 

1. Одновременный для обычных и приоритетных каналов
(Regular/Injected simultaneous)

При наступлении внешнего события первый АЦП будет сканировать каналы начиная с 0 до 15 для регулярных каналов или с 0 до 3 для инжектированных, а второй — наоборот, с 15 до 0 или с 3 до 0. Таким образом, каждый канал за тот же период времени будет обработан дважды. Необходимо обеспечить, чтобы период между событиями, запускающими преобразование, был как минимум в два раза больше, чем время, необходимое на само преобразование. Нужно вовремя извлекать результаты из регистра данных АЦП в оперативную память. Причем результат преобразования для АЦП2 будет содержаться в старшем полуслове регистра данных, а для АЦП1 — в младшем.

 

2. Быстрый попеременный
(Fast interleaved)

Доступен только для одного выбранного регулярного канала. При наступлении внешнего события АЦП2 стартует немедленно, а АЦП1 — с задержкой в семь тактов. Если установлен продолжительный (continuous) режим, то такая последовательность будет повторяться далее, что дает возможность удвоить частоту семплирования входного сигнала.

 

3. Медленный попеременный
(Slow interleaved)

Все как в предыдущем режиме, только АЦП1 стартует с задержкой в 14 тактов, а после окончания первого преобразования АЦП2 тоже выдержит задержку 14 тактов перед повторным стартом.

 

4. Переменный по триггеру
(Alternate trigger)

Доступен только для инжектированных каналов. При наступлении внешнего события АЦП1 начинает последовательно преобразовывать все инжектированные каналы. При наступлении следующего внешнего события АЦП2 начинает делать то же самое. Если установлен прерывистый (discontinuous) режим, то будет преобразован только один следующий канал на каждое наступившее событие. Этот режим позволяет получить два значения выборки, максимально близкие друг к другу (вплоть до 1…1,5 такта).

 

5. Комбинированный одновременный режим для регулярных/инжектированных каналов (combined regular/injected simultaneous mode)

Происходит преобразование обоих групп каналов. Но особенность заключается в том, что инжектированная группа каналов может прервать регулярную группу (рис. 1).

 

 

Рис. 1. Комбинированный одновременный режим

 

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

 

6. Комбинированные одновременный регулярный и переменный по триггеру режимы (combined regular simultaneous + alternate trigger mode)

Регулярная группа каналов может быть прервана поочередным запуском инжектированных каналов (рис. 2.). При завершении преобразования группы останавливаются все остальные преобразования обеих групп, и результаты обработки сохраняются в регистрах данных каждого АЦП.

 

 

Рис. 2. Комбинированные одновременный и переменный по триггеру режимы

 

7. Комбинированные инжектированный одновременный режим и режим со смещением каналов (combined regular simultaneous + alternate trigger mode)

Преобразование регулярных каналов осуществляется со смещением по времени и происходит одновременное преобразование двух групп инжектированных каналов (рис. 3).

 

 

Рис. 3. Комбинированные инжектированный одновременный режим и режим со смещением каналов

 

Заключение

Несомненно, множество режимов работы совместно с высокими собственными параметрами обеспечивают отличную перспективу применения 32-битных микроконтроллеров компании ST. Причем с каждой следующей серией заметна тенденция к дальнейшему повышению как частот семплирования, так и разрядности встроенных в МК АЦП. По предварительным данным, в новых линейках STM32 на ядре ARM Cortex-M4 будет доступен 16-битный сигма-дельта АЦП с дифференциальными входами. Это делает его не просто дополнением для приблизительной оценки каких-либо параметров, но и полноценным измерительным инструментом.

АЦП в STM32.

Разрядность 12 бит

Опорное напряжение от 2.4 до 3.6 Вольта

Скорость оцифровки до 1MSPS

18 каналов(16 внешних и 2 внутренних – опорное напряжение и температурный датчик)

Прерывание по окончании регулярных и инжектированных преобразований

Прерывание от оконного компаратора(Analog watchdog)

Отправка данных по DMA для регулярных преобразований

Одиночное и непрерывное преобразование

Режим сканирования каналов по заданному списку

Самокалибровка

Выравнивание результата по выбранному краю

Время преобразования –12.5 цикла, время захвата – программируемое

 

Режим регулярных преобразований.
В этом режиме задаётся группа от 1 до 16 каналов, обработка которых производится последовательно, а результат помещается в один-единственный 12-разрядный регистр, подразумевается, что данные будут сохраняться с помощью DMA. Ещё раз хотелось бы подчеркнуть, что нельзя просто выбрать один канал, надо задать группу, а в ней выбрать количество каналов. Преобразования могут быть циклическими и периодическими, запускаться по таймеру или внешнему прерыванию.

Режим инжектированных преобразований.
В последовательность инжектированных преобразований может входить до 4 каналов, они имеют собственные регистры для сохранения результата. Сразу после запуска инжектированных преобразований, приостанавливается оцифровка регулярных, затем по окончании инжектированных, возобновляется оцифровка регулярных. В регистры компенсации можно записать число, которое будет автоматически вычитаться из результата преобразования, если в результате вычитания получается отрицательное число, регистр инжектированного преобразования дополняется знаком.

Оконный компаратор.
В специальных регистрах ADC_HTR и ADC_LTR мы задаём верхнее и нижнее значение результата преобразования, при выходе за которые устанавливается флаг AWD.

Для работы с АЦП в STM32 выделен 1 регистр статуса — SR и два регистра настройки CR1, CR2.

SR (Status Register)

AWD (Analog watchdog flag) — флаг оконного компаратора, устанавливается в 1, когда результат преобразования пересёк ADC_HTR и ADC_LTR.

Регистр ADC_SR. Статусный регистр. Тут хранятся флаги – например, флаг, сигнализирующий об окончании преобразования.

 

Регистр ADC_CR1. Контрольный регистр. Тут всякие биты, разрешающие или запрещающие те или иные события. Например, включение Analog Watchdog для регулярных каналов, аналогично для инжектированных, включение различных прерываний – все это сидит здесь, в этом регистре.

 

Регистр ADC_CR2. Еще один контрольный регистр. А что вы хотели? Много режимов, нужно больше контроля) Здесь спрятались биты, отвечающие за использование АЦП совместно с DMA, а также за запуск преобразования от внешнего источника. Кроме того, тут можно разрешить или запретить использование датчика температуры. Важный бит – SWSTART, который запускает преобразование регулярных каналов.

 

Регистры ADC_SMPRx отвечают за время выборки. В ADC_SQR и ADC_JSQR выбираем номера нужных нам каналов. Про регистры для Analog Watchdog уже упоминалось ранее. Подробнее в даташите)

 

И, наконец, регистр данных – ADC_DR – там и только там мы будем забирать наши драгоценные, полученные с огромным трудом результаты.

EOC (End of conversion) – флаг окончания группового преобразования, устанавливается в 1 по окончании регулярного или инжектированного преобразования.

JEOC (Injected channel end of conversion) — флаг окончания инжетированного преобразования, устанавливается в 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-й канал.

 

 

В SMPR2 с 0 по 9-й канал.

 

Длительность преобразования составляет 12.5 цикла, для того чтобы найти период выборок надо к длительности преобразования прибавить значение SMPx[2:0].

 

Т = время между выборки + 12.5 цикла
Получается минимальный период выборок равен
Т = 12.5 + 1.5 = 14 тактов
Максимальная частота, с которой может тактироваться АЦП составляет 14MHz, таким образом, минимальный период выборок равен 1uS.

JOFRx(x=1..4)
Компенсационные регистры инжектированных каналов, в эти регистры можно записать значение, которое по окончании преобразования будет вычитаться из результата.

HTR и LTR
Верхний и нижний предел оконного компаратора.

SQRх[3:1] – этот регистр можно условно разделить на две части: биты L[3:0] и биты SQx[4:0].

 

 

 

Номер секции SQx определяет номер в группе регулярных преобразований, а число записанное в секцию определяет номер канала.
Узнать какому выводу соответствует канал можно из даташита в разделе Pinouts and pin description.

 

 

А битами 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 определяет номер в группе инжектированных преобразований, а число записанное в секцию определяет номер канала.
Узнать какому выводу соответствует канал можно из даташита в разделе Pinouts and pin description.
Если количество преобразований меньше 4, например 3, то порядок преобразования для записи
ADC_JSQR[21:0] = 10 00011 00011 00111 00010
Будет 7-й,3-й,3-й, а не 2-й,7-й,3-й.

JDR(x = 1...4)
Регистры данных инжектированных преобразований.

DR
Регистр данных регулярных преобразований.

Ниже пример кода для запуска АЦП.

#include "stm32f10x.h"           

 

unsigned temp;

 

void ADC1_2_IRQHandler(void)

{

  if(ADC1->SR & ADC_SR_EOC)

{

//записываем результат в переменную

        temp =ADC1->DR;

}

   //сбрасываем все флаги в регистре статуса

ADC1->SR=0;

}

int main(void)

{

//разрешаем тактирование порта А

RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

   //настраиваем вывод для работы АЦП в режим аналогового входа

GPIOA->CRL &= ~GPIO_CRL_CNF1;

//так как тактовая частота АЦП не должна превышать 14MHz

RCC->CFGR |= RCC_CFGR_ADCPRE_DIV8;

//разрешаем тактирование АЦП

RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;

   //в комментах подсказали, что в 17 ревизии указано, что перед калибровкоц АЦП надо включить

   ADC1->CR2 = | ADC_CR2_ADON;

   //запускаем калибровку и ждем пока завершится, в симуляторе это не работает, в железе делать обязательно

  /* ADC1->CR2 |= ADC_CR2_CAL;

    while (ADC1->CR2 & ADC_CR2_CAL)*/

// разрешаем прерывание от АЦП

NVIC->ISER[0] |= NVIC_ISER_SETENA_18;

//для первого канала между выборками 7.5 цикла

ADC1->SMPR2 = ADC_SMPR2_SMP1_0;

//разрешаем прерывания по окончанию преобразования

ADC1->CR1 = ADC_CR1_EOCIE;

//разрешаем запуск от SWSTAR, разрешаем работу АЦП, разрешаем запуск внешним сигналам, непрерывное преобразования

ADC1->CR2 = ADC_CR2_EXTSEL | ADC_CR2_EXTTRIG | ADC_CR2_CONT;

//длина последовательности равна 1, первый канал

ADC1->SQR1 = 0x00000000;

ADC1->SQR2 = 0x00000000;

ADC1->SQR3 = 0x00000001;

//запускаем АЦП

ADC1->CR2 |= ADC_CR2_SWSTART;

while(1)

{

       /*остановить проект, в командную строку записать include sine.ini

       затем записать ADC1_IN1_Sine ()*/

}

}

 

Понятно, что проверить работает ли проект, в симуляторе не получится, так как на вход АЦП ни чего не приходит. Также возникает вопрос, что за строчки закомментированы в цикле while. Проверить проект в симуляторе можно, а закомментированые строчки напоминают как это сделать.

Для начала создаём текстовый документ, записываем в него следующий код и сохраняем его с названием sine.ini

 

SIGNAL void ADC1_IN1_Sine (void) {

float volts;   // peak-to-peak voltage

float frequency; // output frequency in Hz

float offset;  // voltage offset

float duration; // duration in Seconds

float val;

long i, end;

  

volts = 1.5;

offset = 1.5;

frequency = 50;

duration = 0.01;

 

printf ("Sine Wave Signal on AD Channel 1.\n");

 

end = (duration * 1000000000);

for (i = 0; i < end; i++) {

val = __sin (2 * 3.1415926 * frequency * (((float) STATES) / STCLK));

ADC1_IN1 = (val * volts) + offset;

swatch (0.00001);           // in 10 uSec steps

}

}

DEFINE BUTTON "ADC1_IN1 Sin","ADC1_IN1_Sine()"

 

Перемещаем sine.ini в папку проекта, после запуска отладки выполняем то, что написано в закомментированной строчке, в итоге на входе АЦП получаем синус, теперь данные АЦП будут меняться.

 

ADC (analog to digital converter) — это аналого-цифровой преобразователь (АЦП). Модули ADC предназначены для оцифровки аналоговых сигналов, то есть позволяют измерять аналоговые величины и представлять результаты измерений в цифровой форме. В stm32 таких модулей может быть до 3-х штук.

Фактически ADC контроллера stm32 умеет измерять только напряжение и только в диапазоне от Vref- до Vref+, при том, что эти величины не могут выходить за пределы 0..+Vdd. В корпусах c количеством ног <100 внешние выводы Vref- и Vref+ вообще отсутствуют, а внутри аппаратно соединены с выводами GND и Vdd. Так что все измеряемые величины придётся каким-то образом преобразовывать в форму напряжения и вталкивать в диапазон 0..+3,3В. Для этого можно использовать самые разные схемы - делители напряжения, токоизмерительные резисторы, усилители на операционниках и так далее. В рамках этой статьи такие способы рассматриваться не будут, поскольку это совершенно отдельная тема. Сейчас же мы сосредоточимся на возможностях и особенностях самих модулей АЦП.

Возможности и особенности модулей ADC контроллеров stm32:

· разрешение 12 бит

· скорость оцифровки до 1 мкс при частоте 56 МГц или до 1,17 мкс при частоте 72МГц

· до 18 физических каналов (16 внешних и 2 внутренних)

· программируемое время сэмплирования для каждого канала

· две группы — обычная (до 16 каналов) и инжектированная (до 4-х каналов)

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

· прерывания по различным событиям

· режим одиночных или непрерывных преобразований

· режим сканирования заданного списка каналов

· самокалибровка

· автоматическое выравнивание результатов к старшему или младшему биту регистра

· прерывистый режим (оцифровка подгруппы каналов по триггеру)

· двойной режим (спаренная работа двух модулей ADC)

· использование DMA



Поделиться:


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

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