АЦП дифференциальное подключение аналоговых входов
- Войдите на сайт для отправки комментариев
Вс, 30/10/2016 - 21:47
Люди добрые, подсобите немножко.
Сделал резисторный мост для измерения для Pt 1000 для ардуины меги.

Немного не хватает точности, раза в 2-3 бы поточнее. Почитал интернен, вроде как можно сделать дифиринциально подключение на аналоговые входа. Нашел похожую ссылку:
http://arduino.ru/forum/programmirovanie/voltmetr-i-millivoltmetr-odnovr...
Почитал даташит. Но, такое с непревычки сразу не переваришь, со всеми этими битовыми сдвигами.
Если не затруднит, можно простенький пример как это реализовать и коментарий бы к каждой строчки, чтобы прояснение наступило.
И если не сложно, то и пример бы с использованием встроенного в ардуину усилителя (с коментами).
mikazakov, Вы в каком месте даташит читали? Видимо не в том. Вот вам нужный кусок. Почитайте, подумайте почему никто не использует дифф режим на мк.
The device also supports 16/32 differential voltage input co
mbinations. Four of the differential inputs (ADC1 &
ADC0, ADC3 & ADC2, ADC9 & ADC8 and ADC11 & ADC
10) are equipped with a programmable gain stage, pro-
viding amplification steps of 0 dB (1x), 20 dB (10x) or 46
dB (200x) on the differential input voltage before the ADC
conversion. The 16 channels are split in two sections of 8 channels where in each section seven differential analog
input channels share a common negative terminal (ADC1/ADC9), while any other ADC input in that section can be
selected as the positive input terminal. If 1x or 10x gain
is used, 8 bit resolution can be expected. If 200x gain is
used, 7 bit resolution can be expected
Ну я вот использовал, в чем проблема в этом абзаце? Что в диф. режиме как отрицательную ногу можно использовать только 2 ноги, по одной на секцию? То есть, диф.режим, по сути ограничивается только 2-я парами сигналов .. хотя бы так. В иных "продвинутых камнях и этого нет.
Или то, что предусилитель "жрет" разрядность? 10х - не жрет. А когда требуется предусилитель в 200х .. то хоть что-то снять уже кайф. Это же программное управление! Хороший сигнал - оцифровываем как есть 1:1, слабый - усиливаем 10х и снова оцифровываем. Что-то там вроде как есть? Ну давай попробуем на 200х .. авось чего и поймаем.
Вот совсем непонятно почему "никто не использует", поясните плиз..
Arhat109-2, If 1x or 10x gain is used, 8 bit resolution can be expected
Ну, маловато будет .. и что? Подключал микрофон к диф. режиму .. 7 там или 8 бит .. мне было вот не сильно существенно, а то что имелась возможность усиливать сигнал - было полезно. Также подключал 2 микрофонных шилда в диф. режиме .. "уши робота". Мне было крайне полезно что сигнал выходит знаковый и можно быстро понять "с какой стороны прилетело". Это даже удобнее и быстрее, чем крутить сервой узв. датчик и выяснять "хде препятствие" в программном плане. Ваще хочу сделать "командоаппарат" с управлением голосом, типа "ко мне!". :)
Не знаю .. у каждой железяки есть свои аппаратные ограничения. Разве это повод "не использовать"? Можно конечно ставить навесные детальки и получать лучше, но это всегда и везде можно. Нет? :)
P.S. 10х не жрет, было в том плане, что там практически и так точность оцифровки 8-9 бит, а тут ещё один бит уходит под знак.
dimax, собственно, я почитал ваши посты на этом форуме на эту тему. И мысль была такая, запитать мост +5 В, а при снятии показаний использовать диффиренциальный режим с опорным напряжением +2.56 от самой меги. И получить как бы точность почти в два раза большую, может меня бы это и устроило бы. А усилитель встроенный поюзать просто любопытно.
dimax, Arhat109-2: если не трудно,таки небольшой код на мою тему с комментариями, а то без комментариев у меня мысли с мертвой точки не сдвинутся. А то как то примеров для работы через регистры в интернете не особо много. И даташит, все таки больше справочник, там уже какое то понимание нужно иметь, а понимания пока нет.
Не, увольте. С кодом сейчас "не ко мне", ибо заняты подготовкой к соревнованиям.
А вот по точности и разрядности, дополню: разрядность АЦП в 8 бит, это ваще-то как-бы точность в районе 0.5%, что уже относится к "прецезионному" классу приборов в метрологии и соответственно требует регулярной поверки, калибровки и т.д и т.п. А ещё замечу, что точность радиодеталей в 1% тоже УЖЕ считается прецезионной. а обыкновенные детальки имеют типовой разброс значений в 5-20%, что без соответствующих ужимок и прыжков как-бы и вовсе исключает изготовление приборов с погрешностью ниже 5-10% в "домашних условиях" (бытовая техника).
И вот расскажите мне, "на кой ляд" вам надо 10 бит и более в АЦП-хах? :) А про между протчим, на 8-и битах, Мега могет делать замеры чуть ли не на мегагерце..
ТС-у: мостовая схема измерений, конечно же позволяет изготовить прецезионный приборчик .. но, Вам для него потребуются не менее прецезионные деталюшки, подстройки и т.д. А также регулярные поверки прибора .. у Вас есть "хде" делать это?
Arhat109-2:
"на кой ляд" вам надо 10 бит и более в АЦП-хах? :)"
Да не в разрядности, дело в том что нужно с датчика получить точность хотя бы в полградуса. Сейчас на делителе напряжения расчетная точность 1,5 градуса на единицу АЦП, но с учетом что последней цифре при измерениях верить никогда нельзя, то получается еще грубее. Дело не в разрядности 8, 10, 16 или 125, а втом что бы измеряемый диапазон немного растянуть по дискретному интервалу. Простое решение я вижу именно в дифферинциальном измерение с более низким опорным напряжением.
К сожалению упрощающих библиотек-оберток для этой цели я не нашел. А биты сдвигать это тяжко с непревычки.
Поэтому речь не идет о прецезионных вещах, датчик у меня категории В, т.е. точность 0,3 градуса. Ну а резисторный мост поди как нибуть настрою :)
mikazakov@mai, точность измерений и встроенный АЦП в мегах -вещи взаимоисключающие. Сейчас очень много вариантов недорогих и хороших внешних ацп буквально на любой вкус. Я даже обозревал тут как-то один из таких.
ТС; Как, решили ваш вопрос?
Я тут в поиске обнаружил https://www.arduino.ru/forum/programmirovanie/nashel-eto-kto-polzuet
в ответе 46 то что вы спрашивали
в начале дорого и точно, в конце с 55 поста дешево и менее точно
http://arduino.ru/forum/apparatnye-voprosy/podklyuchenie-datchika-temperatury-pt-100-k-arduino?page=1
Упс. Незаметил что pt1000
ТС; Как, решили ваш вопрос?
Я тут в поиске обнаружил https://www.arduino.ru/forum/programmirovanie/nashel-eto-kto-polzuet
в ответе 46 то что вы спрашивали
Да нормально решился, через диференцианый АЦП. Мне ведь только температуру воды мерить +/- 0,5 градусов, поэтому вполне потянет. Включается диференциальный АЦП через регистры.
Вот ардуиновский пример с 10-ти кратным усилением при работе на пинах A0 и A1 может кому пригодится:
void setup() { Serial.begin(9600); } void loop() { //Первым должен быть регистр ADCSRA ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); ADCSRB = 0 << MUX5; ADMUX = (1<<REFS1)|(1<<REFS0)|(1<<MUX3)|(1<<MUX0); delay(200); //Запуск преобразования ADCSRA=ADCSRA|(1<<ADSC); while (ADCSRA & (1 << ADSC)); uint16_t V = ADC; Serial.println("-------------"); Serial.println(V); Serial.println("-------------"); delay(2000); }Для настройки измерения без усилителя регистр ADMUX должен быть таким (при этом нужно пины A0 и A1 местами поменять):
Сам решил померить, а то в дата шитах каждый пераметр трусливо обставляют десятью оговорками, а в сети не нашёл для меги, есть для Уно http://www.openmusiclabs.com/learning/digital/atmega-adc/
Короче, всё мерял по науке, ENOB. Результаты;
for( uint16_t i = 0; i < INBUF; i++) { int16_t tempr = inp[i]; if(singl_dif) { if ( tempr & 0x0200) tempr += 0xFE00; // Convert to negative 16-bit word (2's comp) else tempr += 0x200; } f_r[i] = tempr -512; }Синус с ослиграфа Хантек, 5В пик-пик, ацп конфигурировалось с референсом 2.56 для дифа и 5 для сингл эндед.
Пасибки, а то меня тут пытались сколько раз с дерьмом мешать .. все норамльно там с точностью. А иметь программное усиление в диф. режиме - оказалось очень даже удобно в свое время..
Я не совсем уверен, что у меня х200 правильно намеряно, там 25 мкВ на бит (!) а никаких мер по экранировке, очень может быть сетевая наводка пролезла.
В софте вроде правильно, мне не удалось получить в том же скетче на Дуе результат личше чем 9.3 бита, ни в сингл ни дифф, а усиление там чисто символическое 2... Вот те и 12-бит. Как закончу, может отдельный топик по Дуе и маплу (stm32) закину