STM32 для начинающих. Урок 7. АЦП(ADC) STM32.

Автор: | 06.09.2016

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

Преобразование входного сигнала происходит относительно какого либо опорного напряжения (Vref). То есть, при подключении опорного в 3 вольта, мы можем измерять напряжения в диапазоне от 0 до 3 вольт. Данный диапазон делится в соответствии с разрядностью АЦП. При использовании 10 разрядного АЦП, диапазон делится на 210=1024, при использовании 8 разрядного на 28 = 256 и так далее. Тем самым мы можем закодировать 1024, 256 и так далее состояний сигнала. Разумеется чем выше разрядность, тем выше точность результатов измерений (в идеальных условиях).

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

Почитать о АЦП ещё можете здесь

АЦП микроконтроллера STM32F303VCT6, 12 разрядный. Разумеется, вы можете выбрать меньшую разрядоность, согласно Вашей задаче.

Как и всю остальную периферию, АЦП микроконтроллера STM32 необходимо настроить. За настройку АЦП отвечает структура ADC_InitTypeDef. Рассмотрим её поля подробнее.

  • ADC_ContinuousConvMode — Выбираем режим однократного или непрерывного преобразования. В режиме непрерывного преобразования по окончанию текущего преобразования, сразу же вызывается следующее преобразование, то есть, АЦП работает непрерывно. При работе в режиме однократного преобразования, последующее преобразование необходимо запускать соответствующей командой.
  • ADC_Resolution — Данное поле устанавливает разрешение работы АЦП .
  • ADC_ExternalTrigConvEvent — Выбор события вызывающего начало работы АЦП.
  • ADC_ExternalTrigEventEdge — Выбор фронта входного сигнала, при котором АЦП начнет работу.
  • ADC_DataAlignУказывает выравнивание результатов преобразования АЦП.
  • ADC_OverrunMode — Режим перезаписи данных.
  • ADC_AutoInjMode — Включает/Выключает инжектированное групповое преобразование, после преобразования группы регулярных каналов.
  • ADC_NbrOfRegChannel — Указывает число каналов, с которыми ведется работа.
Читайте также  STM32 для начинающих. Урок 6. DMA STM32.

Следующий код демонстрирует настройку и работу АЦП микроконтроллера STM32:

 

Читайте также  STM32 для начинающих. Урок 4. Прерывания STM32.

За инициализацию АЦП отвечает функция Init_ADC(). В данной функции сначала инициализируется вход PC1, который соединен с 7 каналом АЦП микроконтроллера STM32F303VCT6.Подробнее о GPIO можете почитать в соответствующем уроке. После настройки входа, заполняется структура ADC_InitTypeDef. Затем командой ADC_RegularChannelConfig(ADC1,ADC_Channel_7,1,ADC_SampleTime_7Cycles5) мы настраиваем 7 канал АЦП, выбрав время выборки 7.5 циклов.

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

После инициализации АЦП командой ADC_Init(ADC1,&adc1), настраиваются соответствующие прерывания.

Затем в цикле while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_RDY)), мы ожидаем готовности АЦП. Как только установится флаг RDY(Ready), командой ADC_StartConversion(ADC1) запускается преобразование.

В прерывании ADC1_2_IRQHandler, проверяется установлен ли флаг окончания преобразования EOC(End Of Conversation), и, если он установлен, командой ADC_GetConversionValue(ADC1) получаем результат преобразования. После этого необходимо очистить бит прерывания командой ADC_ClearITPendingBit(ADC1,ADC_IT_EOC).

После записи прошивки, запустив режим отладки, получаем:

Если у Вас ещё остались какие либо вопросы по работе АЦП микроконтроллера STM32, вы можете оставить их ниже, в комментариях. Будем рады Вашей критике!

На сегодня всё,спасибо за внимание!

Другие уроки цикла.


Любое копирование, воспроизведение, цитирование материала, или его частей разрешено только с письменного согласия администрации MKPROG.RU. Незаконное копирование, цитирование, воспроизведение преследуется по закону!

STM32 для начинающих. Урок 7. АЦП(ADC) STM32.: 1 комментарий

  1. Уведомление: STM32. Bluetooth Android. HC-05. | MKPROG.RU

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *