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

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

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

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

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

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

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

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

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

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

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

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

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

Written By: . Tagged: , .

Post navigation

  • У меня много различной оргтехники, которая вышла из строя. Выбрасывать я её не решаюсь, а вдруг пригодится. Из её частей возможно сделать что-нибудь полезное.
    К примеру: шаговый двигатель, который так распространен, обычно используется самодельщиками как мини генератор для фонарика или ещё чего. Но я практически никогда не видел, чтобы его использовали именно как двигатель для преобразования электрической энергии в механическую. Оно и понятно: для управления шаговым двигателем нужна электроника. Его просто так к напряжению не подключишь.
    И как оказалось - я ошибался. Шаговый двигатель от принтера или ещё от какого устройства, довольно просто запустить от переменного тока.
    Я взял вот такой двигатель.


    Обычно у них четыре вывода, две обмотки. В большинстве случаем, но есть и другие конечно. Я рассмотрю самый ходовой.

    Схема шагового двигателя

    Его схема обмоток выглядит примерно так:


    Очень похоже на схему обычного асинхронного двигателя.
    Для запуска понадобится:
    • Конденсатор емкостью 470-3300 мкФ.
    • Источник переменного тока 12 В.
    Замыкаем обмотки последовательно.


    Середину проводов скручиваем и запаиваем.


    Подключаем конденсатор одним выводом к середине обмоток, а вторым выводом в источнику питания на любой выход. Фактически конденсатор будет параллелен одной из обмоток.



    Подаем питание и двигатель начинает крутиться.


    Если перекинуть вывод конденсатора с одного выхода питания на другой, то вал двигателя начнет вращаться в другую сторону.


    Все предельно просто. А принцип работы этого всего очень прост: конденсатор формирует сдвиг фаз на одной из обмоток, в результате обмотки работают почти попеременно и шаговый двигатель крутится.
    Очень жалко то, что обороты двигателя невозможно регулировать. Увеличение или уменьшение питающего напряжения ни к чему не приведет, так как обороты задаются частотой сети.
    Хотелось бы добавить, что в данном примере используется конденсатор постоянного тока, что является не совсем правильным вариантом. И если вы решитесь использовать такую схему включения, берите конденсатор переменного тока. Его так же можно сделать самому, включив два конденсатора постоянного тока встречно-последовательно.

    Сморите видео

    Данная статья родилась в помыслах изготовить себе трёх-координатный микростанок с ЧПУ для выполнения некоторых минимальных задач по сверлению, фрезерованию и вырезке печатных плат.
    В течение некоторого времени мне очень часто на запчасти отдают старые матричные и струйные принтеры по причинам того, что хозяева решили купить себе новый и более совершенный принтер или МФУ, ибо старенький свой принтер уже морально устарел или его ремонт будет стоить соизмеримо с приобретением нового принтера, а старый попросту выкинули.
    После разборки и выброса ненужных пластмассовых деталей и внутренней механики, я себе оставлял только печатные платы, шаговые двигатели с пасиками и стальные направляющие, по которым когда-то бегала печатающая головка. Давным-давно я посматривал в них на интересную микросхему, которая питает тамошние шаговые двигатели.
    Просто запросив в поиске даташит на данную микросхему, я увидел в ней не просто драйвер с четырьмя парами ключей, а полноценный микрошаговый ШИМ контроллер.

    Микроконтроллер Atmega32, Кварц 16МГц, PORTB весь на выход, PC0 и PC1 на вход с подтяжкой к шине питания, настраиваем таймер на обработку прерывания каждые 10 микросекунд.

    Сначала объявим переменные

    Unsigned int timerCNC=0; // Счетчик-Таймер ожидания готовности к смене шага unsigned long int CNC1required=25000; // Начальное требуемое значение шага char flagCNC1; // Флаг разрешения обработки шага #define CNC1steps 32 // Количество шагов для 1/32 шага в обоих полюсах двух фаз unsigned long int CNC1point=25000; // Начальная/текущая точка положения шага unsigned char CNC1counter=0; // Счетчик смещения. В дальнейшем приведем к значению маски в 32 варианта смещения unsigned long EncState; // Состояние энкодера. unsigned char step = // Массив значений для шагания { 0b01110000, //0 0b01110010, //1 0b00110100, //2 0b01010110, //3 0b00011000, //4 0b01101010, //5 0b00101100, //6 0b01001110, //7 0b00001110, //8 0b11001110, //9 0b10101100, //10 0b11101010, //11 0b10011000, //12 0b11010110, //13 0b10110100, //14 0b11110010, //15 0b11110000, //16 0b11110011, //17 0b10110101, //18 0b11010111, //19 0b10011001, //20 0b11101011, //21 0b10101101, //22 0b11001111, //23 0b00001111, //24 0b01001111, //25 0b00101101, //26 0b01101011, //27 0b00011001, //28 0b01010111, //29 0b00110101, //30 0b01110011};//31

    Функция опроса энкодера

    Void EncoderScan (void){ unsigned char New; New = PINC & 0x03; // Берем текущее значение // И сравниваем со старым switch(EncState) { case 2: { if(New == 3){ CNC1required++; }; if(New == 0){ CNC1required--; }; break; } case 0: { if(New == 2){ CNC1required++; }; if(New == 1){ CNC1required--; }; break; } case 1: { if(New == 0){ CNC1required++; }; if(New == 3){ CNC1required--; }; break; } case 3: { if(New == 1){ CNC1required++; }; if(New == 2){ CNC1required--; }; break; } } EncState = New; // Записываем новое значение предыдущего состояния }

    Функция опроса энкодера не имеет никаких особенностей, банально читает значения с выводов и по их изменению добавляет или отнимает значение счетчика, тем самым диктуя главной программе направление на вращения. Единственное что опрос у меня сейчас проходит на частоте 100кГц, и мне было лень добавлять отдельный счетчик (три строчки программы), чтобы отсчитывать только полные щелчки оборота энкодера, да это и совсем не нужно на данной стадии тестовых испытаний.

    Обработчик прерывания таймера

    Interrupt void timer0_ovf_isr(void) { // Reinitialize Timer 0 value TCNT0=0xEC; // Place your code here EncoderScan(); // Производим опрос энкодера //Счетчик временной задержки между шагами //Чтоб не пропустить шаг на высокой скорости timerCNC++; if(timerCNC == 100) { //Если значение достигло flagCNC1=1; //разрешаем шагнуть timerCNC=0; //перезапускаем счетчик }

    Обработчики шагов

    // Обработчик прибавления шагов // задается значение S на количество шагов перемещения вверх void STEP_UP (unsigned char s) { if (flagCNC1){ //Проверяем флаг разрешения смещения unsigned char q; CNC1counter +=s; //Записываем новое значение смещения q = CNC1counter & 0b00011111; //Получаем номер значения из CNC1steps по маске PORTB = step[q]; //Производим запись в порт нужный байт шага CNC1point+=s; //Добавляем новое значения текущего положения двигателя flagCNC1=0; //Очищаем флаг, смещение завершено, шаг выполнен. } }

    Аналогичная функция на обработку обратного счета для движения оси шагового двигателя в обратную сторону.

    // Обработчик вычитания шагов // задается значение S на количество шагов перемещения вниз void STEP_DOWN (unsigned char s) { if (flagCNC1){ unsigned char q; CNC1counter -=s; q = CNC1counter & 0b00011111; PORTB = step[q]; CNC1point-=s; flagCNC1 = 0; }

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

    Например: для холостого перемещения на пару тысяч шагов можно составить простой алгоритм, который может п лавно н ачать с одного микрошага за такт разрешения таймера, и каж дые 10 тактов поднимать на единицу пока не достигнет "8", так будет программно реализован четверть шаг (счетчик тоже будет добавлять или отнимать по 8 шагов), а далее за 100 шагов до окончания пути начать уменьшать значение перешагивания каждые 10 тактов и двигатель плавно остановится на нужном ему значении. Такая реализация программно обеспечит высокую скорость перемещения при максимальной точности перемещения вала двигателя даже под нагрузкой (старт-разгон-работа-торможение-остановка). Можно, конечно, поднять значение и до 16, в таком случае двигатель выйдет на режим полушага.

    Главный цикл программы

    Void main(void) { // // Код инициализации микроконтроллера // PORTB = step; // После включения записываем в порт нулевое значение шага while (1) { // Обработка циклического перемещения пока CNC1required не станет равным CNC1point while (CNC1required>CNC1point) { STEP_UP(1); } while (CNC1required < CNC1point) { STEP_DOWN(1); } } }

    Для проверок использовался один из биполярных шаговых двигателей с тех самых разобранных принтеров.

    Он имеет шаг 7,5 градусов, что соответствует 48 шагам на полный оборот, при 32 микрошагах это выходит точность 1536 микрошагов на полный оборот вала двигателя. Если бы нам не было жалко использовать еще 2 вывода микроконтроллера, то легко можно получить 1/64 шага. А присмотревшись в конструктив этой микросхемы, думаю несложно и поболее 128 шагов сделать, только придется много расчетов произвести на усредненные значения, правда будет серьёзная нелинейность вращения, но и то что мы получили вполне достаточно, незачем нам вращение менее 0,1 градуса.

    Энкодер, что я нашел у себя, имеет 24 щелчка на полный оборот, в каждом щелчке 4 импульса изменения состояния, то есть 96 импульсов на полный оборот.

    Без использования энкодера программно запускал его на довольно быстрое вращение и действительно чувствовалась сила на валу при том, что я его питаю 12V вместо 24V родного питания принтера.

    Вот посмотрите что из этого вышло.

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

    Данная статья была предварительным тестом работы микросхемы LB1847, все собрано практически на коленке, только для уточнения всех нюансов её работы. Далее планируется использовать более продвинутый микроконтроллер (скорее всего STM32) и организация одновременного управления тремя (и более) двигателями.

    При необходимости можно еще дополнительно вывести на МК выводы DECAY, MD и программно управлять режимом спада тока при различных условиях.

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

    Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
    Cхема №1
    Микросхема LB1847 1 В блокнот
    SBDx4 Диод 4 В блокнот
    Конденсатор 470 пФ 2 В блокнот
    Конденсатор 10 мкФ 1 В блокнот
    Конденсатор 47 мкФ 1 В блокнот
    Резистор

    0.51 Ом

    2 В блокнот
    Резистор

    15 кОм

    2 В блокнот
    Lx2 Катушка индуктивности 2 Обмотки шагового двигателя В блокнот
    Батарея питания 1.5 В 1

    Для того чтобы сделать станок ЧПУ из принтера своими руками понадобятся следующие подручные материалы:

    • запчасти от нескольких принтеров (в частности привода и шпильки);
    • привод от винчестера;
    • несколько листов ДСП или фанеры, мебельные направляющие;
    • контроллер и драйвер;
    • крепежные материалы.

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

    2. На крышку основы необходимо закрепить оси станка. Всего их три – x y z. Сначала крепим ось y. Для изготовления направляющей используется мебельный полоз на шариковых подшипниках.

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

    В качестве ходового винта применяется шток от принтера. В данном случае для горизонтальных осей х y изготовлены винты диаметром 8мм с резьбой. Для вертикальной оси z применялся винт с резьбой диаметром 6мм. В качестве шагового двигателя используются приводы от старых принтеров. По одному приводу на каждую ось.

    3. К плоскости шпилька крепиться посредством металлического уголка.

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

    4. Электронный блок состоит из контроллера и драйвера. Контроллер выполнен на советских микросхемах К155ТМ7, для данного случая использовалось три штуки.

    От каждой микросхемы провода идут к драйверу каждого из трех двигателей. Драйвер выполнен на транзисторе. В раскачке используется КТ 315, транзисторы КТ 814, КТ 815. От этих транзисторов электрический сигнал поступает на обмотку электрического привода.

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

    Видео: простой ЧПУ-станок своими руками для начинающих.

    Электронная начинка

    Тут варианта два:

    1. Вы вооружаетесь паяльником, флюсом, припоем, лупой, и разбираетесь в микросхемах из принтера. Найдите управляющие платы принтера 12F675 и LВ1745. Работайте с ними, создав плату управления чпу. Прикрепить их нужно будет сзади чпу станка, под блоком питания (его тоже берем от многострадального принтера).
    2. Используйте заводской контроллер чпу станка. Навскидку – пятиосевой чпу контроллер. Самодельная электроника – чудно, однако китайцы сильно демпингуют с ценами. Так что легким кликом мышки заказываем чпу у них, ибо в России такой девайс чпу не купишь. Чпу контроллер 5 Axis СNC Breakout Board дает возможность подключения 3-х входов концевых двигателей, кнопочку отключения, автоматизированное управление дремелем и целых 5 драйверов под управление шаговым двигателем самодельного станка.

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

    Шаговый двигатель для самодельного станка с чпу придется выбирать мощностью до 35 вольт. При других мощностях контроллер чпу рискует перегореть.

    Блок питания снимите с принтера. Соедините проводкой блок питания, тумблер включения и выключения, контроллер чпу и дремель.

    К плате управления станком подведите провод от лэптопа/ПК. Иначе, как вы будете загружать в станок задания. Кстати, о заданиях: качайте программу Math3 для рисования эскизов. Для непрофессионалов промышленного дизайна сойдет CorelDraw.

    Резать самодельным станком чпу можно фанеру (до 15 мм), текстолит до 3 мм, пластик, дерево. Изделия получатся не более 30-32 см в длину.

  • Эта статья также доступна на следующих языках: Тайский

    • Next

      Огромное Вам СПАСИБО за очень полезную информацию в статье. Очень понятно все изложено. Чувствуется, что проделана большая работа по анализу работы магазина eBay

      • Спасибо вам и другим постоянным читателям моего блога. Без вас у меня не было бы достаточной мотивации, чтобы посвящать много времени ведению этого сайта. У меня мозги так устроены: люблю копнуть вглубь, систематизировать разрозненные данные, пробовать то, что раньше до меня никто не делал, либо не смотрел под таким углом зрения. Жаль, что только нашим соотечественникам из-за кризиса в России отнюдь не до шоппинга на eBay. Покупают на Алиэкспрессе из Китая, так как там в разы дешевле товары (часто в ущерб качеству). Но онлайн-аукционы eBay, Amazon, ETSY легко дадут китайцам фору по ассортименту брендовых вещей, винтажных вещей, ручной работы и разных этнических товаров.

        • Next

          В ваших статьях ценно именно ваше личное отношение и анализ темы. Вы этот блог не бросайте, я сюда часто заглядываю. Нас таких много должно быть. Мне на эл. почту пришло недавно предложение о том, что научат торговать на Амазоне и eBay. И я вспомнила про ваши подробные статьи об этих торг. площ. Перечитала все заново и сделала вывод, что курсы- это лохотрон. Сама на eBay еще ничего не покупала. Я не из России , а из Казахстана (г. Алматы). Но нам тоже лишних трат пока не надо. Желаю вам удачи и берегите себя в азиатских краях.

    • Еще приятно, что попытки eBay по руссификации интерфейса для пользователей из России и стран СНГ, начали приносить плоды. Ведь подавляющая часть граждан стран бывшего СССР не сильна познаниями иностранных языков. Английский язык знают не более 5% населения. Среди молодежи — побольше. Поэтому хотя бы интерфейс на русском языке — это большая помощь для онлайн-шоппинга на этой торговой площадке. Ебей не пошел по пути китайского собрата Алиэкспресс, где совершается машинный (очень корявый и непонятный, местами вызывающий смех) перевод описания товаров. Надеюсь, что на более продвинутом этапе развития искусственного интеллекта станет реальностью качественный машинный перевод с любого языка на любой за считанные доли секунды. Пока имеем вот что (профиль одного из продавцов на ебей с русским интерфейсом, но англоязычным описанием):
      https://uploads.disquscdn.com/images/7a52c9a89108b922159a4fad35de0ab0bee0c8804b9731f56d8a1dc659655d60.png