Аналого цифровой преобразователь (далее АЦП) является важным периферийным устройством в микроконтроллере т.к. аналоговые сигналы, наряду с цифровыми, часто используются. Примеров ситуаций при которых используются аналоговые сигналы можно привести много. Это например может быть какой нибудь датчик температуры, напряжения, токовый шунт, джойстик, резистивная кнопка и т.д. АЦП микроконтроллеров плохи тем что напряжения подаваемые на пин микроконтроллера часто небольшие (особенно для STM32 это 3.3В) а также тем что они могут уступать по быстродействию и/или разрядности специализированным микросхемам. Первый недостаток устраняется использованием резистивного делителя напряжения а второй тем что это не всегда имеет большое значение а также большим количеством настроек аппаратного АЦП данного микроконтроллера для управления точностью, скоростью и количеством каналов. Начать изучение АЦП микроконтроллеров STM32 желательно с чего нибудь простого. Например можно подключить к нему какой нибудь простой потенциометр и попытаться определить напряжение на среднем его выводе а результат выводить например по uart на пк и смотреть его в мониторе последовательного порта среды разработки Arduino IDE. Для начала нужно выбрать пин микроконтроллера к которому можно подключить средний вывод потенциометра. Для этого можно глянуть таблицу в даташите:
Если выбрать пин PA0 то дальше настройка потенциометра будет немного проще чем если выбрать другой пин. Т.к, при таком варианте, не нужно будет настраивать регистры SQR. Схема может быть например такой:Сопротивление резистора может быть другим но главное чтобы оно не было слишком низким чтобы не сделать слишком большую нагрузку на цепи питания. Конденсатор нужен для уменьшения погрешности измерения путем ослабления помех. Как обычно для периферийных устройств для АЦП нужно включить тактирование, но только теперь помимо этого нужно установить делитель частоты т.к. АЦП не может работать на частоте более 14МГц. Чтобы например сделать деление на 8 нужно записать единицы в 14й и 15й биты регистра конфигурации тактирования.Далее, как обычно (см. предыдущие уроки), настраивается тактирование периферийных устройств (GPIO, АЦП и UART) а также режимы работы GPIO (в данном случае пин PA0 настраивается на альтернативный вход) и UART1 настраивается на передачу.Далее если бы использовался бы пин не PA0 а другой то тогда бы пришлось настраивать регистры SQR. В данном микроконтроллере этих регистров 3 штуки ADC_SQR1, ADC_SQR2 и ADC_SQR3. В биты 20-23 регистра ADC_SQR1 записывается количество измерений за один проход. АЦП в данном микроконтроллере не один и каналов АЦП больше одного а также АЦП дает погрешность для уменьшения которой может понадобиться усреднение значения с некоторого количества измерений. В остальные биты данных регистров, за исключением битов 24-31 регистра ADC_SQR1, записываются номера каналов на которых будут производиться измерения. Первый из них записывается в биты 0...4 регистра ADC_SQR3 далее записываются остальные каналы. Если регистр ADC_SQR3 заканчивается то далее аналогично продолжается запись в регистр ADC_SQR2. Если и ADC_SQR2 тоже заканчивается то далее заполняется регистр ADC_SQR1 до бита 20 т.к. с этого бита начинается запись количества каналов. Т.к. по умолчанию в этих регистрах нули то это означает что измерение будет проводиться один раз на нулевом канале поэтому в данном случае данные регистры можно не трогать.Есть ещё регистр настройки времени выборки ADC_SMPR2Можно пробовать изменять значение в этом регистре чтобы повлиять на точность измерений. Работа АЦП может быть запущена разными способами. Для установки запуска программным способом нужно в регистр в биты 17...19 регистра ADC_CR2 записать единицы.среда, 31 августа 2022 г.
АЦП (ADC) на stm32f103, Си и cmsis
суббота, 6 августа 2022 г.
Система двухканального радиоуправления без микросхем
Современные микросхемы и электронные модули значительно упрощают процесс изготовления разнообразных электронных устройств на их основе. Особенно это актуально для устройств работающих с радиоволнами т.к. для высокочастотных устройств имеются определнные требования к качеству разводки и изготовления плат и некоторым другим вещам которые бывает трудно реализовать в неподходящих, для этого, условиях. Однако же электронные системы, работающие с радиоволнами, существовали до появления микросхем а следовательно могут быть реализованы на дискретных элементах. Делать это может быть необходимо по разным причинам. Давайте представим например что сделать такое устройство необходимо например в гипотетической стране которая по каким то причинам не ведет торговлю с другими странами а производить может только дискретные элементы. Удивительная ситуация но допустим например чисто теоретически что она возникла. В одной из предыдущих статей рассматривалась многоканальная система радиоуправления с микросхемой-счетчиком для распределения одного канала импульсов на их большее количество. Одним из возможных вариантов построения многоканальной системы радиоуправления будет - замена двоичного интегрального счетчика на двоичный транзисторный счетчик. Двоичный счетчик может быть построен на Т-триггерах. Т-триггер - это такой триггер который меняет свое состояние на выходе при подаче сигнала на его вход т.о. получается что один такой триггер является одноразрядным двоичным счетчиком. Если соединить выход одного Т триггера со входом другого то получиться двухразрядный двоичный счетчик который можно применить для увеличения количества каналов системы радиоуправления. Однако построение такого счетчика на дискретных элементах - не простая задача т.к. для его реализации требуется большое количество деталей. Если пытаться его уменьшать всевозможными ухищрениями то можно ухудшить его качество. Под "качеством", в данном случае, можно подразумевать такие характеристики как стабильность, скорость работы (что важно для двухканальной системы "реального времени") и возможно некоторые другие. За основу для построения Т триггера, на дискретных элементах, можно взять обычный RS триггер на транзисторах:
Для укорачивания запускающего импульса можно использовать конденсатор а для того чтобы он мог разрядиться можно поставить паралельно ему резистор с большим сопротивлением чтобы он не сильно влиял на вход триггера. К сожалению запустить такой триггер получается только применением ключа с низким сопротивлением в открытом состоянии поэтому из наиболее распространеных дискретных элементов запустить его получается только у реле. А так как коллекторы половин RS триггера очень чувствительные то для передачи сигнала от них получилось применить только оптроны. Возможно подбором элементов можно добиться других решений но в ходе не сильно времязатратных опытов, рабочим вариантом двухразрядного двоичного счетчика на дискретных элементах оказалась такая схема: