Контроллер шагового двигателя своими руками

Контроллер шагового двигателя своими рукамиСоздавая станок с ЧПУ своими руками, большинство на начальном этапе останавливается на выборе покупного (чаще всего — китайского) контроллера для шаговых двигателей, потому как это экономит время. Но уже после того, как станок готов и запущен, начинает закрадываться ощущение, что что-то не то… Чего-то не хватает или что-то сделано не правильно, или не доделано… Появляется некоторое недовольство, вопросы, связанные с точностью станка с ЧПУ. Люди начинают долго и мучительно читать форумы в поисках волшебного рецепта исцеления своего родного станочка от постоянного непопадания «в десятку» (имеются в виду десятые доли миллиметра, которые должен стабильно отрабатывать даже самый пластилиновый станок с ЧПУ, сделанный своими руками).

Моя бабушка всегда говорит: «Где узко, там и рвется». И так действительно происходит! Это же справедливо и для основы основ станка с ЧПУ — механизма линейного перемещения и электроники управления, а именно — контроллера шагового двигателя. О какой точности можно говорить, если человек поставил дешевый китайский контроллер, включил на нем микрошаг 1/8 или даже 1/16 и пытается выдавить из станка микронные перемещения?

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

Первое, что я хочу получить от своего контроллера шагового двигателя — это калиброванный микрошаг, который бы настраивался под конкретный экземпляр шагового двигателя. О нелинейности характеристик шаговых двигателей я уже писал в своей статье про точность станка с ЧПУ и калибровку шагового двигателя. Если вам лень перейти по ссылке, то вкратце скажу, что в режиме микрошага вы посылаете двигателю команду повернуться на 1/8 шага (к примеру), а он поворачивается вообще не известно на сколько или вообще не поворачивается! Все это как раз из-за нелинейности характеристики шагового двигателя. Вот почему нельзя использовать микрошаговый режим в обычных китайских контроллерах для повышения точности (разрешающей способности) перемещений своего станка с ЧПУ!

Шаговый двигательКто-то, возможно, задастся вопросом — откуда берется эта нелинейность? А все дело в том, что на самом деле шаговый двигатель вообще не предназначен для работы в режиме микрошага! Шаговый двигатель предназначен только для того, чтобы шагать — ать, два! Это мы — ЧПУшники от своей голытьбы решили привнести в мир цифрового двигателя (двигателя с конечными состояниями) немного аналоговости и придумали «микрошаг», в котором шаговый двигатель «зависает» в некотором промежуточном состоянии между двумя шагами. А производители контроллеров радостно подхватили эту фишку и преподносят микрошаг, как некий стандарт де-факто! И впаривают свои контроллеры невдумчивым потребителям.

Если вы — «счастливый» обладатель контроллера с микрошагом, то сказанное мной выше вы сможете сами очень легко проверить по методу лазерной калибровки, описанному мной выше в статье про калибровку шагового двигателя. Достаточно снять со станка шаговик, приделать к нему лазерную указку, включить в контроллере режим микрошага (хотя он, конечно же, у вас включен!) и подавать ему на вход импульсы STEP. Можно прямо из Mach3 или LinuxCNC, выбрав самую минимальную подачу в ручном режиме или задавая микро-перемещения через G-коды. После каждого микрошага делайте отметки на листе бумаги, закрепленному на стене скотчем, в том месте, куда светит луч лазера. Уже после нескольких микрошагов, вы заметите, что между насечками получилось ну просто неприлично разное расстояние!

Обмотки шагового двигателяЗакончим на этом ругать производителей. Они на самом деле ничего плохого не делают. Люди хотели микрошаг — люди его получили! Сосредоточимся лучше на том, чего на самом деле хотели получить конечные пользователи от своего контроллера шагового двигателя? А хотели они получить не деление управляющего шаговыми двигателями сигнала на 8, на 16 и т.д., а деление угла поворота шагового двигателя на указанные делители! Но какое же для этого нужно подавать управляющее напряжение? Отвечу однозначно — хрен его знает! Поясню… Дело в том, что разные производители делают разные двигатели, применяют разные технологии с разным качеством и разной погрешностью. И получается так, что все шаговые двигатели разные! Даже в пределах одного типа и одной партии. Легла где-то в обмотке шагового двигателя проволочка слегка не на ту сторону — характеристика поменялась! У одного двигателя X витков, у другого двигателя X+Y витков в обмотке — опять характеристики разные. Ну и так далее — до фанатизма :)

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

Схема контроллера шаговых двигателей

Схема моего контроллера будет очень проста. Силовыми элементами, непосредственно управляющими обмотками двигателя, будут являться ключевые MOSFET-транзисторы, подключенные в виде Н-моста. Ключами будет управлять микроконтроллер. Никаких дорогостоящих микросхем-драйверов в моей схеме не будет. Вместо них будет парочка ферритовых колечек из сгоревших энергосберегающих ламп, которые отлично подходят для управления затворами MOSFET-транзисторов. В общем, я стараюсь сделать контроллер шагового двигателя доступным для повторения в домашних условиях. Также одним из его достоинств будет являться высокая ремонтопригодность (например, если сгорит какой-либо MOSFET-транзистор в силовой части, то стоимость замены составит ~20-30 рублей).

Управление затвором MOSFET через трансформаторСлева представлена схема управления затвором силового MOSFET-ключа моего контроллера шаговых двигателей. Как видно, управление затвором осуществляется через повышающий импульсный трансформатор на ферритовом кольце. Повышающий трансформатор нужен, чтобы силовой ключ полностью открывался от 5-тивольтового сигнала управления, поступающего с выхода микроконтроллера. Для полного гарантированного открытия силовым MOSFET-ам обычно требуется от 10 вольт (более детально характеристику MOSFET-а можно посмотреть на графиках в его datasheet). Особенность такого включения заключается в том, что емкость затвора MOSFET используется в режиме памяти, т.е. при прохождении открывающего импульса через диод D1, транзистор будет открыт сколь угодно долго до тех пор, пока его не закроет открывшийся транзистор Q2, разрядив емкость затвора на «землю». Благодаря такой схеме при управлении ШИМ-сигналом (PWM) удается получить до 100% глубины модуляции (в англоязычных источниках — duty circle или «цикл загрузки»). В стандартной же схеме включения трансформатора затвора (GDT — gate drive transformer), когда положительный импульс открывает MOSFET, а следующий за ним отрицательный импульс восстановления разряжает емкость затвора, удается получить лишь менее 50% периода ШИМ-сигнала.

Программа управления шаговым двигателем

Программа управления шаговым двигателем может быть условно разделена на несколько взаимосвязанных функциональных блоков. Подробнее об этих блоках и о их работе я постараюсь написать в ближайшее время. Следите за обновлениями — проект находится в активной разработке :)

  • http://synxronica.com synxronica

    А я забил на все эти микрошаги. Да и Н-мост подрубил за счёт двухполярного источника питания.

    • http://tech.dimanjy.com/ Dimanjy

      Я тоже попробовал забить на микрошаги, но у меня слишком все без них громыхает из-за резонанса :(
      Спасибо за схему — полезная! Только там не H-мост, а 2 полумоста, если быть точнее. Это очень хороший вариант экономии на деталях — с двухполярным питанием потребуется в два раза меньше силовых транзисторов. Еще я бы туда опторазвязку с LPT-портом добавил, чтобы порт обезопасить… мало ли что :)

      • http://synxronica.com synxronica

        Ну да, «подрубил» в смысле отрубил половину моста. Как только я понял, что мне паять 3 таких платы мозг сразу стал думать как бы схему упростить.
        Громыхание шаговиков у меня несоизмеримо со сверлящим мотором да и самим процессом сверления. Из-за этого и приостановил «проект», соседи по батарее стучат, зла на них не хватает))
        Есть вероятность что может в ближайшее время что-то поменяется в жилищных условиях, посмотрим.

        Между силовым блоком и портом у меня ещё плата разводки на дешифраторах, питание 5 вольт. Ибо линий у порта 8, а у 3-х силовых блоков — 12. Поэтому на оптопары забил. ,Одна микруха на этой плате уже горела, вытащил её из разъёма, вставил новую)) Они дешёвые.

      • http://synxronica.com synxronica

        Ой, ещё вопрос. Сколько Вам стоили Ваши шаговики? Я всё смотрю на цены готовых станков, и проскальзывает желание составить им конкуренцию.

    • Дмирий

      Схема может и простая, но с ошибкой нарисована. Могу себе представить, как будут греться транзисторы в работе, конечно если исправить ошибку….
      Поставь современные полевики вместо этого совкового убожества.
      Больших скоростей с этой схемой не получишь — нет динамического управления, а при высоком напряжении яйца будешь жарить на моторах. ИМХО.

      • http://tech.dimanjy.com/ Dimanjy

        Лучше бы подсказали, где ошибка!

        Эта же схема начального уровня. Она вполне имеет право на жизнь, особенно если движки не ставить амперные. Ну, поставят радиаторы побольше! Есть даже микросхема L298 с двумя мостами на биполярниках — я как раз первые драйвера для шаговиков на ней собирал. Да — яичницу пожарить реально можно :)

        Я сам только относительно недавно начал с MOSFET-ами играться, а до этого даже боялся к ним притрагиваться — внушили в детстве на кружке радиотехники, что полевики выбивает от любого чиха и паять их можно только 10-ваттным паяльником, привязав себя заземлением к батарее и надев шапочку из фольги. Теперь-то, конечно, полевики уже не те…

      • http://synxronica.com synxronica

        Хы, по порядку.
        Сия схема у меня не греется. Транзистор всего импульс отправляет шаговику, потом отдыхает до следующего. Винтовая передача такой подход позволяет использовать.

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

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

        Всерьёз разбираться в чём дело я пока не лез, но если кто-то сходу скажет в чём проблема, это будет замечательно.

        *зы: Автор блога, ты не подумай, я картинки с именем сайта не пиара ради постчу. Просто они у меня там все удобно лежат, оттуда и копирую.

        • http://tech.dimanjy.com/ Dimanjy

          Всерьез разбираться нужно только с осциллографом. Там сразу все видно — где полевик недооткрылся, где выбросы высоковольтные от индуктивности мотора идут.

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

          • http://synxronica.com synxronica

            Блин, осцилограф я лет 10 назад разобрал. Попробую схемы со звуковой платой компьютера. В принципе самопальный АЦП где-то валялся….
            В общем спасибо.
            С последним Вашим тезисом по-проще. Движок постоянного тока, время работы измеряется цельными секундами, поэтому проблема не актуальна.

          • Дмитрий

            Да, пацыки, далёкие вы походу от электроники. А посиму посоветую готовую, рабочую схему брать , простую для самостоятельного изготовления. А ошибка элементарная — земля лпт и отрицательное напряжение питания должны быть «вместе» для такой схемы включения.

          • Дмитрий

            Кстати, а может и нет, ничего хорошего в подобной простоте не нахожу. Как по мне — лучше годами испытанную пару L297+L298 с шим управлением, которая даже при 12 вольтах питания вполне справляется в высокими скоростями и умеренно греется, чем подобную бредовую схему. Не подумайте, что я ругаю ваши идеи — грабли — вещь распространенная, хочу вас от них уберечь.

          • Дмитрий

            Хы, по порядку.

            В схеме вроде всё правильно. Или таки не? Собрано, работает.

            Враньё — не может она в таком включении работать.

            Сия схема у меня не греется.

            Тоже враньё — она просто не работает, так как все ключи одновременно открыты.

          • Дмитрий

            При исправленной ошибке в схеме, возможно она как-то и будет работать

          • http://synxronica.com synxronica

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

            И таки он работает. Вот тебе гифка раз — https://img-fotki.yandex.ru/get/4518/26657401.2/0_105e7d_4e526e7f_X5L

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

            Ладно, дам тебе повод ещё поугарать. Вот первый запуск этих контроллеров год назад: http://www.youtube.com/watch?v=d6AP8eu1CqQ

          • Дмитрий

            Да не злобный я. Тебе же в рот заглядывают, лайки ставят, а ты позволяешь себе схемы с ошибками рисовать. А схема с полевиками- вообще оЦтой. То, что ты сам на что-то способен, в отличие от многих — это только плюс, и я рад за тебя. Сначала подготовься, а потом выкладывай без ошибок. Тогда и я лайкну. Удачи, не обижайся.

        • Дмитрий

          Синхроника, скажи — ты сам придумываешь такие схемы?

          Я отвечу за тебя — ты просто в принципе не понимаешь, как работает мосфет!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

          Рекомендую тебе не морочить людям голову. Эта схема греется по простой причине — ты не правильно управляешь мосфетами. Никаких резистивных делителей им не нужно. Сделай «правильный» драйвер для него.

  • http://tech.dimanjy.com/ Dimanjy

    Немного обновил статью и выложил свою схему управления силовыми MOSFET-ключами.

  • Дмитрий

    Как-то лет 6 назад я читал статью с использованием импульсных трансформаторов в подобном управлении мосфетом. Я помню, что там использовалось последовательное включение полевиков и микромощьные импульсные трансы. Схема отличается немного, но сути не меняет — заряд затвора очень коротким импульсом и разряд через Q1, а ключевое состояие поддерживается только ёмкостью затвора.. Суть работы схемы — в достаточно высокочастотном диапазоне. Ни где не встречал реализацию подобной схемы в жизни. Сложность реализации этой схемы — в управляющих импульсах на транс. Ни один мне известный ШИМ контроллер не обеспечит реализацию управдления данным методом. Вам придется использовать микроконтроллер для реализации данного процесса с собственной программой управления. Еще — один очень существенный бок схемы — затвор полевика находится в подвешенном состоянии при отсутствии закрывающих импульсов. А это точно не айс.
    Будет интересно увидеть реализацию вопроса в вашем варианте. И если не трудно, киньте ссылку на статью, будет интересно еще раз прочесть.

    • http://tech.dimanjy.com/ Dimanjy

      Я как раз и ориентируюсь исключительно на микроконтроллер, т.к. я больше программист, чем схемотехник :)

      Но непонятно, почему обычный ШИМ-контроллер не справится? Я с микроконтроллера загоняю на GDT тот же стандартный ШИМ: передний фронт дает прямой импульс, задний фронт дает обратный импульс закрытия на Q2.

      И с подвешенным состоянием затвора я пока не знаю, как бороться… Прям хоть резистор на землю через реле ставить :) Может кто подскажет… Хотя при работе схемы последним импульсом обязательно должен быть импульс закрытия, даже если отключить питание, т.к. трансформатор в любом случае должен восстановиться.

      А вот насчет частоты работы — у меня, напротив, получается, что частота ШИМ должна быть всего 1-2кГц. Только так удается получить широкий и плавный диапазон регулировки. Когда поднимаешь ШИМ до десятков килогерц, то длительность импульсов в трансформаторе становится сравнима с самим периодом ШИМ, и уже вся схема с «памятью» практически превращается в обычный GDT с duty circle близким к 50%.

      • Дмитрий

        По сути всё зависит от ёмкости затвора, но уверен — ёмкости силового хватит и для работы на 50 гц.
        Если поставить в затвор резистор — тогда теряется весь смысл замысла. Хотя, если время разряда будет больше, чем длина импульсов на рабочей частоте- возможно из этого что-то и выйдет.
        Транс должен работать в режиме насыщения и обеспечивать очень короткий и мощный импульс для зарядки затвора, а соответственно и выходной драйвер, обеспечивающий этот ток в несколько ампер, ка минимум.
        На мой взгляд заманчивая простота схемы на самом деле не оправдает себя по итогу, т.к. на самом деле не всё так просто и вся обвязка по итогу сведет простоту на нет.

        • Дмитрий

          У меня в вам вопрос — какую цель вы преследуете, разрабатывая драйвер шаговика на контроллере?

          Ведь есть куча готовых драйверов со встроенным шим аппаратно с минимальной обвязкой. Например TB6560 или DRV8825, да еще много разных. Или вы преследуете цель управлять десятками ампер?

          Вот если бы вы на контроллере сделали драйвер для сервопривода — я бы первый вам пожал руку.

          • http://tech.dimanjy.com/ Dimanjy

            Цель очень простая, и об этом я написал в самой статье — сделать драйвер с калиброванным микрошагом, которого не делает пока ни один производитель (или я об этом просто не знаю).

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

            Ну и всякие там инверторы, частотники, индукционки, высоковольтники — все это по сути одно и то же: мост или полумост. Только нагрузка разная и режимы управления.

            А вот до сервы я еще пока не добрался:) Шаговики-то на четверть только загружены. Как раз из-за применения стандартного китайского драйвера на Тошибовском чипе. Да и сами сервоприводы пока для меня экономически не выгодны :) Не дорос еще!

        • http://tech.dimanjy.com/ Dimanjy

          Не-е-ет, про резистор с релюшкой — это что-то вроде шутки. Он подключен через контакт реле, когда устройство выключено или контроллер еще не загрузился. А потом первое, что делает контроллер — это отключает это реле. Но это в порядке бреда.

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

          Про транс вы, как мне кажется, ошибаетесь. Как раз вся суть MOSFET-ов (и об этом везде написано), в малой энергии, требуемой для управления. Поэтому для открытия хватает короткого, но совсем не мощного импульса. У меня после МК стоит простенький ключик на биполярнике bf422, нагруженный на малюсенькое ферритовое колечко из люминисцентной лампы. У него по паспорту макс. ток = 50 мА. Стоит себе холодненький. Т.е. несколькими амперами там и близко не пахнет. Да и куда там в затвор амперы-то закачивать? Может вы с IGBT путаете? Я вообще сперва хотел феррит сразу на выход МК, да пожалел его. Хотя у него по паспорту до 30 мА выход держит.

          Про обвязку вы правы. Там как минимум не хватает защитных цепей, которые уже нужно подбирать исходя из характера нагрузки и от конкретного применяемого MOSFET-а. У меня, например, есть ключик с уже встроенным защитным стабилитроном (или как там его..) на затворе. У некоторых такой защиты нету. Да и паразитный диод везде разный. Кто-то говорит, что его хватает для индуктивной нагрузки, кто-то говорит, что все-равно надо быстрые диоды в параллель внутреннему ставить… В общем, вся обвязка нарастет по результатом дальнейшего макетирования и испытаний. Может и правда окажется, что овчинка не стоит выделки. Но я, все же, проверю :)

          • Сергей

            Откалибровать двигатель на микрошаг невозможно, при разной нагрузки все уплывет, ориентироваться надо только на шаг! Микрошаг это средство борьбы с резонансом, а не способ увеличить разрешающею способность станка. Да и глупость все это, в реальной жизни Вам нужны эти микроны? куда их ?)

            Десятки ампер в драйверах вообще не нужны, 2-3 ампера за глаза, а вот динамические характеристики движков зависят прежде всего от напряжения, 80 — 100 вольт хороший стимул движку крутится по шустрее :) Сейчас Китайцы делают драйвера на TB6600HQ, ставьте и не парьтесь 5ампер 40вольт :)

            Для управления мосфетом действительно надо не так уж и много энергии, затвор мосфета это мелкий кондюк, и чем дольше этот кондюк меняет своё состояние тем сильнее греется мосфет. Весь смысл в том чтобы за наносекунды вкачать в затвор эту мелкую кучу энергии, а как следствие имеем режимы на затворе близкие к КЗ, и токи будь здоров. Естественно этим можно пренебречь и рулить мосфетом микросекундами имея на борту комфортные токи и как бонус обогреватель :)

            Давно посматриваю Ваш блог, собственно тоже радовался LinuxCNC, но вот что-то сейчас подсел на GRBL.

          • http://tech.dimanjy.com/ Dimanjy

            А вы это проверяли? Откуда такие данные? Я думаю, что если компенсировать нелинейность характеристики, то проседать от нагрузки движок уже будет линейно.

            Я это знаю, и даже писал об этом в одной из статей. Но как тогда делать настройки в софте? В том же LinuxCNC нет такого, чтобы вместо одного импульса STEP он выдавал 8 или 16, или сколько там дробление в драйвере… А если даже где-то и есть возможность так настроить управляющий софт, то представьте, насколько медленнее все будет двигаться! Компу придется ждать, пока на каждый свой STEP драйвер отработает 8/16/n микрошагов!

            Я пробовал отказаться от микрошага, но меня постигла такая вибрация, что даже кривой китайский микрошаг давал в итоге более точные результаты!

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

            А с полным или даже полушагом я себе с трудом представляю железо, которое хоть как-то более-менее внятно шевелилось и давало бы при этом разрешение хоть сотки 2 или 5.

            Я под GRBL и начинал все городить :) Даже Arduino себе купил под проект. Но поняв, насколько сильно я буду ограничен, решил отказаться от него в пользу, так сказать, PC-based решения.
            Не знаю, насколько далеко развился с тех пор GRBL, но авторы его задумывали именно под ATmega328 и не больше. Есть более продвинутые Stand-alone контроллеры на базе более мощных процессоров. В основном это форки GRBL — тот же Marlin или Sprinter с заточкой под 3D-принтеры. Есть и еще, только уже ссылки посеял на них…

          • Сергей

            Не проверял!
            Микрошаг это по сути весы, с одной стороны одна обмотка с другой стороны другая, они тянут каждая в свою сторону и вал останавливается в положении равновесия этих сил, но стоит приложить еще силы как система равновесия рухнет, и вал отклонится. А внешних сил: частота вращения, ускорение, кривая строительная шпилька, сопротивление подшипников, резонансы, давление фрезы на заготовку. Где тут линейность, это идеальный генератор случайных чисел :)
            Я только ЗА микрошаг, его надо использовать! Но максимальная теоретическая точность кратна шагу, а все что внутри шага случайная погрешность и не более :)

            Про мосфеты надо смотреть предметно, где и как там ставят эти 5 — 10 ом, при 12 вольтах это по закону ома 2-1 ампера. Нагрев мосфета на высоких частотах происходит в основном в момент переключения, когда он выхватывает на себя пучек энергии :) и чем дольше мосфет переключается, тем дольше он под ударом.

            Не знаю что было раньше. Сейчас грбл отрабатывает стандартный гкод генерируемый арткамом под мачь на ура!

          • http://tech.dimanjy.com/ Dimanjy

            Это все верно, конечно. Никто не спорит. Но если убрать нелинейность двигателя — все же лучше будет! Я в этом уверен. И что впустую об этом спорить. Надо сделать, да проверить :)

            С резистором по току затвора я разобрался. Он там стоит, чтобы не попалить выход стандартных интегральных драйверов током КЗ заряда емкости затвора, о котором вы говорили. Т.е. резистор там совсем не для MOSFET-а стоит, а для его обвязки, и является компромисным между скоростью и безопасностью.

            Вот это немного непонятно, что значит «стандартный» G-код. Разные постпроцессоры генерят разный G-код под конкретный совместимый тип станка. Есть те, которые поддерживают круговую интерполяцию, есть те, которые дуги превращают в отрезки. Есть постпроцессоры с поддержкой циклов, условий и подпрограмм, а есть с преобразованием повторяющихся операций в длинные-длинные портянки, потому как станок не поддерживает циклы и подпрограммы. Тот же мачь, если не ошибаюсь, поддерживает мастера на VB-Script (или на чем там). GRBL же не сможет такое отработать.

            Вот взять, к примеру, радиатор. Я под LinuxCNC написал «мастера», в котором вводишь длину, ширину, глубину пропила и ширину ребра. Я кладу заготовку любого размера, задаю пару цифр и тыкаю «Пуск» — радиатор готов! Этот мастер — тот же G-код, только с циклами и с параметрами, передаваемыми в подпрограмму.

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

            Я тоже не против GRBL. Там можно на отдельном контроллере и LCD прикрутить и чтение с SD-карты. Тоже красиво получится и без кнопок на китайском :) Но мне больше нравится гибкость и возможность запрограммировать под свои нужды.

          • Сергей

            В зависимости от направления вращения они будут оттягивать поле погрешности то в одну то в другую сторону и это только в статических режимах, когда вал остановился! В динамике колбасить будет по полной :)

            Я с самого начала работал по цепочке CAD -> CAM -> LinuxCNС, особо не вникая какой г-код генерит САМ, работает и то хорошо :) наверное по этому переход на грбл прошел как по маслу :)

          • Дмитрий

            Поясните мне тогда, зачем во всех стандартных драйверах в цепь затвора ставят резистор 5-10-20 Ом (у всех по-разному)? Учитывая то, что больше 10-12 вольт не подают

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

          • Дмитрий

            Поддерживаю

          • Дмитрий

            Суть то про мосфеты та-же, как и про ИГБТ, и ни чего я не путаю, мои слова подтверждает вам Сергей. Это вы не совсем понимаете суть. Большие токи управления затвором возникают в момент переключения состояния полевика, либо ИГБТ, и суть как раз в том, чтоб «мгновенно» его открыть или закрыть, дабы избежать потери на переключение в линейном режиме. А колечко и биполяник не греются только по простой причине — импульс тока при переключении ничтожно короток по сравнению с общим временем переключения.

          • http://tech.dimanjy.com/ Dimanjy

            Да, я сегодня с утра уже почитал про этот резистор и разобрался. В ответе Сергею я уже об этом упомянул :)

            (Там в самом начале комментариев справа есть переключатель сортировки — чтобы в хронологическом порядке сортировать, нужно поставить там «Старое вначале»)

          • Дмитрий

            У меня, например, есть ключик с уже встроенным защитным стабилитроном (или как там его..) на затворе. У некоторых такой защиты нету. Да и паразитный диод везде разный. Кто-то говорит, что его хватает для индуктивной нагрузки, кто-то говорит, что все-равно надо быстрые диоды в параллель внутреннему ставить…

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

            Вот как то не понятно сортируются ответы….

  • http://tech.dimanjy.com/ Dimanjy

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

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

    Но вопрос-то остается! КАК ЖЕ на практике применять микрошаг для снижения резонанса, сохраняя при этом разрешение в пределах шага? Как настроить LinuxCNC или Мач, или GRBL, чтобы на китайских драйверах шагового двигателя выставить микрошаг и радоваться стабильному позиционированию и отсутствию резонанса при перемещениях?

    • Дмитрий

      Отвечаю — забросить заново изобретать велосипед )) . Всё уже за нас возможное и не возможное сделано.
      Кстати — по поводу схемы, приведенной в начале, ведь она ориентирована исключительно для гальванической изоляции первичной и вторичной цепей. И применима только для верхнего плеча. А управлять нижним плечом не составляет никакого труда.
      Думаю вам следует уделить внимание другой проблеме — а именно контролю тока через полевики. И вот вам в помощь могу подсказать отличный на мой взгляд девайс от IR -IR25750L. Который дешев и доступен и имеет неоспоримое преимущество — нет необходимости использовать шунт для измерения тока.
      А продолжая свою мысль — хочу заметить — никаких микро шагов и головняка по резонансу нет у сервоприводов (условно конечно). И если вы мне на почту кинете свой вайбер или скайп — мы это можем обсудить за пределами этого блога. У меня очень давно есть желание использовать коллекторный двигатель на привод оси. А еще большее желание есть создать контроллер свой, понимающий G- code и работающий по ЮСБ. Для этого нужен программист, понимающий и имеющий опыт работы с CNC, как вы. У меня есть программист, который мне пишет вещи, но он далёк от CNC. Считайте это предложением к взаимовыгодному сотрудничеству, если хотите )).

      • http://tech.dimanjy.com/ Dimanjy

        :) Вот вы в самом начале говорите про велосипед, а в конце сами же собираетесь его изобрести!
        Сергей же в комментариях уже упоминал его — это GRBL! Автономный контроллер со свободно распространяемым исходным кодом, над которым работает целая команда программистов-энтузиастов. Работает контроллер на базе Arduino, получает на вход G-код по USB — все что вы хотите!

        • Дмитрий

          Нет, не изобрести. А сделать свой. Для этого не нужна команда энтузиастов и Arduino (ничего против этого всего не имею, но таким путём не пойду -это бессмысленная трата времени, как по мне — есть опыт, никогда такой проект не будет доведен до логического завершения), а нужно просто сделать свой, специализированный контроллер под определенные нужды. Я имею многолетний опыт разработки в спарке с программистами, и поверьте, коллективный разум — это хорошо, и что-то типа Arduino тоже, но это всё не эффективно. Гораздо быстрее делается устройство, заточенное под конкретные задачи, заинтересованными людьми. Так, что моё предложение остаётся в силе.

          • Сергей

            Дмитрий, в GRBL и Ардуине из общего только аппаратная платформа, т.е. чип мега328п, на этом всё. Есть форки под ARM!
            А имеем, усб куда плюется г-код, а на выходе стандартные степ-дир команды.
            Зря Вы так сразу сказали что это не то…

          • http://tech.dimanjy.com/ Dimanjy

            Насколько я понял, Дмитрию нужен какой-то специализированный контроллер, заточенный под свою специфику.

          • Дмитрий

            Спорить не буду, надо покопаться в этом. ARM — это уже поинтересней….

        • Сергей

          Каждый о своем велике мечтает!

    • Сергей

      Дело в том, что микрошаг в наших случаях за пределами точности станка.
      Стоит прикрепить измерительную головку и по нажимать пальцем в разных направления на шпиндель или стол с усилием в 1кг и все … резина… я сам офигел первый раз :)
      Хорошо если в десятке будет погрешность, это если СИЛЬНО повезло :) Представим что мне повезло :) )) У меня винт катаная трапеция 3мм/200шагов = 0,015мм на шаг, т.е. в моем случае даже в пределах 5 шагов будет… будет все что угодно… Вот она горькая правда…

      И чтобы приблизится к проблеме озвученной Вами, мне надо залить фундамент, и из камня и чугуна сделать станок весом н-тон. И вот когда реально упрусь в дискретность шаговика, а бюджет станка приблизится к 1 000 000р. я просто поставлю сервы, и опять этот микрошаг меня не будет волновать…

      И кстати, я не отказываюсь от своего утверждения, что стабильность микрошага обеспечить НЕВОЗМОЖНО :)

      • http://tech.dimanjy.com/ Dimanjy

        Сергей, все это понятно :) Я уже про другое спрашиваю!
        Как применить микрошаг для снижения вибрации перемещений? Разрешение зафиксируем на уровне шага! Мне 2мм/200 шагов = 0,01мм хватает выше крыши!

        Все говорят «микрошаг применяется только для снижения резонанса». Ну так КАК, черт возьми, его применить с обычным китайским контроллером? :)

        Мне пока не видится на это ответа, т.е. пока НИКАК!

        А со своим собственным контроллером я могу, получив 1 сигнал STEP послать на движки 8 микрошаговых сигналов. В итоге у меня LinuxCNC просто будет в 8 раз медленнее слать сигналы STEP (чтобы мой контроллер успевал превратить их в 8 микрошагов), а скорость перемещения у меня в итоге останется прежней, но уже я буду обеспечивать разрешение в пределах шага, а перемещение — в микрошагах для снижения вибрации. Вот так я себе это вижу. И не представляю, как сделать тоже самое на стандартных китайских контроллерах.
        Вот, собственно, теперь в чем вопрос. Помогите в этом разобраться!

        • Сергей

          Ну почему же никак :) включаешь 1/8 шага и пользуешься. Само собой в LinuxCNC надо указать что у тебя на миллиметр не 100 шагов, а 800 ! на грбл и контроллере TB6550, я свободно катаюсь на 1000 мм в минуту. Быстрее шагать TB6550 не может, у нее предел 15кгц …

          В TB6600HG вроде как предел 200кгц 50вольт 5ампер :) 200кгц т.е. снимаются все узкие места сразу и с огромным запасом!

          • http://tech.dimanjy.com/ Dimanjy

            От чего ушли, к тому и вернулись… У меня все сейчас именно так и настроено!

            Вы, видимо, не понимаете суть проблемы. Указывая в настройках микрошаг, мы просто говорим LinuxCNC, сколько импульсов STEP нужно скормить нашему станку на 1 мм. В итоге все это пересчитывается в один лишь только параметр SCALE (конкретно для LinuxCNC, который потом можно править в конфиге), который в итоге ОПРЕДЕЛЯЕТ РАЗРЕШАЮЩУЮ СПОСОБНОСТЬ СТАНКА. В итоге в планировщике траекторий будут использоваться ВСЕ эти импульсы ДЛЯ ПОЗИЦИОНИРОВАНИЯ.

            Говоря проще, LinuxCNC или Мач, или GRBL НЕ ЗНАЕТ, что вот именно в этом месте траектории шаговый двигатель зависнет в микрошаговом положении! Ему на это плевать!

            Я не знаю, как вы умудрились не столкнуться с такой проблемой при выпиливании деталей. Понятное дело, что в CAD вы чертите модели, привязывая их к миллиметровой сетке (например). Т.е. вы на этапе проектирования изделия стараетесь избежать тех мест, которые не будут кратны разрешающей способности станка. Но ведь на практике детали могут содержать и окружности, и сплайны, да даже простые диагональные перемещения! Тут уже мимо микрошаговых состояний станку ну уж никак не пройти с такими настройками и контроллером. А в LinuxCNC вообще в ядре зашита точность в 3 знака после запятой, и он ее старается отрабатывать, зараза :) И вот тут уже и всплывает, что размеры немного не те, подшипник в посадочное гнездо не лезет, зубчики в шестеренках не стыкуются и круги овальные…

          • Сергей

            Ну и пусть зависает, это за пределом точности станка, в зоне допустимой погрешности. Если определились что точность станка 0.1мм, то все что внутри , а именно с 0.05 по 0.14 это все 0.1мм. А у Вас шаг 0,01мм, куда еще точнее!

        • Сергей

          Если продолжать идею разработки своего контролера, то оправдать целесообразность его создания можно только для LinuxCNC и Матч которые не способны шагать быстрее ~20кгц…

          Если уж делать то тогда сразу под под табличную синусойду, пусть плавненько движку крутит :)

          Но возникает не решаемая проблема: как узнать период этой синусойды, шаг отрабатывать за секунду или 1/1000 секунды. Можно конечно нагородить алгоритмов, которые будут на лету адаптироваться к частоте шагов, подстраиваясь, сжимая или растягивая периоды итд итп. Это будет работать, с небольшой оговоркой: добавится погрешность порядка 2х шагов.

          Если уж очень хочется можно в таблицу синусойды добавить корректировки на линейность вращения конкретного движка.

          Если прикинуть 20кгц * 256синусойда = 5120кгц что-то многовато … еще же ток контролировать… да и полевики согласятся ли работать на таких частотах …

          Или может поставить TB6600HG и отказаться от лпт порта?

          • http://tech.dimanjy.com/ Dimanjy

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

            И не надо дробить на 256 — двигатель на практике такое даже не чувствует, я это уже проверял! 8 ступенек — это предел.

            И в итоге если этот калиброванный микрошаг использовать вместо некалиброванного китайского, то в любом случае будет и плавно и точнее! Ну согласитесь же, наконец :)

          • Сергей

            Я Вас прекрасно понимаю, но точнее не будет :)
            1. Механика станка не позволит Вам.
            2. Не выйдет обеспечить стабильность микрошага под разной нагрузкой, даже если делать всегда полный шаг, то двигатель может и не довернуть немного или проскочить.

            А плавнее будет :)

          • http://tech.dimanjy.com/ Dimanjy

            1. Да не пытаюсь я сделать станок точнее, чем позволяет его механика. Я пытаюсь получить от него точность хотя бы ту, которую он физически может обеспечить, как если бы я крутил винтовую передачу потихонечку рукой, ориентируясь на показания часового индикатора. Я физически могу спозиционировать свой станок с разрешением цены деления моего индикатора, а это 0,01 мм! Более того, уверен, что внутри этого деления я смогу относительно точно выставить еще 4-5 положений, т.е. руками я смогу спозиционировать с разрешением 0,002 мм!

            Этого же самого я хочу добиться от электроники и двигателей — чтобы на каждый свой STEP станок ПРОВОРАЧИВАЛ двигатель, а не то ехал, то стоял из-за нелинейности. И на холостом двигателе, благодаря калибровке, у меня это получается сделать.

            2. Про нагрузки я вот что хотел сказать. Ведь есть же паспортные данные, в которых указан момент на валу, гарантированный производителем. Если не превышать эти паспортные данные, то влиянием разной нагрузки в принципе можно пренебречь, потому как мы знаем, что производитель нам что-то таки может гарантировать.

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

          • Сергей

            1. Вот выставили Вы с точностью 0.002мм, нажмите на шпиндель, потрясите конструкцию, так сказать сымитируйте работу, крутните +10мм будет там 10.002, -10мм вернется в 10.002 что там будет? +- десятки или сотки. Станок это динамическая система, десятки сил тянут в стороны. Люфты в подшипниках, гайках, кривизна направляющих, точность самих винтов, да там и до миллиметра может добежать :) … В ручную можно выставить что угодно, но станок не видит Ваш индикатор, обратной связи нет.

          • http://tech.dimanjy.com/ Dimanjy

            Да с этим-то все понятно. Жесткость — это уже отдельная история. У меня до сих пор ось Z при обработке алюминия трясется и дает красивые такие кружочки на поверхности :)

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

            Понятно, что не добиться идеала в совокупности, но можно же улучшить отдельные узлы там, где это еще возможно сделать :)

          • Сергей

            Опять же не согласен! Не надо улучшать то что и так хорошо работает. Надо искать узкие места, искать то что плохо работает и постараться сделать хорошо.

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

            Однако сколько смысла в фразе: лучшее — враг хорошего. А принцип Парето…

            В общем предлагаю завершить нашу дискуссию и остаться каждый при своем мнении :)

            И напоследок напомню: я считаю что невозможно обеспечить стабильность микрошага работающего ШД, так он нагружен динамически. :) )))

          • http://tech.dimanjy.com/ Dimanjy

            Да, ни к одной моей статье столько комментариев еще не было! :)

            Я теперь, правда, побаиваюсь начинать писать что-либо еще про двигатели :)

          • Сергей

            Пишите, пишите, пишите
            и нечего не бойтесь, я и многие другие с удовольствием читаем ваши статьи!!! :)

          • Artist

            По поводу обратной связи согласен с Сергеем. Мое мнение,( вы хотите доработать станок полностью доработав только электронику) это же нецелесообразно. Следует в первую очередь обеспечить жесткость всех узлов и самой станины, обеспечить обратную связь т.е. на каждый движок поставить по инкодеру и прописать их и использовать высоко скоростной шпиндель 40 000 об/мин.(позволит за ед. времени снимать больше с меньшей нагрузкой)
            И кстати раздробить шаг проще механически, поставьте ШВП с шагом 3 или 1,5 мм, и пользуйте в удовольствие на полушаге.
            А у вас ШВП или ТРАПЕЦИЯ?

          • http://tech.dimanjy.com/ Dimanjy

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

            Выхода два — переходить на механическое дробление шагов (но при этом сохранятся все резонансные прелести шаговика) или дорабатывать электронику, которая бы обеспечивала нормальный микрошаг.

            У меня стоит строительная шпилька с шагом 2 мм. Механически я могу подбирать дробление путем замены шестеренок на валу двигателя и на винте (можно подбирать любое соотношение, т.к. у меня кручение передается через зубчатый ремень), но мне очень не нравится, как все ревет и трясется при полном шаге!

            И Вы, опять же, забываете, что ЧПУ бывает не только со шпинделем, но и с лазером, экструдером, … Не всегда нагрузки вообще имеют место быть. И по поводу обратной связи — это уже выходит за рамки хоббийных бюджетов. Потребуются уже платы вроде Mesa с кучей входов, потому как на один LPT уже все это не влезает.

      • Artist

        (И кстати, я не отказываюсь от своего утверждения, что стабильность микрошага обеспечить НЕВОЗМОЖНО :) )

        Полностью согласен.
        А вибрации перемещений на прямую зависят от (3 Ж)- ЖЕСТКОСТЬ станка, ЖЕСТКОСТЬ инструмента, ЖЕСТКОСТЬ заготовки о чем вы выше и писали.