Делаем железку, часть 1: техзадание и техрешение
После того, как я начал более-менее регулярно делать для лаборатории различные железки, меня периодически спрашивают, кто это разрабатывает, сколько человек, как и откуда вообще берутся конкретные решения... На первые два отвечаю коротко: как правило, это делаю я один. А в качестве ответа на третий вопрос, я, пожалуй, напишу несколько подробных заметок о том, как вообще в современном мире можно дома на коленке сделать какое-нибудь интересное устройство вполне себе промышленного качества. Ну, я не знаю, что вы хотите сделать? Программируемый шестиканальный аппаратный контроллер вентиляторов с обратной связью по четырём температурным датчикам, произвольной привязкой конкретных каналов к конкретным датчикам и выбором способа управления каждым вентилятором? Не очень сложная вещь, вполне можно сварганить, но я далее буду не на её примере, а на более нужном мне устройстве. Каком — в конце расскажу, кто догадается раньше — получит пирожок.
Да, эти заметки — «разработка для чайников», то есть рассказ, как с помощью простых средств и не имея какого-то особенного багажа знаний, кроме некоторых навыков работы с электроникой и программирования, получить своё устройство. По возможности абстрагированное от железа программирование, несложные и наглядные средства разработки, никакого побайтного утрамбовывания прошивок в 1К памяти и реализации сложной логики аппаратными средствами — и так далее.
Изготовление любой железки (да и не только железки) всегда начинается с техзадания: чётко, по пунктам прописанным требованиям к техническим характеристикам. ТЗ стоит составлять (хотя бы в голове, но лучше на бумаге) даже тогда, когда вы сами являетесь и исполнителем, и заказчиком в одном лице.
У железки, о которой я буду писать в ближайшее время, ТЗ в кратком виде выглядело просто: задача — оцифровка аналоговых данных по одному каналу с разрешением не менее 14 бит и скоростью не менее 10000 отсчётов/с, интерфейс USB, питание USB. Устройство должно иметь одну кнопку управления (запуск оцифровки) и двухцветный индикаторный светодиод, по команде с компьютера оцифровка запускается либо немедленно, либо после нажатия кнопки. Оцифровка работает непрерывно с заданным интервалом в течение заданного времени (или количества отсчётов).
ТЗ — это обязательные требования, без удовлетворения которых данная железка теряет свой смысл. Далее следует вопрос, как их удовлетворять — компоненты, цены, сложность проектирования, сроки изготовления, возможно изготовления мелкой серии и так далее. Этот вопрос решает уже проектировщик, предоставляя результат в качестве ответа на ТЗ. У нас, очевидно, все вопросы и ответы крутятся в пределах одной головы, но сути дела это не меняет — переходить к изготовлению чего-либо, не удостоверившись, что мы вообще в принципе сможем соблюсти ТЗ, бессмысленно.

Решение ТЗ требует хороших представлений о современной элементной базе — не в деталях, детали проясняются по мере дела из даташитов, а представлений вообще о том, что бывает в природе. В природе бывает очень много всего — это в ЭВМ 5Э26 два шкафа из трёх были набиты элементами 2И-НЕ, а сейчас в продаже встречаются специализированные микросхемы практически на все случаи жизни, использование которых эту жизнь очень сильно упрощает. Здесь, конечно, на помощь приходит Google, из которого удобно узнавать, нельзя ли вот это вот сделать одним чипом, а далее — параметрические таблицы на сайтах производителей микросхем. Последние, как правило, у крупных производителей интерактивны и позволяют на лету фильтровать и сортировать продукцию практически по любым параметрам, от функционального назначения до материала корпуса.
Свои устройства я традиционно делаю на микроконтроллерах ATmega8 или ATmega168 с USB-интерфейсом на микросхеме FTDI FT232RL. Получается очень удобно — у FTDI отличные драйвера и подробные руководства по программированию с примерами.
Потянет ли такая связка задачу? Считаем: последовательный интерфейс к FT232RL может обеспечивать скорость до 1 Мбит/с (сама FT232 — до 3 Мбит/с), очевидно, в это требование наши 10k отсчётов по 16 бит каждый укладываются с запасом. Хватит ли скорости микроконтроллера, чтобы каждые 100 мкс выгребать нам два байта с внешнего АЦП и передавать их наружу? Опять считаем: АЦП можно присоединить по быстрому последовательному интерфейсу SPI, который у нас может работать на 4 МГц — то есть, на 16 бит ему потребуется 4 мкс. На передачу этого в FT232RL на скорости 1 Мбит/с потребуется 16 мкс, итого 20 мкс. Ещё чуть-чуть — на всякие вспомогательные действия, типа управления АЦПшкой, это ещё несколько микросекунд. Если периодичность измерений мы будем обеспечивать таймером, вызывающим прерывание (это не обязательно, но так проще всего), то на уход в и возврат из прерывания контроллеру потребуются дополнительные 3—4 мкс на сохранение и восстановление регистров. Итого — в пределах 40 мкс на одно измерение, ещё 60 мкс у нас остаются для всякого безделья — так что мы не только укладываемся в тайминги, но ещё и при желании можем прикрутить какую-нибудь обработку данных до их отправки в компьютер, например, быстро снимать по два-три отсчёта и усреднять их.
Итак, с контроллером разобрались, выбираем АЦП. Нам нужно какое-нибудь несложное, но достаточно быстрое, с интерфейсом SPI и высокой разрядностью. Таких, прямо скажем, дохрена, так что смотреть надо на доступность в продаже (я обычно беру ИМС в «Терре», но если надо что-то редкое, то можно заказать по каталогу Farnell напрямую или через ту же «Терру» или Digikey — через ChipFind, например). Помимо аналоговых и скоростных параметров, смотреть надо на логику работы цифровой части: она бывает разная, хотя, казалось бы, интерфейс один и тот же. Кому-то для оцифровки нужна отдельная внешняя тактовая частота, кто-то цифрует по тактовому сигналу SPI, одновременно выдавая результат предыдущей оцифровки, у кого-то вообще всё уже на борту и ничего лишнего не надо, а у особо быстродействующих моделей и вовсе встречаются экзотические решения типа сдвоенного SPI с одной тактовой и двумя одновременно работающими каналами данных, один из которых передаёт младший байт, а второй — старший.
В данном случае я выбрал AD7685 — 16-битный АЦП с однополярным 5-вольтовым питанием (USB!), в очень маленьком корпусе и с крайне простым управлением: ему надо дёрнуть сигнал CNV (т.е. завести на этот вход какую-нибудь ножку микроконтроллера и просто один раз поменять на ней уровень, в программе это делается, очевидно, ровно в одну строчку), после этого подождать 2,2 мкс — и можно по SPI сгружать два байта свежих данных. Всё общение с АЦП при написании прошивки контроллера в Arduino (об этом — в следующих заметках) сведётся к пяти строчкам кода, ошибиться в которых не сможет даже законченный идиот: поднять CNV, подождать не менее 2,2 мкс, опустить CNV, прочитать первый байт, прочитать второй байт.
Итак, с элементной базой определились, в ТЗ вписались с хорошим запасом (60 мкс свободного времени на каждом цикле, полные 16 бит разрешения), стоимость получается разумной (самое дорогое — АЦП за шестьсот рублей), все компоненты есть в продаже в Москве. Можно начинать рисовать схему.


Осциллограф будет?
Любая система сбора аналоговых данных — в какой-то мере осциллограф... Но для настоящего осциллографа 10 килосэмплов всё же маловато ;)
http://i044.radikal.ru/1002/a6/f5dd35b067c4.jpg
Если не связано с вентиляторами, то должно быть да :)
Случаем не компьютеризированный измеритель времени отклика? Уж очень все складывается — разрядность больше 14 бит ни к чему, если в ЖК мониторах LUT о 14 битах — редкий зверь. На настоящем осциллографе нам такое уже показывали в тесте данной тематики. Там даже рабочая частота девайса указана схожая. Полагаю, маэстро собрался в некотором роде научить “старого пса” современным трюкам :)
Эх, ностальгия — статья та вышла еще когда ЭЛТ не были вытеснены, а зрение не посажено...
Олег, а ты с максимом не работал? Реально ли у них что-то заказать в очень мелких количествах? Хочу VFD драйвер, штучек <10, для дома-семьи. Заказал семплы (на свою контору, весьма правдоподобно вышло) — запилил московский офис..
Через Farnell — да хоть одну штуку. Не бесплатно, конечно.
У них нету
http://www.mitracon.ru
http://www.altex-com.ru
Ну и вообще http://www.chipfind.ru/search/?part=MAX6921®ion=0
За последний линк отдельное спасибо!
Пошёл мучать поставщиков.
Раз написано — «разработка для чайников», то спрошу. Что подразумевается под оцифровкой аналоговых данных с определенным разрешением? Приведите пример, плиз
На входе есть сигнал U(t) от некоторого датчика, на выходе надо получить таблицу значений U с точностью dU, измеренных с интервалом dt.
Пример: реакция компьютера на нажатие кнопки на клавиатуре есть результат оцифровки давления на эту кнопку с разрешением 1 бит.
Спасибо! Продолжим образовываться
Продолжение-то когда? Очень интересно.
Тем более я в своё время со знакомым пытался сделать что-то подобное. Даже спаяли железяку, в которой самостоятельно прописали протокол обмена данными с компортом. :) Помню разгребал тонкости :)
Усб так и не прикрутили, а потом находили на атмегу исходники с использованием УСБ прямо на основе атмеги, но завести эту радость так и не удалось. А библиотека так и звалась — avrusb. Точнее завести бинарник получилось, а скомпилить нет. Тонкостей много, а уточнить не у кого. Так что ждём с нетерпением :) Тем более дома куча электроники которая работает не так как хотелось бы :)
Сегодня выложу.
По поводу avrusb: самый безгеморройный со всех сторон способ подключения любого микроконтроллера по USB — это поставить FT232RL. Последовательный интерфейс с одной стороны, виртуальный COM-порт или прямой интерфейс (D2XX) с другой, поддержки со стороны МК не надо вообще никакой, со стороны компа — тонны примеров и инструкций, а также готовые библиотеки. На втором месте — МК со встроенным USB, на третьем — вот эта avrusb (ныне v-usb).