Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Задачка
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Andrew83
Помогите пожайлуста решить задачку, заранее спасибо.
Дано:
6 каналов (аналоговый сигнал около 2В)
Задача: брать точные отсчеты(12bit АЦП) каждую мс по всем 6 каналам(желательно в одно время),
записывать значения во Flash, либо сразу отправлять по USB на ПК(даже лучше).

Хотел реализовать на AT89C5131 и АЦП, но не могу подобрать быстродействующий 12 битный АЦП,
содержащий входной мультиплексор, и 6 устройств выборки-хранения перед ним.

Предложите пожайлуста свою реализацию, либо продолжите эту.
З.Ы. Каналов может быть больше, главное укладываться в 1мс.
BVU
Цитата(Andrew83 @ Apr 2 2006, 16:37) *
...
брать точные отсчеты(12bit АЦП) каждую мс по всем 6 каналам(желательно в одно время),
...

Брать точные отсчеты единовременно не получится, если у Вас одно АЦП с мультиплексированием каналов. Единовременный запуск на оцифровку (одновременно) можно делать лишь только когда имеется АЦП на каждый канал (запараллеленный запуск), а затем последовательно считав со всех АЦП результат преобразования, передать адресату.
Stanislav
Цитата(Andrew83 @ Apr 2 2006, 16:37) *
Хотел реализовать на AT89C5131 и АЦП, но не могу подобрать быстродействующий 12 битный АЦП,
содержащий входной мультиплексор, и 6 устройств выборки-хранения перед ним.

Предложите пожайлуста свою реализацию, либо продолжите эту.
З.Ы. Каналов может быть больше, главное укладываться в 1мс.
Ну, насчёт реализации не знаю, а АЦП такие действительно есть: например, LTC1408 от LT. Аналог девицы тупо запихнули 6 АЦП в один корпус, и получился AD7658. Ещё посмотрите у Maxim, NSC, TI, etc...
Shandy
Посмотри еще 8-канальный АЦП TLV2548. Хоть он и не умеет измерять одновременно все каналы, у него есть память на 8 измерений и можно быстро пробежать по всем каналам (время преобразования ~5 мкс на канал), а затем по SPI все втянуть в микроконтроллер
vladec
Если использовать внешний АЦП то качестве контроллера с USB на борту проще всего взять C8051F320, к нему даются все необходимые драйвера и библиотеки, а если устроит точность АЦП в 10 разрядов, то можно использовать и внутреннее АЦП контроллера.
Andrew83
AD7658 (250 kSPS, 12-Bit, 6-Channel), но у него 64 ноги (смогу ли развести). Стоит вроде 10-13$.
Вроде можно, в одно и тоже время, взять отсчеты по всем 6 каналам.

LTC1408 (6 Channel, 14-Bit, 600ksps), вроде то что надо, 6 каналов, на каждом УВХ, и ноги всего 32. Стоимость вроде 13-15$. Смогут ли УВХ делать выборку в один момент, а затем оцифровывать эти значения за мс?

Что лучше? help.gif а время поджимает maniac.gif
Andrew83
Просмотрел LT, TI, MAX,- чуть не утонул.
Интересное предложение по поводу C8051F320.
Вроде был настроен на AT89C5131, а теперь не знаю.
AT89C5131 smile3009.gif C8051F320
vladec
C8051F320 может быть чуть подороже, но у него как и у всего SiLabs очень хорошо с отладкой, дешевый JTAG (60$ - 100$) и как я ужеписал все библиотеки под USB. При этом еще и высокая производительность - 25 мипс.
Andrew83
У кого есть информация на AT89C5131 и AD7658 помогите пожайлуста(желательно на русском).
help.gif
Может есть готовый пример подключения к ПК.
defunct
Цитата(Andrew83 @ Apr 6 2006, 07:46) *
AD7658 (250 kSPS, 12-Bit, 6-Channel), но у него 64 ноги (смогу ли развести). Стоит вроде 10-13$.
Вроде можно, в одно и тоже время, взять отсчеты по всем 6 каналам.

LTC1408 (6 Channel, 14-Bit, 600ksps), вроде то что надо, 6 каналов, на каждом УВХ, и ноги всего 32. Стоимость вроде 13-15$. Смогут ли УВХ делать выборку в один момент, а затем оцифровывать эти значения за мс?

Что лучше? help.gif а время поджимает maniac.gif

Могу обратить ваше внимание на последовательные АЦП, к примеру ADS7816 (Burr-Brown) 12бит 200kSPS бывает в DIP, SOIC и MSOP корпусах, всего 8 ног. По цене получится несколько дороже чем предложенный Станиславом вариант, т.к. каждый АЦП $3-4 и суммарная стоимость для 6-ти каналов будет $18-$24, но зато при выходе из строя одного канала ремонт будет дешевле и проще.
defunct
Цитата(Andrew83 @ Apr 8 2006, 15:42) *
У кого есть информация на AT89C5131


На сайте Atmel'а, только боюсь AT89C5131 не потянет 6 каналов (12-бит) со скоростью преобразования выше ~10-20kSPS.

Здесь можно купить всего за $30-$40 отладочную плату Cygnal на борту:
- USB 2.0 Full speed.
- USB отладчик
- два раздельных высокоскоростных (если мне не изменят память) 16-бит 1MSPS АЦП выведенных "под ключ"
- разъемы, на которые выведены порты MK.
Andrew83
Про то, что лучше ремонто-пригодность при 6 отдельных АЦП я не подумал.
Но, тогда выбор (из существующих микросхем) еще больше.
Хотелось бы остановится на 7658(т.к. это все же 6в1),
либо (если ставить 6 шт) нужна такая микросхема, которая бы отличалась
от других (одноканальных) явным преимуществом (дабы обьяснить выбор).
Andrew83
Цитата(defunct @ Apr 9 2006, 14:29) *
На сайте Atmel'а, только боюсь AT89C5131 не потянет 6 каналов (12-бит) со скоростью преобразования выше ~10-20kSPS.

Здесь можно купить всего за $30-$40 отладочную плату Cygnal на борту:
- USB 2.0 Full speed.
- USB отладчик
- два раздельных высокоскоростных (если мне не изменят память) 16-бит 1MSPS АЦП выведенных "под ключ"
- разъемы, на которые выведены порты MK.

Вот те раз. blink.gif
Почему не потянет? huh.gif
rezident
Если синхронность оцифровки данных не очень важна (раз можно за 1мс 6 каналов измерить) то я бы взял MSP430F157 (с ADC12 и DMA), соединил бы через UART с CP2102 и всех делов smile.gif
Кстати, промеж CP2102 и MSP430 можно гальваноразвязку поставить, что немаловажно при измерении аналогового сигнала ИМХО.
defunct
Цитата(Andrew83 @ Apr 9 2006, 20:15) *
Вот те раз. blink.gif
Почему не потянет? huh.gif


Обшибся я, он оказывается enhanced core.. 6 тактов на цикл.
но все равно это медленно.. ~6-8 MIPS всего @ 48Mhz.
значит до 100ksps возможно сможет обработать для 6-ти каналов (12 bit).
Andrew83
Цитата(defunct @ Apr 9 2006, 22:40) *
Обшибся я, он оказывается enhanced core.. 6 тактов на цикл.
но все равно это медленно.. ~6-8 MIPS всего @ 48Mhz.
значит до 100ksps возможно сможет обработать для 6-ти каналов (12 bit).

Блин! Я не понимаю unsure.gif Я еще не силен в этой области.
Пишите подробней пожайлуста!
AT89C5131
6 тактов на инструкцию, частота ядра 40МГц, т.е. 25 нс, 25*6(тактов)=150нс (на инструкцию);
в другом источнике 250нс (на команду).
12bit*6(каналов)=72(bit в мс) или 9(кбайт в с). Это ведь, как кот наплакал. 12(Мбит в с) и не пахнет.
Т.е. скорость передачи маленькая, точнее обьем данных не велик.
AD7658 12bit 250kSPS=4мкс
1мс/6каналов=160(мкс на канал) из них 10мкс на АЦП, и остается 150мкс на С5131.
150мкс/250нс=600(команд на канал) не знаю, много это или мало?
С5131 должен
1. дать команду на выборку всем 6 каналам( по сути это 1 сигнал, который должен идти на все 6 каналов)
2. выбрать АЦП(канал)
3. считать код (12bit)
4. передать / записать
5. go to #2 (выбрать следующий АЦП(канал))
END/
Прокомментируйте пожайлуста, исправьте ошибки, уточните excl.gif
rezident
Цитата(Andrew83 @ Apr 10 2006, 12:35) *
С5131 должен
1. дать команду на выборку всем 6 каналам( по сути это 1 сигнал, который должен идти на все 6 каналов)
2. выбрать АЦП(канал)
3. считать код (12bit)
4. передать / записать
5. go to #2 (выбрать следующий АЦП(канал))
END/
Прокомментируйте пожайлуста, исправьте ошибки, уточните excl.gif

Если вы надеетесь получить одинаковые скорости потоков от АЦП и через USB (значение с 6 каналов в 1мс), то бросьте сразу эту затею. Хотя .... если достоверность передаваемых данных вам особо не важна, то можно использовать изохронный режим передачи и попробовать забить канал USB под завязку.
P.S. вообще, задавая вопрос, нужно начинать с описания задачи. Чего такое изобретате-то? wink.gif
Andrew83
Цитата(rezident @ Apr 9 2006, 21:56) *
Если синхронность оцифровки данных не очень важна (раз можно за 1мс 6 каналов измерить) то я бы взял MSP430F157 (с ADC12 и DMA), соединил бы через UART с CP2102 и всех делов smile.gif
Кстати, промеж CP2102 и MSP430 можно гальваноразвязку поставить, что немаловажно при измерении аналогового сигнала ИМХО.

Синхронность оцифровки данных не очень важна, Важно взять отсчеты сигнала запмненного в одно время. Т.к. это координаты 2 точек в пространстве, то для точного определения местоположения точки, нужно чтобы отсчеты были привязаны к одному моменту времени! Т.е. либо делать выборку УВХ в одно время, либо заставлять 6 АЦП оцифровывать сигнал в одно время, а затем последовательно считывать коды с АЦП.

MSP430F157 + CP2102 = 350р + 150р =500р
Если использовать встроенное АЦП (вроде там 8 каналов) то это дешевле, чем АЦП + МК(with USB),
но Есть ли там 6 УВХ, чтобы делать выборку?
Stanislav
Цитата(rezident @ Apr 10 2006, 10:44) *
Если вы надеетесь получить одинаковые скорости потоков от АЦП и через USB (значение с 6 каналов в 1мс), то бросьте сразу эту затею. Хотя .... если достоверность передаваемых данных вам особо не важна, то можно использовать изохронный режим передачи и попробовать забить канал USB под завязку.
P.S. вообще, задавая вопрос, нужно начинать с описания задачи. Чего такое изобретате-то? wink.gif
USB можно забить "под завязку" не изохроном, а балком. А вообще, в чём проблема передачи по USB?
rezident
Цитата(Andrew83 @ Apr 10 2006, 13:02) *
Если использовать встроенное АЦП (вроде там 8 каналов) то это дешевле, чем АЦП + МК(with USB),
но Есть ли там 6 УВХ, чтобы делать выборку?

Нету там синхронных УВХ. УВХ один плюс 8 канальный мультиплексор перед ним. С вашими потребностями я бы лучше 6 АЦП поставил с синхронным запуском. Но вы опять не до конца задачу обрисовали. Что в качестве датчиков? Акселерометры? Гироскопы? Или еще что-то? Бюджет какой выделен?
Делали систему позиционирования для одного завода, дык там 8 синхронных каналов АЦП обслуживались логическим автоматом, реализованным в FPGA.
Andrew83
Цитата(rezident @ Apr 10 2006, 09:44) *
Если вы надеетесь получить одинаковые скорости потоков от АЦП и через USB (значение с 6 каналов в 1мс), то бросьте сразу эту затею. Хотя .... если достоверность передаваемых данных вам особо не важна, то можно использовать изохронный режим передачи и попробовать забить канал USB под завязку.
P.S. вообще, задавая вопрос, нужно начинать с описания задачи. Чего такое изобретате-то? wink.gif

Неужели так сложно передать 12bit sad.gif
Как альтернатива, можно записывать данные в модуль Flash, а по окончанию работы слить все разом на комп. Так даже лучше наверное.
Я как раз и начал с описания задачи. А достоверность конечно важна, иначе смысл от 12bit-ого АЦП.
Andrew83
Цитата(rezident @ Apr 10 2006, 10:11) *
Нету там синхронных УВХ. УВХ один плюс 8 канальный мультиплексор перед ним. С вашими потребностями я бы лучше 6 АЦП поставил с синхронным запуском. Но вы опять не до конца задачу обрисовали. Что в качестве датчиков? Акселерометры? Гироскопы? Или еще что-то? Бюджет какой выделен?
Делали систему позиционирования для одного завода, дык там 8 синхронных каналов АЦП обслуживались логическим автоматом, реализованным в FPGA.

Две точки(излучатели порядка 100МГц) в пространстве. На каждую точку три антенны(в трех плоскостях). Радиосигнал с шести антенн (уровень сигнала от 2 до 40 дБ(или от2 до 200мВ)) усиливается, детектируется, фильтруется. Для каждой антенны идет свой канал. Далее надо измерить уровень сигнала(оцифровать) и передать на ПК через USB. Как я уже говорил, данные нужно снимать каждую мс, но не обязательно отправлять сразу на ПК(можно скидывать во Flash). Погрешность должна быть минимальной, т.е. все 6 отсчетов должны быть привязаны к одному времени.
Все это опытная установка.
Достать можно любые микросхемы.
Бюджет на микросхемы не ограничен, но любой выбор должен быть твёрдо обоснован. excl.gif
Не должно быть много излишеств. Приветствуется минимизация.
Бюджет на принципиальную схему блока с МК и на написание кода для МК не блещет sad.gif
Но по успешному завершению прийдет santa2.gif с подарками.
Да только боюсь не успею к Новому Году...
defunct
Цитата(Andrew83 @ Apr 10 2006, 09:35) *
6 тактов на инструкцию, частота ядра 40МГц, т.е. 25 нс, 25*6(тактов)=150нс (на инструкцию);

не на команду, а на цикл.. команда может быть 2х цикловая.

Цитата
в другом источнике 250нс (на команду).
12bit*6(каналов)=72(bit в мс) или 9(кбайт в с). Это ведь, как кот наплакал. 12(Мбит в с) и не пахнет.

пропускной USB хватит, если считать без учета передачи служебной информации, на 12Mbps/(6*12) = ~166.6ksps. А вот производительности МК чтобы прочитать все 6-ть каналов (12бит) и запихнуть в USB - на мой взгляд, хватит только до 100 kSPS.


Цитата
1. дать команду на выборку всем 6 каналам( по сути это 1 сигнал, который должен идти на все 6
каналов)

Команду выборки (точнее сигнал) надо не только подавать, но и снимать.

Цитата
3. считать код (12bit)

Этот пункт сильно зависит от типа АЦП. Если АЦП последовательные, то считывать можно все 6-ть одновременно, но потребуется около 50-100 инструкций. Параллельные АЦП считывать придется поочередно(последовательно), и опять же получите тех же 50-100 инструкций. Вот тут и получится тормоз, который не даст развить высокую скорость.
Stanislav
А почему бы данные из АЦП не валить прямо в USB контроллер?
TED17
Не надо забывать про асинхронность передачи по USB и разброс приема данных в операционке.
Например WinXP 20-100!!! ms. Позтому вдобавок к данным придется добавлять Timestamp, а зто
еще несколько байт на 6 канальный блок. Иначе точки отсчета здорово расползутся.
Stanislav
Цитата(TED17 @ Apr 10 2006, 22:03) *
Не надо забывать про асинхронность передачи по USB и разброс приема данных в операционке.
Например WinXP 20-100!!! ms. Позтому вдобавок к данным придется добавлять Timestamp, а зто
еще несколько байт на 6 канальный блок. Иначе точки отсчета здорово расползутся.
Дык, а где сказано о реал-тайм задаче? blink.gif По-моему, автору темы нужно просто перегнать синхронно захватываемые данные в писюк. А USB хост живёт своей жизнью, из него в память данные действительно могут относительно редко читаться, но они ведь не теряются!
Andrew83
Дополнение к задачке. excl.gif
Однозначно, Нужно данные записывать во внешний модуль Flash.
Так будет и проще и логичней.
И только по окончанию работы, спокойно сливать все на ПК по USB.

Похоже поклонников Atmelа(в частности AT89C51) и AD не особо много. sad.gif
Предпочитают SiLabs и LT.

Ставить МК с насыщенной перефирией и встроенным АЦП нет смысла. excl.gif
AT89C5131 вроде подходит. Осталось заставить его брать данные с АЦП-шок и пихать во Flash.
И по запросу от ПК сливать данные в комп. И всего-то. Если бы знать как это делать.

И остается вопрос по поводу выбора АЦП. excl.gif

AD7658 не подходит, я не нашел у него возможности делать выборку одновременно по всем 6 каналам(нашел только по 2-м). Может плохо искал? не знаете?

LTC1408 14bit 600ksps тот же вопрос. Можно ли сделать одновременную выборку?

MAX1436 12bit 40Msps- наверное перебор.
AD9222 12bit 40/65 Msps - точно перебор.

MAX115\116 можно поставить две микросхемы.

Головокружение wacko.gif
Stanislav
Цитата(Andrew83 @ Apr 11 2006, 14:23) *
Дополнение к задачке. excl.gif
Однозначно, Нужно данные записывать во внешний модуль Flash.
Так будет и проще и логичней.
И только по окончанию работы, спокойно сливать все на ПК по USB.
...............
AT89C5131 вроде подходит. Осталось заставить его брать данные с АЦП-шок и пихать во Flash.
И по запросу от ПК сливать данные в комп.
Проще и логичней, по-моему, "пихать" данные прямо в USB контроллер, а он сам уж разберётся, как их передать в писи.

Цитата(Andrew83 @ Apr 11 2006, 14:23) *
...И остается вопрос по поводу выбора АЦП. excl.gif

AD7658 не подходит, я не нашел у него возможности делать выборку одновременно по всем 6 каналам(нашел только по 2-м). Может плохо искал? не знаете?
С аглицким у Вас похоже, проблемма. Сказано же в названии чипа:

250 kSPS, 6-Channel,Simultaneous
Sampling, Bipolar 12/14-Bit ADC

А вот ещё выдержка из даташыта:
"Three CONVST pins allow independent simultaneous sampling of the
three ADC pairs".
То есть, объединив выводы CONVSTA, CONVSTB, CONVSTC, получите один вход синхронного захвата.


Цитата(Andrew83 @ Apr 11 2006, 14:23) *
...LTC1408 14bit 600ksps тот же вопрос. Можно ли сделать одновременную выборку?
Читайте внимательнее даташыт - без этого всё равно прилично работающую систему сбора данных сделать не получится.
Shandy
По поводу флэш.
С какой скоростью записывать собираешься ?
Типовое время записи - миллисекунды, правда это на сектор.
То есть надо иметь еще ОЗУ, накопить там скажем, 512 байт, и затем переписать во флэш
Andrew83
Цитата(Stanislav @ Apr 11 2006, 13:46) *
Проще и логичней, по-моему, "пихать" данные прямо в USB контроллер, а он сам уж разберётся, как их передать в писи.

Я подумал, что раз МК совмещен с USB контроллером и передавать по 12bit нет смысла, то стоит записывать все данные в память. Т.к. 32кб не достаточно, то поставить внешний модуль.
К тому же шла речь о том, что МК не успеет и считать и передать данные.
Andrew83
Цитата(Stanislav @ Apr 11 2006, 13:46) *
То есть, объединив выводы CONVSTA, CONVSTB, CONVSTC, получите один вход синхронного захвата.

Да, это мое первое задание, знаний почти нет, ничего не получается, и времени мало.
Я видел, что вывода можно объеденить, но куда денутся данные я не понял...
Встроенной памяти там нет.
Данные мне надо выводить в PAR коде. Для этого в микросхеме предназначен только один порт на все 6 каналов. Выводит по 8 bit. Буду пытаться считать, сможет и успеет ли произойти обмен с МК за мс.
Andrew83
Разбирался с интерфейсами,
Нашел сайт с хорошей литературой h))p://www.sibsutis.ru/~mavr/LIB/books.htm
Но мне очень нужен быстрый ответ по поводу DSP интерфейса:
Обычно в описании микросхемы написано "гибкий последовательный интерфейс",
а вот у MAX115\116 и AD7658 написано "Быстродействующий параллельный DSP - интерфейс".
Я знаю DSP процессоры (ADSP например), а можно подключать эти микросхемы АЦП к AT89C5131 ?
Например повесить все 12 линий выходных данных на свободные порты МК, а затем программа будет пересылать данные с порта во Flash ?
Andrew83
Посоветуйте по поводу памяти. Нужна она все же или нет, если данных (12*6) бит в мс ?
Ведь если ставить память, то она должна быть очень быстродействующей(быстропишушей).
Andrew83
smile3046.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.