Измерение сопротивления без использования АЦП
Следующая статья показывает нехитрый трюк как с помощью простейшего восьмилапого микроконтроллера без аналого-цифрового преобразователя на борту соорудить измеритель сопротивления датчика и передать измеренное значение в ПК или главному контроллеру через последовательный интерфейс (которого так же может не быть в списке периферии используемого МК). Таким образом, с помощью самого дешевого микроконтроллера и нехитрой программки можно превратить любой простой резистивный датчик в более-менее интеллектуальную подсистему, умеющую передавать значение сопротивления датчика в цифровом виде в хост-систему или главный микроконтроллер на плате.
ИЗМЕРЕНИЕ СОПРОТИВЛЕНИЯ БЕЗ ИСПОЛЬЗОВАНИЯ АЦП
Большинство процессов в производстве автоматизируется с использованием всеразличных датчиков. Большая часть этих датчиков, такие как, например, сенсоры паров аммиака, температуры, и им подобные, являются резистивными устройствами, электрическое сопротивление которых изменяется (чаще всего нелинейно) по мере изменения окружающих условий. Сопротивление датчиков может находиться в диапазоне от 1 мОма до 10 МОм. На рисунке 1 показан вариант схемы для измерения сопротивления датчика. В качестве контроллера в схеме используется восьмивыводный микроконтроллер AVR Tiny13V производства компании Atmel. Микроконтроллер Tiny13V работает в диапазоне питающих напряжений от 1.8 до 5.5В.
![]()
Рисунок 1 — Предлагаемая схема позволяет измерять сопротивление путем измерения частоты колебаний асинхронного генератора собранного на самом же микроконтроллере.
В предлагаемой разработке используется эквивалент генератора, основанный на принципе асинхронного мультивибратора в МК Tiny13 (рисунок 2). У генератора нет стабильного состояния, и сигнал на выходе постоянно колеблется между двумя квазистабильными состояниями. Выходная частота этого генератора зависит от величины сопротивления. По мере увеличения сопротивления, частота уменьшается, и величина сопротивления может быть легко выведена через измерение частоты колебаний.
![]()
Рисунок 2 — Эквивалентная схема асинхронного мультивибратора собранного на МК.
Сопротивление, которое необходимо измерить, подключается между любыми двумя линиями ввода-вывода общего назначения микроконтроллера, а конденсатор C1 известного номинала подсоединяется к третьему выводу общего назначения. Заметьте, что PB0 и PB1 всегда находятся в противоположных состояниях для реализации элемента схемы «НЕ». Вывод PB2 измеряет уровень сигнала (высокое или низкое напряжение) на резисторе R1.
Изначально PB0 высокого уровня, PB1 – низкого, а вывод PB2 находится в высокоомном состоянии. В результате, конденсатор начинает заряжаться с постоянной времени RC. В первый момент времени конденсатор работает как замкнутая цепь, и на входе PB2 присутствует высокий уровень сигнала. По мере заряда конденсатора, напряжение на резисторе уменьшается, и, когда на входе PB2 будет низкий уровень, PB1 перейдет в высокое состояние, а PB0 – в низкое.
После этого, по мере разряда конденсатора, напряжение на резисторе возрастает, и, когда на входе PB2 будет присутствовать сигнал высокого уровня, PB0 перейдет в высокое состояние, а PB1, соответственно, в низкое. Таким образом, измерение частоты (или половины числа переключений за одну секунду) сигнала на входе PB0, дает величину обратно пропорциональную сопротивлению R1 (см. рисунок 1). Так для частоты f имеем:
R1 = k/f,
где k – коэффициент пропорциональности.
Результат измерения передается в ПК по последовательному интерфейсу RS-232. Поскольку Tiny13 не содержит UART, используется процедура программного UART. Полностью программа для измерения сопротивления по предложенному алгоритму доступна для закачки по ссылке.
| Автор | Ashish Aggarwal |
| Оригинальное название | Microcontroller measures resistance without an ADC |
| Источник | www.edn.com |
| Дата публикации | 12/2008 |
| Дата перевода | 10/2009 |
| Версия перевода | 1.0 |
Скачать статью в формате PDF (98 кб)
Разместить у себя на ресурсе или в ЖЖ:
На любом форуме в своем сообщении:

А зачем так сложно? Не проще ли дергать конденсатор и через время заряда разряда вычислить сопротивление.
Тоже вариант, но для этого нужен как минимум компаратор.
А что, переход с 0 на 1 на компаратор не тянет? Граница там довольно узкая и зависит только от питающего напряжения.