Влияние разрешения АЦП и его опорного напряжения
Инженеры всегда стремятся получить от своих схем максимум возможного; это касается и аналого-цифровых преобразователей (АЦП). Чтобы получить АЦП с наилучшими характеристиками, основное внимание, пожалуй, следует уделять разрешающей способности. Однако печальный факт заключается в том, что, как только мы выбрали АЦП и его опорное напряжение, мы определили максимальное разрешение. Допустим, например, что мы используем 10-битный АЦП с опорным напряжением 5 В. Это означает, что разрешение составляет 5 В/1023 или 4.888 мВ на шаг. Но что, если такой АЦП нам пришлось бы использовать с датчиком, имеющим диапазон выходных сигналов от 0 до 1 В? Разрешение АЦП остается равным 4.888 мВ, но теперь на всю шкалу приходится 1 В/4.888 мВ, или примерно 205 полезных отсчетов, так что, по сути, мы снизили разрешение датчика до 1 части из 205.
Что, если бы мы проектировали устройство для измерения напряжения на дросселе, когда через последовательный резистор на него подается скачок постоянного напряжения? Из кривой на Рисунке 1 видно, что в первые пару секунд мы, вероятно, получим отсчеты приличной точности, но затем результаты многих измерений будут одинаковыми, поскольку наклон кривой станет пологим. Другими словами, относительная погрешность будет большой.
Есть два основных способа изменить это:
- Заменить АЦП на устройство с бóльшим количеством разрядов (например, 12, 14 или 16 бит) или
- Изменить опорное напряжение АЦП.
(Существуют и более экзотические способы изменения разрешения, например, использование дельта-сигма преобразователей). Изменение разрядности означало бы использование внешнего АЦП или другого микроконтроллера. А что, если создать систему с регулируемым опорным напряжением? Это разрешение может меняться автоматически по мере необходимости – назовем это адаптивным разрешением.
Демонстрация адаптивного разрешения
Для начала рассмотрим простой метод. Микроконтроллер ATmega328P позволяет выбирать три источника опорного напряжения АЦП: источник питания VCC, внутренний источник опорного напряжение 1.1 В и внешний вывод REF. Поэтому для демонстрации проще всего использовать Arduino Nano, в котором установлен ATmega328P.
В демонстрационном примере используется один из аналоговых входов, к которому может подключаться 10-битный АЦП для измерения напряжения или выходного сигнала датчика. Хитрость здесь заключается в том, чтобы установить опорное напряжение, равное VCC (+5 В в этой конструкции) и считать показания АЦП, подключенного к аналоговому входу.
Если считанное значение после преобразования в напряжение больше 1.1 В, используйте это значение в качестве результата измерения. Если оно не больше 1.1 В, измените опорное напряжение на внутреннее напряжение запрещенной зоны 1.1 В и повторите измерение. Теперь, предполагая, что сигнал датчика или измеряемое напряжение изменяются медленно по сравнению с частотой дискретизации, вы получаете результат с более высоким разрешением, чем при использовании опорного напряжения 5 В.
Если вернуться к примеру с дросселем, на Рисунке 2 можно увидеть, как будет меняться адаптивное разрешение по мере снижения напряжения.
![]() |
|
Рисунок 2. | Изменение адаптивного разрешения при использовании внутреннего АЦП ATmega328P с опорным напряжением VCC 5 В или внутренним опорным напряжением 1.1 В. |
Программа адаптивного разрешения
Фрагмент кода на языке C, демонстрирующий концепцию адаптивного разрешения, доступен в разделе Загрузки.
Отступление:
В качестве теста я использовал ИИ помощник Microsoft Copilot для написания исходного кода, и он справился с этой задачей на удивление хорошо, дав хорошие имена переменным, прокомментировав текст и обеспечив понятную структуру. Он также правильно преобразовал цифровое напряжение АЦП в аналоговое. Когда же я попытался заставить Copilot внести некоторые изменения в логику, все стало только более запутанным, поэтому дальнейшие изменения и очистку я закодировал вручную.
Этот код непрерывно считывает данные с АЦП, подключенного к аналоговому выводу A0. Сначала в качестве опорного напряжения АЦП используется напряжение питания VCC (приблизительно 5 В). Если считанное значение меньше 1.1 В, опорное напряжение АЦП переключается на внутренний источник 1.1 В. Этот опорное напряжение будет использоваться до тех пор, пока АЦП не выдаст свой максимальный двоичный код 1023, означающий, что напряжение на входе A0 должно быть 1.1 В или больше. В этом случае опорное напряжение снова переключается на VCC. После получения достоверного измерения код выводит значение используемого опорного напряжения вместе с результатом измерения.
Для получения точных измерений опорные напряжения 5 В и 1.1 В перед использованием должны быть откалиброваны. Это следует делать с помощью достаточно хорошего вольтметра (я использовал откалиброванный 5½-разрядный вольтметр). Затем эти измеренные напряжения можно вставить в код.
Обратите внимание, что в верхней части кода переменной опорного напряжения 5 В («referenceVoltage5V») присваивается фактическое значение напряжения, измеренного на выводе REF платы Arduino Nano, когда входное напряжение на выводе A0 превышает 1.1 В. Переменная, хранящая значение опорного напряжения 1.1 В («referenceVoltage1p1V»), также должна быть задана путем измерения напряжения на выводе REF, когда напряжение на выводе A0 меньше 1.1 В. Эту концепцию иллюстрирует Рисунок 3.
Относительная ошибка при опорном напряжении 1.1 В и 5 В
Ниже приведено несколько примеров, показывающих, как влияет адаптивное разрешение на точность измерений. Вблизи входного напряжения 1.1 В ошибка разрешения при опорном напряжении 5 В может достигать 0.41%, в то время как при опорном напряжении 1.1 В ошибка уменьшается до 0.10%. При 100 мВ на входе и опорном напряжении 5 В ошибка может достигать 4.6%, тогда как при опорном напряжении 1.1 В она в наихудшем случае составляет 1.1%. При снижении входного напряжения до 10 мВ ошибка разрешения может достигать 46% процентов при опорном напряжении 5 В, но снижается до 10.7% или меньше при 1.1 В.
Расширение уровней опорных напряжений
Метод внешнего ЦАП
При необходимости эту концепцию можно расширить, добавив больше уровней опорного напряжения, хотя с 10-битном АЦП я бы не стал использовать более 3 или 4 уровней из-за снижения выигрыша. Ниже приведено несколько примеров того, как это может быть сделано.
В первом случае используется ЦАП с собственным источником опорного напряжения, подключенный к выводу REF Nano. ЦАП, управляемый Arduino Nano, может быть настроен на любое количество опорных значений. Примером такого ЦАП может служить микросхема MAX5362 с управлением по шине I2C (хотя напряжение ее внутреннего опорного источника составляет 0.9×VCC, так что максимальное измеренное значение будет примерно 4.5 В). В этой конструкции вывод REF Arduino Nano должен быть установлен в состояние «EXTERNAL» (ВНЕШНИЙ). Для большей ясности см. Рисунок 4.
![]() |
|
Рисунок 4. | Использование внешнего ЦАП (MAX5362), управляемого Arduino Nano, для получения большего количества опорных уровней. |
Метод с использованием ШИМ Arduino Nano
Другим способом получения нескольких опорных напряжений может быть использование выхода ШИМ Arduino Nano. Для этого потребуется использовать высокочастотную ШИМ и очень качественную фильтрацию, чтобы получить хороший, ровный сигнал постоянного тока, пропорциональный опорному напряжению 5 В. Чтобы получить чистый, пригодный для использования выходной сигнал, напряжение пульсаций должно составлять около 1 мВ (–74 дБ) или меньше. Выходные сигналы также нужно будет измерить, чтобы откалибровать их в коде. Этот метод потребует минимального количества компонентов, но даст вам возможность использовать множество различных уровней опорных напряжений. Структурная схема этой концепции показана на Рисунке 5.
![]() |
|
Рисунок 5. | Использование выхода ШИМ Arduino Nano и фильтра нижних частот для получения необходимого опорного напряжения. |
Метод резистивной лестниц
Другой возможностью получения регулируемого опорного напряжения является использование резистивной лестницы и аналогового коммутатора для выбора различных узлов лестницы. Для этой концепции может подойти что-то вроде микросхемы TMUX1204 компании TI. Значения сопротивлений резисторной лестницы можно выбрать в соответствии с конкретными требованиями. На Рисунке 6 показано, как два цифровых выхода Nano используются для выбора соответствующей позиции в лестнице резисторов.
![]() |
|
Рисунок 6. | Использование лестницы резисторов и аналогового коммутатора, например, TMUX1204, для выбора различных узлов лестницы с целью получения заданных значений опорного напряжения. |
Вы поняли идею
Существуют и другие способы получения опорных напряжений, но идея вам понятна. Общим здесь является использование нескольких опорных напряжений для улучшения разрешения при измерении напряжений. Это может быть решением, ведущим к проблеме, но разве не этим занимаются инженеры – подбирают проблемы к решениям?