Как работает АЦП в AVR микроконтроллерах?

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

Сообщение Neekeetos »

MartKot писал(а):Если, я в эту тему попал...
Есть вот такой вопросик. Как можно получить стабильный чистый «0»Вольт в моей схемке, с выхода масштабирующего усилителя?
Опиши пожалуйста поподробнее как схема работает и как прошивка. Вообще говоря сам АЦП в АВР требует калибровки, то есть он изначально может не давать 0 при подаче 0 вольт на вход или максимум при подаче Vref. При использовании встроенных дифференциальных усилителей на собственную ошибку АЦП накладывается нелинейность и сдвиг нуля усилителя (а еще шум). По поводу 1024/1023: В формуле правильно использовать 1024, тк выход АЦП дает 1024 различных уровня.
Ноль АЦП соответствует входному напряжению 0В <= Vin < Vref/1024
один - Vref/1024 <= Vin < 2* Vref/1024
и так далее до 1023 где 1023*Vref/1024 <= Vin < Vref
Контактная информация:
Реклама
Открыл глаза
Сообщения: 58
Зарегистрирован: Вс сен 09, 2007 07:13:08

Сообщение shemmer »

Люди помогите с АЦП на атмеге8
Нужно заставить многократно измерять напряжение на РА0
Если в прерывании делаю вычисление то
результат верно отображается на индикаторе

interrupt [ADC_INT] void adc_isr(void){
Vizm=ADCW;
Vpr = (float) Vizm;
Vpr = Vpr * 0.03128;
Vdec = (int) Vpr;
Vpr = Vpr - (float) Vdec;
Vpr = Vpr * 1000;
Vmili = (int) Vpr;
}

ADCSRA=0b11011111;
ADMUX=0b11000000

Дальше преобразовываю в BCD и вывожу на LED.
Но он делает преобразование 1 раз и останавливается.
Если установить ADFR=1, то в протеусе на индикаторе кракозябры
(может на железе будет нормально?)
Как заставить делать преобразование многократно?
Контактная информация:
Реклама
Родился
Аватара пользователя
Сообщения: 13
Зарегистрирован: Пн апр 30, 2007 19:21:37
Откуда: Томск

Сообщение MartKot »

Схема бортового компа ракеты. Датчик давления – высотомер, предполагаемая абсолютная высота 1,7км, 2км берём предел относительно «0»метров(760мм.рт.ст)
В этом диапазоне датчик давления даёт (округляю) от 3В до 4В. Масштабирующий
усилитель , разворачивает его от «0»Вольт до «5»Вольт. Диапазон АЦП 0 – 5 Вольт,
0-1023 bit (10bit АЦП) 0-1024bit(11bit),по формуле. Получаем ошибку 1bit. При Uref=Uпит=5V, при измерении Uпит, будет ошибка (1023bit-1024bit)
Вложения
Volt-bit.rar
(17.41 КБ) 340 скачиваний
Простите,-спросили Мартовского Кота,-действительно ли в марте месяце?
Какая чушь,- ответил Мартовский Кот,- и март месяц не исключение!
Контактная информация:
Родился
Аватара пользователя
Сообщения: 13
Зарегистрирован: Пн апр 30, 2007 19:21:37
Откуда: Томск

Сообщение MartKot »

Вот здесь экспериментальные данные, полученные при настройке АЦП.
Вложения
Volt-bit_MPX.rar
(6.03 КБ) 352 скачивания
Простите,-спросили Мартовского Кота,-действительно ли в марте месяце?
Какая чушь,- ответил Мартовский Кот,- и март месяц не исключение!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

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

По поводу исключения смешения нуля в схеме - не думаю что это нужно тк сам АЦП в микроконтроллере имеет нелинейность в районе нуля и первые несколько отсчетов обычно не соответствуют реальности. Например когда я мерял Tiny13 то на двух микроконтроллерах при замыкании входа АЦП на землю вместо нуля АЦП давал сразу единицу.
Контактная информация:
Реклама
Родился
Аватара пользователя
Сообщения: 13
Зарегистрирован: Пн апр 30, 2007 19:21:37
Откуда: Томск

Сообщение MartKot »

Вроде по подобной методике тоже делал. Наконец-то дописал программу, похоже работает. Только коэффициент пересчёта bit => высоту, мальнько подвирает расчётный от реального. Попробовал 10метров померить... из окна, где 2000м взять?
Стенда давления под рукой нет...
Вложения
test.rar
(104.38 КБ) 272 скачивания
tornado-m.rar
(96.45 КБ) 298 скачиваний
Простите,-спросили Мартовского Кота,-действительно ли в марте месяце?
Какая чушь,- ответил Мартовский Кот,- и март месяц не исключение!
Контактная информация:
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

MartKot писал(а):Вроде по подобной методике тоже делал. Наконец-то дописал программу, похоже работает. Только коэффициент пересчёта bit => высоту, мальнько подвирает расчётный от реального. Попробовал 10метров померить... из окна, где 2000м взять?
Стенда давления под рукой нет...
Здорово получилось, судя по графикам ты можешь получить большее разрешение по высоте используя осреднение, думаю бит 12-14 точно.
Вот апноут для авр как это делается http://www.atmel.com/dyn/resources/prod ... oc8003.pdf, поскольку у тебя источник шумный сам по себе можно обойтись без генератора псевдослучайного шума как в статье.
Вопрос по поводу измерений, стало любопытно как влияет текущее давление воздуха на начальную высоту в твоей системе? По идее проще перед стартом принимать начальную высоту равной нулю и потом относительно нее рассчитывать, нет?
Информация по RLC mini находится >тут<
Контактная информация:
Родился
Аватара пользователя
Сообщения: 13
Зарегистрирован: Пн апр 30, 2007 19:21:37
Откуда: Томск

Сообщение MartKot »

При вкл. питания и прохождения теста оборудования, программа запоминает текущее давление, сохраняет в отчёте. Далее, при включении программы полёта(значит начал работаь двигатель), первым измерением
опять является давление, и относительно него уже идут все вычисления, т.е. фактически это и есть «0» точка
высоты, не зависимо от действующего давления. Но, в память пишутся «сырые» данные (т.е. реальные показания
датчиков), а в нулевую страницу памяти записываются начальные данные, максимальные и данные расчётов.
«Сырые» данные обрабатываются после полёта, с условием начальных данных, уже на земле.
На счёт 12-14bit, не понял, в предстартовой подготовке мозги совсем тупеть начинают, спать приходится по 5часов. А осреднение я и так использую, последовательность 10 замеров для одного датчика, принимаю за
одно измерение, но делить на 10 не стал, поэтому получаю вместо, к примеру, 1023Bit = 10230Bit или
допустим, (1-2bita постоянно прыгают), (500+501+500+ 500…+502+500)bit = 5003bit(x10). Если, всё
это делить на 10, чтобы получить среднее значение, надо связываться с плавающей точкой (тип float)
чего не хочется, потому что в память слова пишутся по 16bit, ели нет (тип int) при делении последний разряд
просто отбрасывается и смысл теряется. На графике это видно розовым цветом- резкие перепады на 1-2bit.
Перепад давлений на 10метров (0 – 4этаж) получается, грубо 0,7мм.рт.ст по этому прибору, что примерно
соответствует расчётным (0,8мм.рт.ст./ на 10 метр).
Вот, таким образом.
Последний раз редактировалось MartKot Пт сен 28, 2007 18:29:37, всего редактировалось 1 раз.
Простите,-спросили Мартовского Кота,-действительно ли в марте месяце?
Какая чушь,- ответил Мартовский Кот,- и март месяц не исключение!
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

MartKot писал(а): одно измерение, но делить на 10 не стал, поэтому получаю вместо, к примеру, 1023Bit = 10230Bit или
допустим, (1-2bita постоянно прыгают), (500+501+500+ 500…+502+500)bit = 5003bit(x10). Если, всё
это делить на 10, чтобы получить среднее значение, надо связываться с плавающей точкой (тип float)
чего не хочется, потому что в память слова пишутся по 16bit, ели нет (тип int) при делении последний разряд
просто отбрасывается и смысл теряется. На графике это видно розовым цветом- резкие перепады на 1-2bit.
В общем ты все правильно делаешь :). По поводу разрядности смысл прост, если ты имеешь значения меняющиеся возле одного бита те +-один отсчет ацп то после нахождения среднего ты получишь гдето то значение вокруг которого и происходят колебания, то есть повышенную точность. Для осреднения не нужно использовать плавающую точку тк ты и так получаешь 10 бит с ацп, складываешь 4 последних измерения к примеру и получаешь 12битное число максимум, оно и будет твоим 12разрядным результатом. Можно сделать более технично - использовать не осреднение а фильтр НЧ (что и рекомендуется в статье). Мне больше всего нравится IIR тк он делается на авр минимумом операций и не требует сохранения промежуточных значений а только твое число и новый сэмпл с ацп. Формула такова: НовСреднее=Среднее-Среднее/ЗначениеХ+Сэмпл_с_АЦП
ЗначениеХ = это степень фильтрации, желательно брать степени двойки так как при этом деление не нужно делать а просто сдвиг. Еще оно влияет на выходную разрядность - максимальное выходное значение будет до ЗначениеХ*МаксимумАЦП. Нпример для числа равного 8 алгоритм таков: берем старое среднее вычитаем из него восьмую часть, те его же но сдвинутое на 3 бита вправо, прибавляем к нему значение с ацп. Полученное среднее будет 10+3=13 бит эффективно :)
Информация по RLC mini находится >тут<
Контактная информация:
Родился
Аватара пользователя
Сообщения: 13
Зарегистрирован: Пн апр 30, 2007 19:21:37
Откуда: Томск

Сообщение MartKot »

Я, сразу извиняюсь, ответ еще не "переварил". Знакомый программист
с работы (из Пионерного) сечас прислал.. вот..
=========
ПРЕЦИЗИОННЫЕ ИСТОЧНИКИ
ОПОРНОГО НАПРЯЖЕНИЯ
Параметры и особенности применения
В. Авербух, к.т.н., институт метрологической службы Госстандарта России
Цель настоящей статьи - помочь разработчику устройств, включающих прецизионные источники опорного напряжения, получить макси-
мально возможное качество изделия за самое короткое время. Основное содержание статьи - как выбрать из широкой номенклатуры та-
ких источников наиболее соответствующий поставленной задаче и уже на начальном этапе максимально учесть влияющие факторы, ко-
торые нередко всплывают только на стадии заключительных испытаний. Приведенные в тексте численные данные конкретных приборов
четырех ведущих производителей опорных источников напряжения позволяют сориентироваться в достигнутом уровне.
=======
Если инет пропустит, цепляю pdf файл.
==========
не непрозазит он 320кБайт..
Сечас побью на 2 части.
Простите,-спросили Мартовского Кота,-действительно ли в марте месяце?
Какая чушь,- ответил Мартовский Кот,- и март месяц не исключение!
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Можно на slil.ru положить.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Родился
Аватара пользователя
Сообщения: 13
Зарегистрирован: Пн апр 30, 2007 19:21:37
Откуда: Томск

Сообщение MartKot »

Я на 3 rar архива разбил...
к сожалению, прямой сссссылки нет.. :(
Вложения
at116.part1.rar
(110.03 КБ) 274 скачивания
at116.part2.rar
(110.03 КБ) 275 скачиваний
at116.part3.rar
(100.85 КБ) 269 скачиваний
Простите,-спросили Мартовского Кота,-действительно ли в марте месяце?
Какая чушь,- ответил Мартовский Кот,- и март месяц не исключение!
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

MartKot писал(а):Я на 3 rar архива разбил...
к сожалению, прямой сссссылки нет.. :(
В чем была суть вопроса про источники опорного напряжения? По идее стабильности обычной кренки с запасом хватает для 10битного АЦП, а то что ты привел применяется в системах от 16 бит точности и выше :)
PS: смотри личку
Информация по RLC mini находится >тут<
Контактная информация:
Закрыто

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