Заключение
Все задачи, поставленные мною, были решены. Цель - достигнута. Была изучена литература, удалось реализовать контроллер для шагового двигателя, а также действующую модель с использованием шаговых двигателей. Автором был создан обучающий видеофильм, который можно использовать в учебных целях.
Данную выпускную квалификационную работу можно использовать как пособие по применению шаговых двигателей, реализации устройств на их основе. Результаты моей работы докладывались на конференциях:
Студенческая научная конференция, КГПИ, 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 года. |
- Введение
- Глава 1. Виды, устройство и принцип работы шаговых двигателей [6]
- 1.1 Общие принципы шаговых двигателей
- 1.2 Виды шаговых двигателей
- · двигатели с переменным магнитным сопротивлением
- 1.2.1 Двигатели с переменным магнитным сопротивлением
- 1.2.2 Двигатели с постоянными магнитами
- 1.2.3 Гибридные двигатели
- 1.2.4 Биполярные и униполярные шаговые двигатели
- 1.3 Способы управления фазами ШД
- Глава 2. Контроллеры шаговых двигателей
- 2.1 Управление шаговым двигателем с помощью автономного контроллера
- 2.2 Управление шаговым двигателем с использованием ЭВМ
- 2.3 Реализация адаптера шагового двигателя
- Глава 3. Управление контроллером с помощью системы программирования PureBasic
- 3.1 Особенности системы программирования PureBasic
- 3.2 Синтаксис
- 3.3 Сравнение с Basic и Pascal
- 3.4 Особенности PureBasic
- 3.5 Программирование LPT порта
- Глава 4. Модель крана как пример применения шаговых двигателей
- 4.1 Устройство модели
- Заключение