Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: измерительная система на 8 каналов на Atmega 8535
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
kofa
Здравствуйте, уважаемые участники форума!

Мне требуется сделать систему измерения напряжения на 8 каналов. Сделал вот по такой схеме(принципиальная схема в архиве).МК- Atmega 8535. Каналы опрашиваются поочередно с 1-го по 8-й. После каждого переключения канала делаю холостое преобразование для исключения взаимовлияния каналов.
Диапазон входных напряжений от 0 до 5 В.
Частотный диапазон входных сигналов хотелось бы хотя бы до 30 кГц, но пока проверяю на постоянных.
Точность мне нужна максимально возможная в данной ситуации, в общем беру все 10 бит.
Использую режим ADC Noise reduction. Результаты через USART на COM-порт PC.
Скорость 4800 бит/c.
В качестве экспериментального варианта сделал вот на такой плате (схема в архиве)
Для проверки подаю напряжение от 2-х батареек через переменные резисторы. (0-3В)

В общем все как бы работает, вот только младшие 2 (часто и 3) разряда очень не стабильны. Дергаются больно сильно.
Переменники вначале на 100 кОм брал, пробовал и меньше - на 4.7 кОм, многооборотный – картина не менялась. Провода, что от резисторов к АЦП шли – пробовал вместо простых экранированные ставить – тоже не помогло. Вначале все делал от внутреннего RC-генератора на 4 МГц, но пробовал и внешний на 8 МГц ставить (правда на проводках, не знаю как там с помехоустойчивостью у него)

Я девайс подобного рода первый раз делаю, опыта практически нет, поэтому возникает немало вопросов:

1) реально ли получить без дерганий все 10 бит ваще и что для этого надо? Или 9-это предел, а колебания младшего бита сглаживать усреднением только?
2) Все ли верно по схеме у меня или может чего-то не хватает и поэтому такой косяк?
3) питание использую от USB порта… в связи с этим хочу спросить-на сколько оно стабильно? Не может ли из-за него косячить? Я его пока никак не стабилизировал…

Кто знаком с этим, подскажите пожалуйста, что можно сделать!
Буду рад услышать все замечания и поправки!
chief_olimp
datasheet читали? Где сопротивления по входу? Где сплошная земля. К тому же очень желательно оставить фольгу на стороне компонентов. К тому же, при данных раскладах, МК желательно запаять в схему а не в панельку вставить.
MrYuran
Цитата(kofa @ Feb 1 2009, 10:14) *
1) реально ли получить без дерганий все 10 бит ваще и что для этого надо? Или 9-это предел, а колебания младшего бита сглаживать усреднением только?

1-2 младших разряда даже на приличных АЦП отбрасывают, а на меге я думаю 9-это предел даже с усреднением.
При этом ни о каких 30кГц по 8 каналам не может быть и речи
IGK
1) реально ли получить без дерганий все 10 бит ваще и что для этого надо? Или 9-это предел, а колебания младшего бита сглаживать усреднением только?
Вы пока видите помехи от питания, оно же у Вас и опорное. Поэтому ставить экранированный провод на вход АЦП пока рано, надо с питанием и опорным разобраться...
Про прямое измерение 30 КГц забудьте... Читайте даташит, там указана полоса АЦП. Хотя, если пропускать периоды и синронизироваться как следует, то можно попробовать оцифровывать, например, вершину каждого 10-го импульса. Даже видел такое в реальности, но там дрожало еще больше разрядов :-) Или я Вас не так понял.

2) Все ли верно по схеме у меня или может чего-то не хватает и поэтому такой косяк?
Не стоит AREF вот так на питание заводить. Решите попробовать внутренний опорник программно подключить, он и накроется. И, скорее всего, все АЦП грохнется. Работайте строго по даташиту (пока опыта нет :-)

3) питание использую от USB порта… в связи с этим хочу спросить-на сколько оно стабильно? Не может ли из-за него косячить? Я его пока никак не стабилизировал…
Для такого питания результат неплохой. Если хотите бОльшего - стабилизируйте питание. Тогда будет плясать только младший разряд. Чтобы и он не плясал - применяйте хороший опорник. Даже ТЛ431 даст приемлемый результат. Ограничивайте полосу входного сигнала - для начала, даже после батарейки, прямо около ножек АЦП включите RC фильтр. И все равно может потребоваться программная обработка, но это будет видно после изменения схемы.




Цитата(MrYuran @ Feb 1 2009, 10:15) *
1-2 младших разряда даже на приличных АЦП отбрасывают, а на меге я думаю 9-это предел даже с усреднением.
При этом ни о каких 30кГц по 8 каналам не может быть и речи

У меня все 10 нормально себя ведут, я ничего не отбрасываю. С оверсэмплингом получал, для пробы, 11 стабильных. Но вот 12-13, как в обещалось, уже не получается. Но, сами понимаете, это сумма топологии, фильтрации входного сигнала и прочие программные заморочки. Проще более хороший АЦП применить. Даже микрочиповский, и то выигрыш дает. Но мне этого не надо, мне и так хорошо с 10 разрядами...
slog
Цитата(MrYuran @ Feb 1 2009, 11:15) *
1-2 младших разряда даже на приличных АЦП отбрасывают, а на меге я думаю 9-это предел даже с усреднением.
При этом ни о каких 30кГц по 8 каналам не может быть и речи

Очень категоричное утверждение. К тому же не соответствует действительности. А что касается AVR так 10 разрядов без дрожания совсем не проблема.
_Pasha
Цитата(kofa @ Feb 1 2009, 11:14) *

У Вас три проблемы:

1. Надо поставить на Aref хороший опорник. 


2. Надо сделать так, чтобы к пинам АЦП подводились сигналы от источника с выходным сопротивлением не более, если не ошибаюсь, 2кОм

3. Отфильтровать полосу сигнала.  Кстати, 30 кГц на каждый канал  Вы никогда не получите.
haker_fox
Цитата(_Pasha @ Feb 1 2009, 22:29) *
2. Надо сделать так, чтобы к пинам АЦП подводились сигналы от источника с выходным сопротивлением не более, если не ошибаюсь, 2кОм

Так это, может быть повторитель на ОУ поставить? С согласованием импедансов проблемы тогда отпадут. Ну и конечно RC фильтры по входу не повредят (ИМХО).
kofa
Большое спасибо всем за ответы!! в ближайшее время переделаю схему с учетом всего сказанного, и посмотрим.


Цитата(_Pasha @ Feb 1 2009, 18:29) *
3. Отфильтровать полосу сигнала.  Кстати, 30 кГц на каждый канал  Вы никогда не получите.


а какой предел по частоте?
а не на каждый можно?
как это можно правильно посчитать?
zhevak
Цитата(kofa @ Feb 1 2009, 23:13) *
а какой предел по частоте?
а не на каждый можно?
как это можно правильно посчитать?


Дейтшит по Мега8535, стр. 206 внизу:
Цитата
By default, the successive approximation circuitry requires an input clock frequency
between 50 kHz and 200 kHz to get maximum resolution. If a lower resolution than
10 bits is needed, the input clock frequency to the ADC can be higher than 200 kHz to
get a higher sample rate.

Перевод:
По умолчанию для схемы последовательного приближения что бы получить максимальное
разрешение требуется входная частота в диапазоне от 50 до 200 кГц. Если нужно разрешение
меньшее, чем 10 бит, то для получения максимальной скорости входная частота АЦП может
быть и выше 200 кГц.

Пояснение:
Зная, что для преобразования требуется 13 (и в некоторых случаях более) тактов, то,
соответственно, получаем максимальную скорость ощифровки

(50..200) / 13 = 3.85 .. 15.4 кГц

А поскольку у Вас не один канал, а восемь, то полученное значение нужно поделить еще
на весемь. Таким образом, если Вы хотите получить максимальное разрешение (10 бит) по всем
каналам, то максимум, на что Вы можете рассчитывать, -- это 0.5 .. 2 кГц.

Я Вас разочаровал?
Rst7
Цитата
А поскольку у Вас не один канал, а восемь, то полученное значение нужно поделить еще
на весемь. Таким образом, если Вы хотите получить максимальное разрешение (10 бит) по всем
каналам, то максимум, на что Вы можете рассчитывать, -- это 0.5 .. 2 кГц.

Я Вас разочаровал?


Я Вам больше скажу. Заявленным методом передачи данных
Цитата
Результаты через USART на COM-порт PC.
Скорость 4800 бит/c.

можно будет просунуть всего-то 48 измерений в секунду в каждом канале smile.gif Смысл в полосе 30кГц, если информационный канал позволит максимум 24Гц. Даже если топикстартер каким-либо образом асилит 8 каналов по 60ксемплов/с (для обеспечения заявленной полосы в 30кГц), то общий поток будет 4.8Мбит/с. Тут в пору эзернетом лить.

Надо бы осетра некисло урезать smile.gif
tyro
Может немного не в тему, но может кто скажет (а лучше ткнет носом) каков разброс (а если есть и другие параметры) внутренней опоры?
kofa
Цитата(zhevak @ Feb 2 2009, 00:30) *
Дейтшит по Мега8535, стр. 206 внизу:
Цитата

By default, the successive approximation circuitry requires an input clock frequency
between 50 kHz and 200 kHz to get maximum resolution. If a lower resolution than
10 bits is needed, the input clock frequency to the ADC can be higher than 200 kHz to
get a higher sample rate.

Перевод:
По умолчанию для схемы последовательного приближения что бы получить максимальное
разрешение требуется входная частота в диапазоне от 50 до 200 кГц. Если нужно разрешение
меньшее, чем 10 бит, то для получения максимальной скорости входная частота АЦП может
быть и выше 200 кГц.

Пояснение:
Зная, что для преобразования требуется 13 (и в некоторых случаях более) тактов, то,
соответственно, получаем максимальную скорость ощифровки

(50..200) / 13 = 3.85 .. 15.4 кГц

А поскольку у Вас не один канал, а восемь, то полученное значение нужно поделить еще
на весемь. Таким образом, если Вы хотите получить максимальное разрешение (10 бит) по всем
каналам, то максимум, на что Вы можете рассчитывать, -- это 0.5 .. 2 кГц.

Простите, я что-то не совсем понял, как вы посчитали...
1) я вот до конца не пойму-о какой частоте здесь идет речь в даташите: "требуется входная частота в диапазоне от 50 до 200 кГц"-это частота работы самого АЦП? или частота дискретизации входного сигнала? или это одно и то же?

2)не пойму формулу, по которой вы считали... Почему так?
MrYuran
Цитата
А поскольку у Вас не один канал, а восемь, то полученное значение нужно поделить еще
на весемь

Плюс задержки на переключение, иначе будем мерить переходные процессы
zhevak
Цитата(kofa @ Feb 2 2009, 17:40) *
Простите, я что-то не совсем понял, как вы посчитали...
1) я вот до конца не пойму-о какой частоте здесь идет речь в даташите: "требуется входная частота в диапазоне от 50 до 200 кГц"-это частота работы самого АЦП? или частота дискретизации входного сигнала? или это одно и то же?

2)не пойму формулу, по которой вы считали... Почему так?


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

2.
Сложно ничего нет. Все очень даже просто. (Смотрите ДШ.) Для одного измерения АЦП требуется 13 (13.5 и 25
тактов тактовой частоты, в зависимости от режима работы.) Предположим, что у нас "ручной" запуск и к тому же
не первый, значит на одно преобразование нам потребуется 13 тактов. Если мы тактируем АЦП частотой 200 кГц,
то максимальная частота, с которой мы будем получать измеренные значения составит

200 / 13 = 15.4 кГц.

И это, как заметил MrYuran без учета задержек на переходные процессы.

Поскольку АЦП у нас один на все восемь каналов, то мы вынуждены его "по кругу" подключать к каждому
каналу. Таким образом, пока мы оцифровываем один канал, остальные семь находжятся в "свободном полете".
Это значит, что если мы выберем какой-то канал, то в лучшем случае, мы сможем его обрабатывать один раз
из восьми, т.е. скорость (частота), с которой мы можем получать данные с канала будет в весемь раз меньше
скорости оцифровки АЦП. Скорость получения 10-разрядных данных мы уже посчитали, она чуть более 15
тысяч отсчетов в секунду. Следовательно, для каждого из восьми каналов, частота получения отсчетов
составит

15.4 / 8 = 1925 отсчетов в секунду.

Извините, если я очень подробно разжевал механику расчетов. Откройте ДШ и посмотрите на приведенные там
диагшраммы сигналов. Сложного там ничего нет.
kofa
Цитата(zhevak @ Feb 2 2009, 17:33) *
1. ........
2. .....
3. .......

Извините, если я очень подробно разжевал механику расчетов. Откройте ДШ и посмотрите на приведенные там
диагшраммы сигналов. Сложного там ничего нет.


Спасибо за ответ. Теперь все вполне понятно.


Цитата(Rst7 @ Feb 2 2009, 01:22) *
Я Вам больше скажу. Заявленным методом передачи данных

можно будет просунуть всего-то 48 измерений в секунду в каждом канале smile.gif Смысл в полосе 30кГц, если информационный канал позволит максимум 24Гц. Даже если топикстартер каким-либо образом асилит 8 каналов по 60ксемплов/с (для обеспечения заявленной полосы в 30кГц), то общий поток будет 4.8Мбит/с. Тут в пору эзернетом лить.

RST7, У меня к вам похожий вопрос: каким образом считали? нельзя ли поподробнее алгоритм расчета?
smac
Цитата(kofa @ Feb 2 2009, 20:24) *
RST7, У меня к вам похожий вопрос: каким образом считали? нельзя ли поподробнее алгоритм расчета?

Отвечу вместо RST7, надеюсь он не сильно обидится
8(каналов)*10(бит)*60 000(семплов) = 4,8 Мбит. И это только теория, на практике раза в 1,5 можно смело увеличивать и получим требуемую пропускную способность канала
kofa
а 60 кСэмплов (при 30 кГц) - это из расчета, что частота дискретизации должна быть минимум в 2 раза выше частоты самого сигнала? я правильно понимаю?
Rst7
Цитата
я правильно понимаю?


Безусловно. А расчет про 24 Гц полосы получен так - 4800 бод через USART - это 480 байт в секунду (фрейм же 10 бит), 3840 полезных бит в секунду, делим на 10 бит на семпл и на 8 каналов, получаем 48 семплов в секунду по каждому каналу, следовательно полоса - 24 Гц.
defunct
Цитата(slog @ Feb 1 2009, 12:33) *
Очень категоричное утверждение. К тому же не соответствует действительности. А что касается AVR так 10 разрядов без дрожания совсем не проблема.

Ну по крайней мере вторая часть утверждения очень даже соответвует действительности. 30ksps по 8-ми каналам (да даже по одному) без потерь в точности не получить.

Афтар! При использовании встроенного АЦП АВРки, при всем желании и 8 бит точности, максимум что светит - 1KSPS на канал.

Выходы такие:
1. Если принципиально пользовать AVR - запараллельте 8 штук относительно дешевых и качественных АЦП - ADS7822 (75KSPS) и одновременно считывайте все 8 каналов. (Но тут возникает проблема пропускной способности канала связи с PC, как уже упоминали выше. AVRка просто не справится с потоком данных ~1MB/s даже на макс частоте, не то что на 4Mhz как Вы планируете..., ну разве только взять AVR с внешней шиной (m162/m64/m128) подключить внешний толстый EMAC или ПЛИС и гнать данные туда).

2. Взять проц помощнее, из Атмелов под Вашу задачу так и просится AT91SAM7xxx, там уже есть встроенный достаточно быстрый АЦП (500KSPS --> 500/8 = 62KSPS на канал, ровно то что требуется) и быстрые интерфейсы - USB/EMAC. Плюс обрабатывать поток 1MB/s 32-х битному процу на 55Mhz всяко полегче чем 8-ми битной AVRке на 16Mhz.
kofa
Спасибо за предложенные решения! есть над чем подумать..
только хотелось бы понять еще одно - почему не получается нормальной передачи данных через Com на скорости выше 9600 бод. Там ведь на сколько я знаю до 230 кбод можно доходить (если длину провода укорачивать)У меня провод чуть больше полуметра, а на 19200 бод уже данные какие-то левые приходят. С чем это связано?
bloodden
С несовпадением частот. Кварц у вас на сколько на АВРе стоит?
kofa
Цитата(bloodden @ Feb 15 2009, 13:29) *
С несовпадением частот. Кварц у вас на сколько на АВРе стоит?

на данный момент от внутреннего работает на 4 МГц (с записью калибровочного байта в OSCCAL )
Но пробовал и внешний на 8 МГц ставить - тоже самое...
zhevak
Цитата(kofa @ Feb 15 2009, 13:16) *
только хотелось бы понять еще одно - почему не получается нормальной передачи данных
через Com на скорости выше 9600 бод. Там ведь на сколько я знаю до 230 кбод можно
доходить (если длину провода укорачивать)

У меня провод чуть больше полуметра, а на 19200 бод уже данные какие-то левые приходят.

С чем это связано?


Причин может быть много.

Одну из них указал bloodden.

Другая, например, -- у Вас что-нибудь со скоростью работы программы. Т.е. приняв байт, прога
может его долго обрабатывать, и на принятый второй байт в UARTe может быть записан третий
принятый байт. Правда, в UARTe имеется буфер FIFO на одн байт, и это улучшает ситуацию, но
но ведь не устраняет полностью проблему быстрого потока и медленной обработки. Что там
конкретно у Вас проге, я не знаю. Поэтому, это только предположения.

Еще одна из причин, может оказаться, что у Вас линия связи имеет большую емкость, и фронты
импульсов завалены. Т.е., опять же, так сходу и не угадать, надо смотреть осциллографом.

Межет быть еще что-нибудь. Народ при желании помочь легко накидает Вам кучу своих
предположений.

При правильной подходе к вопросам передачи данных по телефонной лапше, например, на
скорости 230 кбод, Вы должны легко преодалеть расстояние 500 м и чуть более. Что там у Вас
конктретно происходит, надо смотреть по месту. Угадывать сложно.


-- Доктор, у меня в боку колет уже третий день. Вы случайно не занете что это может быть?
Клим
Вообще то для больших скоростей уарта нужны кварцы с "правильной" частотой, непример 7,3728 MHz или 14,7456. А, если на 4 или 8 - смотрите табличку в даташите, какая там получается ошибка.
bloodden
Я имел в виду, что, например: 18 432 000 ГЦ разделить на (ровно!, это важно) 160, получится 115200. Так, как УСАПП делает 16 выборок входного сигнала, получается входная частота для него надо: 115200(например такая скорость надо) *16*10 = 18,432МГц. Если опорная частота не будет нацело делиться(тоже не всегда, это зависит от предделителя) на скорость, то у вас будет ошибка. Её можно посмотреть в даташите на МК для разных скоростей и частот в разделе, посвящённому УСАПП, в конце.
ЗЫ: Извините за сумбурность, воскресенье - день праздников 1111493779.gif и пива с водкой smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.