- АНАЛОГО ЦИФРОВОЙ ПРЕОБРАЗОВАТЕЛЬ АЦП СВОИМИ РУКАМИ
- Простой аналого-цифровой преобразователь (АЦП)
- Электроника для всех
- Блог о электронике
- AVR. Учебный курс. Делаем АЦП из Аналогового компаратора
- 58 thoughts on “AVR. Учебный курс. Делаем АЦП из Аналогового компаратора”
- АЦП AD-01 на CS5381
- Рекомендованные сообщения
- Присоединяйтесь к обсуждению
- Сообщения
- Похожие публикации
АНАЛОГО ЦИФРОВОЙ ПРЕОБРАЗОВАТЕЛЬ АЦП СВОИМИ РУКАМИ
Дополнение: D4, D5, D6 — распространенные стабилитроны на напряжение 4,7 В
Схема основана на десяти разрядном преобразователе TLC1549. На входе установлен делитель напряжения. Входящее напряжение от датчиков не должно превышать 5 вольт.
Точность измерительного устройства 0,005 вольт.
Используя датчики которые находятся на нашем сайте , вы сможете подключив устройство через COM порт компьютера (распиновка COM разъема представлена ниже) сможете получать данные с датчиков прямо на ваш компьютер.
Применение данного АЦП всесторонне, начиная датчиками протечки воды, датчиками температуры, газа, давления.
Данные элементы легко доступны на обычных радио рынках.
Внимание: Печатная плата существует, в большом расширении!
В качастве программы для снятия показаний с датчиков можно использовать распространенную программу OSCiloscope.
Файл с платой, для печати:
Скачать печатную плату АЦП
Печать производить без масштабирования. Удачной сборки!
Источник
Простой аналого-цифровой преобразователь (АЦП)
«Wireless World» (Англия), May. 1981
Простейший АЦП может быть построен по схеме, приведенной на рис.1. Входное напряжение, которое может изменяться в диапазоне от нуля до напряжения источника питания (Uп), представляется на выходах преобразователя в параллельном дополнительном двоичном коде.
Puc.1
Для нормальной работы АЦП инверторы-компараторы A1-А4 должны переключаться при напряжении на их входах, равном Uп/2, а выходные напряжения компараторов в устойчивых состояниях должны быть близкими к нулю и Uп. Кроме того, компараторы должны обладать высоким входным и низким выходным сопротивлениями.
Перечисленным требованиям удовлетворяют большинство современных ОУ, инвертирующие входы которых подключены к потенциалу Uп/2.
Если требуемая точность аналогоцифрового преобразования не превышает четырех разрядов, то в качестве основы для АЦП можно использовать счетверенные КМОП логические элементы «И-НЕ» или «ИЛИ-НЕ» Один из вариантов такого устройства представлен на рис. 2. Его входное сопротивление около 22 кОм. а время преобразования — не более 300 нс. Отечественным аналогом микросхемы 4001 является К176ЛЕ5, а 4011 — К176ЛА7.
Puc.2
Источник
Электроника для всех
Блог о электронике
AVR. Учебный курс. Делаем АЦП из Аналогового компаратора
Так сложилось, что основной МК с которым я работаю постоянно и на котором делаю подавляющее большинство задач это ATTiny2313 — он популярен, а, главное, это самый дешевый контроллер из всей линейки AVR с числом ног более 8. Я их брал числом около трех сотен за 18, чтоль, рублей штучка. Но вот западло — у него нет АЦП . Совсем нет. А тут он понадобился — нужно замерить сигнал с датчика. Засада. Не переходить же из-за такой фигни на более фаршированную ATTiny26 — она и стоит дороже и фиг где купишь у нас, да и что тогда делать с той прорвой ATTiny2313 что уже закуплена? Пораскинул мозгами…
А почему бы не сварганить АЦП последовательного сравнения? Конечно, быстродействие и точность будет не фонтан, зато, не меняя тип МК и всего с двумя копеечными деталями дополнительного обвеса, я получу полноценный, хоть и тормозной, 8ми разрядный АЦП, вполне удовлетворяющий моим скромным запросам!
Как работает АЦП последовательного сравнения.
Что у нас есть в ATTiny2313 аналогового? Правильно — аналоговый компаратор . Теперь достаточно подать на его вход замеряемый сигнал и методично сравнивать с опорным напряжением, линейно изменяя величину опорного напряжения. На каком из опорных напряжений произойдет сработка компаратора, тому и примерно равен измеряемый сигнал +/_ шаг изменения опорного.
Осталось получить переменное опорное напряжение, а чем, из сугубо цифрового выхода контроллера, можно вытянуть аналоговый сигнал? ШИМом! Предварительно его проинтегрировав. Для интеграции используем простейший RC фильтр. Конденсатор у нас будет интегрировать заряд, а резистор не даст сдохнуть порту при зарядке кондера. Результатом прогона ШИМ’а через подобный фильтр станет достаточно стабильное постоянное напряжение.
Осталось только прикинуть номиналы фильтра. Частота среза — частота, начиная с которой, фильтр начинает глушить переменную составляющую, у Г образного RC фильтра равна обратной величине из его постоянной времени w=1/RC . Я воткнул кондер на 0.33Е-6 Ф и резистор на 470 Ом, получилось что w=6447 рад/c . Поскольку угловая частота нам никуда не уперлась, то делим ее на 2pi = 6.28 получили около килогерца, 1026.6 Гц, если быть точным. Раз частота ШИМ а у нас запросто может быть порядка десятков килогерц, то на выходе будет гладенькая такая постоянка, с незначительными пульсациями.
Теперь заворачиваем эту ботву на вход компаратора, на второй пускаем наш измеряемый сигнал и начинаем развлекаться с кодом. Получилась вот такая схема, собранная на той же макетке, что и прошлый раз. Тут, правда, не ATTiny2313, а Mega8 у которой АЦП есть, но мы пока забудем о его существовании. Красными линиями нарисован наш фильтр.
А это фотография платы. Резистор напаян снизу, на дорожки, а вот конденсаторы видно. Их два, так как я тут и на второй канал ШИМ повесил фильтр, правда так и не задействовал. Также видно, что белый провод от переменного резистора теперь идет на инверсный компаратора, а оранжевый идет с ноги конденсатора на прямой вход.
Код будет простецкий, чтобы не заморачиваться выложу архив проекта и отдельные исходники в виде файлов:
- UARTundADC.asm — Головной файл
- vectors.asm — Таблица векторов прерываний
- init.asm — Инициализация периферии
- macro.asm и define.asm — Макросы и макроопределения
Прокомментирую лишь главную функцию Calc .
При вызове процедуры Calc у нас первым делом:
- Конфигурируется аналоговый компаратор и, главное, активизируются его прерывания. Описание и настройка компаратора уже были описаны ранее
- Затем в сканирующий регистр (R21) закидывается начальное значение сканирования 255.
- После чего это значение забрасывается в регистр сравнения ШИМ OCR1AL . ШИМ был заранее, в разделе init.asm сконфигурирован и запущен, так что сразу же на его выходе появляется сигнал скважностью (скважность это отношение длительности сигнала к периоду этого сигнала) 1 т.е., фактически, пока это просто единица.
- Выжидаем в функции Delay некоторое время, чтобы закончился переходный процесс (конденсатор не может мгновенно изменить свое напряжение)
- Уменьшем значение сканирующего регистра (что при загрузке в OCR1AL уменьшит скважность на 1/255), проверяем не стало ли оно нулю. Если нет, переходим на пункт 3.
Итогом станет последовательное уменьшение скважности сигнала с 1 до 0, с шагом в 1/255 , что будет преобразовано после фильтра в уменьшающееся напряжение. А, так как в главной процедуре у меня Calc вызывается циклически, то на входе компаратора будет пила.
А остальное сделает компаратор . Как только он сработает, а он сработает в любом случае — ведь какое нибудь да напряжение обязательно есть на входе. То его прерывание возьмет текущее значение регистра сравнения OCR1AL , ведь именно на нем у нас совпало напряжение, и выдаст нам в качестве результата замера.
По окончании скан цикла, выданное значение отправляется в регистр UDR и улетает в комп, рисуя в окне Terminal’a график вращения ручки переменного резистора.
Как видно, вверху есть некоторый срез. Это связано с тем, что максимальное напряжение, которое может выдать нога МК, с учетом падений на всех резисторах, порядка 4.7 вольта, а с задающего потенциоматера я могу и все 5 выкрутить. Ну еще и верхушки заваливаются чуток. Если понизить частоту, то диапазон несколько расширится.
Вот так, применив немного смекалки, а также две дополнительные детали общей суммой в один рубль и десяток строк кода, я сэкономил кучу бабла =)
Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!
А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.
58 thoughts on “AVR. Учебный курс. Делаем АЦП из Аналогового компаратора”
Золотая идея. Дёшево и сердито, но смысл верный!
Источник
АЦП AD-01 на CS5381
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.
Сообщения
Похожие публикации
Здравствуйте коллеги, друзья и единомышленики.
Вообще моя специфика это электротехника и электрооборудование. Поскольку нередко приходится проектировать и изготовлять различные щиты, управления различного электрооборудования, то есть необходимость в различных контроллерах, которые бы измеряя параметры сети предпринимали те или иные функциональные процедуры. Да сегодня существую различные ПЛК, и прочие устройства под дин рейку на которых можно реализовать все, что угодно. Но к сожалению, либо, они дороги, либо недоступнн. Кроме того вообще ПЛК умеющих «из коробки» измерять сетевое напряжение по всем фазам (не говоря про ток) в природе пока не встречал. Поэтому к ПЛК, приходится покупать т.н. датчики или измерители сетевых параметров, стоимость которых сопоставима с ПЛК, к тому же растет габарит щита где все это будет стоять. Так или иначе я решил научится делать хотябы простейшие контроллеры, с обычной прошивкой, которые бы могли реализовать все мои предпочтения.
Выбрав МК STM32, подобрав схемотехнику внешних интерфейсов и исполнительных устройств.
Пока, я остановился перед выбором каким образом измерять, сетевое напряжение переменного тока. На первый взгляд почти, все производители реле напряжений используют вот такую схему:
Но мнению специалистов, эта схема плоха наличия невысокого внутреннего сопротивления самого АЦП микроконтроллера.
Поэтому рекомендуют добавить ОУ в режиме буфера:
В обоих схемах, измеряемый сигнал смещают на половину питающего/опорного напряжения, в результате теряется один бит точности АЦП.
Поиск в интернете, навел на следующие материалы:
1. Диапазон преобразования АЦП микроконтроллера можно расширить вдвое без потери точности. В схеме используются два однопериодных выпрямителя на ОУ, соответственно необходимо два входа АЦП. Соответственно хочется схема по лучше.
2. Двухполупериодный активный выпрямитель без диодов. Все прекрасно и просто, но рекомендуется использовать дорогой и труднодоступный ОУ. Простые и дешевые ОУ типа МСP6002/4, при моделировании этой, схемы (в Multisim) ее работоспособность не подтвердили. Я был не один, кто хотел ее реализовать, у котов на форуме есть обсуждение этой схемы, но там тоже судя по всему тоже успехов не достигли. Поэтому я продолжил поиск и попал на третий вариант, это.
3. Учебный материал — Прецизионные выпрямители. Предложенная схема в идеальных условиях (когда на вход подключен генератор сигналов) показала работоспособность в среде Multisim. Однако когда я дочертил высоковольтный делитель, и подал высокое напряжение, то на выходе получил также модуль синусоиды, но его амплитуда была снижена на 35-40%, от того кот. был на выходе резист делителя. В итоге в эту схему я добавил буферный каскад ОУю В итоге, схема обрела следующий вид:
В этот раз моделирование уже подтвердило ожидаемые результаты:
— на выходе имеем, модуль синусоиды, причем с той же амплитудой, которая имеется на входном резистивном делителе.
— если подать напряжение превышающее номинал резист делителя, то на входе МК оно будет срезанным на уровне 3вольт.
— теперь можно использовать все 12бит АЦП, для оцифровки
Но получилась схема какая-то громоздкая на один канал напряжения.
Можно ли ее упростить, и есть ли более простые схемы решающие данную проблему??
Помогите понять где ошибка. не получается реализовать попеременный опрос 2ух каналов АЦП. Данные с одного канала должны передаваться на первый индикатор как напряжение, а со второго, соответственно на второй индикатор как сила тока.
TCCR0 |= (1 6) GainControl=0; // мониторинг переменной для управления затворами
>
ISR (ADC_vect)
<
if (current_ch == 0)
<
U = ADC;
voltage = (U*2.56/1024)*100;
ADMUX |= (1 Автор: Александр Шилин
Помогите, пожалуйста, со схемой подключения ПЗС-линейки к микроконтроллеру. Задача заключается в том, чтобы определить координату падения светового пятна, сформированного линзой, в пределах линейки.
Модель линейки TCD132D на 1024 пикселя.
Согласно даташиту необходимо три управляющих частоты — M, CCD, SH, питающее напряжение 12 В и опорное 5 В. Все эти условия были выполнены. Данные считываются.
Выход данных с линейки пока просто выведен на осциллограф (красный канал).
Я плохо понимаю физические основы работы ПЗС-линейки, но ее работа кажется мне очень странной и нелогичной.
1) При равномерной фоновой засветке при считывании получается равномерное низкое напряжение на всех пикселях. (Рисунок 1).
2) При закрытии части линейки чем-либо напряжение на закрытых пикселях возрастает (Рисунок 2).
3) При включении фонарика или лазерной указки все пиксели зашкаливают, определить максимум не удается (Рисунок 3).
Если поместить линейку в темное место и светить очень тусклым лазером, то общий уровень напряжения на пикселях высокий, а в месте попадания света наблюдается едва заметный минимум. Возможно так и должно быть и нужно просто инвертировать и усилить сигнал?
В чем может заключаться проблема? Как грамотно снимать выходной сигнал с линейки и заводить его на АЦП МК?
Даташит приложен снизу.
Доброго времени!
Суть дальнейшего моего повествования связана с наводками на прототипе фотометрического оборудования. Вот фото данного прототипа:
Если опусти работу таких узлов как управление насосами накачки жидкости, насос откачки жидкости, управление воздушным компрессором, то суть устройства сводится к аналоговой части: ацп микроконтроллера и схемы усилителя фотодиода. Вот блок-схема и принципиальная схема усилителя фотодиода:
Далее 6 ножка ОУ подаётся на вход ацп микроконтроллера.
Печатные платы сделаны таким образом, что схема ОУ и фотодиод расположены на одной плате, а микроконтроллера на другой – основной плате. Плата фотодиода разведена таким образом, что вход ОУ имеет земляную петлю, нижняя сторона является общей землёй:
В целом, эта плата работает нормально. Я ее проверял питая от аккумулятора и сигнал на выходе хороший и чистый.
Проблема сама вот в чём. Что когда всё собрано во едино, а точнее, прототип запитан от внешнего сетевого адаптера от ноутбука, то сигнал превращается в бороду:
Судя даже по этому показометру, размах равен около 35-40 мв при частоте в 50 Гц. И когда я просто подношу ладонь к плате фотодиода на расстояние в 20-50 мм, то размах увеличивается уже за 100 мв.
Тут нужно пояснить вот какой факт. Сейчас я питаю схему ОУ и фотодиода от отдельного аккумулятора (его видно на фото ниже), Так я думал, что питая от общего источника аналоговую часть и цифровую, даёт такой результат.
Но как показала практика, что питать от аккумулятора, что от общего источника, результат одинаковый.
Как выяснилось, даже если отключить питание от цифровой части (тумблер по положительному полюсу питания), а аналоговая питается от аккумулятора, то на показометре картина остаётся той же, видна та же борода.
Но если выдернуть провод питания от этой конструкции, то результат на показометре следующий:
Размах снизился до менее 10 мв и частота увеличилась примерно до 400 Гц. Вероятно тут уже собственные шумы показометра + незначительные наводки на схеме ОУ. Пока писал этот текст включил приборчик, чтобы посмотреть на его показания с отключённым щупом, вот результат:
Источник