Драйвер шагового двигателя от принтера star 1500. Как подобрать шаговый двигатель для станка ЧПУ

Главная / Электрооборудование
Радиолюбителю Бытовая техника

Драйвер для шагового двигателя из принтера

Простой драйвер для шагового двигателя

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

Понадобится старый принтер или сканер, можно неработающий. Оттуда, собственно, и будет извлечен шаговый двигатель, если такового нет в наличии. Также из платы потребуется выпаять управляющую микросхему под названием ULN2003. Она может быть и другая, в разной технике стоят различные микросхемы. Подойдут её аналоги: TD62003, отечественная К1109КТ22, более популярная MC1413, L203 и SG2003.

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

Схема подключения проста.

Потребуется приобрести разъем DB-25, который будет подключаться к порту компьютера, для управления двигателем, в случае, если конструируется ЧПУ станок. Диапазоны входного напряжения указаны для конкретно этой микросхемы. Остальные микросхемы, возможно, потребуют отличного от этого напряжения питания.
В качестве источника питания отлично подойдет компьютерный блок питания. В принципе, подойдет любое зарядное или БП, напряжением от 12В до 24В, с током от 350мА.
Стоит отметить, что желательно обладать технической документацией к модели используемого двигателя, что упростит его подключение к драйверу.

Сам драйвер выглядит так:

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

Если конструкция делается для станка с ЧПУ, то на компьютер потребуется скачать программу Turbo CNC и настроить её под свои нужды.

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

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

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

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

  • Биполярный — имеет четыре выхода, содержит в себе две обмотки.
  • Униполярный — имеет шесть выходов. Содержит в себе две обмотки, но каждая обмотка имеет отвод из середины.
  • Четырехобмоточный — имеет четыре независимые обмотки. По сути дела представляет собой тот же униполярник, только обмотки его разделены. Вживую не встречал, только в книжках.
Униполярный отличается от биполярного только тем, что ему нужна куда более простая схема управления, а еще у него значительно слабее момент. Так как работает он только половинами обмоток. НО! Если оторвать нафиг средний вывод униполярника, то мы получим обычный биполярный . Определить какой из выводов средний не сложно, достаточно прозвонить сопротивление тестером. От среднего до крайних сопротивление будет равно ровно половине сопротивления между крайних выводов. Так что если тебе достался униполярник, а схема подключения для биполярного, то не парься и отрывай средний провод.

Где взять шаговый двигатель.
Вообще шаговики встречаются много где. Самое хлебное место — пятидюймовые дисководы и старые матричные принтеры . Еще ими можно поживиться в древних винчестерах на 40Мб, если, конечно, рука поднимется покалечить такой антиквариат.
А вот в трехдюймовых флопарях нас ждет облом — дело в том, что там шаговик весьма ущербной конструкции — у него только один задний подшипник, а передним концом вал упирается в подшипник закрепленный на раме дисковода. Так что юзать его можно только в родном креплении. Либо городить высокоточную крепежную конструкцию. Впрочем, тебе может повезет и ты найдешь нетипичный флопарь с полноценным движком.

Схема управления шаговым двигателем
Я разжился контроллерами шаговиков L297 и мощным сдвоенным мостом L298N.

Лирическое отступление, при желании можно его пропустить


Схема включения L298N+L297 до смешного проста — надо тупо соединить их вместе. Они настолько созданы друг для друга, что в даташите на L298N идет прямой отсыл к L297 , а в доке на L297 на L298N .

Осталось только подключить микроконтроллер.
  • На вход CW/CCW подаем направление вращения — 0 в одну сторону, 1 — в другую.
  • на вход CLOCK — импульсы. Один импульс — один шаг.
  • вход HALF/FULL задает режим работы — полный шаг/полушаг
  • RESET сбрасывает драйвер в дефолтное состояние ABCD=0101.
  • CONTROL определяет каким образом задается ШИМ, если он в нуле, то ШИМ образуется посредством выходов разрешения INH1 и INH2 , а если 1 то через выходы на драйвер ABCD. Это может пригодится, если вместо L298 у которой есть куда подключать входы разрешения INH1/INH2 будет либо самодельный мост на транзисторах, либо какая-либо другая микросхема.
  • На вход Vref надо подать напряжение с потенциометра, которое будет определять максимальную перегрузочную способность. Подашь 5 вольт — будер работать на пределе, а в случае перегрузки сгорит L298 , подашь меньше — при предельном токе просто заглохнет. Я вначале тупо загнал туда питание, но потом передумал и поставил подстроечный резистор — защита все же полезная вещь, плохо будет если драйвер L298 сгорит.
    Если же на защиту пофигу, то можешь заодно и резисторы, висящие на выходе sense выкинуть нафиг. Это токовые шунты, с них L297 узнает какой ток течет через драйвер L298 и решает сдохнет он и пора отрубать или еще протянет. Там нужны резисторы помощней, учитывая что ток через драйвер может достигать 4А, то при рекомендуемом сопротивлении в 0.5 Ом, будет падение напряжения порядка 2 вольт, а значит выделяемая моща будет около 4*2=8 Вт — для резистора огого! Я поставил двухваттные, но у меня и шаговик был мелкий, не способный схавать 4 ампера.

Правда на будущее, когда я буду делать роботу шаговый привод, я возьму не связку L297+L293 , а микруху L6208 которая может и чуть слабей по току, но зато два в одном! Сразу подключай двигатель и работай. Если же их покупать, то на L6208 получается даже чуть дешевле.

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


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

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

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


Очень похоже на схему обычного асинхронного двигателя.
Для запуска понадобится:
  • Конденсатор емкостью 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 см в длину.

© 2024 spares4bmw.ru -- Автомобильный портал - Spares4bmw