Меню

Шаговый двигатель 17hs2408 максимальное питание

Шаговый мотор NEMA 17, серии 17HS4402 + драйвер A4988 + Arduino NANO.

Управление шаговым двигателем с помощью платы Arduino.

В данной статье мы продолжаем разбираться с темой шаговых двигателей. В прошлый раз мы подключили к плате Arduino NANO небольшой моторчик 28BYJ-48 (5V). Сегодня мы будем делать то же самое, но с другим мотором — NEMA 17, серии 17HS4402 и другим драйвером — A4988.

Шаговый мотор NEMA 17 — это биполярный двигатель с высоким крутящим моментом. Может поворачиваться на заданное число шагов. За один шаг совершает оборот на 1,8°, соответственно полный оборот на 360° осуществляет за 200 шагов.
Биполярный двигатель имеет две обмотки, по одной в каждой фазе, которая для изменения направления магнитного поля переполюсовывается драйвером. Соответственно, от мотора отходят четыре провода.

Такой мотор широко применяется в станках ЧПУ, 3D принтерах, сканерах и т. д.
Управляться он будет с помощью платы Arduino NANO.

Эта плата способна выдавать напряжение 5V, тогда как мотор работает от большего напряжения. Мы выбрали блок питания 12V. Так что нам понадобится дополнительный модуль — драйвер, способный управлять более высоким напряжением через маломощные импульсы Arduino. Для этого отлично подходит драйвер А4988.

Драйвер шагового двигателя А4988.

Плата создана на базе микросхемы A4988 компании Allegro — драйвера биполярного шагового двигателя. Особенностями A4988 являются регулируемый ток, защита от перегрузки и перегрева, драйвер также имеет пять вариантов микрошага (вплоть до 1/16-шага). Он работает от напряжения 8 — 35 В и может обеспечить ток до 1 А на фазу без радиатора и дополнительного охлаждения (дополнительное охлаждение необходимо при подаче тока в 2 A на каждую обмотку).

Модель: A4988;
напряжения питания: от 8 до 35 В;
возможность установки шага: от 1 до 1/16 от максимального шага;
напряжение логики: 3-5.5 В;
защита от перегрева;
максимальный ток на фазу: 1 А без радиатора, 2 А с радиатором;
расстояние между рядами ножек: 12 мм;
размер платы: 20 х 15 мм;
габариты драйвера: 20 х 15 х 10 мм;
габариты радиатора: 9 х 5 х 9 мм;
вес с радиатором: 3 г;
без радиатора: 2 г.

Для работы с драйвером необходимо питание логического уровня (3 — 5,5 В), подаваемое на выводы VDD и GND, а также питание двигателя (8 — 35 В) на выводы VMOT и GND. Плата очень уязвима для скачков напряжения, особенно если питающие провода длиннее нескольких сантиметров. Если эти скачки превысят максимально допустимое значение (35 В для A4988) ,то плата может сгореть. Одним из способов защиты платы от подобных скачков является установка большого (не меньше 47 мкФ) электролитического конденсатора между выводом питания (VMOT) и землёй близко к плате.
Соединение или разъединение шагового двигателя при включённом драйвере может привести к поломке двигателя!
Выбранный мотор совершает 200 шагов за полный оборот на 360°, что соответствует 1,8° на шаг. Микрошаговый драйвер, такой как A4988 позволяет увеличить разрешение за счёт возможности управления промежуточными шагами. Например, управление мотором в режиме четверти шага даст двигателю с величиной 200-шагов-за-оборот уже 800 микрошагов при использовании разных уровней тока.
Разрешение (размер шага) задаётся комбинациями переключателей на входах (MS1, MS2, и MS3).

MS1 MS2 MS3 Разрешение микрошага
Низкий Низкий Низкий Полный шаг
Высокий Низкий Низкий 1/2 шага
Низкий Высокий Низкий 1/4 шага
Высокий Высокий Низкий 1/8 шага
Высокий Высокий Высокий 1/16 шага

Каждый импульс на входе STEP соответствует одному микрошагу двигателя, направление вращения которого зависит от сигнала на выводе DIRECTION. Выводы STEP и DIRECTION не подтянуты к какому-либо конкретному внутреннему напряжению, поэтому их не стоит оставлять плавающими при создании приложений. Если вы просто хотите вращать двигатель в одном направлении, можно соединить DIR непосредственно с VCC или GND. Чип имеет три различных входа для управления состоянием питания: RESET, SLEEP и ENABLE. Вывод RESET плавает, если его не нужно использовать, то следует подключить его к соседнему контакту SLEEP на печатной плате, чтобы подать на него высокий уровень и включить плату.

Мы использовали вот такой блок питания (12V).

Для удобства подключения к плате Arduino UNO, мы использовали собственноручно сделанную деталь. Пластиковый корпус напечатан на 3D принтере, к нему приклеены контакты.

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

Соединяем всё согласно схеме.

Потом открываем среду разработки программ для Arduino и пишем программу, вращающую мотор сначала в одну сторону на 360°, потом в другую.

Читайте также:  Спорт питание мега масс 2000
/*Программа для вращения шагового мотора NEMA 17, серии 17HS4402 + драйвер A4988. Сначала мотор совершает полный оборот в одну сторону, потом в другую*/
/*целочисленная константа, хранящая номер цифрового контакта Arduino, который подаёт сигнал Step на драйвер. Каждый импульс от этого контакта — это перемещение мотора на один шаг*/
const int pinStep = 5;

/*целочисленная константа, хранящая номер цифрового контакта Arduino, который подаёт сигнал Direction на драйвер. Наличие импульса — мотор вращается в одну сторону, отсутствие — в другую*/
const int pinDir = 4;

//временная задержка между шагами мотора в мс
const int move_delay = 3;

//шагов на полный оборот
const int steps_rotate_360 = 200;

/*Функция, в которой происходит инициализация всех переменных программы*/
void setup()
<
/*задаём контактам Step и Direction режим вывода, то есть они выдают напряжение*/
pinMode(pinStep, OUTPUT);
pinMode(pinDir, OUTPUT);
//устанавливаем начальный режим
digitalWrite(pinStep, HIGH);
digitalWrite(pinDir, LOW);
>

/*Функция-цикл в которой задаётся поведение программы*/
void loop()
<
//устанавливаем направление вращения
digitalWrite(pinDir, HIGH);

for(int i = 0; i //устанавливаем направление вращения обратное
digitalWrite(pinDir, LOW);

for(int i = 0; i /*Программа для вращения шагового мотора NEMA 17, серии 17HS4402 + драйвер A4988. Программа приводит мотор в движение.
По-умолчанию вращение происходит по часовой стрелке, так как на контакт DIRECTION драйвера подключён к земле. Если его подключить к питанию 5V, то
мотор вращается против часовой стрелки*/
/*целочисленная константа, хранящая номер цифрового контакта Arduino, который подаёт сигнал Step на драйвер. Каждый импульс от этого контакта — это перемещение мотора на один шаг*/
const int pinStep = 5;

//временная задержка между шагами мотора в мс
const int move_delay = 3;

/*Функция, в которой происходит инициализация всех переменных программы*/
void setup()
<
/*задаём контакту Step режим вывода, то есть он выдают напряжение*/
pinMode(pinStep, OUTPUT);
//устанавливаем начальный режим
digitalWrite(pinStep, LOW);
>

/*Функция-цикл в которой задаётся поведение программы*/
void loop()
<
/*через заданную задержку происходит перемещение мотора на один шаг*/
digitalWrite(pinStep, HIGH);
delay(move_delay);
digitalWrite(pinStep, LOW);
delay(move_delay);
>

Всё это мы рассматривали шаговый режим мотора, то есть 200 шагов за полный оборот. Но, как уже было описано, мотор может работать, в 1/2, 1/4, 1/8, 1/16 шаговых режимах, в зависимости от того, какая комбинация сигналов подаётся на контакты драйвера MS1, MS2, MS3.
Давайте с этим потренируемся, подключим эти три контакта к плате Arduino, согласно схеме, и зальём код программы.

Код программы, которая демонстрирует все пять режимов работы мотора, вращая мотор в одну и другую сторону на 200 шагов в каждом из этих режимов.

/*Программа для вращения шагового мотора NEMA 17, серии 17HS4402 + драйвер A4988. В программе попеременно сменяются режимы шага: полношаговый, 1/2, 1/4, 1/8, 1/16 шага, при каждом из них мотор совершает оборот на 200 шагов в одну сторону, потом в другую*/
/*целочисленная константа, хранящая номер цифрового контакта Arduino, который подаёт сигнал Step на драйвер. Каждый импульс от этого контакта — это перемещение мотора на один шаг*/
const int pinStep = 5;

/*целочисленная константа, хранящая номер цифрового контакта Arduino, который подаёт сигнал Direction на драйвер. Наличие импульса — мотор вращается в одну сторону, отсутствие — в другую*/
const int pinDir = 4;

//временная задержка между шагами мотора в мс
const int move_delay = 3;

//шагов на полный оборот
const int steps_rotate_360 = 200;

/*контакты на драйвере, задающие режим шага мотора — MS1, MS2, MS3*/
int StepModePins[3] = <8, 7, 6>;

//размер массива StepModePins
const int StepModePinsCount = 3;

/*Массив, хранящий состояния контактов MS1, MS2, MS3 драйвера, при которых задаются разные режимы вращения: полношаговый, 1/2, 1/4, 1/8, 1/16я шага*/
bool StepMode[5][3] = <
< 0, 0, 0>,
< 1, 0, 0>,
< 0, 1, 0>,
< 1, 1, 0>,
< 1, 1, 1>>;

//размер массива StepMode
const int StepModeSize = 5;

/*Функция, в которой происходит инициализация всех переменных программы*/
void setup()
<
/*задаём контактам Step и Direction режим вывода, то есть они выдают напряжение*/
pinMode(pinStep, OUTPUT);
pinMode(pinDir, OUTPUT);

for(int i = 0; i //устанавливаем начальный режим
digitalWrite(pinStep, HIGH);
digitalWrite(pinDir, LOW);
>

/*Функция-цикл в которой задаётся поведение программы*/
void loop()
<
for(int i = 0; i //вращаем мотор в одну сторону, затем в другую
MakeRoundRotation();
>
>

/*функция, в которой мотор совершает 200 шагов в одном направлении, затем 200 в обратном*/
void MakeRoundRotation()
<
//устанавливаем направление вращения
digitalWrite(pinDir, HIGH);

for(int i = 0; i //устанавливаем направление вращения обратное
digitalWrite(pinDir, LOW);

for(int i = 0; i /*Программа для вращения шагового мотора NEMA 17, серии 17HS4402 + драйвер A4988. В схему включены кнопка с 3мя положениями (I, II, среднее — выключено) и потенциометр. Кнопка регулирует направление вращения мотора, а данные с потенциометра показывают какой из пяти режимов шага мотора включить (полношаговый, 1/2, 1/4, 1/8, 1/16 шага)*/
/*целочисленная константа, хранящая номер цифрового контакта Arduino, который подаёт сигнал Step на драйвер. Каждый импульс от этого контакта — это перемещение мотора на один шаг*/
const int pinStep = 5;

/*целочисленная константа, хранящая номер цифрового контакта Arduino, который подаёт сигнал Direction на драйвер. Наличие импульса — мотор вращается в одну сторону, отсутствие — в другую*/
const int pinDir = 4;

/*Контакты от двух положений кнопки — цифровые*/
const int ButtonOn1 = 9;
const int ButtonOn2 = 10;

/*Контакт регистрирующий значение потенциометра — аналоговый*/
const int PotenciomData = 1;

//временная задержка между шагами мотора в мс
const int move_delay = 3;

/*целочисленная константа, показывающая временную задержку между считыванием состояния кнопки и потенциометра*/
const int CheckButtonDelay = 15;

/*Целочисленная переменная показывающая, сколько прошло времени и не пора ли считывать состояние кнопки*/
int CurrentButtonDelay = 0;

/*контакты на драйвере, задающие режим шага мотора — MS1, MS2, MS3*/
int StepModePins[3] = <8, 7, 6>;

//размер массива StepModePins
const int StepModePinsCount = 3;

//состояние кнопки включено-выключено
int ButtonState = 0;

//направление вращения согласно кнопке I — 1, II — 0
int ButtonDirection = 0;

/*Массив, хранящий состояния контактов MS1, MS2, MS3 драйвера, при которых задаются разные режимы вращения: полношаговый, 1/2, 1/4, 1/8, 1/16я шага*/
bool StepMode[5][3] = <
< 0, 0, 0>,
< 1, 0, 0>,
< 0, 1, 0>,
< 1, 1, 0>,
< 1, 1, 1>>;

//размер массива StepMode
const int StepModeSize = 5;

//текущий индекс массива StepMode
int StepModeIndex = 0;

/*Функция, в которой происходит инициализация всех переменных программы*/
void setup()
<
/*задаём контактам Step и Direction режим вывода, то есть они выдают напряжение*/
pinMode(pinStep, OUTPUT);
pinMode(pinDir, OUTPUT);

for(int i = 0; i /*контакты от кнопки и потенциометра устанавливаем в режим входных*/
pinMode(ButtonOn1, INPUT);
pinMode(ButtonOn2, INPUT);
pinMode(PotenciomData, INPUT);

//устанавливаем начальный режим
digitalWrite(pinStep, LOW);
digitalWrite(pinDir, LOW);
>

/*Функция-цикл в которой задаётся поведение программы*/
void loop()
<
if(CurrentButtonDelay >= CheckButtonDelay)
<
CheckButtonState();
CurrentButtonDelay = 0;
>

if(ButtonState == 1)
<
MakeMotorStep();
>

delay(move_delay);
CurrentButtonDelay += move_delay;
>

//функция, в которой совершается один шаг мотора
void MakeMotorStep()
<
digitalWrite(pinStep, HIGH);
digitalWrite(pinStep, LOW);
>

/*функция, в которой проверяется текущее состояние кнопки и потенциометра*/
void CheckButtonState()
<
int CurrentButtonState = 0, CurrentButtonDirection = 0, CurrentStepModeIndex = 0;

bool readbuttonparam = digitalRead(ButtonOn1);

if(readbuttonparam)
<
CurrentButtonState = 1;
CurrentButtonDirection = 1;
>

if(readbuttonparam)
<
CurrentButtonState = 1;
CurrentButtonDirection = 0;
>

if(ButtonState != CurrentButtonState)
<
ButtonState = CurrentButtonState;
>

if(ButtonDirection != CurrentButtonDirection)
<
ButtonDirection = CurrentButtonDirection;
digitalWrite(pinDir, ButtonDirection);
>

CurrentStepModeIndex = map(analogRead(PotenciomData), 0, 1023, 0, StepModeSize-1);
if(StepModeIndex != CurrentStepModeIndex)
<
StepModeIndex = CurrentStepModeIndex;
for(int i = 0; i < StepModePinsCount; i++)
<
digitalWrite(StepModePins[i], StepMode[StepModeIndex][i]);
>
>
>

Источник

cnc-club.ru

Статьи, обзоры, цены на станки и комплектующие.

Расчет напряжения для шаговых двигателей

Расчет напряжения для шаговых двигателей

Сообщение Nick » 22 дек 2011, 21:07

Расчет шагового двигателя

Какое напряжение должно быть у источника питания?

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

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

Используя следующую формулу вы можете определить необходимое напряжение питания для этой оси:
(Скорость которую вы хотите)÷(Скорость, которую вы получили * 0.9) * (Тестовое напряжение) = Необходимое напряжение питания.

Пример: (300 IPM ÷ (150IPM * 0.9) * 24VDC = 53.3VDC

Удостоверьтесь что полученное напряжение питания находится в допустимых пределах для вашего драйвера!

Какое напряжение питания у моего Шагового двигателя?

Вычисление максимального напряжения для заданной индуктивности ШД

Чтобы вычислить максимальное напряжение которое вам следует использовать в зависимости от индуктивности обмоток шагового двигателя используйте эту формулу:
Максимальное напряжение = 1000 * SQRT(Индуктивность)
(SQRT — это квадратный корень.)
Пример, двигатель с 6мГн на фазу:
1000 * SQRT(0.006) = 77В Максимум.
Пример мотора с 2.5мГн:
1000 * SQRT(0.0025) = 50В Максимум.

Замечание: Не все моторы одинаково созданы одинаковыми .

Если вы используете эту формулу и двигатели кажутся слишком горячими, уменьшите напряжение пока температура не станет приемлемой. Шаговые двигатели разработаны для работы горячими, но не стоит прованивать помещение горелой изоляцией . Многие двигатели рассчитаны на выдерживание температуры до 80 o С. Для моих личных целей я ограничиваю температуру в 60 o C.

Вычисление Сопротивления и мощности рассеивания ток-ограничивающих резисторов

Замечение: Только для L/R систем.

Это простое применение закона Ома для последовательной цепи. Ваш резистор должен сбрасывать разницу в напряжении между расчетного напряжения шагового двигателя и напряжением источника питания:
Изменение напряжения на резисторе = Напряжение источника питания — расчетное напряжение шагового двигателя.

Применяя закон Ома, делим на ток шагового двигателя получаем сопротивление резистора:
Значение резистора = Изменение напряжения на резисторе / Ток обмоток ШД.

Наконец, и это очень важно, вам нужно знать мощность рассеивания резистора которые он будет рассеивать в виде тепла, на которую он должен быть рассчитан.
Значение мощности рассеивания резистора = Изменение напряжения на резисторе * Ток обмоток шагового двигателя.

Например: Шаговый двигатель промаркирован 5A на 2.5V, с источником питания в 26В имеем:
Изменение напряжения на резисторе = 26В — 2.5В = 23.5В
Сопротивление резистора = 23.5В / 5А = 4.7 Ом
Мощность рассеивания резистора = 23.5В * 5А = 117.5 Ватт

Источник



Какая потребляемая мощность шаговых Nema17

Статья относится к принтерам:

Всем привет!Хочу рассчитать мощность БП. Нигде не могу найти максимальную потребляемую мощность одного двигателя NEMA17.Правильно я понимаю, что Vref нужно умножить на 1,5А ?

Популярные вопросы

Anet A8 plus на btt skr 1.4 и TMC 2208 v2.0 микрошаг marlin

Помогите не могу настроить шаги осей, может есть у кого готовый конфиг на Anet a8 plus.

Старая плате сгорела.

Пустоты при печати PETG

Программа для 3D проектирования

Понимаю, что тема 100500 раз обсуждалась, но не удалось нигде найти обобщающей информации, в основном все в одной куче советуется.

Ответы

Там забыли про вторую обмотку.

И какие значения туда подставить?

Калькулятор дает непристойно большую мощность из оценки I_max * V_supply. При том, что драйверы ШИМ-ят, при разумном конденсаторе на входе среднее потребление будет макс напряжение на моторе * I_max, и это будет значительно меньше, если не докручивать до макс оборотов. Если докручивать, то в одной фазе шага энергия вкачивается в катушку, в другой возвращается обратно, хотя не полностью. Если конденсатор стоит ещё больше и может сгладить, то при вращении на макс оборотах не вернутся только потери на нагрев сопротивления катушки, потери в сердечнике и драйверах. Но это будет не 80Вт@24В на nema17, а думаю ближе к 10Вт макс, хотя надо считать.

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

Можно посчитать макс. мощность как P = U * Imax * sqrt(2), где U — напряжение питания моторов, Imax — максимальный ток одной обмотки двигателя, sqrt(2) — коэффициент для двух обмоток. В реальности, конечно, пиковая мощность будет значительно (раза в 3) меньше.

Так, а какое напряжение питания моторов и какой ток?
В этом-то и вопрос. P= UI я помню еще со школы )

Напряжение — выходное БП вашего аппарата, а ток из паспорта вашего двигателя.

Хм. многие платы работают от 12 или 24в.
Двигатели тоже при этом работают от 12в или 24в или на них идет какое заданное напряжение ?

Ну это Вам виднее. Но чаще всего напрямую от общего БП.

Спасибо за ответ, тол ко я не совсем понял что мне виднее.

Ток у моих 1.7а. При 12в можность будет в два раза ниже 24в. Такое врятли может быть. Скорее всего есть заданное напряжение для мотора, но в спецификация его нет.

нет не правильно понимаете.

Vref это напряжение обратной связи драйвера. там своя цепь.

Можно оценить потребляемую мощность примерно так. Ток обмотки, выставленный Vref — это максимальный ток на обмотке (положение шага 0 или 90 градусов). Положение 45 градусов — две обмотки включены с током sqrt(2)/2. Суммарная мощность, потребляемая двумя обмотками, в этом положении будет такая же, как в положении 0 или 90 градусов.

По документации на мотор смотрим сопротивление обмотки, например, будет R=1,8 Ом. Мощность потребляемая обмоткой будет P = I*I*R. Если ток выставили 1,5А, то мощность, потребляемая мотором не превысит P = 1.5*1.5*1.8 = 4.05 Вт. Это не зависит от положения шага.

Учитываем точность установки тока драйвером — 5%, ещё прибавим 15% — потери на драйвере (пусть КПД 0,85).

Итого, получаем 4,9 Вт — потребление драйвером от источника питания.

При выборе мощности БП, учитывайте, что не все БП могут отдавать полную нагрузку длительное время. Обычно, БП могут долго держать нагрузку и не перегреваться при 70% от максимальной нагрузки, которая указана на БП.

Источник

Все о питании © 2021
Внимание! Информация, опубликованная на сайте, носит исключительно ознакомительный характер и не является рекомендацией к применению.