- •Выпускная квалификационная работа
- •Научный руководитель
- •Введение
- •Глава 1. Виды, устройство и принцип работы шаговых двигателей [6]
- •1.1 Общие принципы шаговых двигателей
- •1.2 Виды шаговых двигателей
- •1.21 Двигатели с переменным магнитным сопротивлением
- •1.22 Двигатели с постоянными магнитами
- •1.23 Гибридные двигатели
- •1.24 Биполярные и униполярные шаговые двигатели
- •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 Устройство модели
- •4.2 Программа управления краном на языке программирования PureBasic
- •Заключение
- •Список литературы
- •Приложения
- •1. Моделирование элементов устройств управления механизмами
- •2. Параллельный (lpt) порт ibm pc
- •3. Видеофильм о шаговых двигателях
- •4. Текст программы управления моделью крана
- •5. Результаты моделирования в программе MicroCap 7 устройства выработки управляющих импульсов на d-триггерах.
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 ; Директива, завершающая программу.
