El 28BYJ-48 — униполярный шаговый двигатель. низкая стоимость и высокая точность, идеально подходят для проектов в области электроники, 3D-принтеров, станков с ЧПУ и робототехники. Компактный размер, низкое энергопотребление и простота использования делают его популярным выбором среди любителей электроники и профессионалов.
Кроме того, наряду с этим двигателем модуль с ULN2003, для вашего контроля. Таким образом, у нас есть все необходимое, чтобы иметь возможность использовать эту систему полностью, используя микроконтроллер или плату. Ардуино или аналогичный.
Что такое шаговый двигатель 28BYJ-48?
Un шаговый двигатель — это разновидность электродвигателя который движется небольшими дискретными угловыми шагами, а не непрерывно вращается. Он работает с помощью набора электромагнитов, которые активируются в определенной последовательности. При активации различных электромагнитов создается магнитное поле, которое притягивает ротор двигателя, заставляя его вращаться один шаг за раз. Количество шагов за оборот и точность перемещения зависят от конкретной конструкции двигателя и используемой последовательности управления.
Шаговые двигатели бывают двух типов:
- однополярный- Они имеют один набор катушек и требуют специального контроллера для изменения направления тока и вращения двигателя в обоих направлениях.
- Биполярный- Они имеют два набора независимых катушек, что позволяет им вращаться в обоих направлениях без необходимости использования специального контроллера.
В случае 28BYJ-28 это униполярный тип, как я уже упоминал ранее. И внутри этой группы он характеризуется наличием следующих функции:
- Униполярный шаговый двигатель: простое управление с помощью всего 4 кабелей.
- Встроенный редуктор: обеспечивает высокую точность (0.088° на шаг) и крутящий момент (3 Н·см).
- Низкое энергопотребление: 83 мА (модель 5 В) или 32 мА (модель 12 В).
- продукты: 5 В или 12 В (в зависимости от модели).
- Экономичная цена: от 1.2 евро за единицу или чуть больше, если в комплект входит модуль ULN2003.
Что же касается возможные применения, о некоторых из них я уже упоминал ранее, но здесь я снова поделюсь с вами некоторыми идеями для ваших проектов:
- Управление гидравлическими и пневматическими клапанами.
- Шарнирно-сочлененные роботы и роботизированные руки.
- Позиционирование датчика.
- Поворотные столы для сканеров.
- 3д принтеры.
- станки с ЧПУ.
Шаговый двигатель не работает один, для него требуется еще один элемент. В этом случае, 28BYJ-48 управляется платой со встроенным ULN2003., что позволяет усиливать ток на выходах Arduino для питания катушек двигателя. Активируя катушки в правильной последовательности, двигатель вращается шаг за шагом с большой точностью.
Типы последовательностей и фаз управления
Там различные последовательности управления для 28BYJ-48, наиболее распространенными являются:
- Полноволновая последовательность: активирует все катушки одновременно.
- Последовательность полушагов: одновременно активирует две соседние катушки.
- Последовательность микроскопических шагов: активирует одну катушку за раз.
Давай посмотрим фазы в деталях:
- Последовательность 1-фазная: В однофазной последовательности мы включаем по одной катушке за раз. Если перенести эту последовательность зажигания в таблицу, в распиновке двигателя необходимо будет сгенерировать следующее:
Шаг | A | B | А ' | B ' |
---|---|---|---|---|
1 | ON | OFF | OFF | OFF |
2 | OFF | ON | OFF | OFF |
3 | OFF | OFF | ON | OFF |
4 | OFF | OFF | OFF | ON |
- 2-фазная последовательность: мы включаем две коррелятивные катушки в каждой фазе, поэтому создаваемое магнитное поле больше (на 41% больше), поэтому двигатель имеет больший крутящий момент, то есть мы получаем большую силу. Негативным моментом является удвоение энергопотребления. Что касается таблицы, то это будет:
Шаг | A | B | А ' | B ' |
---|---|---|---|---|
1 | ON | ON | OFF | OFF |
2 | OFF | ON | ON | OFF |
3 | OFF | OFF | ON | ON |
4 | ON | OFF | OFF | ON |
- Последовательность полушагов: Это еще один этап, который мы увидим, вы сможете испытать то, что вас интересует больше всего. Здесь поочередно включаем одну и две катушки, добиваясь точности в полшага. Он используется в приложениях, где необходима высочайшая точность, хотя могут возникнуть проблемы, когда приложение работает на пределе крутящего момента. Выражение последовательности в виде таблицы приводит к:
Полшага | A | B | А ' | B ' |
---|---|---|---|---|
1 | ON | OFF | OFF | OFF |
2 | ON | ON | OFF | OFF |
3 | OFF | ON | OFF | OFF |
4 | OFF | ON | ON | OFF |
5 | OFF | OFF | ON | OFF |
6 | OFF | OFF | ON | ON |
7 | OFF | OFF | OFF | ON |
8 | ON | OFF | OFF | ON |
28BYJ-28 с Ардуино
Первое, что нужно сделать, это правильно подключить модуль и двигатель 28byj-48 к нашей плате Arduino, для этого вам просто нужно выполнить следующие соединения:
- Контакт – от ULN2003 к GND Arduino.
- Контакт + ULN2003 к Vcc (5 В или, в других случаях, если это двигатель на 12 В, необходимо использовать источник питания с таким напряжением) от Arduino.
- IN1, IN2, IN3 и IN4 ULN2003 к цифровым входам D8, D9, D10 и D11 Arduino.
- Двигатель 28byj-48, просто подключите его к порту модуля ULN2003.
Теперь, когда вы подключены, следующим шагом будет использование пример в Arduino IDE, который вы можете использовать как есть, чтобы поэкспериментировать или изменить его по своему вкусу. В этом примере все таблицы фаз закомментированы, например // перед строкой, знаете ли... Если вы хотите использовать одну из них, просто удалите // перед инструкциями.
//Definir los pines const int motorPin1 = 8; // 28BYJ48 In1 const int motorPin2 = 9; // 28BYJ48 In2 const int motorPin3 = 10; // 28BYJ48 In3 const int motorPin4 = 11; // 28BYJ48 In4 //Definición de variables int motorSpeed = 1200; //Velocidad del motor int stepCounter = 0; //Contador de pasos int stepsPerRev = 4076; //Pasos para un giro completo //Tablas de secuencia (descomentar la que necesites) //Secuencia 1-fase //const int numSteps = 4; //const int stepsLookup[4] = { B1000, B0100, B0010, B0001 }; //Secuencia 2-fases //const int numSteps = 4; //const int stepsLookup[4] = { B1100, B0110, B0011, B1001 }; //Secuencia media fase //const int numSteps = 8; //const int stepsLookup[8] = { B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001 }; void setup() { //Declarar los pines usados como salida pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); } void loop() { for (int i = 0; i < stepsPerRev * 2; i++) { clockwise(); delayMicroseconds(motorSpeed); } for (int i = 0; i < stepsPerRev * 2; i++) { anticlockwise(); delayMicroseconds(motorSpeed); } delay(1000); } void clockwise() { stepCounter++; if (stepCounter >= numSteps) stepCounter = 0; setOutput(stepCounter); } void anticlockwise() { stepCounter--; if (stepCounter < 0) stepCounter = numSteps - 1; setOutput(stepCounter); } void setOutput(int step) { digitalWrite(motorPin1, bitRead(stepsLookup[step], 0)); digitalWrite(motorPin2, bitRead(stepsLookup[step], 1)); digitalWrite(motorPin3, bitRead(stepsLookup[step], 2)); digitalWrite(motorPin4, bitRead(stepsLookup[step], 3)); }