Всем привет! Тут речь пойдет про измерение аналогового сигнала микроконтроллером. Сразу скажу, что эта тема категорически обширная и технически сложная. В одну статью всего не уместишь, потому договоримся так. Если эта статья "зайдет", то я продолжу, по мере усложнения. Если нет.... на нет и суда нет :)
Тут я коснусь темы измерения сигнала, который "не вписывается" в диапазон АЦП. Алгоритмов не будет. Только аппаратная часть.
Всем известно, что большинство АЦП измеряет напряжение в диапазоне от 0 до Vref. Т.е. если Vref = 3.0В, а на вход подать 3.3В, то АЦП уйдет в зашкал. Ровно как измерительной головкой со шкалой 5В пытаться измерить 6В. Что делать? Да "тупо" переключить шкалу.
Всего может быть три варианта: Uвх_max > Uref, Uвх _max < Uref, Uвх_min< Uref >Uвх_max.
Ситуация номер раз: Uвх_max > Uref
Первое, что приходит в голову - тупо поделить напряжение и это рабочий вариант. Сам часто пользуюсь таким методом. Но делителем обойтись не всегда получится. Делитель должен быть таким, что бы не нагружать источник измеряемого напряжения. Потому, стоит несколько усложнить схему.
Измеряемое напряжение подается через повторитель, который имеет большое входное сопротивление и минимально влияет на исследуемый сигнал.
Рассчитывается делитель для схемы с повторителем так
Ситуация номер два: Uвх_max < Uref
Тут обратная ситуация. Входной сигнал меньше диапазона измерения АЦП и его надо усилить. Тут нам поможет неинвертирующая схема включения операционного усилителя.
Формула расчёта еще проще, чем в предыдущем случае
Ситуация номер три: Uвх_min< Uref >Uвх_max.
Самый интересный случай, когда диапазон изменения измеряемого напряжения больше нуля, но меньше опорного напряжения. Хочется его, как-бы, растянуть на всю шкалу АЦП.
Эта схема обладает усилением > 1, и смещением напряжения >0. Т.е. одновременно и смещает уровень напряжения, и усиливает его. Не получится, либо только усилить, либо только сместить уровень используя эту схему.
С формулами чуть замороченнее. В целом, выходное напряжение связано с входным следующим соотношением
Откуда, можно вывести систему уравнений, решив которую мы найдем искомые значения
Надо найти R1, R2.
Исходные данные:
Решаем систему :) И тут я наупражнялся с математикой. Ничего сложно, просто надо быть внимательным. В процессе решения получаются страшные многоэтажные дроби, которые надо упростить, приводя это чудо к общему знаменателю...
Короче, решаем как обычную систему линейных уравнений с двумя переменными. Из второго уравнения выражаем R2.
Потом это R2 подставляем в первое уравнение. В процессе решения, получилась выражение, которое я вынес в отдельную переменную (что бы легче было упрощать без того здоровое выражение). Переменную я назвал Ucom
Собственно, после подстановки R2 в уравнение 1 и решая его относительно R1, получаем
Теперь можем найти R1. Вычисляем значение R1 и подставляем формула для R2, что бы найти значение второго сопротивления. Вуаля.
Что бы вам не мучится, я это оформил в файлик. Рекомендую установить SMath Studio. Это бесплатный аналог маткад. Но, я так и не понял как заставить его решать систему уравнений. В маткаде это делается двумя строчками. Потому, я по-старинке, решил всё руками, вывел формулы для вас, что бы, если припрёт, вам достаточно было подставить свои значения.
P.S. Пока только скрин из файла, позже закину в облако сам файл и дам ссылку. Сейчас нет возможности это сделать. Пожалуйста, напомните мне, если вдруг я забуду выложить файл.
Ради интереса, если делать будет нечего, постарайтесь вывести сами эти формулы. Может у вас получится еще больше упросить полученное выражение.