Драйвер шагового дигателя (управление шаговыми двигателями с помощью компьютера)
В данной статье описан один из наиболее простых методов подключения нескольких шаговых двигателей к компьютеру через порт LPT, а алгоритм управления двигателями. По сравнению с обычными двигателями постоянного тока, шаговые двигатели требуют значительно более сложных схем управления, которые должны выполнять все коммутации обмоток при работе двигателя.
В зависимости от конфигурации обмоток двигатели делятся на биполярные и униполярные. Для управления биполярным двигателем требуется более сложный драйвер. Драйвер – так называется силовая часть электро схемы управления шаговым двигателем, не путать с программным драйвером.
Я, в своих экспериментах использовал шаговые двигатели от 5,25-дюймов дисководов. В основном в дисководах попадаются двигатели с сопротивлением обмоток 70 ом и напряжением питания 12в. Всю электрическую схему можно разбить на две части: контроллер (буфер) и драйвер см.рис.1.
Разработанный мной контроллер может обслуживать до 16 шаговых двигателей, он собран на трех микросхемах 555TM7. Схема контроллера изображена на рис.2.
Контроллер подключается к LPT. Привожу назначение выводов разъема порта LPT.
выв.
|
Название
|
Направление
|
Описание
|
1
|
STROBE
|
ввод и вывод
|
устанавливается PC после завершения каждой передачи данных
|
2/9
|
DO-D7
|
вывод
|
8 линий данных
|
10
|
АСК
|
ввод
|
устанавливается в "0" внешним устройством после приема байта
|
11
|
BUSY
|
ввод
|
устройство показывает, что оно занято, путем установки этой линии в «1»
|
12
|
Paper out
|
ввод
|
для принтеров
|
13
|
Select
|
ввод
|
устройство показывает, что оно готово, путем установки на этой линии «1 »
|
14
|
Autofeed
|
Ввод и вывод
|
|
15
|
Error
|
ввод
|
индицирует об ошибке
|
16
|
Initialize
|
Ввод и вывод
|
|
17
|
Select In
|
Ввод и вывод
|
|
18-25
|
Ground
|
GND
|
общий провод
|
Я разбил 8 бит данных идущих от LPT на две группы по 4 бит: «данные» (bit 0-3) и «адреса» (bit 4-7)
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
данные
|
адрес –определяет на какой двигатель придет сигнал - данные
|
«Данные» передаются на триггеры ТМ7 выводы 2, 3, 6,7 (D1, D2, D3, D4 см.рис.2), а «адреса» определяют какой из триггеров запишет эти «данные».
Рассмотрим примеры:
Биты LPT
|
Примечание
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
«адрес»
№ драйвера
|
«данные»
|
4
|
3
|
2
|
1
|
4
|
3
|
2
|
1
|
0
|
0
|
0
|
1
|
0
|
1
|
0
|
1
|
Данные 0101 запишутся в триггер 1 и передадутся в драйвер 1
|
0
|
0
|
1
|
0
|
0
|
1
|
0
|
1
|
Данные 0101 запишутся в триггер 1 и передадутся в драйвер 2
|
0
|
1
|
0
|
0
|
0
|
1
|
0
|
1
|
Данные 0101 запишутся в триггер 1 и передадутся в драйвер 3
|
0
|
0
|
0
|
0
|
1
|
0
|
1
|
1
|
Данные никуда не поступят, т.к. не выбран «адрес»
|
0
|
1
|
1
|
1
|
1
|
0
|
1
|
1
|
Данные 1011 запишутся сразу в три триггера 1,2,3
|
В моей схеме 7 бит не используется т.к. применено 3 двигателя.
Для подключения к схеме 16 двигателей необходимо на управляющие биты «адреса» установить дешифратор. К выходам ТМ7 подключается драйвер – силовые ключи коммутирующие обмотки шагового двигателя. Драйвер состоит из 4х транзисторов КТ 972 см.рис.3.
Диоды можно использовать любые с допустимым импульсным током 200мА
Также можно использовать серийные микросхемы (stepper motor driver), например ULN 2004 (9 ключей) на 0.6А. или НА13408 (1.5А) см.рис.4
Для питания контроллера и шаговых двигателей понадобится блок питания.
Его мощность зависит от мощности шаговых двигателей. При использовании двигателей от 5" дисководов потребляемый ток будет равен: 3 двигателя, одновременно может запитано по 2 обмотки (полу-шаговый режим) по 0.6А т.е.
3х2х0,6=3,6А
А теперь о том как управлять контроллером и шаговыми двигателями с помощью компьютера. Проще всего из Qbasic (под DOS)
Команда
OUT 888, Х
Порт принтера LPT имеет адрес 888. процедурой OUT мы в порт помещаем число Х.
Повернем двигатель №1 на один оборот:
OUT 888, 17 ‘ число 00010001
‘задержка
OUT 888, 18 ‘ число 00010010
‘задержка
OUT 888, 20 ‘ число 00010100
‘задержка
OUT 888, 24 ‘ число 00011000
‘задержка
После каждой команды необходимо поставить задержку, т.к. шаговый двигатель не успеет повернуться в следующее положение.
Например создать пустой цикл:
FOR i = 1 TO 100000
NEXT i
Максимальная частота коммутации обмоток шагового двигателя (те которые были у меня) 2000Гц, что соответствует 4 об/сек. При большей частоте двигатель будет пропускать шаги.
|