Несмотря на растущую доступность и снижающуюся стоимость встроенной аналоговой периферии микроконтроллеров, скромный ШИМ ЦАП сохраняет свою привлекательность как «бесплатный» ЦАП [1], который может изменить назначение неиспользуемого вывода DIO (Data Input Output, вход/выход данных) и модуля счетчика/таймера и с добавленным простым низкочастотным фильтром пульсаций стать (пусть и несовершенным, но все же полезным) аналоговым выходом.
Хорошо, но как насчет другого конца сигнальной цепочки аналог/ цифра/ аналог? Насколько близко мы можем приблизиться к созданию (пусть несовершенного, но все же полезного) АЦП с нулевой стоимостью? Рисунок 1 с двумя транзисторами, четырьмя резисторами и одним конденсатором – это мой «бесплатный» (меньше $0.50 в единичных экземплярах) АЦП.
![]() |
|
Рисунок 1. | Схема «бесплатного» (почти) АЦП. |
Вот как это работает.
При установке трехстабильного выхода DIO1 в высокоимпедансное состояние верхняя по схеме обкладка конденсатора C1 заряжается через резистор R1 и выбирает входное напряжение VIN, как показано в фазе ВЫБОРКА на Рисунке 2.
![]() |
|
Рисунок 2. | Фазы выборки, преобразования и калибровки «бесплатного» АЦП. (VQ1C – напряжение коллектора транзистора Q1). |
Минимальная длительность фазы выборки при высокоимпедансном состоянии вывода DIO1 определяется желаемым количеством бит точности преобразования N и постоянной времени R1C1.
Минимальный интервал выборки равен R1C1•ln(2N).
Например, при показанных на схеме значениях RC и N = 8 минимальный интервал составляет порядка 1.5 мс. Если N = 12, минимальный интервал будет примерно 2 мс. Во время зарядки конденсатора C1 смещенная в прямом направлении и насыщенная база транзистора Q1 обеспечивает низкоимпедансный (около 1 Ом) путь к земле со смещением VQ1B, равным примерно 650 мВ. Фаза выборки заканчивается перепрограммированием DIO1 на вывод «лог. 0». В результате верхняя обкладка конденсатора C1 подключается к земле, а смещение VQ1B становится отрицательным, выключая транзистор Q1. Выключение Q1 устанавливает «лог. 1» на выводе DIO2, который должен быть запрограммирован таким образом, чтобы периферийный счетчик/таймер микроконтроллера начал подсчет тактовых импульсов (например, 1 МГц) и, таким образом, измерил продолжительность выключенного состояния транзистора Q1.
Выключенное состояние Q1 (и, следовательно, подсчет) продолжается до тех пор, пока отрицательный заряд на конденсаторе C1 не стечет и не позволит смещению VQ1B вернуться к значению 650 мВ. Время, за которое это произойдет (и, соответственно, количество подсчитанных импульсов), прямо пропорционально напряжению VIN и обратно пропорционально току коллектора транзистора Q2.
Интервал перезаряда конденсатора C1 равен
где
αQ2 – коэффициент передачи тока эмиттера транзистора Q2,
IQ2C – ток коллектора транзистора Q2,
VQ2E – напряжение эмиттера транзистора Q2.
Так что…
интервал подсчета составляет 51 мкс/В, и количество преобразований равно 51•FCLK(МГц)•VIN
…приблизительно. (FCLK – тактовая частота).
Резистор R2 предусмотрен для предотвращения насыщения транзистора Q2. R4 служит коллекторной нагрузкой для Q2 и подтяжкой для вывода DIO2. Совмещение времени выборки (1.5 мс) и преобразования (256 мкс для 8 бит при тактовой частоте 1 МГц) дает максимальную скорость преобразования примерно 560 выборок в секунду. Пока все в порядке.
Но как справиться с этим «приблизительно»? «Приблизительно» охватывает множество ограничений «бесплатной» схемы, включая температурные коэффициенты недорогих резисторов, конденсаторов, а также напряжений смещения и коэффициентов передачи тока транзисторов, поэтому просто проигнорировать это не получится.
К счастью, как видно из правой части Рисунка 2, этот «бесплатный» АЦП имеет функцию самокалибровки.
Для самокалибровки DIO1 программируется выходом, на который выводится «лог. 1» для зарядки конденсатора C1, а затем «лог. 0» для формирования интервала подсчета числа импульсов NCAL. Последующие результаты преобразования NCONV затем масштабируются как
что исправляет большинство ошибок, обусловленных перечисленными выше источниками. Но, к сожалению, не совсем все.
Остается только нескорректированное смещение нуля из-за минимального отклонения VQ1B, необходимого для выключения Q1 и формирования ненулевого интервала подсчета. Наименьшее необходимое для этого значение VIN составляет приблизительно
8-битного результата преобразования при полной шкале 5 В. (LSB – младший значащий бит).
Что оставляет только один очевидный источник потенциальной неточности – напряжение питания 5 В. Источники питания логики – не лучший выбор для аналогового опорного напряжения, и точность этого «бесплатного» АЦП в конечном итоге будет зависеть от того, насколько хорошим на самом деле окажется используемый источник.
Конечно, классический ШИМ ЦАП страдает точно такой же болезнью, связанной с ограничениями питания логики, но это не отменяет его полезности и популярности.
Что в некотором роде возвращает тему «бесплатной» аналоговой периферии к тому, с чего она началась. Пусть и несовершенный – но все же полезный?