logo
Контроллер шагового двигателя

Заключение

Все задачи, поставленные мною, были решены. Цель - достигнута. Была изучена литература, удалось реализовать контроллер для шагового двигателя, а также действующую модель с использованием шаговых двигателей. Автором был создан обучающий видеофильм, который можно использовать в учебных целях.

Данную выпускную квалификационную работу можно использовать как пособие по применению шаговых двигателей, реализации устройств на их основе. Результаты моей работы докладывались на конференциях:

Студенческая научная конференция, КГПИ, 2009 год. Тема доклада: контроллер шагового двигателя. Автор занял первое место среди докладчиков.

II Межрегиональная научная конференция, КГПИ, 2010 год. "Современные аудиовизуальные и информационные технологии в образовании". Тема доклада: разработка учебного видеофильма.

Студенческая научная конференция, КГПИ, 2010 год. Тема доклада: программирование портов в системе программирования PureBasic. Автор занял второе место среди докладчиков.

Список литературы

1. Шевелёв И.В. Управление работой шаговых двигателей с помощью ЭВМ. Статья к студенческой научной конференции, 2009 год.

2. П. Высочанский. Основы языка PureBasic 4.0

3. Шевелёв И.В. Контроллер шагового двигателя. Курсовая работа, 2009 год.

4. Демо-версия языка PureBasic - http://www.purebasic.com/download/PureBasic_Demo. exe

5. О. Шмелёв. Компьютерное управление механизмами измерительной техники - Радио, 2007, №12, стр. 20-22

6. Статья "Контроллер шагового двигателя" - сайт радиолюбителей РАДИОТЕХ www.radiotech. by.ru/Shematic_PCB/Avtomatika/step_motor. htm

7. Статья "Простой контроллер шагового двигателя" http://stepmotor.ru/articles/upravl. php

8. Справочный материал по ШД ДШИ-200 http://www.planar. by/ru/production/sm/dsi200/

9. Лабораторная работа "Использование параллельного порта ЭВМ на практике" ИТФ. КГПИ, кафедра ИиВТ.

Приложения

1. Моделирование элементов устройств управления механизмами

В качестве устройства управления можно успешно использовать ЭВМ с LPT-портом. Например, нам требуется выполнить электронную "мигалку" на светодиоде. Для этого необходимо собрать схему:

Токоограничивающий резистор R подбирается под конкретный светодиод, в нашем случае для светодиода HL - АЛ307КМ - 300 Ом:

светодиоду АЛ307КМ с током потребления 10 мА желательно последовательно поставить резистор с сопротивлением (исходя из закона

Ома: R= (U-Uд) /I, где U-напряжение питания (т.е.5 В), Uд, I-напряжение питания и ток потребления светодиода (можно найти в справочнике, для АЛ307КМ - Uд =2 В, I=10mA). Тогда R=300 Ом. Схема к ЭВМ подключается разъёмом DB-25М.

В программе используется процедура delay (m) (задержка программы на время m, в миллисекундах) и с помощью цикла триггеру D0 порта попеременно присваивается значение "1" и "0", часть программы на паскале может выглядеть так:

repeat

port [$378]: =1;

delay (1000);

port [$378]: =0;

delay (1000);

until keypressed;

Цикл завершится, как только пользователь нажмёт любую клавишу.

Поскольку светодиод требует малый ток (примерно 5-15 мА) в схеме не пришлось использовать дополнительный источник питания, поэтому схема проста. Если необходимо управлять нагрузкой, с потребляемым током более 15 мА, то желательно использовать схемы с усилителем мощности и, разумеется, отдельным источником питания.

Описанное выше устройство использует порт только как устройство вывода, хотя параллельный порт является более гибким устройством, способное выполнять ввод данных, следующая схема реализует слежение за положением выключателя SA 1 и может, при необходимости, включать и выключать какое-либо внешнее устройство, изменив, уже программно, информацию в регистре данных порта. Опять же, применение подобных схем не ограничивается включением или выключением какого-либо устройства, например, при включении SA 1 может запускаться программа, при реализации соответствующего ПО.

Таким образом, при помощи ЭВМ можно управлять практически любым электронным прибором, в том числе и шаговым двигателем.

2. Параллельный (LPT) порт IBM PC

Данный порт компьютера IBM PC использует параллельный интерфейс и предназначен в основном для подключения принтера

Регистр данных порта работает только на выход, данные сохраняются в этом регистре до записи нового байта. Для записи байта Date в регистр можно использовать массив port [] в Turbo Pascal

port [Adres]: =Date

Здесь Adres - адрес регистра. Например, чтобы записать в регистр данных D0 логическую единицу, необходимо порту 378Н присвоить значение "1". Это будет выглядеть так:

Port [$378]: =1;

А если требуется, чтобы единица была в разряде регистра D2, а на остальных - 0, то требуется порту задать значение "4". Данные с разрядов D0. D7 снимаются соответственно с 2.9 контактов разъёма DB-25M.

Реализация ввода данных через порт реализуется подачей непосредственно на контакты, предназначенные для входа, высокого уровня напряжения (>=2,0 В), или низкого (<=0,8 В), которые и будут расцениваться за логическую единицу и ноль соответственно (если вход инвертирован, тогда наоборот). [9]

Полезной будет следующая таблица:

Регистр

Адрес

Разряды регистра

D7

D6

D5

D4

D3

D2

D1

D0

Данных

(*) выход

Base

D7

(9)

D6

(8)

D5

(7)

D4

(6)

D3

(5)

D2

(4)

D1

(3)

D0

(2)

Состояния

(*) вход

Base+1

(11)

Ackn

(10)

PE

(12)

Select

(13)

(15)

X

X

X

Где Base - базовый порт (LPT1-378H, LPT2-278H), тогда Base+1 - 379H (или 279H).

(*) - в скобках указан номер вывода разъёма DB-25M, соответствующий разряду регистра.

3. Видеофильм о шаговых двигателях

Видеофильм находится в каталоге с doc файлом выпускной квалификационной работы, имя файла -

Учебный видеофильм о шаговых двигателях. AVI

4. Текст программы управления моделью крана

Procedure delayy (time,dn); процедура реализует задержку, замена

For j=1 To time; стандартной delay ()

For g=1 To dn Step 1

y=100

Next g

Next j

EndProcedure

Procedure LPT_Inp (Address); процедура получения информации

Value = CallFunction (1, "Inp32", Address); из регистра состояния LPT-порта

ProcedureReturn Value; принятый байт

EndProcedure

Procedure kod (nomer); подпрограмма преобразования порядкового

If nomer=0; номера в единицу соответствующего разряда

n=1

EndIf

If nomer=1

n=2

EndIf

If nomer=2

n=4

EndIf

If nomer=3

n=8

EndIf

If nomer=4

n=16

EndIf

If nomer=5

n=32

EndIf

If nomer=6

n=64

EndIf

If nomer=7

n=128

EndIf

ProcedureReturn n

EndProcedure

Procedure LPT_Out (Address, Value); процедура записи информации в

CallFunction (1,"Out32", Address, Value); регистр данных LPT-порта

EndProcedure

If OpenLibrary (1,"inpout32. dll") =0; Открываем файл inpout32. dll, для использования его функций

MessageRequester ("Нет файла!", "Для работы программы требуется файл"+Chr (10) +Chr (13) + " inpout32. dll",16)

End; Завершаем работу программы при отсутствии файла inpout32. dll

EndIf

lpt_out ($378,0)

OpenLibrary (2,"user32. dll"); Открываем файл user32. dll, для использования его функций

string1. s

; Создаём окно.

InitMouse ()

InitKeyboard ()

OpenWindow (1,10,10,640,400,"Управление Моделью Крана",#PB_Window_MinimizeGadget)

LoadImage (0,"screen_1. bmp")

ButtonGadget (2,131,137,25,25,"")

ButtonGadget (3,230,137,25,25,"")

ButtonGadget (4,178,98,25,25,"")

ButtonGadget (5,178,180,25,25,"")

ButtonGadget (6,350, 20,280,25,"Режим управления клавиатурой и мышью")

ButtonGadget (7,480,360,140,25,"Выйти из программы")

; ButtonGadget (11,50,250,250,30,"Получить информацию о состоянии регистра")

; StringGadget (12,50,280,80, 20, "",#PB_String_Numeric)

TextGadget (10,10,330,150, 30,"Длительность управляющих импульсов - мс ")

StringGadget (9,80,342,40,18, "10",#PB_String_Numeric)

ImageGadget (0, 0, 0, 400, 300, ImageID (0))

; StringGadget (8, 8, 200, 100, 20, "")

AddKeyboardShortcut (1, #PB_Shortcut_Escape,

7)

; AddKeyboardShortcut (1, #PB_Shortcut_Right,

3)

; AddKeyboardShortcut (1, #PB_Shortcut_Up,

4)

; AddKeyboardShortcut (1, #PB_Shortcut_Down,

5)

StartTime = ElapsedMilliseconds (); Get the actual value

For u=1 To 10000000 Step 1

y=100

Next u

ElapsedTime = ElapsedMilliseconds () - StartTime

dn=Round (10000000/ElapsedTime*100/200, #PB_Round_Up)

; text. s=StrQ (dn)

; SetGadgetText (8,text)

Repeat; Начало главного цикла.

If e=1

lpt_out ($378,0)

OpenWindow (1,10,10,640,400,"Управление Моделью Крана",#PB_Window_MinimizeGadget)

LoadImage (0,"screen_1. bmp")

ButtonGadget (2,131,137,25,25,"")

ButtonGadget (3,230,137,25,25,"")

ButtonGadget (4,178,98,25,25,"")

ButtonGadget (5,178,180,25,25,"")

ButtonGadget (6,350, 20,280,25,"Режим управления клавиатурой и мышью")

ButtonGadget (7,480,360,140,25,"Выйти из программы")

; ButtonGadget (11,50,250,250,30,"Получить информацию о состоянии регистра")

; StringGadget (12,50,280,80, 20, "",#PB_String_Numeric)

TextGadget (10,10,330,150, 30,"Длительность управляющих импульсов - мс ")

StringGadget (9,80,342,40,18, "10",#PB_String_Numeric)

ImageGadget (0, 0, 0, 400, 300, ImageID (0))

; StringGadget (8, 8, 200, 100, 20, "")

AddKeyboardShortcut (1, #PB_Shortcut_Escape,

7)

; AddKeyboardShortcut (1, #PB_Shortcut_Right,

3)

; AddKeyboardShortcut (1, #PB_Shortcut_Up,

4)

; AddKeyboardShortcut (1, #PB_Shortcut_Down,

5)

e=0

EndIf

Event=WaitWindowEvent (); Получаем идентификатор события.

Gadget=EventGadget (); Узнаём идентификатор активного гаджета.

string1=GetGadgetText (9)

t=ValQ (string1)

If Gadget=7 And event=#PB_Event_Gadget

x=1

EndIf

If Gadget=2 And event=#PB_Event_Gadget; движение влево

For i=1 To 10 Step 1

For j=3 To 0 Step - 1

k=kod (j)

lpt_out ($378,k)

Delayy (t,dn)

Next j

lpt_out ($378,0)

Next i

EndIf

If Gadget=3 And event=#PB_Event_Gadget; движение вправо

For i=1 To 10 Step 1

For j=0 To 3 Step 1

a=lpt_inp ($379)

If a=126

k=kod (j)

lpt_out ($378,k)

Delayy (t,dn)

EndIf

Next j

lpt_out ($378,0)

Next i

EndIf

If Gadget=4 And event=#PB_Event_Gadget; движение вверх

For i=1 To 40 Step 1

For j=4 To 7 Step 1

k=kod (j)

lpt_out ($378,k)

Delayy (t,dn)

Next j

lpt_out ($378,0)

Next i

EndIf

If Gadget=5 And event=#PB_Event_Gadget; движение вниз

For i=1 To 40 Step 1

For j=7 To 4 Step - 1

k=kod (j)

lpt_out ($378,k)

Delayy (t,dn)

Next j

lpt_out ($378,0)

Next i

EndIf

If Event=#PB_Event_Gadget And Gadget=6

j=0

i=0

s=0

InitSprite ()

OpenWindowedScreen (WindowID (1), 0, 0, 40, 30, 0, 0, 0)

Repeat

a=lpt_inp ($379)

j=j+1

If j>3

j=0

k=kod (j)

lpt_out ($378,k)

Delayy (t/2,dn)

Else

k=kod (j)

lpt_out ($378,k)

Delayy (t/2,dn)

EndIf

Until a=118

Repeat

ExamineMouse (); слежение за состоянием курсора мыши

ExamineKeyboard (); слежение за нажатыми клавишами

x = MouseDeltaX ()

y = MouseDeltaY ()

w=MouseWheel ()

a=lpt_inp ($379)

If (x>1 Or KeyboardPushed (#PB_Key_Right)) And (a=126)

j=j+1

s=s-1

If j>3

j=0

k=kod (j)

lpt_out ($378,k)

Delayy (2*t,dn)

Else

k=kod (j)

lpt_out ($378,k)

Delayy (2*t,dn)

EndIf

EndIf

If (x<-1 Or KeyboardPushed (#PB_Key_Left)) And (s<170)

j=j-1

If j<0

j=3

k=kod (j)

lpt_out ($378,k)

Delayy (2*t,dn)

Else

k=kod (j)

lpt_out ($378,k)

Delayy (2*t,dn)

EndIf

s=s+1

EndIf

If y<-1 Or KeyboardPushed (#PB_Key_Up)

i=i+1

If i>7

i=4

k=kod (i)

lpt_out ($378,k)

Delayy (t,dn)

Else

k=kod (i)

lpt_out ($378,k)

Delayy (t,dn)

EndIf

EndIf

If y>1 Or MouseButton (2) Or KeyboardPushed (#PB_Key_Down)

i=i-1

If i<4

i=7

k=kod (i)

lpt_out ($378,k)

Delayy (t,dn)

Else

k=kod (i)

lpt_out ($378,k)

Delayy (t,dn)

EndIf

EndIf

If w>0

For i=1 To 20 Step 1

For j=4 To 7 Step 1

k=kod (j)

lpt_out ($378,k)

Delayy (t,dn)

Next j

Next i

EndIf

If w<0

For i=1 To 20 Step 1

For j=7 To 4 Step - 1

k=kod (j)

lpt_out ($378,k)

Delayy (t,dn)

Next j

Next i

EndIf

lpt_out ($378,0)

Until KeyboardPushed (#PB_Key_Escape)

e=1

EndIf

lpt_out ($378,0)

If Gadget=11 And event=#PB_Event_Gadget

a=lpt_inp ($379)

text. s=StrQ (a)

SetGadgetText (12,text)

EndIf

Until Event = #PB_Event_CloseWindow Or x=1; Прерываем цикл если в переменной "Event" будет число равное числу в константе.

lpt_out ($378,0)

TextGadget (14,100,380,150, 30,"Shevelev I. V. Syktyvkar 2010 ")

Delay (1000)

End; Директива, завершающая программу.

5. Результаты моделирования в программе MicroCap 7 устройства выработки управляющих импульсов на D-триггерах.

Схема, реализованная в MicroCap, соответствующая схеме рис.1.1:

При поступлении импульсов на вход CLK, на выходах Q1-Q4 устройства будет:

6. Справочный материал по шаговым двигателям ДШИ-200 отечественного производства [8].

Параметры

ДШИ-200-1

ДШИ-200-2

ДШИ-200-3

Сопротивление фазных обмоток, Ом

1,56±0,15

2,1±0,2

3,35±0,3

Максимальный статический синхронизирующий момент, Нм, не менее

0,25

0,46

0,34

Максимальная частота приемистости, Гц, не менее

1200

1000

1000

Единичный шаг и статическая погрешность обработки шага

108±3,25

108±3,25

108±3,25

Максимальная потребляемая мощность, Вт, не более

8,8

11,8

16,7

Средний ресурс электродвигателей не менее 5550 часов.

Средний срок сохраняемости 3 года.