Страница на этапе разработки
В данном уроке мы с Вами изучим работу АЦП (ADC) микроконтроллера STM32F103, но сначала рассмотрим возможности нашего АЦП:
Сами каналы АЦП микроконтроллеров STM32 делятся на две группы:
Результаты измерений регулярных каналов хранятся в одном регистре и требуют сохранения результатов в памяти микроконтроллера, в то время как инжектированные каналы имеют собственные регистры для хранения результата.
Кроме того АЦП можно настроить на работу в качестве аналогового сторожа (watchdog), то есть задаются верхний и нижний пороги входного сигнала, АЦП отслеживает уровень сигнала и, если сигнал выходит за указанные пределы, генерируется прерывание.
1. Single-channel (Одноканальный) АЦП выполняет одно преобразование одного канала, сохраняет полученное значение в выходном регистре и останавливается.
2. Single continuous (Одноканальный длительный) Этот режим аналогичен первому, но АЦП не останавливается, а продолжает работу с выбранным каналом. При этом результат постоянно перезаписывается в выходном регистре.
3. Scan (Многоканальный) В этом режиме возможно сконфигурировать АЦП для выполнения последовательных преобразований нескольких каналов в заданной последовательности. Преобразовании также настраивается отдельно для каждого канала. После обработки указанного числа каналов АЦП останавливается.
4. Scan continuous (Многоканальный длительный) То же самое что и Scan, только АЦП не останавливается после опроса всех каналов, а снова начинает обработку каналов. При этом все результаты сохраняются в один регистр и надо вовремя забирать данные, пока они не будут затертые данным преобразования следующего канала.
5. Discontinuous (Прерывистый) Сканируются не все каналы за раз, а только те, которые заранее установленные, при следующем сканировании, сканируется следующая группа каналов и так далее.
Входы питания:
Vref+ — вход опорного напряжения
Vdda — вход аналогового питания
Vssa — вход общего потенциала аналогового питания
Для начала изучим работу 4 инжекторных каналов (в микроконтроллере STM32F103 их 4 штуки). В данном случаи результат каждого измерения будет помещен в свой регистр и нам не нужно «переживать», что результаты измерений будут затертые чужим каналом.
Но вначале нам необходимо рассмотреть некоторые особенности работы АЦП:
1. Калибровка АЦП — так как внутренние конденсаторы МК имеют не однородность, для уменьшения погрешности преобразования проводят калибровку. Во время калибровки вычисляется цифровое значение АЦП для каждого конденсатора в виде корректирующего кода.
Перед началом калибровки АЦП должно находиться в отключенном состоянии, то есть бит ADON должен быть равен нулю. Запуск калибровки производиться установкой бита CAL в регистре ADC_CR2. Как только калибровка закончится, бит CAL сбросится аппаратно, после чего можно выполнять преобразования. Рекомендуется калибровать АЦП при подачи питания.
2. Время преобразования — для каждого канала можно выставить свое время преобразования, которое возможно выбрать из диапазона 1,5-239,5 дискретно (8 значений). Выставляется время в регистрах ADC_SMPR1 и ADC_SMPR2.
Полное время преобразования Т=программное время выборки + 12,5 циклов.
Например частота ADCCLK задана равной 14МГц, а время выборки 1,5 цикла, тогда Т=1,2+12,5=14 циклов, то есть 1мкс.
Напишем программный код:
Программный код