Комплект электроники Urd

Итак, начнем публикацию собственно конструкции, и начнем ее с описания комплекта электроники. Здесь будут приведены фотографии того, что фактически было сделано, т.е. версии 1.0, но выложенная разводка платы будет соответствовать тому, что мы планируем делать в будущем, и имеет номер версии 1.1. Разница между ними в основном косметическая и в размерах — версия 1.1 почти на сантиметр меньше.

Материнская плата Urd 1.0, полностью собранная.

Материнская плата Urd 1.0, полностью собранная.

Комплект плат версии 1.0, незапаянный

Комплект плат версии 1.0, незапаянный

Как уже было сказано ранее, существует несколько способов изготовить комплект электроники для репрапа совместимый с широко применяемыми ныне прошивками, требующими для компиляции Arduino IDE — собрать все элементы на одной плате или комплекте плат, и собрать систему из готовых модулей. Первый способ несколько дешевле, но в домашних условиях повторить его нетривиально, поскольку большинство ключевых элементов требует поверхностного монтажа.1 Поэтому мы выбрали путь по сборке комплекта из готовых модулей, где роль самодельных элементов сводится к коммутации, а основные компоненты заказываются. Этот способ несколько дороже,2 зато гораздо проще, и повторябельнее в домашних условиях — платы для Мёбеля и для прототипа серии Urd мы благополучно изготовили на коленке утюгом, не имея до этого вообще никакого внятного опыта подобной деятельности.

К слову сказать, микросхемы контроллеров шаговых двигателей с делителем шагов до 16 производят лишь несколько фирм во всем мире, и отечественных аналогов у них не существует, а с отечественными микроконтроллерами дело и вовсе швах — типа, выкручивайтесь как знаете. Вот, выкручиваемся.

Материнская плата.

Материнская плата Urd 1.0 вид сверху.

Материнская плата Urd 1.0 вид сверху. На фотографии отсутствуют радиаторы на модулях Pololu A4988 и на силовых транзисторах.

Основой контроллера выбрана плата Seeeduino Mega, ближний родственник Arduino Mega, на основе того же микроконтроллера Atmega1280, но в несколько ином форм-факторе и с несколько иной обвязкой на плате. Вообще в индустрии такие модули называются “отладочными платами”, поскольку подразумевается, что никто не будет использовать такую платку в качестве основы собственно серийной конструкции, а просто отработает схему, и конечное устройство уже будет собрано с нуля. Однако, после того как проект Arduino увенчался таким успехом и подвиг людей, не хотевших даже слышать о микроконтроллерах, на работу с электроникой, это уже давно не правило.

Принципиальная схема материнской платы Urd v1.1

Принципиальная схема материнской платы Urd v1.1

Если бы в наших краях легко было бы достать Arduino Mega, то мы наверное предпочли бы не выпендриваться и не рисовать плату с нуля, а взяли бы один из вариантов уже давно разработанных и хорошо зарекомендовавших себя в репрапостроении плат RAMPS. Однако Seeeduino Mega, и его местный клон Freeduino Mega+ заметно проще достать,3 они подешевле, и отличаются одним интересным свойством — стабилизатор напряжения 5В на плате оных заметно мощнее чем на Arduino Mega, что позволяет полностью положиться на нее в смысле получения питания 5В для всего остального, и применить более дешевый блок питания на 12 вольт вместо, например, компьютерного.

В качестве контроллеров моторов мы используем модули на основе микросхем фирмы Allegro A4988, выпущенные американской фирмой Pololu, (Pololu A4988 Stepper Motor Driver Carrier) точно так же как их использует схема RAMPS.4 В отличие от более ранних модулей на A4983, A4988 требуют на один резистор меньше обвязки и снабжены защитой от короткого замыкания на выходах, что весьма пользительно.5 Приобрести эти модули у поставщиков в России затруднительно так же как и раньше, но их можно заказать непосредственно у самой фирмы Pololu с доставкой по EMS — доставляют на раз, и довольно быстро. Существует полный клон этих модулей, с документацией для самостоятельного изготовления, называемый Stepstick — но купить готовое будет дешевле.6

Каждому из этих модулей достаточно для управления трех логических сигналов “enable”, “direction”, “step” — т.е. “включись”, “крутить туда/обратно” и “сделай шаг”, так что подключение их сводится к выведению этих сигналов на ноги Seeeduino Mega без каких-либо изысков, и подаче двух видов питания, для моторов и для логики. Все остальное — забота прошивки. Им также требуются три джампера с одним ограничительным резистором, чтобы менять значение делителя шагов — на этой плате также оставлены джамперы, на случай если вам понадобится поиграть делителями. Я некоторое время думал перейти на микропереключатели, но они занимают на плате больше места, и стоят дороже, а лазить туда надо редко. Настолько редко, что в версии 1.1 я вообще спрятал их под модули, что позволило уменьшить размер платы. Теоретически, можно еще сэкономить и припаять четыре ножки выводимые на мотор так чтобы они торчали вверх, но хотя так было сделано на Мёбеле, от этого мы впоследствии отказались — разъем болтается, места по вертикали требуется больше. Для работы этим модулям обязательно (!) требуются радиаторы и принудительная вентиляция, хотя размер радиатора большой роли не играет, лишь бы аккуратно приклеился на корпус микросхемы.

Для запитывания нагревателей мы используем уже упомянутые ранее полевые транзисторы IRL3803. Если вам не подсунули убитые, то они должны, по спецификации, держать до 120 ампер, а на 10-12 амперах которые использует наш нагревательный стол они даже не будут греться. И не греются, но одна партия бессвинцовых транзисторов нам попалась бракованая или поддельная,7 и чуть не устроила пожар с закоротом стола на 12 вольт через неизвестно откуда взявшееся паразитное сопротивление, так что будьте бдительны. Радиаторы на них совершенно опциональны, и становятся полезны только если с транзистором таки что-то стряслось — в этом случае они спасают плату от дополнительных повреждений.

Скомпоновано все это вместе в этакий трехслойный бутерброд — Pololu A4988 сверху, наша плата посередине, Seeeduino Mega снизу. Это позволяет уменьшить размеры платы, что положительно сказывается на стоимости изготовления. В той плате что вы видите на снимке допущено несколько дурацких ошибок. Во-первых, я прозевал и забыл перед заказом вывести один из слоев надписей — мелочь, но неприятно. Во-вторых, дырочки для ножек Seeeduino Mega слишком маленькие, и ножки гребенки пролезают туда с большим трудом. В приведенной здесь разводке версии 1.1 эти ошибки исправлены.

Материнская плата Urd 1.0, вид снизу

Материнская плата Urd 1.0, вид снизу

После того как все благополучно запаяно, требуется еще одна операция. Плата рассчитана на выполнение на фольгированном текстолите FR4 с толщиной фольги 18нм.8 При такой толщине, дорожка выдерживающая 12 ампер 12 вольт должна иметь ширину 14мм чтобы не греться, и места на нее на плате толком нет, поэтому вместо того, чтобы надеяться, что она выдержит, мы просто напаиваем дублирующие силовые провода непосредственно на еще не обрезанные после запайки ножки транзисторов и колодок. На прототипе эти дорожки горели у нас неоднократно.

Материнская плата Urd 1.0, вид снизу

Материнская плата Urd 1.0, вид снизу после окончания пайки.

На плате предусмотрены разъемы для трех оптических датчиков, конструкцию которых я опишу ниже, и трех микровыключателей, которые используются там, где точность оптики без надобности, но иметь датчик полезно для безопасности работы. Микровыключатели используются в нормальнозамкнутом состоянии, на случай обрыва провода и прочих подобных неприятностей.

Все оставшиеся свободными ножки до которых удалось дотянуться не создавая в плате лишних дырок разведены на три дополнительных разъема расширения вместе с землей и питанием, на всякий случай.9 Ножки SPI и трех последовательных портов оставлены незапаяными, но на плате предусмотрено место для соответствующих разъемов, на случай если они потребуются пользователю.

Разводка материнской платы Urd v1.1

Разводка материнской платы Urd v1.1

Список радиоэлементов:

  • Seeeduino Mega — 1 штука.
  • Модули Pololu A4988 — 4 штуки.
  • Транзисторы IRL3803 — 2 штуки.
  • Резисторы 5.1к — 3 штуки.
  • Резисторы 4.7к — 4 штуки.
  • Резисторы 6.8к 1% — 2 штуки.
  • Резисторы 599ом 1% — 2 штуки.
  • Конденсатор электролитический 100мкф 12в или более — 1 штука.
  • Конденсатор электролитический 10мкф 5в или более — 2 штуки.
  • Колодки для нагревателей — 2 штуки.
  • Колодка для питания — 1 штука.
  • Гребенки PLS — 5×2, 3×3, 4×4, 3×6, 1×8.
  • Гребенки PLD — 1×4, 1×16, 4×3.
  • Разъем WF-3 — 1 штука.
  • Гнездо PBS-32 — 2 штуки.
  • Джамперы — 12 штук.

Ответные части разъемов:

  • Гнезда BLS на кабель — 5×2, 3×3, 4х4.
  • Гнездо PBD на плату — 1×16.10
  • Гнездо IDC-8F на шлейф — 2 штуки.
  • Розетка HU-3 — 1 штука.

…вроде бы ничего не потерял.

Плата передней панели управления.

Штатная кнопка Reset от Seeeduino, используемая как основное средство экстренной остановки, и ножка номер 13, на которой во всех ардуинообразных микроконтроллерах уже висит светодиод с резистором, выведены на разъем для передней панели, к которому ленточным кабелем подключается вот такая вот платка:

Плата передней панели Urd, вид сверху.

Плата передней панели Urd, вид сверху.

Схема принципиальная платы передней панели Urd

Схема принципиальная платы передней панели Urd

Причины того, что платка именно такая, в основном исторические. Вообще, как вы могли убедиться выше, у Seeeduino Mega еще осталось изрядное количество свободных ножек, так что можно было бы ничего такого не делать. Однако, на плате прототипа, которая все еще делалась утюгом, и минимальная ширина дорожки не позволяла просунуть ее между ножек разъема, свободных ножек для расширения не хватало. Когда я собрался таки подключить индикатор и пищалку, встал вопрос о том как бы это сделать половчее. Вычитав про способ подключения ЖК-индикаторов через шифт-регистр, я вознамерился его повторить, для чего в модуле передней панели и присутствует шифт-регистр 74HC595. А первым попавшимся под руку ЖК-модулем был индикатор МЭЛТ MT-16S2D-2YLG местного производства.

Плата передней панели Urd, вид снизу.

Плата передней панели Urd, вид снизу.

Тут меня ожидали очень занятные грабли, потому что описанная на вышеприведенной страничке схема не работала, и я драл себе волосы не менее суток. После глубокой медитации на первоисточники было установлено, что контроллер индикатора примененный в индикаторах МЭЛТ — тоже местного производства, фирмы “Ангстрем”, и не полностью соблюдает стандарт. А именно, в случае если состояние входа RS при четырехбитном вводе данных меняется во время между двумя поданными полубайтами, он сбрасывается в состояние приема первого полубайта, даже если сигнал Enable в этот момент не подан. Якобы “на случай ошибок”.

Способ решения проблемы оказался достаточно прост — тактовых сигналов у шифт-регистра два, одним задается скармливание ему битов данных, а другим задается появление их на выходе. Вычитанная мною схема закорачивала их друг с другом, разумно полагая что контроллер индикатора не интересуется своими входами пока сигнал Enable не подан, но в этом случае некоторое время в процессе заполнения регистра значение сигнала RS может меняться, что и приводит к тому что индикатор сходит с ума. Соответственно, мы можем просто разъединить эти два тактовых сигнала, и соединить второй из них с Enable. В этом случае, шифт-регистр по поднятию Enable в единицу единовременно меняет состояние своих выходов согласно состоянию введенных битов, а индикатор срабатывает по сбросу Enable, и получает входные биты когда они уже установлены. Значение входа RS при этом между двумя полубайтами не меняется.

Разводка платы передней панели Urd

Разводка платы передней панели Urd

По ходу дела выяснилось что подобный подход к подключению индикатора оправдан независимо от потребности в экономии ножек, поскольку неэкранированый кабель полтора метра длинной, которым он подключен, собирает наводки и помехи, к которым шифт-регистр нечувствителен, а индикатор очень даже. Можно конечно поставить туда еще один конденсатор, но отлично работает и так.

Единственный резистор на этой платке служит для ограничения тока потребляемого пьезой, потому что одна ножка Arduino в состоянии выдать не более 40 mA.

Модуль передней панели в сборе.

Модуль передней панели в сборе.

Список радиоэлементов:

  • ЖК-индикатор МЭЛТ MT-16S2D-YLG или аналог — 1 штука.
  • Шифт-регистр 74HC595 или аналог — 1 штука.
  • Пьезоизлучатель с генератором AX-1205-H2 или аналог — 1 штука.
  • Резистор 130 ом — 1 штука.
  • Гребенки PLS — 1×4.
  • Гребенки PLD — 1×8.
  • Гнездо PBD — 1×8.
  • Разъем WF-2R – 2 штуки.

Ответные части разъемов:

  • Розетка HU-2 – 2 штуки.
  • Светодиод АЛ-307 зеленый.11
  • Кнопка на замыкание.

Плата оптического датчика.

Плата оптического датчика в сборе.

Плата оптического датчика в сборе.

В качестве оптических датчиков применены KTIR0521DS, и ичего кроме двух резисторов им в общем не требуется. Сразу скажу, что они были самыми дешевыми оптоинтеррапторами которые только удалось в Москве найти, и скорее всего, благополучно заменябельны на множество аналогов, возможно более удачных — еще бы знать каких. Формат этой платки практически не изменился со времен Мёбеля, когда я списал ее с Generation 3 Electronics, но она не снабжена светодиодом и прочими компонентами, которые мы сочли излишними.12

Схема принципиальная платы оптического датчика Urd.

Схема принципиальная платы оптического датчика Urd.

Разводка платы оптического датчика Urd

Разводка платы оптического датчика Urd

Прочие электронные компоненты.

В качестве датчиков температуры применимы любые платиновые терморезисторы Pt1000 (НЕ Pt100) класса B с заявленной максимальной температурой не менее 300 градусов, а лучше 500. Они подсоединяются к плате при помощи провода МГТФ на разъемах, и самые большие сложности доставляет подпаивание к этому проводу их тоненьких ножек — мы пользуемся электропроводящим клеем “Контактол” и абсолютно им недовольны. По идее, оптимально было бы припаять их припоем ПОС-10, который обладает самыми правильными для этого случая температурными характеристиками, но искать его лично у меня сил более уже нет, а покупать моток весом 20 кило — увольте.

Питать систему можно от более или менее любого источника 12 вольт постоянного тока, дающего на выходе порядка 30 ампер, т.е. около 350 ватт. Мы практически сразу отказались от идеи использовать компьютерные блоки питания, потому что блок питания на котором написано “350 ватт” основную массу этих ватт выдает вовсе не по шине 12 вольт, ватты компьютерного блока собираются из суммарной мощности всех различных шин питания которые компьютер потребляет. В результате чтобы увидеть на шине 12 вольт 350 честных ватт вам потребуется блок питания от 400 до 600 суммарных ватт, в зависимости от того, сколько у него ватт где, что довольно дорого, а большая часть этих денег по факту не используется. Как уже было сказано выше, отдельное питание 5 вольт этой схеме не требуется вовсе, так что в серийной конструкции мы рассчитывали на китайские блоки Sanpu A-350-12, применяемые для питания светодиодных лент. Подойдут любые их родственники сходные по характеристикам и посадочным местам.

Моторы во всей системе используются FL42STH38-1684A. Теоретически подойдут более или менее любые биполярные шаговые двигатели с посадочными дырками соответствующими стандарту NEMA 17 и имеющие крутящий момент не менее 3кг*см, но мы как-то сразу зацепились за эти, и они еще ни разу нас не подвели.

Разъем для вентилятора подразумевает подключение более или менее любого вентилятора на 12 вольт, в том числе компьютерного, под который и сделан этот разъем. Без принудительной вентиляции и радиаторов, модули A4988, увы, не работают, хотя к счастью, обычно кратковременное отсутствие охлаждения им не вредит, они просто вырубаются собственной термозащитой. В серийной конструкции предусмотрено посадочное место под вентилятор калибра 60мм.

О подключении компонентов и прочих тонкостях будет рассказано в следующий раз, в цикле публикаций о сборке Urd.

Материнская плата v1.0 после установки на место.

Материнская плата v1.0 после установки на место.

Исходные файлы

Для чтения этих файлов вам потребуется программа Eagle версии 5.10 или выше. Файлы предоставляются на условиях лицензии GPLv3.

P.S.

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

Если вдруг чего непонятно, прошу задавать вопросы.

  1. Даже если вы попытаетесь изготовить один из комплектов на основе т.н. Sanguino, т.е. Arduino-образных на самом мощном микроконтроллере Atmega который еще выходит в DIP-корпусе, Atmega644P, саму эту микросхему достать окажется нетривиально.
  2. Примерно на 10-15%.
  3. Seeeduino Mega импортирует фирма Devicter в Новосибирске, откуда она легко заказывается почтой, Freeduino Mega+ паяют в Москве.
  4. Использовать модули с регулятором напряжения на плате не нужно совершенно – потреблением A4988 по шине 5В можно пренебречь. Схемы которые используют модули с регулятором появились только потому, что некоторое время из-за ажиотажного спроса Pololu просто не успевали их делать.
  5. На прототипе, два модуля A4983 были угроблены именно за счет короткого замыкания на выходах, из-за сопли на плате.
  6. Если у вас вдруг каким-то чудом получится дешевле чем у них, мы купим у вас.
  7. Помнится мне, читал я, что в бессвинцовых корпусах могут прорастать кристаллы и давать короткое замыкание. Видимо, проросли.
  8. По спецификациям фирмы Резонит у которых мы их заказываем, если бы фольга была толще, дорожки между ножками гребенки не пролезли бы.
  9. Всякий случай может включать в себя, например, читалку для SD-карточки. Лично я не вижу большого смысла в стремлении к автономии принтера, а если уж говорить об автономии, телефон на Android нынче можно купить примерно так килорубля за четыре, а сервис я на такой основе могу предоставить дай Боже, со спулером, контрольной панелью и отправкой файлов на печать по почте – хотите? Другая причина читать G-код с карточки, а именно, низкая скорость передачи данных по USB, в нашей прошивке проблемы не составляет, поскольку G-код буферизуется на восемь команд вперед, но об этом в другой раз.
  10. Если в вашей поставке Seeeduino Mega оно не идет в комплекте.
  11. У нас их еще много осталось!
  12. Для проверки работоспособности датчиков в нашей прошивке есть специальная команда, которая выводит их состояние компу или на индикатор.
  13. Посыпаю голову пеплом, git пока пользуюсь с трудом – если что не читается, свистите.