Фильтрация напряжения
В первую очередь, надо позаботиться о качестве опорного напряжения. Ведь выходное значение находится в прямой зависимости от опорного напряжения.
Поэтому желательно использовать специальную микросхему — Источник Опорного Напряжения, например, ADR420 или REF195. Стоить они могут недешево — сотни рублей, но зачастую оно стоит того. Прецизионная аналоговая электроника в принципе не дешевая. По началу я тоже пугался ценам в 500-600 рублей за какой то там усилитель. А сейчас ничего, привык :) Впрочем, в фанатизм впадать не стоит. На худой конец, если используется AVR, точность которой 2МЗР (младший значащий разряд, если забыл) на десяти битах, то можно не заморачиваться с дорогущими ИОН и городить что попроще, например на LM336Z-5.0, включаемых подобно стабилитрону, только куда более точному.
![]() |
Если совсем лень искать спец деталь, а точность нужна в пределах показометра, то достаточно просто завести на Vref напряжение питания через дроссель в 10..100uH и повесить кондер емкостью 0.1uF на землю, как можно ближе к выводам. На картинке я нарисовал подачу Vref пунктиром, т.к. в данном случае я привожу пример для AVR, а там AREF можно подключить изнутри кристалла, программно.
Разумеется нужно отфильтровать и питание контроллера, поставив блокирующие емкости из керамики в 0.1uF между Vcc и GND, как можно ближе к выводам МК, чтобы помехи, возникающие при переключении логических уровней внутри МК, подавлялись.
Еще надо сделать аналоговую землю, которая будет проходить/окружать всю аналоговую часть, также желательно, чтобы аналоговая земля проходила под микроконтроллером в районе её аналогового порта. Аналоговая земля должна быть как можно более сплошной и не содержать в себе замкнутых контуров. С землей цифровой ее следует соединять в одной точке и как можно дальше от точных цепей.
Фильтрация сигнала
Разобравшись с питаловом, можно приступать к сигнальной части. Если нам точно известна частота входного сигнала, то мы можем со спокойной душой сделать фильтр и завалить все, что не входит в наш диапазон. Фильтры бывают разные, активные и пассивные, пока я подробно на них останавливаться не буду потому что сам в них толком ни в зуб ногой, приведу лишь простенький пример :)
Например, нам надо изменять довольно медленно меняющийся сигнал — напряжение питания. А на провод лезет всякая гнусь: шумы от электропроводки, радио сигналы, помехи от коллекторных двигателей, да мало ли что там в воздухе висит. Чтобы все это похерить, оставив только наш медленно меняющийся сигнал, нужно применить фильтр низких частот. Который бы задавил все быстрые колебания сигнала, оставив только постоянную составляющую.
В простейшем случае, это будет пассивный RC фильтр.
![]() |
Частота среза это такая частота, с которой начинается подавление сигнала. Можно еще и дроссель поставить, последовательно входу.
О фильтрах я еще напишу, а тем кто загорелся фильтровать все подряд я припас две серьезные книжки по фильтрам:










Для простых применений я бы рекомендовал опору TL431. 3х-выводный, стоит недорого (брал по 20-30тенге — 0,15-0,25$), нпряжение от 1,2 до 30в, точность для 10бит, да еще при 2 неточных разрядах, за глаза. Нормально работает начиная от долей миллиампера.
>>Чтобы все это похерить, оставив только наш медленно меняющийся сигнал,
>>нужно применить фильтр высоких частот.
>>Который бы задавил все быстрые колебания сигнала,
>>оставив только постоянную составляющую.
может всё таки фильтр низких частот?
кстати, в sprintLayoyte есть фишка «вычерчивание общей шины». можно ли её использовать для аналоговой земли? и если да, то как (т.к. она вычерчивает автоматически даже попытку соединить её линией с другими элементами ))) ?
Да, вечно оговариваюсь.
Да, люди действительно оговариваются. ФНЧ — есть фильтр нижних частот, а не низких. Даже в Хоровиц&Хилл эта оговорка. В названии «нижних частот» действительно есть смысл, допустим у тебя частота среза сотни мегагерц, язык не поворачивается назвать эти частоты низкими.
P.S. В плане терминов очень преуспели американцы. Low-pass и никаких гвоздей, тут уж точно не перепутаешь.
сколько себя помню, в инсте их называли равнозначно фильтры низких/нижних и высоких/верхних частот. и вопросов не возникало )
хотя, например, режет ухо когда называют симметричная матрица, а не симметрическая )
А вот как хошь так и соединяй. Я обычно просто маркером в нужном месте эту горе заливку соединяю с нужной точкой. И потом травлю.
я тоже так делаю, но думал — вдруг чего не понимаю? )
И действительно не понимаете :)
В спринте для соединения с заливкой следует проложить отдельную дорожку на заливку и поставить ей нулевую дистанцию (расстояние от заливки до дорожки).
Дистанция меняется на нижней панели, рядом со значком ground plane.
Вау!!! А я думал, чего это расстояние от дорожек до заливок не меняеются, глюк из версии в версию, а это не бага, это фича. Вручную каждую дорожку можно задавать дистанцию. Круто.
Гы, попутно нашел как можно писать дырчатый текст.
я так понимаю — тоже нулевыми линиями? )
Неа :) Достаточно поставить галку «Cutout» в свойствах надписи :)
Да, блин обложили nwanomaly__ со всех сторон. Один со своими «нижними частотами» другой со спринтом. Окружили демоны :)
Можно ли использовать внешний MUX для ацп мк? Например, HC4051.
В моей корявой макетке импульсного источника есть и RC фильтр ацп и усреднение (по 64-м выборкам). Но всё это ложится, если не учитывать наводки (от самой себя). А думал прокатит))
Читаю вот это «Уилльямс Т. ЭМС для разработчиков продукции» и тихо подвисаю. Риторический вопрос: какая разница между радиолюбителем и человеком с радиотехническим образованием?
Можно
Вопросик. Надо мерять напряжение в диапазоне от 0 до 0.1В. В качестве ИОН — TL431B(0.5%). Что лучше: 1)использовать усиление сигнала 20Х (опция в тайни) и установить ИОН в 2В; или 2) ничего не усилять и поставить ИОН в 0.1В (через делитель на резисторах)??
Усилитель только для дифференциального режима (сравнение напряжения двух каналов АЦП). Если хочешь получить на таких напряжениях что то отличное от «вроде есть, вроде нет» то Тебе надо поставить сюда инструментальный усилитель, внешняя микросхема. Например AD627A или подобный. И на нем резистором задать коэффициент усиления, а выход сожрать обычным АЦП.
Можно подключить дифференциальным режимом, но не все меги это умеют, задействуется два канала АЦП и можно будет навесить К
Да, я так и подразумевал, что будет использоваться дифференциальный режим. Но чем не подходит внутренный усилитель в мк? (AD627ARZ ~10USD :( )
А вообще вопрос меня интересовал об усиление сигнала vs низкое напржение ИОН.
Не знаю как там у него с точностью.
Впрочем, стоит попробовать. Но однозначно лучше усиление чем низкий ион.
Вопрос по ИОН.
Буду использовать TL431. Там с помощью резистивного делителя задаётся значение опорного напряжения. Подбирая значения этих резисторов близкие к расчётным, получаются цепочки из 3-х 4-х номиналов для каждого. Что, если их заменить подстроечными?
Собственно вопрос: насколько подстроечный резистор держит выставленное значение, и смысл применять его тут в ИОН?
От подстроечника зависит. От его точности.
В принципе, можно заменить. Вопрос только какая тебе нужна точность?
Еще подстроечник может чуток плавать от температуры или от механических вибраций.
Вопросик. Поставил на выход AREF атмеги8 ADJ пин микрухи LM336-2.5, запрограммировал контроллер на посылку данных из АЦП на ком порт, включаю устройство принимаются только значения 1023. Что я неправильно сделал? (Напряжение между землей и ADJ замерял 0.98В(хотя должно вроде быть 2.5В). Если поставить чтобы опорное напряжение бралось из AVCC то данные идут нормально)
Щас увидел что не ADJ пин нужно поцеплять, то всеже на выходе AREF стоит напряжение 0.98В, почему же АЦП не работает в режиме внешнего опорного напряжения?
Смотря как ты ацп настроил
Спасибо, вопрос решен, у меня стояла частота выборки 1000 кГц!!, переставил на 92 и заработал
просьба не пинать….
какой МК посоветуете?
нужно чтобы были и ЦАП, и АЦП.
задача такова — сделать генератор синусоиды 20-20кГц с довольно большой точностью.
ЦАП как выход хочу заюзать, а АЦП на считывание ввода поставить.
20кгц довольно большая частота, ее же генерить надо. А ЦАП я видел только на ARM Cortex M3 (LPC1343, LPC1751, STM32F103C8 вот в каком то из них)
а если один порт убить на преобразователь R-2R? сея выйдет
а если два порнта включитть?
Выше 8ми бит делать особо нет смысла — там низкая точность и тепловые колебания резисторов угробят всю точность.
млин…
просто препод требует минимум 10бит клепать…
ну чтобы за 1000 делений завалило…
Десять бит можно, только плавать будет на младших разрядах. Но зато препод будет доволен :)
то есть плавать?
вот если взять, скажем, мегу16.
задать частоту на 8 МГц.
по заданию макс — 20 кГц.
то есть по 400 тактов на полное колебание.
а если оформить изначально какую-то виборку значений. и при загрузке значений на определенную частоту — сделать выборку значений и гонять их в цикле???
В смысле что младшие три значения не будут тем, Что ты запускаешь. Т.е. на дискрете 10бит и 5ти вольтах у тебя ЦАП должен выдавать 1024 ступеньки напряжений. 5/1024 = 0.0049 это вес одной ступеньки. Т.е.
1 = 0.0049В
2 = 0.0097В и так далее. Это как бы математически
…
1024 = 5В
Но изза теплового и точностного разброса резисторов 1 не будет равно 0.0049, он будет чем то сильно приблизительным. И только со значенияя старше 8ми будет что то более менее похоже на правду. Т.е. младшие разряды не будут точными, а значит смысла их делать нет.
гм…
а вот над этим как-то не подумал…
сам дурак…
блин, таки я валенок…
хорошо, если юзать один порт — тогда получается приблизительно по 0.02вольта…
ладно, с этим посмотрим. а вот как организовать алгоритм — вот тут я подвисаю.
чего посоветовать можеш?
а может ну его на асме? я еще не силен в нем.
могЁт на сях написать софтину?
но после этого баги ловить — замаюсь…
и таки скажите шо мине делать?
«Если совсем лень искать спец деталь, а точность нужна в пределах показометра, то достаточно просто завести на Vref напряжение питания через дроссель в 100uH и повесить кондер емкостью 0.1uF на землю»
Уважаемый DI HALT, скажите, пожалуйста, а как определяется значение индуктивности дросселя, которое здесь необходимо? В вашей статье приведено 100uH, в даташитах на контроллеры в схемах питания АЦП указана индуктивность в 10uH. В каких пределах можно ее менять?
Хм. Всегда думал что в даташите 120мкГн дроссель на АЦП. Видимо когда то прочитал что то не то :)
Вообще дроссель чем больше тем глаже броски тока. И тем стабильней будет питание АЦП. Тут действуют методом разумной достаточности. Т.е. от 10мкгн уже ставить выше нет смысла.
поставил LM336Z-5.0 для питания АЦП ADS1100. Но на выходе LM336Z-5.0 почему то 1,5В.
В чем может быть проблема?
Спасибо!
«…Аналоговая земля должна быть соединена с землей цифровой в одной точке…»
А как сделать вольтметр, у которых они не соединены? Ведь возьмем самый обычный тестер, — у него два вывода и для использования его совсем не нужно какой-либо из них цеплять именно на землю измеряемого сигнала!
У вольтметра на щуп идет аналоговая земля скорей всего. А цифровая земля (от процессора) отдельно, внутри она. И где то они соединены в одной точке.
Как это? Вот только что своим тестером замерил напряжение на участке электрической цепи: один щуп приложил к точке с потенциалом 4.0 В, другой щуп — к точке 3.2 В. Тестер мне выдал значение — 0.8 В. Земли данной электрической схемы (аналоговой земли) я не касался в принципе!
Причем тут земля твоей аналоговой цепи и вольтметр? У вольтметра своя земля. И за ее потенциал он берет потенциал своего черного щупа.
Не подскажешь как это реализуется (устройство за потенциал земли берет не 0 своего питания, а потенциал другой точки, «черного щупа»)?
Так у него же есть свое питание, а АЦП пофигу что замерять. Он меряет потенциал относительно нуля своего питания, которое выведено на черный щуп. И куда его воткнули не имеет значение.
Кури ТОЭ и потенциальные диаграммы. А также падения напряжения при протекании тока через сопротивления.
ТОЭ я обкурен, — дым из ушей валит). А все равно не пойму: для того чтобы измерить разность потенциалов двух точек с помощью АЦП по идее необходимо три щупа: 1-ый щуп соединить землю вольтметра с аналоговой землей, 2-ой — приложить к точке №1, 3-ий — приложить к точке №2. Потенциал для каждой точки измеряется относительно земли. Разность потенциалов и есть напряжение между двумя точками.
Как тестер обходится двумя щупами и как это реализовать?
Хреново курил, не пробрало. Пыхни еще раз.
Повторяю еще раз. У тестера СВОЕ СОБСТВЕННОЕ ПИТАНИЕ. Своя батарейка. И его земля не привязана к земле измеряемой схемы. Он за землю принимает ту точку куда мы ткнули черным щупом. Куда мы ее ткнули относительно земли измеряемой схемы совершенно не важно — т.к. ему главное замерить потенциал относительно своей земли.
Если же у нас измеряющая схема измеряет параметр в цепи связанной с ней общей землей тогда да, надо два канала АЦП снимать напряжения с двух точек и их разностью находить разность потенциалов.
Курнул мимоходом даташит на МК и осенило: чтобы тестер принял за землю черный щуп, нужно аналоговую землю прицепить на AGND, т.е. agnd не цеплять к gnd микроконтроллера. До этого я agnd и gnd соединял между собой, от того и получался кавардак. Спасибо за совет пыхнуть)))
Здравствуй, DI HALT! Вопрос: питание 5 Вольт через дроссель 100 мкГн. Может стоит поставить защитный диод? И если нет, насколько это критично?
Хотя ток там вроде мизерный, но всё же?
Он же не прерывается. Зачем там диод?
Чтобы ЭДС самоиндукции катушки не создала проблем в цепи после отключения питания.