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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
Солнцеворот
Встал на лапы
Сообщения: 141
Зарегистрирован: Вт июн 03, 2008 01:39:47

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

Сообщение Солнцеворот »

Долго думал куда эту тему поместить, и, все-таки, решил - сюда.

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

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

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

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

Зависимость напряжения от температуры
Изображение
Аватара пользователя
Mamonth
Вымогатель припоя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

Первая мысль приходящая в голову - пересчитать делитель....
Вторая - усилитель...
Третья... может терморезистор заменить на что-нить более приемлимое?
Today fine night...
Аватара пользователя
asteroid7
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

...
Как бы так сделать, преобразовать уровень напряжения таким образом, чтобы при 30 град Цельсия на входе в АЦП было 0, а при 50 град Цельсия было 1023 ?
...
Самое простое на ОУ необходимый наклон характеристики делать, и смещение на нём легко задать.
Термопару, обычно, не подключают напрямую к АЦП.
Аватара пользователя
Солнцеворот
Встал на лапы
Сообщения: 141
Зарегистрирован: Вт июн 03, 2008 01:39:47

Сообщение Солнцеворот »

Делитель пересчитать нельзя, т.к. чем меньше постоянный резистор, тем более нелинейна зависимость напряжения сопротивления датчика( и от температуры).

Вот на ОУ как-то это можно сделать. Где об этом можно почитать? Или хоть какие ключевые слова вводить, чтобы яндекс подсказал?
mackerel
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Сообщение mackerel »

А к чему Вам линейность? Да забить на неё... Потом программно можно всё пересчитать. Если диапазон и точность небольшие - то хоть таблично преобразовать...
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

На ОУ может возникнуть проблема зависимости характеристик самого ОУ от температуры. При точности 0,5*С это конечно заметно не будет, но если точность требуется большая, то это не вариант
Аватара пользователя
Солнцеворот
Встал на лапы
Сообщения: 141
Зарегистрирован: Вт июн 03, 2008 01:39:47

Сообщение Солнцеворот »

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

Вот в Википедии написано http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D1%85_%D1%83%D1%81%D0%B8%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%B9 много о применении ОУ, но не сказано чего-то важного.
Изображение
На картинке неинвертирующий усилитель. Вот формула для его расчета Изображение
Это ли означает, что подав на неинвертирующий вход 2 Вольта, при одинаковых резисторах R1 и R2 на выходе будет 4В?

Протеус, например, с этим несогласен, и то, что будет на выходе, очень здорово зависит от напряжения питания ОУ
Изображение
Изображение
Добавлено позже:
Оказывается, при недостаточном напряжении питания ОУ ведет себя странно, и на выходе дает совсем не тот результат, которого мы ждали. При подаче напряжения питания больше 6 Вольт (из любопытства дошел аж до 1000В) Proteus стабильно выдает на выходе 4,001В
Последний раз редактировалось Солнцеворот Ср фев 11, 2009 22:46:27, всего редактировалось 1 раз.
Аватара пользователя
Lonleystranger
Потрогал лапой паяльник
Сообщения: 361
Зарегистрирован: Ср янв 21, 2009 00:45:33

Сообщение Lonleystranger »

Может по-делитантски, но я делал вход на Tiny2313 по компаратору. На одну ногу компаратора цеплял резистор+кондер (эталонное напряжение), на другую сравниваемое, запускаем таймер - и определяем когда совпадет. Если использовать поэкспериментировать с разными кондерами + 16 битовый таймер - точность намного лучше чем в АЦП меги8.
Аватара пользователя
Demus
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Пт май 18, 2007 22:04:33
Откуда: Смоленск
Контактная информация:

Сообщение Demus »

В общем постараюсь кратко)
На нелинейность правда можно забить. Аналитическое выражение для нее выводится легко для вашей первой схемы. Значит и программно нелинейность не составит труда убрать. Сразу скажу, что сам датчик имеет нелинейную характеристику. Это уже другая песня. Зависит от требований по точности измерения.
Чем плоха ваша схема - зависит от дрейфа источника питания. Для исключения этого применяют мосты.
Вот как раз мостовая схема позволяет сделать состояние баланса не только при 0С но и при 30 градусах. Сопротивление резисторов плечах моста будет равно сопротивлению датчика при 30С.
Да, и не забудте, если у вас датчик удален - надо учесть сопротивление проводов. В простейшем случае применяется трехпроводная или четырехпроводная схема подключения даттчика. Схемы и формулы Яндекс быстрей меня выдаст. Я описал что искать. Если не получится - поищу сам.
Чуть не забыл: еще нелинейность ацп вылезет...)
Аватара пользователя
Mozart
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow
Контактная информация:

Сообщение Mozart »

может просто поставить вычитатель (диф усилитель)??
и вы питаете датчик свой источником напряжения или тока??
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Аватара пользователя
Солнцеворот
Встал на лапы
Сообщения: 141
Зарегистрирован: Вт июн 03, 2008 01:39:47

Сообщение Солнцеворот »

Значит, чего я добился за ночь.
Предположим, зависимость линейная, при повышении температуры напряжение падает.
Удобнее было бы, если бы при повышении температуры напряжение росло, значит нужно использовать инвертирующий усилитель.
Рассчитав усилитель по формулам с этого рисунка
Изображение
Маткад показал вот такую зависимость
Изображение
Однако, она не подтвердилась на симуляторе Proteus7.4sp3
Изображение
А почему?
Вложения
ОУ.rar
Файл Протеуса и картинки
(149.19 КБ) 301 скачивание
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Солнцеворот писал(а):Значит, чего я добился за ночь.
...
Однако, она не подтвердилась на симуляторе Proteus7.4sp3
...
А почему?

Как это не подтвердилась? По-моему очень даже, просто вы подаете на вход усилителя с однополярным питанием синусоиду, мгновенное значение которой может быть меньше 0, естественно все значения меньше 0 обрезаются (кстати будут обрезаться и значения, превышающие напряжение питания усилителя). Чтобы наблюдать чистую синусоиду используйте ОУ с двуполярным питанием или смещайте входной сигнал так, чтобы он никогда не принимал отрицательных значений.
Аватара пользователя
Солнцеворот
Встал на лапы
Сообщения: 141
Зарегистрирован: Вт июн 03, 2008 01:39:47

Сообщение Солнцеворот »

smac писал(а):Как это не подтвердилась? По-моему очень даже, просто вы подаете на вход усилителя с однополярным питанием синусоиду, мгновенное значение которой может быть меньше 0, естественно все значения меньше 0 обрезаются (кстати будут обрезаться и значения, превышающие напряжение питания усилителя). Чтобы наблюдать чистую синусоиду используйте ОУ с двуполярным питанием или смещайте входной сигнал так, чтобы он никогда не принимал отрицательных значений.

В том-то и дело, что в ноль выход должен обращаться только при значении Uвх=0,65В. При Uвх=0,3В выход должен быть 5В.
Синусоида на входе колеблется от 0,3В до 0,65В. Выход при этом ведет себя безобразно. Например, при Uвх=0,3В выход составляет 0,667В.
Посмотрите проект, там схема собрана, остается только кнопку пуск нажать.
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Солнцеворот писал(а):Посмотрите проект, там схема собрана, остается только кнопку пуск нажать.

Вы несправедливо полагаете, что у всех есть желание и возможность качать, ставить, ломать (не дай бог) и изучать протеус и прочую ерунду только ради того чтобы посмотреть что там у Вас случилось. Если хотите получить оперативную помощь выкладывайте все что можно (графики, схемы, осцилограммы и т. п.) в распростараненных графических форматах (jpg, tif, pdf и т. п. ), если считаете нужным то можете присоединять файлы протеуса и т. п.
В частности на приведенных Вами рисунках неясен номинал R1. Также рекоммендую на неинвертирующий вход ОУ подать постоянное напряжения с резистивного делителя "верхний конец" которого подключить к + источника B1
Аватара пользователя
Солнцеворот
Встал на лапы
Сообщения: 141
Зарегистрирован: Вт июн 03, 2008 01:39:47

Сообщение Солнцеворот »

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

Я думал, у всех, кто занимается электроникой, есть специальные для этого программы, в частности, Proteus. :)
Резистор R1=1кОм. Картинки показал. Что не так?
Формулы говорят одно, Proteus - другое. Так кто же прав?
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Не верьте симуляторам.............
Аватара пользователя
bsyomov
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Вт ноя 04, 2008 11:15:49
Откуда: Санкт-Петербург
Контактная информация:

Сообщение bsyomov »

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

Программы так или иначе есть у всех, вопрос в том, что дааалеко не у всех протеус. А вот картинки браузер у всех показывает почти. =)

А на ваш вопрос - не прав протеус. Идеальных симуляторов не бывает.
Отмакетируйте, благо схема очень проста, и посидите с осцилографом, ну в данном случае даже с тестером. Это полезнее чем симулятор, особенно в плане самообучения.
Подберите вам нужный по параметрам операционник заодно.
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

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

Сообщение Neekeetos »

Солнцеворот писал(а):Долго думал куда эту тему поместить, и, все-таки, решил - сюда.

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

Возьми и поменяй твои два сопротивления местами, тогда все будет тоже самое но без дикого смещения из за разности сопротивлений в 10 раз, потом подбери величину опорного напряжения на меге (ну или второе сопротивление) так чтобы все входные значения укладывались в диапазон ацп
Лёха С
Родился
Сообщения: 2
Зарегистрирован: Пн окт 20, 2008 11:26:37

Сообщение Лёха С »

Если я опять ничего не путаю, то ошибка в формулах

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

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

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

а вообще, кто бы знающий проверил, а то давно я ничего не считал.
Аватара пользователя
xDevs
Мучитель микросхем
Сообщения: 425
Зарегистрирован: Вт фев 03, 2009 05:16:25
Откуда: Kiev
Контактная информация:

Сообщение xDevs »

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

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

Вернуться в «Микроконтроллеры и ПЛИС»