Arduino, шаговый двигатель 28-byj48 и драйвер uln2003

Зависимость входного напряжения и тока в нагрузке

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

  • В ТТЛ-логике при входном напряжении 2,4 В ток коммутации составляет не более 200 мА.
  • При U вх.=2,7В, выходной ток не превышает 250 мА.
  • При величине входного напряжения не более 3 В, ток коллектора выходного транзистора составляет 300 мА.

Также в устройстве присутствует паразитная емкость, которая может достигать 25 pF в зависимости от частоты управляющего напряжения или создаваемых помех в непосредственной близости от нее. При этом минимальный порог паразитной емкости находиться на уровне 15 пФ. Что касается времени включения выходных транзисторов, то они являются достаточно быстрыми. Время перехода из одного состояния в другое лежит в пределах от 0,25 до 1 мкс, что говорит о возможности работы на достаточно высоких частотах.

Исходя из описания на микросхему, максимальный ток составляет 0,5 А, но в таком режиме она существенно нагревается до 70 и более градусов, что может быть критичным. Ведь максимальная температура, при которой микросхема еще нормально работает, составляет порядка 85 градусов. Также следует отметить, что максимальный входной ток управления при напряжении 3,85 В не должен превышать 1,35 мА. А это немаловажный факт, потому что именно по входу у многих схемотехников она выходит из строя.

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

Управление ULN2003

Входная часть сборок ULN2003A, ULN2003AI, ULQ2003A спроектирована так чтобы работать совместно с ТТЛ и 3,3 В и 5 В К-МОП логикой.

ULN2002A создана для p-МОП логики.
Во входных цепях ULN2002A добавлен стабилитрон на 7 В и увеличено сопротивление базового резистора до 10,5 кОм, благодаря этому сборка может работать с входными напряжениями от 14 до 25 В.

Сборка ULN2004A, ULQ2004A предназначена для К-МОП логики с уровнем напряжений от 6 до 15В.
По сравнению с ULN2003, у ULN2004 просто увеличено сопротивление базового резистора до 10,5 кОм.

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

ULN2003 выпускается как для объемного монтажа: PDIP, так и для поверхностного: SOIC, SOP и TSSOP.

Проблема направления вращения в библиотеке и как ее исправить

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

step(steps);

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

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

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

Как проверить микросхему?

Обычно на руках у радиолюбителя всяческие микросхемы появляются из других устройств, которые были разобраны очень давно, и уже нет никакой информации о состоянии его компонентов, поэтому вопрос, как проверить uln 2003a вполне актуален. А сделать это можно достаточно просто:

Прозвонить мультиметром. С его помощью можно выяснить пробит ли диод или сам транзистор. Если что-то пробито (звонится на КЗ или около), то в любом случае эта ячейка неисправна. Базу прозвонить таким способом не удастся, потому что на входе имеется резистор сопротивлением 2,7 кОм. Лучше попробовать включить открыть транзистор, подав на вход напряжение величиной не более 3,85 В.

Схема одного из каналов в микросхемах ULN2003A, ULQ2003A и ULN2003AI.

Каждый из семи каналов содержит по два биполярных транзистора, резистор 2,7 кОм ограничивающий базовый ток, и два резистора на 7,2 кОм и 3 кОм защищающие транзисторы от открывания обратным током коллектора. Кроме того к схеме добавлены три защитных диода: первый защищает вход от отрицательного напряжения, два других защищают выход от отрицательного напряжения и от превышения напряжения на транзисторах выше питающего.

Наличие защитных выходных диодов актуально при работе на индуктивную нагрузку: диод для шунтирования обмотки реле или обмотки шагового двигателя уже встроен в микросхему и не нужно устанавливать внешний диод. А при использовании 7 каналов – 7 внешних диодов.

Datasheets

Просмотр и загрузка
Datasheet A2003, A2004, A2023, A2024

PDF, 324 Кб, Файл опубликован: 29 мар 2018, Страниц: 11High Voltage High Current Darlington Arrays (Discontinued Product)

Выписка из документа

A2003, A2004, A2023, and A2024High Voltage High Current Darlington Arrays Discontinued ProductThese parts are no longer in production The device should not bepurchased for new design applications. Samples are no longer available. Date of status change: October 31, 2005 Recommended Substitutions: NOTE: For detailed information on purchasing options, contact yourlocal Allegro field applications engineer or sales representative.Allegro MicroSystems, Inc. reserves the right to make, from time to time, revisions to the anticipated product life cycle plan for aproduct to accommodate changes in production capabilities, alternative product availabilities, or market demand. The informationincluded herein is believed to be accurate and reliable. However, Allegro MicroSystems, Inc. assumes no responsibility for its use; norfor any infringements of patents or other rights of third parties which may result from its use. Data Sheet29304F 2003 THRU2024 HIGH-VOLTAGE, HIGH-CURRENTDARLINGTON ARRAYS1 16 2 15 3 14 4 13 5 12 6 11 7 10 8 9 Ideally suited for interfacing between low-level logic circuitry andmultiple peripheral power loads, the Series ULN20xxA/L high-voltage,high-current Darlington arrays feature continuous load current ratingsto 500 mA for each of the seven drivers. At an appropriate duty cycledepending on ambient temperature and number of drivers turned ONsimultaneously, typical power loads totaling over 230 W (350 mA x 7,95 V) can be controlled. Typical loads include relays, solenoids,stepping motors, magnetic print hammers, multiplexed LED andincandescent displays, and heaters. All devices feature open-collectoroutputs with integral clamp diodes.The ULN2003A/L and ULN2023A/L have series input resistors …

Мотор 28BYJ-48 и драйвер ULN2003

Подключать шаговые моторы «напрямую» к ардуино, довольно сложный и неудобный процесс. Поэтому лучше использовать специальные драйверы, например, для мотора 28BYJ-48 часто используется ULN2003, они даже частенько продаются в комплекте. Так же можно использовать драйвера L293D, DRV8825 и тд. В этой статье я буду использовать ULN2003, поскольку он валялся без дела идеально подходит в данной ситуации. Подключение мотора и драйвера простое: на плате драйвера имеется разъем с пазами для подключения 28BYJ-48, тут сложно подключить не правильно, а сам драйвер подключается к любым четырем пинам arduino, плюс ему требуется два провода питания. Драйвер умеет работать с 5 и 12 вольтовыми версиями 28BYJ-48, для переключения уровней питания на плате нужно перекинуть перемычку.
Все подключается очень просто и быстро, поэтому чтобы статья была хоть чуток интересной и полезной, добавлю сюда регулятор скорости вращения мотора. Для этого достаточно добавить потенциометр, который подключается не на много сложнее – два провода питания и третий провод должен «конектится» с аналоговым пином ардуино, например А0.
Ниже находится картинка, на которой схематично показано подключение драйвера, мотора и потенциометра к ардуино.

Измененный код для Arduino

Окончательная версия скетча для шагового двигателя:

/* Скетч для шагового двигателя BYJ48

Схема подключения: IN1 >> D8 IN2 >> D9 IN3 >> D10 IN4 >> D11 VCC … 5V.

Лучше использовать внешний источник питания Gnd

Автор кода: Mohannad Rawashdeh

Детали на русском языке: /arduino-shagovii-motor-28-BYJ48-draiver-ULN2003

Англоязычный вариант: http://www.instructables.com/member/Mohannad+Rawashdeh/ 28/9/2013 */

#define IN1 8

#define IN2 9

#define IN3 10

#define IN4 11

int Steps = 0;

boolean Direction = true;

unsigned long last_time;

unsigned long currentMillis ;

int steps_left=4095;

long time;

void setup()

{

Serial.begin(115200);

pinMode(IN1, OUTPUT);

pinMode(IN2, OUTPUT);

pinMode(IN3, OUTPUT);

pinMode(IN4, OUTPUT);

// delay(1000);

}

void loop()

{

while(steps_left>0){

currentMillis = micros();

if(currentMillis-last_time>=1000){

stepper(1);

time=time+micros()-last_time;

last_time=micros();

steps_left—;

}

}

Serial.println(time);

Serial.println(«Wait…!»);

delay(2000);

Direction=!Direction;

steps_left=4095;

}

void stepper(int xw){

for (int x=0;x&ltxw;x++){

switch(Steps){

case 0:

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, HIGH);

break;

case 1:

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, HIGH);

break;

case 2:

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, LOW);

break;

case 3:

digitalWrite(IN1, LOW);

digitalWrite(IN2, HIGH);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, LOW);

break;

case 4:

digitalWrite(IN1, LOW);

digitalWrite(IN2, HIGH);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

break;

case 5:

digitalWrite(IN1, HIGH);

digitalWrite(IN2, HIGH);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

break;

case 6:

digitalWrite(IN1, HIGH);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

break;

case 7:

digitalWrite(IN1, HIGH);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, HIGH);

break;

default:

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

break;

}

SetDirection();

}

}

void SetDirection(){

if(Direction==1){ Steps++;}

if(Direction==0){ Steps—; }

if(Steps>7){Steps=0;}

if(Steps

}

Видео работающего мотора приведено ниже:

Но есть и более интересный вариант — написать собственную библиотеку для шагового двигателя

Datasheets

ProductFolder Sample &Buy Support &Community Tools &Software TechnicalDocuments ULN2002A, ULN2003A, ULN2003AIULQ2003A, ULN2004A, ULQ2004ASLRS027O – DECEMBER 1976 – REVISED JANUARY 2016 ULN200x, ULQ200x High-Voltage, High-Current Darlington Transistor Arrays1 Features 1 500-mA-Rated Collector Current (Single Output)High-Voltage Outputs: 50 VOutput Clamp DiodesInputs Compatible With Various Types of LogicRelay-Driver Applications The ULx2004A devices have a 10.5-kΩ series baseresistor to allow operation directly from CMOSdevices that use supply voltages of 6 V to 15 V. Therequired input current of the ULx2004A device isbelow that of the ULx2003A devices, and the requiredvoltage is less than that required by the ULN2002Adevice 2 Applications Device Information(1) Relay DriversStepper and DC Brushed Motor DriversLamp DriversDisplay Drivers (LED and Gas Discharge)Line Drivers …

Скетч для управления мотором 28BYJ-48 с помощью arduino

Для работы с шаговыми моторами существует несколько библиотек, одна из них даже есть в стандартном наборе IDE, но на мой взгляд удобнее всего использовать AccelStepper. Скачать ее можно по этой ссылке: скачать.
Ниже приведен код скетча с подробными комментариями.

 
// библиотека для управления мотором
#include <AccelStepper.h> 
// пины
#define motorPin1  8 // IN1 на драйвере ULN2003
#define motorPin2  9 // IN2 на драйвере ULN2003
#define motorPin3  10 // IN3 на драйвере ULN2003
#define motorPin4  11 // IN4 на драйвере ULN2003
int analog_pin = A0; // пин для потенциометра

// подключение мотора
// пины и количество шагов на оборот(8)
AccelStepper stepper_motor(8, motorPin1, motorPin3, motorPin2, motorPin4);

void setup(){
  // максимальная скорость мотора
  stepper_motor.setMaxSpeed(500);
  // дефолтная скорость мотора
  stepper_motor.setSpeed(200); 
}

void loop(){
  // читаем значение с потенциометра
  int val_a = analogRead(analog_pin);
  // получаем скорость(от 50 до 500) относительно значения потенциометра(от 0 до 1023)
  int motorSpeed = map(val_a, 0, 1023, 50, 500);
  // задаем скорость мотору
  stepper_motor.setSpeed(motorSpeed); 
  // вращаем мотор
  stepper_motor.runSpeed();
}

Характеристики микросхемы

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

Чтобы этого не происходило, правильно подходите к расчету потребляемой и рассеиваемой мощности. В данном случае при максимальном напряжении на CE равном 50 В максимальная мощность выходного транзистора составит не более 25 Вт, при этом он будет очень сильно греться. Поэтому номинальный коммутационный ток лучше поддерживать не более 300-400 мА. В таком режиме микросхема будет работать долго и стабильно.

Структурная схема микросхемы до боли проста и состоит всего из 7 ячеек стандартной ТТЛ-логики И-НЕ с подключенным обратным диодом на общий вывод питания COM . С топологией устройства также все просто, каждый вход расположен напротив выхода, что не даст спутать выводы при проектировании каких-либо устройств. Главное запомнить, что первый вывод является прямым входом.

Что касается характеристик, то они представлены для микросхем с ТТЛ-логикой, при котором управляющий сигнал не превышает 5 В. Но также выпускаются аналоги КМОП, которые могут работать от более низкого порога около 2 В до 9 В.

Схема подключения

На uln 2003 схема подключения до боли проста и не включает никаких компонентов. Главное, не перепутать вход с выходом и общий вывод, в остальном все и так ясно. Но все же для наглядности стоит повторить схему на примере с шаговым двигателем с питанием от 12 до 24 В. Общий провод от +24В подключается на 9 вывод и к центральному отводу обмоток двигателя, все остальные оп порядку согласно полюсам. Управление двигателем осуществляется по аналогичным линиям, только со входа МС.

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

Спецификация и драйвер шагового двигателя

Существуют разные модели драйверов (контроллеров) шаговых двигателей. Среди них можно выделить самые популярные в DIY разработках на базе Arduino: L293, ULN2003, A3967SLB.

Как правило, шаговый двигатель 28-BYJ48 используют в паре с драйвером ULN2003.

  • Напряжение питания: 5 В (постоянный ток);
  • Количество фаз: 4;
  • Количество шагов: 64;
  • Угол поврота на один шаг: 5.625 градуса
  • Частота: 100 Герц;
  • Частота холостого хода по часовой стрелке: > 600 Герц;
  • Частота холостого хода против часовой стрелки: > 1000 Герц;
  • Крутящий момент > 34.3 миллиньютон на метр;
  • Сопротивление вращению: 600-1200 грамм на сантиметр;
  • Класс элетробезопасности: A;

Внешний вид и схемы подключения ULN2003 приведены на изображениях ниже

Примечание. Если вы захотите использовать плату L293 вместо ULN2003, красный контакт подключать не надо.

Оцените статью:
Оставить комментарий