Схема подключающаяся по USB к ПК имеющая N аналоговых входов и выходов
Необходимо построить следующую схему: имеются N аналоговых входов с каким-то изменяющимся напряжением. Необходимо в реальном времени оцифровывать с них данные и отсылать на компьютер по USB, где будет проходить их обработка. После чего с компьютера по тому же USB будет идти ответ на основании которых будет задаваться напряжение на N аналоговых выходах. Число N от 7 до нескольких сотен, желаемая частота снятия сигнала со входов и податия на выходы от килогерца и выше, минимальные задержки, так же хотелось бы иметь возможность без особых проблем увеличивать число N. Как лучше строить такую схему?
Основная проблема это N выходов, не хотелось бы что бы в схеме было N ЦАПов, если со входом получилось обойтись одним АЦП (поочерёдно через вентили напряжение со входов подаётся на АЦП и там считывается), то с выходом ничего подобного придумать не получилось.
Возможно ли сделать подобное на чём-то вроде Ардуины, с учётом наличия только базовых знаний по работе с микроконтроллерами и начальному умению работы с паяльником?
Сомнительно. Не факт, что вы доведете до рабочего состояния, ну а показать кому-то будет и вовсе невозможно ;) Вы бы хоть конкретизировали, на каких частотах вам планируется совершать означенные операции. Итоговое решение будет сильно отличаться для 0.1 Гц, 1 кГц и 10 МГц.
Нда, пардон, пропустил. Килогерц, для столь многоканальной системы — вполне средние параметры. Коммутируемые аналоговые ключи я бы не рекомендовал — затрахаетесь, пардон, отлаживать. Да и цены на них тоже не малые. Я бы рекомендовал брать многоканальные АЦП/ЦАП, подключаемые по последовательному интерфейсу. АЦП типа AD7490 (16 каналов, 6$) или AD7265(12 каналов, 3$). Цены каталожные с analog.com. У нас в рознице могут расти непредсказуемо. С ЦАПами подороже — либо типа AD5318 (10 битовый, 8 канальный, 4$), либо типа AD5590 (12 битовый, 16 канальный, 20$). Подключаете все это на одну/несколько шин SPI и спокойно опрашиваете из микроконтроллера. Потом упаковываете в пакеты и отправляете по усб, попутно борясь с задержками и лагами. Хотя лучше всю обработку (и формирование значений на ЦАПы) переложить на микроконтроллер, а в компьютере осуществлять только мониторинг и управление верхнего уровня.
Минимальный бюджет, таким образом, около 80 центов за канал. Масштабируется без особых проблем.
Еще нужно внимательно смотреть, нет ли требования одномоментного опроса (сэмплирования) всех каналов. Это может значительно усложнить разработку.
Можно, конечно, попробовать сделать и на ШИМах (намутив некоторое подобие сигма-дельта АЦП и ЦАП), но тогда вам надо осуществлять ввод/вывод данных непосредственно через вашу основную микросхему обработки — а где вы возьмете несколько сотен ног GPIO, да еще с достаточными скоростями обработки, кроме как в FPGA за несколько сотен баксов?
Спасибо за рекомендации, особенно за многоканальные ЦАПы, что-то не подумал такое искать. Сэмплирование в данной задаче не нужно, в первом приближении каналы независимы, т.е. одному входу соответствует один выход, так что с ними вполне можно работать поочерёдно. Конечно в идеале хотелось бы что бы сам микроконтроллер обрабатывал основной объём информации, как вы сказали, но там возможна относительно сложная математика и калибровки, так что у меня есть сомнения что он сможет такое потянуть, хотя с этим конечно ещё надо будет экспериментировать.
ЦАП не обязательно ставить, используйте ШИМ с соответствующим фильтром.
Готового решения я не знаю, но я бы купил что-то от atmel'а c USB, поднял бы на нем виртуальный com-port (есть готовый пример на сайте), килогерц точно пролезет. Для ШИМ, АЦП тоже есть куча примеров. Работа с виртуальным последовательным портом довольно простая с обеих сторон.
Спасибо за указания. Т.е. если подобрать интегрирующую цепочку, то ШИМом можно будет без последствий управлять пьезоэлементами (на выходе будут именно они)? И как будет тогда в общих чертах происходить управление всеми выходными каналами, т.е. как на канале будет поддерживаться тот же сигнал когда микроконтроллер займётся следующим каналом? Плюс мне не очень понятно, а в чём плюс использования ШИМа на входе?
Плюс ШИМа в том, что он уже есть почти во всех контроллерах (8...16 каналов). Во многих ЦАП внутри ШИМ встроенный.
Если у контроллера 8 каналов шим, то управлять 9ю пьезами уже не получится. Если каналов действительно нужно много, то нужно покупать внешние ШИМ, обычно они вешаются на один SPI шину, и внешние АЦП — их вешать на другую SPI шину.
Поэтому рекомендую найти контроллер с USB, c 2мя SPI, с 8ю каналами АЦП и ШИМ — проверить что все работает, а потом навешивать на него внешние АЦП и ШИМ модули. Главное выбрать контроллер, чтобы ножек хватило на будущее масштабирование.