Об электронике

Электроника в существующих репрапоидах бывает весьма разнообразная. Собственно, если мы пытаемся использовать уже существующий софт1 перед нами стоят следующие задачи:

  1. Интерпретировать G-код.
  2. Превращать его в сигналы управления моторами и нагревателями.
  3. Коммутировать питание на означенные согласно сигналам.
  4. Снимать температуру и делать на ее основе выводы.
  5. Принимать данные от датчиков положения и делать на их основе выводы.

Все способы решения этих задач можно подразделить на два основных направления:

  1. Использовать уже существующий хороший универсальный интерпретатор G-кода для управления станками с ЧПУ, например EMC2 или Mach3 или Ninos,2 привинтить температурный контроль при помощи штатных средств расширения этих программ и микроконтроллера.3
  2. Заставить микроконтроллер помощнее интерпретировать G-код, привесить к нему все остальное, и сделать таким манером систему более или менее в одном флаконе.

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

Сначала я надеялся повторить электронику Generation 3.4 Когда мы уже собрались было травить плату, выяснилось что просто так микросхему A3982 в Москве не найдешь, надо знать места, про которые мы тогда не знали, и что нашей квалификации в применении лазерно-утюжного метода хватает дай Бог на дорожки 0.4мм, чего уж там говорить про то что нарисовали авторы канонических модулей Generation 3. Понюхав некоторое время Generation 6 я понял, что если четырехслойную плату заказать еще можно, и я даже знаю где, то вот заказывать элементную базу выльется в неопределенно длительную задержку,5 а механика Мёбеля к тому моменту уже была готова.

И тогда поворотили мы свои взоры в направлении RAMPS. Повторить ее в чистом виде нам тоже не светило, потому что Arduino Mega как такового в городе на тот момент не нашлось, и Pololu A4983 тоже, но базовая идея оставалась плодотворной — использовать только уже готовые модули, после чего задача самой платы сводится к их коммутации, а сама плата может быть тривиальной.

Приводить всю схему и разводку пожалуй не буду — для специалиста она тривиальна, советовать ее для повторения неспециалисту я бы не стал, потому что там наверняка еще много глупостей, рано еще — поэтому, остановлюсь лишь на основополагающих моментах. Вместо Arduino Mega нам досталась Freeduino Mega (для Мёбеля) и Seeeduino Mega (для новой машины). Первое является отечественным клоном второго и ничем значительным не отличается. Вместо просто Pololu A4983, которых в тот момент не было не только у местных продавцов, но даже у производителя, удалось добыть другой вариант этого модуля, со стабилизатором напряжения непосредственно на плате что несколько упростило схему, хотя и оверкилл.

Электроника Мёбеля. Часть платы скрывается за вентилятором.

Электроника Мёбеля. Часть платы скрывается за вентилятором.

Модулям A4983 достаточно было подать сигналы enable/step/direction на каждый из четырех, питание 12 вольт, и снять с них четыре провода для мотора, и можно больше было ни о чем не думать, дальше они сами. Остались только температурные датчики и транзисторные ключи.6

Проблема транзисторных ключей решилась довольно просто — чтением форумов и даташитов были найдены IRL3803. Они отличаются следующими полезными свойствами:

  1. На наших токах, которых не бывает 20A даже по религиозным праздникам, они даже не греются.7
  2. Cрабатывают от токов которые микроконтроллеры AVR, то бишь Arduino, способны выдать на свои логические ноги — т.е. могут быть подключены к ним непосредственно без каких-либо извращений.

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

Репрапоиды издревле применяли для этого в основном разнообразные NTC-термисторы, т.е. резисторы, сопротивление которых падает с повышением температуры. Для того чтобы благополучно покрыть диапазон температур до 300 градусов8 необходимы термисторы стартующие от 100K или около того, а ничего похожего найти не удалось. Для чтения термопары применяются экзотические в наших краях микросхемы MAX6675, AD597 и иже с ними, и хотя можно при желании без них, связываться с операционными усилителями и отрицательным питанием не хотелось совсем. Зато я нашел в ассортименте Вольтмастера датчики Pt100 и Pt1000.9

Pt1000. Размер примерно 2х3мм, совсем мелкие.

Pt1000. Размер примерно 2х3мм, совсем мелкие.

Pt100/Pt1000 — платиновые резисторы с положительным термальным коэффициентом, отличающиеся достаточно линейной по стандарту характеристикой10 и хотя они подороже более обычных терморезисторов, они всяко дешевле термопары. Оставался вопрос как бы их подключить, так чтобы не перенапрягаться — по науке, для этого тоже требуются специальные микросхемы.11

Вкурив маны и даташиты, я придумал следующее:

  1. Берем Pt1000, ибо ловить разницу в 0.385 Ом совсем не прикалывает.
  2. Если мы подадим сигнал с такого датчика непосредственно на аналоговый вход Arduino, разброс все равно будет слишком маленький, поэтому сделаем делитель напряжения.
  3. Давайте посчитаем сколько же нам надо иметь сопротивления на втором плече делителя, чтобы выдавить максимум полезно используемых бит на интересующем нас температурном участке.

В общем, я насчитал целую таблицу, из которой выходила вот такая вот схема:

Схема подключения Pt1000. Разъемы для датчиков слева, ноги контроллера справа.

Схема подключения Pt1000. Разъемы для датчиков слева, ноги контроллера справа.

Это дает нам перепад на выходе датчика от 0.6 до 1.13 вольт на диапазоне 0-300 градусов. АЦП контроллера обычно принимает за единицу 5 вольт, но есть еще возможность использовать внутренний референс в 1.1 вольт. Это дает нам разрешение в 6 бит из 11 возможных, что в данном случае составляет немногим больше половины градуса.12

Для того чтобы датчики можно было откалибровать и учесть сопротивление соединений,13 я сделал одну глупость, которой в новой машине больше нет — я поставил вторым плечом подстроечники на 10K. Эти подстроечники периодически сползают, а вместе с ними сползают и температуры. В новой машине вместо них стоят последовательно два 1% резистора — 6.8K и 499Ом — и калибровка осуществляется уже программно.

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

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

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

Для новой машины, еще задолго до того как были допечатаны все ее пластиковые детали, были заказаны у производителя маленькие Pololu A4983, которые приехали через две недели с доставкой по EMS.14 Сначала я думал, что нам понадобится городить отдельный стабилизатор на 5 вольт, но вскоре обнаружилось, что стабилизатор который есть на самой Seeeduino Mega достаточно толстый, а потребление A4983 настолько мизерно, что им можно пренебречь и обойтись тем что уже есть, и плата претерпела очень небольшие изменения, в основном в размерах — ну и проводков по верхней стороне пришлось прокинуть чуть больше.

Новая электроника в ее коробочке. Знаю что дырочки неаккуратно...

Новая электроника в ее коробочке. Знаю что дырочки неаккуратно…

Джамперы, задающие модулям Pololu делитель шагов, стали переключателями, разъемы моторов с самих Pololu перекочевали на отведенное для них место, оставшиеся неиспользованными ноги контроллера выведены на гребенку в надежде на дальнейшее расширение, добавилась дублирующая кнопка Reset для экстренной остановки машины, светодиод тоже выведен на проводке на стенку коробки.

На чем мы собственно пока и остановились.

  1. Лучше Skeinforge все равно ничего нет и долго не предвидится.
  2. Ninos, кстати, имеет специальную поддержку кода порождаемого Skeinforge.
  3. Без микроконтроллера и тут никак. Теоретически можно обойтись одними параллельными портами, на практике всем это показалось слишком муторно.
  4. Кстати, сразу советую не считать Generation 3, Generation 4, Generation 6 и т.д. чем-то последовательным — наименования этих проектов никакого поступательного развития на самом деле не отражают, и создавались они для очень различных целей.
  5. Как я уже писал, нам совершенно фатально с этим не везет, и это диагноз.
  6. Вообще, можно конечно релюшками, но знающими людьми не рекомендуется — реле, если вдруг подохнет, может остаться в замкнутом положении, так и до пожара недалеко. Проблему снимают различного рода предохранителями, но охота собственно связываться? Мне нет.
  7. Вольф правда все равно прикрутил туда радиаторы, чисто из параноидальных соображений. На новой плате ничего такого уже нет.
  8. Рабочая температура 220-240 градусов, а некоторый запас нехудо бы иметь.
  9. На днях, когда мы опять потеряли пакет с последними остатками маленьких датчиков по 100 рублей, я плюнул и купил все 34 штуки что оставались на складе — ибо из-за постоянных экспериментов с нагревателями, из которых уже заклееный туда датчик извлечь нельзя, они уходят со свистом. Теперь ждите пока еще привезут…
  10. 0.385 ом на градус для Pt100 и 3.85 ом на градус для Pt1000.
  11. Как я говорил много-много раз, инженер-электронщик из меня никакой. Теперь вы понимаете, насколько? 🙂
  12. Если кто-то придумает не шибко сложный, но более идеологически правильный способ чтения таких датчиков, будет очень кстати.
  13. Припоя с серебром на такие температуры тоже под руку не попалось, поэтому датчики приклеены к проводам проводящим клеем для ремонта нагревателей автомобильных стекол — а его сопротивление хотя и близко к нулю, ему конечно тоже не равно.
  14. Меня разбудили утром и вручили пакет, чему я был несказанно и очень приятно удивлен.
  • falanger

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

  • klugl

    Прежде чем обсуждать, подскажите, какова же основная концепция при построении проекта в целом и электроники в частности. Варианты вижу такие:

    1) Максимальная бюджетность 2) Максимальная простота для производства «на коленке» 3) Максимальное качество продукта 4) Максимальная приспособленность для массового производства. 5) Иное.

  • @klugl:

    Сложный вопрос. 🙂

    Вышеописанное скорее пункт 2, потому что мы делали его на коленке, более коленно некуда. Чтобы перейти от единичных машин к какому-никакому производству, о чем мы потихоньку подумываем, нужно что-то ближе идеологически к упомянутому выше Generation 6 и место где их можно заказывать в готовом виде за разумную цену, т.е. некое сочетание п.1 и п.4. (Обратите внимание на DRV8811 например, которые там применены и являются дешевыми клонами чего-то другого, чего именно — не помню…)

    Для наколенного же повторения достаточно причесать то что я уже нарисовал и не травить плату руками, более простой для повторения схемы для репрапоидов просто нету в природе. Но это одновременно и самый дорогостоящий вариант по очевидным причинам, все импортные компоненты импортируются уже в собранном виде… Хотя Makerbot последних поколений представляет собой гибрид — модули Generation 3 вешаются на стандартный Arduino Mega, так что может это тоже осмысленно.

  • klugl

    Правильно ли я понимаю, что мысли о массовом (мелкосерийном) изготовлении присутствуют?

    Сразу вопрос. как планируете распространять? У нас нас как разработчиков всго разного оборудования есть желание обзавестись подобной штукой чтобы бодро можно было печатные платы изготавливать (самое быстрое изготовление на сегодня занимает никак не меньше трёх дней, а становится лазерно-утюговыми джедаями как-то не хочется) Плюс лазер приделать для изготовления опытных деталей из листового металла(сейчас пользуемся услугами лазерного центра МИФИ, у них качественно и недорого, но опять же не быстро)

    Рассматривается ли вариант использовать специальноизготовленную «цельнокусочную электронику»?

    В принципе могу предложить два варианта,

    1) можно взять какую-нибудь реп-раповскую схемотехнику и её подзаточить (правд, как показывает опыт, часто выкладывают в таком вид, что быстрее заново сделать, например так было с «марсоходом» http://www.marsohod.org/)

    2) можно сделать спецплату на базе одной из наших разработок.

    Для обоих вариантов требуется понимание, какие входы выходы нужны и в каком количестве.

  • @klugl:

    Присутствуют. Пока в основном мысли, надо еще кучу всего решить перед этим.

    Потому, если позволите, не в комментах, а личным письмом, сейчас все равно принимать какие-то меры рано. 🙂

  • klugl

    Отправил на контатный майл письмо с координатами.