В уроке завершим описание функциональных компонентов и режимов работы АЦП. Разработаем проекты-примеры работы с оконным компаратором, внутренними датчиком температуры и источником опорного напряжения.
Предыдущий урок Список уроков Следующий урок
Для полноты освещения всех ресурсов АЦП STM32 осталось описать режим оконного компаратора и работу с внутренними компонентами, расширяющими возможности АЦП: датчиком температуры и ИОН.
Режим оконного компаратора.
Из предыдущих уроков мы узнали, что модуль АЦП STM32 способен сам запускать преобразования входных сигналы в заданной последовательности. Остается только обрабатывать результаты измерений.
Но этого разработчикам микроконтроллера показалось мало. Они добавили аппаратную функцию сравнения результата преобразований с двумя значениями – нижним и верхним порогами. Получился двух пороговый или оконный компаратор.
Если значение входного сигнала меньше нижнего порога или больше верхнего, то вырабатывается прерывание.
Пороги задаются в 16ти разрядных регистрах ADC_LTR (нижний) и ADC_HTR (верхний порог). Результаты сравнения не зависят от режима выравнивания, заданного битом ALIGN в регистре ADC_CR2.
Режим оконного компаратора может быть установлен для мониторинга одного или всех каналов согласно следующей таблице.
Каналы для мониторинга | Биты регистра ADC_CR1 | ||
AWDSGL | AWDEN | JAWDEN | |
Ни один, режим отключен | X | 0 | 0 |
Все инжектированные | 0 | 0 | 1 |
Все регулярные | 0 | 1 | 0 |
Все инжектированные и регулярные | 0 | 1 | 1 |
Один инжектированный | 1 | 0 | 1 |
Один регулярный | 1 | 1 | 0 |
Один инжектированный и регулярный | 1 | 1 | 1 |
В последних трех случаях номер канала задается в поле AWDCH[4:0] регистра ADC_CR1.
Еще раз. При выходе измеренного значения сигнала за пределы, заданные в регистрах ADC_LTR и ADC_HTR, происходит:
- Устанавливается бит AWD регистра состояния ADC_SR. Бит должен быть сброшен программно.
- Формируется прерывание, если оно разрешено битом AWDIE в регистре ADC_CR1.
В документации не указано, что функция оконного компаратора работает только в непрерывном режиме.
Проверка режима оконного компаратора.
Для демонстрации работы оконного компаратора давайте подкорректируем программу Lesson27_4 из урока 27 так, чтобы при выходе напряжения сигнала канала 1 за область 1 … 2 В его значение на LCD-дисплее начинало мигать.
Напомню, что в этом уроке мы разработали программу 4х канального вольтметра. В непрерывном режиме работает регулярный канал 0, а к нему “прицеплены” инжектированные каналы.
В блоке инициализации АЦП добавляем установку конфигурации оконного компаратора.
// установки оконного компаратора
ADC1->LTR = (uint32_t)(4096. / VREF * 1.); // нижний порог 1 В
ADC1->HTR = (uint32_t)(4096. / VREF * 2.); // верхний порог 2 В
ADC1->CR1 |= ADC_CR1_AWDSGL | ADC_CR1_JAWDEN; // один инжектированный канал
ADC1->CR1 &= ~ ADC_CR1_AWDEN;
ADC1->CR1 |= 1 << ADC_CR1_AWDCH_Pos; // канал 1
А при выводе данных канала 1 на LCD-дисплей проверяем признак AWD и через раз стираем значение напряжения этого канала.
if( ((blink & 1) == 0) && ((ADC1->SR & ADC_SR_AWD) != 0) ) print_str_LCD(" ");
else print_str_LCD(str);
ADC1->SR &= ~ ADC_SR_AWD; // сброс
blink++;
Проект можно загрузить по ссылке:
У меня работает.
Работа со встроенным датчиком температуры и внутренним источником опорного напряжения.
Датчик температуры подключен к входу IN16 мультиплексора АЦП 1.
На вход IN17 подается напряжение 1,2 В от внутреннего источника опорного напряжения (ИОН).
Для работы этих двух узлов необходимо установить бит TSVREF в регистре ADC_CR2.
Бит 23 TSVREFE. Разрешение работы внутренних датчика температуры и ИОН. Бит присутствует только в АЦП 1.
Измерение напряжений на выходах датчика температуры и ИОН происходит как для обычного аналогового входа.
Разработчики STM32 рекомендуют устанавливать время выборки для этих узлов не менее 17,1 мкс.
Выходное напряжение датчика температуры связано с температурой линейной зависимостью. Температура вычисляется по формуле:
T = ( V25 – Vsense ) / Avg_Slope + 25
Где:
- T – температура в C°,
- V25 –значение напряжения при 25 C° (мВ),
- Avg_Slope – масштабный коэффициент (мВ/ C°).
В документации на микроконтроллер STM32F103C8T6 указаны следующие значения для этих параметров.
Обозначение | Параметр | Миним. значение |
Типовое значение |
Макс. значение |
Единица измерения |
TL | Линейность характеристики преобразования |
- | ± 1 | ± 2 | C° |
Avg_Slope | Усредненный коэффициент преобразования |
4 | 4,3 | 4,6 | В |
V25 | Выходное напряжение при 25 C° |
1,34 | 1,43 | 1,52 | мВ/ C° |
Видно, что при достаточно высокой линейности (1-2 C°) , датчик температуры имеет отвратительное напряжение смещения. Если пересчитать его в градусы, то получится:
(1430 – 1340) / 4 = 22,5 C°
В документации написано, что оффсет может достигать 45 C°.
Т.е. в практических приложениях внутренний термодатчик можно использовать только заранее откалибровав его по смещению нуля. Ну, или для сравнения температур. Например, насколько нагрелся микроконтроллер с момента включения.
Внутренний источник опорного напряжения.
Несколько слов о внутреннем ИОН. У него нет внешнего выхода. Его невозможно подключить к входу источника опорного напряжения АЦП. Он может быть использован только для вычислительной коррекции результатов измерения АЦП.
Например. Микроконтроллер питается от батарейки, напряжение на выходе которой со временем падает. Внешний вход Vref (ИОН) АЦП подключен к источнику питания. Значит опорное напряжение АЦП также нестабильно.
В этом случае необходимо измерить напряжение внутреннего ИОН и в соответствии с ним масштабировать результаты преобразования АЦП.
Разработчики гарантируют следующие точностные характеристики внутреннего ИОН.
Обозначение | Параметр | Миним. значение |
Типовое значение |
Макс. значение |
Единица измерения |
VREFINT | Выходное напряжение | 1,16 | 1,2 | 1,26 | В |
TS_VREFINT | Время выборки | - | 5,1 | 17,1 | мкс |
VRERINT | Отклонение напряжения во всем диапазоне температур |
- | - | 10 | мВ |
TCoeff | Температурный коэффициент | - | - | 100 | ppm/ C° |
Практический пример измерения внутренних температуры и напряжения ИОН.
Разработаем программу, которая выводит на LCD-дисплей значения температуры микроконтроллера и напряжения внутреннего ИОН.
- Я взял проект из урока 28.
- Оставил без изменений то, что касается измерений каналов 0 и 1.
- При инициализации АЦП разрешил работу термодатчика и ИОН - установил бит TSVREFE.
- Время выборки для 16 и 17 каналов установил 239,5 циклов.
- В регистре JSQR задал для 3 и 4 преобразований 16 и 17 каналы.
- Подкорректировал вычисление значения температуры.
Загрузить проект можно по ссылке:
Температура у меня получилась -7 C°, хотя реальная окружающая +23…24 C°. Офсет действительно громадный. При нагревании корпуса микроконтроллера значение температуры на дисплее повышается.
А вот напряжение ИОН у моего микроконтроллера почти идеальное - 1,204 В.
Электрические и метрологические характеристики АЦП STM32.
Любой АЦП – далеко неидеальное устройство. Результат измерений аналоговых сигналов может быть искажен как за счет неправильного подключения внешних сигналов, так и за счет внутренних погрешностей преобразований.
Все параметры можете посмотреть в технической документации. Я выделю то, что считаю особенно значимым.
Из электрических характеристик, т.е. требований к внешним сигналам.
- Напряжение на входе Vref+ (вход ИОН) не должно превышать напряжение питания микроконтроллера и быть менее 2,4 В. При меньшем напряжении микроконтроллер не сгорит, но правильную работу АЦП никто не гарантирует.
- Потребляемый входной ток ИОН достигает 0,22 мА. Это достаточно большое значение. Например, при подключении внешнего ИОН через резисторный делитель с эквивалентным сопротивлением 1 кОм, погрешность напряжения будет 0,22 В. Использование делителей на входе Vref практически недопустимо.
- Диапазон напряжения преобразования АЦП от 0 до напряжения ИОН (Vref).
- Максимальное выходное сопротивление источника аналогового сигнала 50 кОм. Об этом рассказано в уроке 26 в разделе “Выборка аналогового сигнала”.
Метрологические характеристики АЦП STM32.
Речь идет о внутренних ошибках АЦП, когда все требования к характеристикам внешних сигналов выполнены.
- Ошибка смещения нуля – не более 1,5 единиц младшего разряда, т.е 0,037 %.
Параметр показывает значение сигнала на входе АЦП при выходном коде равном 0. - Ошибка коэффициента преобразования – не более 1,5 единиц младшего разряда, т.е 0,2 %.
Показывает насколько наклон прямой между первой и последней точками реальной характеристики преобразования соответствует идеальному значению. - Дифференциальная нелинейность - не более 1 единицы младшего разряда, т.е 0,024 %.
Параметр характеризует отклонение между серединами соседних шагов квантования на реальной и идеальной характеристиках. Т.е. показывает насколько одинаковые ступеньки характеристики. - Интегральная нелинейность – не более 1,5 единицы младшего разряда, т.е 0,037 %.
Характеризует отклонение реальной характеристики АЦП от идеальной в середине шага квантования. - Общая ошибка преобразования не более 2 единиц младшего разряда, т.е 0,05 %.
Параметры гарантируются после калибровки АЦП.
Это максимальные значения погрешностей. Типовые погрешности, как правило, в полтора раза меньше.
В следующем уроке будем работать с АЦП через функции библиотеки HAL.
Ошибка коэффициента преобразования – не более 1,5 единиц младшего разряда, т.е 0,2 %.