Страница 1 из 2

АЦП, ATMega, преобразование уровня, термометр сопротивления

Добавлено: Ср фев 11, 2009 02:19:16
Солнцеворот
Долго думал куда эту тему поместить, и, все-таки, решил - сюда.

Интересная задача.
Необходимо снимать температуру с термометра сопротивления при помощи АЦП микроконтроллера ATMega16. Схема придумалась такая: делитель напряжения, один из резисторов - термометр сопротивления, второй - постоянный резистор с сопротивлением в 5 раз большим, чем номинальное сопротивление термометра (при этом зависимость напряжение от температуры практически линейная). Сигнал с делителя поступает на ножку АЦП.
Изображение

Вся беда в том, что нужно точно измерять довольно узкий диапазон значений температуры - от +30 до +50 град Цельсия. При этом, напряжения на делителе колеблются от 4,4В до 4,7В. Что соответствует всего 61-му значению десятибитного АЦП.

Как бы так сделать, преобразовать уровень напряжения таким образом, чтобы при 30 град Цельсия на входе в АЦП было 0, а при 50 град Цельсия было 1023 ?

Зависимость напряжения от сопротивления датчика
Изображение

Зависимость напряжения от температуры
Изображение

Добавлено: Ср фев 11, 2009 07:10:37
Mamonth
Первая мысль приходящая в голову - пересчитать делитель....
Вторая - усилитель...
Третья... может терморезистор заменить на что-нить более приемлимое?

Добавлено: Ср фев 11, 2009 09:50:22
asteroid7
...
Как бы так сделать, преобразовать уровень напряжения таким образом, чтобы при 30 град Цельсия на входе в АЦП было 0, а при 50 град Цельсия было 1023 ?
...
Самое простое на ОУ необходимый наклон характеристики делать, и смещение на нём легко задать.
Термопару, обычно, не подключают напрямую к АЦП.

Добавлено: Ср фев 11, 2009 11:29:50
Солнцеворот
Делитель пересчитать нельзя, т.к. чем меньше постоянный резистор, тем более нелинейна зависимость напряжения сопротивления датчика( и от температуры).

Вот на ОУ как-то это можно сделать. Где об этом можно почитать? Или хоть какие ключевые слова вводить, чтобы яндекс подсказал?

Добавлено: Ср фев 11, 2009 11:36:11
mackerel
А к чему Вам линейность? Да забить на неё... Потом программно можно всё пересчитать. Если диапазон и точность небольшие - то хоть таблично преобразовать...

Добавлено: Ср фев 11, 2009 14:23:43
Pooher
На ОУ может возникнуть проблема зависимости характеристик самого ОУ от температуры. При точности 0,5*С это конечно заметно не будет, но если точность требуется большая, то это не вариант

Добавлено: Ср фев 11, 2009 18:01:25
Солнцеворот
Может и зависит. Я хочу попробовать.
Так может кто подсказать как красную линию на последнем графике привести к другому виду - чтобы при 0 градусов напряжение было 0В, а при 50-ти градусах 5В ( к примеру)?

Вот в Википедии написано http://ru.wikipedia.org/wiki/%D0%9F%D1% ... 0%B5%D0%B9 много о применении ОУ, но не сказано чего-то важного.
Изображение
На картинке неинвертирующий усилитель. Вот формула для его расчета Изображение
Это ли означает, что подав на неинвертирующий вход 2 Вольта, при одинаковых резисторах R1 и R2 на выходе будет 4В?

Протеус, например, с этим несогласен, и то, что будет на выходе, очень здорово зависит от напряжения питания ОУ
Изображение
Изображение
Добавлено позже:
Оказывается, при недостаточном напряжении питания ОУ ведет себя странно, и на выходе дает совсем не тот результат, которого мы ждали. При подаче напряжения питания больше 6 Вольт (из любопытства дошел аж до 1000В) Proteus стабильно выдает на выходе 4,001В

Добавлено: Ср фев 11, 2009 19:39:12
Lonleystranger
Может по-делитантски, но я делал вход на Tiny2313 по компаратору. На одну ногу компаратора цеплял резистор+кондер (эталонное напряжение), на другую сравниваемое, запускаем таймер - и определяем когда совпадет. Если использовать поэкспериментировать с разными кондерами + 16 битовый таймер - точность намного лучше чем в АЦП меги8.

Добавлено: Чт фев 12, 2009 00:41:43
Demus
В общем постараюсь кратко)
На нелинейность правда можно забить. Аналитическое выражение для нее выводится легко для вашей первой схемы. Значит и программно нелинейность не составит труда убрать. Сразу скажу, что сам датчик имеет нелинейную характеристику. Это уже другая песня. Зависит от требований по точности измерения.
Чем плоха ваша схема - зависит от дрейфа источника питания. Для исключения этого применяют мосты.
Вот как раз мостовая схема позволяет сделать состояние баланса не только при 0С но и при 30 градусах. Сопротивление резисторов плечах моста будет равно сопротивлению датчика при 30С.
Да, и не забудте, если у вас датчик удален - надо учесть сопротивление проводов. В простейшем случае применяется трехпроводная или четырехпроводная схема подключения даттчика. Схемы и формулы Яндекс быстрей меня выдаст. Я описал что искать. Если не получится - поищу сам.
Чуть не забыл: еще нелинейность ацп вылезет...)

Добавлено: Чт фев 12, 2009 13:45:52
Mozart
может просто поставить вычитатель (диф усилитель)??
и вы питаете датчик свой источником напряжения или тока??

Добавлено: Чт фев 12, 2009 15:24:02
Солнцеворот
Значит, чего я добился за ночь.
Предположим, зависимость линейная, при повышении температуры напряжение падает.
Удобнее было бы, если бы при повышении температуры напряжение росло, значит нужно использовать инвертирующий усилитель.
Рассчитав усилитель по формулам с этого рисунка
Изображение
Маткад показал вот такую зависимость
Изображение
Однако, она не подтвердилась на симуляторе Proteus7.4sp3
Изображение
А почему?

Добавлено: Чт фев 12, 2009 17:04:08
smac
Солнцеворот писал(а):Значит, чего я добился за ночь.
...
Однако, она не подтвердилась на симуляторе Proteus7.4sp3
...
А почему?
Как это не подтвердилась? По-моему очень даже, просто вы подаете на вход усилителя с однополярным питанием синусоиду, мгновенное значение которой может быть меньше 0, естественно все значения меньше 0 обрезаются (кстати будут обрезаться и значения, превышающие напряжение питания усилителя). Чтобы наблюдать чистую синусоиду используйте ОУ с двуполярным питанием или смещайте входной сигнал так, чтобы он никогда не принимал отрицательных значений.

Добавлено: Чт фев 12, 2009 17:44:13
Солнцеворот
smac писал(а):Как это не подтвердилась? По-моему очень даже, просто вы подаете на вход усилителя с однополярным питанием синусоиду, мгновенное значение которой может быть меньше 0, естественно все значения меньше 0 обрезаются (кстати будут обрезаться и значения, превышающие напряжение питания усилителя). Чтобы наблюдать чистую синусоиду используйте ОУ с двуполярным питанием или смещайте входной сигнал так, чтобы он никогда не принимал отрицательных значений.
В том-то и дело, что в ноль выход должен обращаться только при значении Uвх=0,65В. При Uвх=0,3В выход должен быть 5В.
Синусоида на входе колеблется от 0,3В до 0,65В. Выход при этом ведет себя безобразно. Например, при Uвх=0,3В выход составляет 0,667В.
Посмотрите проект, там схема собрана, остается только кнопку пуск нажать.

Добавлено: Чт фев 12, 2009 20:53:18
smac
Солнцеворот писал(а): Посмотрите проект, там схема собрана, остается только кнопку пуск нажать.
Вы несправедливо полагаете, что у всех есть желание и возможность качать, ставить, ломать (не дай бог) и изучать протеус и прочую ерунду только ради того чтобы посмотреть что там у Вас случилось. Если хотите получить оперативную помощь выкладывайте все что можно (графики, схемы, осцилограммы и т. п.) в распростараненных графических форматах (jpg, tif, pdf и т. п. ), если считаете нужным то можете присоединять файлы протеуса и т. п.
В частности на приведенных Вами рисунках неясен номинал R1. Также рекоммендую на неинвертирующий вход ОУ подать постоянное напряжения с резистивного делителя "верхний конец" которого подключить к + источника B1

Добавлено: Чт фев 12, 2009 21:26:21
Солнцеворот
smac писал(а):Вы несправедливо полагаете, что у всех есть желание и возможность качать, ставить, ломать (не дай бог) и изучать протеус и прочую ерунду только ради того чтобы посмотреть что там у Вас случилось. Если хотите получить оперативную помощь выкладывайте все что можно (графики, схемы, осцилограммы и т. п.) в распростараненных графических форматах (jpg, tif, pdf и т. п. ), если считаете нужным то можете присоединять файлы протеуса и т. п.
В частности на приведенных Вами рисунках неясен номинал R1. Также рекоммендую на неинвертирующий вход ОУ подать постоянное напряжения с резистивного делителя "верхний конец" которого подключить к + источника B1
Я думал, у всех, кто занимается электроникой, есть специальные для этого программы, в частности, Proteus. :)
Резистор R1=1кОм. Картинки показал. Что не так?
Формулы говорят одно, Proteus - другое. Так кто же прав?

Добавлено: Чт фев 12, 2009 23:25:23
Pooher
Не верьте симуляторам.............

Добавлено: Пт фев 13, 2009 03:36:00
bsyomov
Солнцеворот писал(а): Я думал, у всех, кто занимается электроникой, есть специальные для этого программы, в частности, Proteus. :)
Резистор R1=1кОм. Картинки показал. Что не так?
Формулы говорят одно, Proteus - другое. Так кто же прав?
Программы так или иначе есть у всех, вопрос в том, что дааалеко не у всех протеус. А вот картинки браузер у всех показывает почти. =)

А на ваш вопрос - не прав протеус. Идеальных симуляторов не бывает.
Отмакетируйте, благо схема очень проста, и посидите с осцилографом, ну в данном случае даже с тестером. Это полезнее чем симулятор, особенно в плане самообучения.
Подберите вам нужный по параметрам операционник заодно.

Re: АЦП, ATMega, преобразование уровня, термометр сопротивле

Добавлено: Пт фев 13, 2009 09:29:12
Neekeetos
Солнцеворот писал(а):Долго думал куда эту тему поместить, и, все-таки, решил - сюда.

Интересная задача.
Необходимо снимать температуру с термометра сопротивления при помощи АЦП микроконтроллера ATMega16. Схема придумалась такая: делитель напряжения, один из резисторов - термометр сопротивления, второй - постоянный резистор с сопротивлением в 5 раз большим, чем номинальное сопротивление термометра (при этом зависимость напряжение от температуры практически линейная).
Возьми и поменяй твои два сопротивления местами, тогда все будет тоже самое но без дикого смещения из за разности сопротивлений в 10 раз, потом подбери величину опорного напряжения на меге (ну или второе сопротивление) так чтобы все входные значения укладывались в диапазон ацп

Добавлено: Пт фев 13, 2009 14:25:22
Лёха С
Если я опять ничего не путаю, то ошибка в формулах

V=(Uout+Uin*Ky)/(Ky+1)

т.е. например V=(D+C*Ky)/(Ky+1)

Uout=V*(Ky+1)-Uin*Ky

а вообще, кто бы знающий проверил, а то давно я ничего не считал.

Добавлено: Пт фев 13, 2009 16:37:11
xDevs
Протеус конечно не без глюков, но такую простую вещь как ОУ LM358 он обычно довольно точно симулирует. Автор, у вас питание +5В, и сигнал хотите тоже +5В на выходе, но это невозможно с использованием данного ОУ. Он не Rail-to-rail, т.е. не может работать когда уровни приближаются к земле или питанию.

Ставьте или ОУ который умеет Rail-to-rail, например AD8542, или другое питание, например -12 и +12В. И тогда все будет симулировать почти как в жизни :)))