Please use this identifier to cite or link to this item: https://er.chdtu.edu.ua/handle/ChSTU/6387
Title: Автоматизована система керування кроковим двигуном
Authors: Чичужко, Марина Володимирівна
Бразілій, Гліб Андрійович
Issue Date: Jun-2025
Abstract: В даній кваліфікаційній роботі бакалавра розроблено автоматизовану систему керування кроковим двигуном невисокої вартості шляхом використання різних режимів роботи за допомогою програмного забезпечення. Розроблено апаратну частину системи та програму для керування кроковим двигуном. Описані основні переваги та можливі недоліки даної системи. Також описано роботу основних пунктів меню та задачі, які виконує даний програмний комплекс. Приділяється увага переліку програмного забезпечення, яке потрібне для стабільної роботи даної системи.
URI: https://er.chdtu.edu.ua/handle/ChSTU/6387
Appears in Collections:174 Автоматизація, комп'ютерно-інтегровані технології та робототехніка (Автоматизація та комп'ютерно-інтегровані системи та компоненти)

Files in This Item:
File Description SizeFormat 
Б_174_2025_Бразілій.pdf
  Restricted Access
1.84 MBAdobe PDFView/Open Request a copy


Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.

Extracted text
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОІЧНИЙ УНІВЕРСИТЕТ 
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ І СИСТЕМ 
КАФЕДРА РОБОТОТЕХНІКИ ТА СПЕЦІАЛІЗОВАНИХ 
КОМП’ЮТЕРНИХ СИСТЕМ 
 
 
 
 
 
 
 
Пояснювальна записка 
до кваліфікаційної роботи 
освітнього ступеню «магістр» 
 
на тему: Автоматизована система керування кроковим двигуном 
 
Виконав: здобувач вищої освіти  
 2  курсу скор. форми, групи АКІТС-2109 
 спеціальності 
 174 Автоматизація, комп’ютерно-
інтегровані технології та робототехніка 
 Гліб БРАЗІЛІЙ 
 (ім’я та ПРІЗВИЩЕ) 
Керівник Марина ЧИЖУЖКО 
 (ім’я та ПРІЗВИЩЕ) 
Рецензент  
 (ім’я та ПРІЗВИЩЕ) 
Допущений до захисту:  
  
зав. кафедри,   
д.т.н., професор ____________Валентина ЛУКАШЕНКО  
 (ім’я та ПРІЗВИЩЕ) 
 
2025
2 
ЗМІСТ 
  
ПЕРЕЛІК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ .................................. 4 
ЗАГАЛЬНА ХАРАКТЕРИСТИКА РОБОТИ………………………………….5 
РОЗДІЛ 1 ОСНОВНІ ВИДИ КРОКОВИХ ДВИГУНІВ ТА МЕТОДИ 
КЕРУВАННЯ НИМИ……. ...................................................................................... 7 
1.1 Крокові двигуни ................................................................................................ 7 
1.1.1 Двигун з постійними магнітами ................................................................ 7 
1.1.2 Двигун зі змінним опором ........................................................................ 10 
1.1.3 Гібридний кроковий двигун ..................................................................... 11 
1.1.4 Біполярні та уніполярні двигуни ............................................................. 13 
1.1.5 Способи підключення обмоток крокового двигуна .............................. 14 
1.2 Методи керування кроковим двигуном ........................................................ 17 
1.2.1 Повнокроковий режим без перекриття фаз ............................................ 17 
1.2.2 Повнокроковий режим з перекриттям фаз ............................................. 18 
1.2.3 Напівкроковий режим ............................................................................... 19 
1.2.4 Мікрокроковий режим .............................................................................. 22 
1.3 Вплив навантаження та тертя на момент двигуна ....................................... 25 
  1.3.1     Вплив навантаження на момент двигуна................................................25  
    1.3.2    Вплив тертя на момент двигуна...............................................................27  
1.4 Резонанс крокового двигуна .......................................................................... 30 
РОЗДІЛ 2 ПРОЕКТУВАННЯ СИСТЕМИ КЕРУВАННЯ... ............................ 34 
2.1 Вимоги до проектованої системи .................................................................... 32 
2.2 Розробка апаратної частини ........................................................................... 33 
РОЗДІЛ 3 ПРОГРАМНА РОЗРОБКА ................................................................. 50 
3.1 Встановлення та налаштування програмного середовища ......................... 41 
3.2 Програмна реалізація ...................................................................................... 43 
 
 
3 
ВИСНОВКИ .............................................................................................................. 55 
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ............................................................. 56 
ДОДАТОК А ............................................................................................................. 58 
 
 
 
 
  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4 
ПЕРЕЛІК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ 
 
КД – Кроковий двигун 
ЕРС – Електрорушійна сила 
ОС – Операційна система 
ПК – Персональний комп’ютер 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5 
 
ЗАГАЛЬНА ХАРАКТЕРИСТИКА РОБОТИ 
 
Актуальність теми 
Одним із видів електричних двигунів, які найбільш органічно поєднуються 
з мікропроцесорною технікою є кроковий двигун (КД). Саме швидкістю, часом, 
напрямком і послідовністю комутації легко справляється мікроконтролер. 
Проблема керування режимами роботи крокового двигуна неодноразово 
втілювались в роботах Арменського Є.В., Фалка Г.В., Кеніо Т., Рідіко Л., 
Івботенко Б.А., Рубцова В.П., Садовського Л.А. та інших вчених. 
В матеріалі який дають автори вибір режиму роботи (повнокроковий, 
півкроковий, мікрокроковий 1/4, та мікрокроковий 1/8) задається положенням 
вимикачів на платі контролера. Він задається для отримання бажаного кроку 
переміщення механізму у верстаті. Керування двигуном в такий спосіб є 
неефективним і витратним у зв’язку з використанням контролера двигуна 
високої вартості. Тому в даній роботі запропоновано у випадку керування 
двигуном дискретними сигналами, та здійснювати зміну режимів роботи 
двигуна за допомогою програмного забезпечення. 
Мета і задачі дослідження. Метою роботи є розробка автоматизованої 
системи керування кроковим двигуном невисокої вартості шляхом 
використання різних режимів роботи за допомогою програмного забезпечення. 
Для досягнення цієї мети необхідно вирішити наступні задачі: 
− Провести аналіз існуючих автоматизованих систем керування 
кроковими двигунами.  
− Дослідити сучасні технології, що застосовуються в крокових 
двигунах. 
− Провести порівняльний аналіз мов програмування, та обрати 
найбільш доцільну мову для реалізації програмного додатка. 
Об’єкт дослідження – процес керування кроковим двигуном. 
 
6 
Предмет дослідження – автоматизована система керування кроковим 
двигуном шляхом інтеграції керування за допомогою програмного 
забезпечення. 
Методи дослідження базуються на використанні  методів  теорії передачі  
сигналів, теорії  крокового приводу, теорія електромагнітного поля, теорія 
системного аналізу .  
Новизна отриманих результатів: 
− Проведено аналіз існуючих автоматизованих систем керування 
кроковими двигунами. 
− Проведено порівняльний аналіз мов програмування, та обрано 
найбільш доцільну мову для реалізації програмного додатка. 
Практичне значення одержаних результатів полягає в доведенні 
отриманих наукових результатів до конкретних інженерних рішень : 
− Розроблено програму для керування кроковим двигуном. 
Апробація результатів роботи. Результати роботи доповідалися й 
обговорювалися на студентській науковій конференції: 
− дні студентської науки ЧДТУ, 23 квітня, м. Черкаси, Україна, 2025. 
Структура та обсяг випускної роботи. Кваліфікаційна робота бакалавра 
складається із загальної характеристики роботи, 3 розділів, висновків та списку 
використаних джерел. Робота викладена на 72 сторінках. Ілюстрована 
40 рисунками та має 2 таблиці. Список використаних джерел містить 
19 найменування. 
 
7 
РОЗДІЛ 1 
ОСНОВНІ ВИДИ КРОКОВИХ ДВИГУНІВ ТА МЕТОДИ 
КЕРУВАННЯ НИМИ 
 
1.1 Крокові двигуни, їх переваги і недоліки 
Крокові двигуни вже давно і успішно застосовуються в самих 
різноманітних пристроях. Їх можна зустріти в дисководах, принтерах, 
плоттерах, сканерах, факсах, а також в різноманітному промисловому і 
спеціальному обладнанні. Одне із застосувань в учбових цілях - це 
радіоаматорські моделі, виконавчі вузли роботів, привід редукторів точного 
повороту антен. Пристрій можна також застосувати як привід в станках для 
точного свердлування і калібрування отворів невеликого діаметра, в 
транспортерних лініях і т. п. У цей час випускається безліч різних типів 
крокових двигунів на всі випадки життя. Однак правильно вибрати тип двигуна 
- це тільки початок. Не менш важливо правильно вибрати схему драйвера і 
алгоритм його роботи, який часто визначається програмою мікроконтролера. 
Переваги і недоліки крокових двигунів. 
Крокові двигуни - це пристрої, задача яких перетворення електричних 
імпульсів в поворот вала двигуна на певний кут. На відміну від звичайних 
двигунів, крокові двигуни мають особливості, які визначають їх властивості 
при використанні в спеціалізованих областях: управляючи кроковим двигуном 
за допомогою спеціального пристрою (драйвер крокового двигуна), можна 
повертати його вал на суворо заданий кут. Це дозволяє застосовувати його там, 
де потрібно висока точність переміщень. Кроковий двигун є бесколекторним 
двигуном постійного струму. Як і інші бесколекторні двигуни, кроковий двигун 
високонадійний і при належній експлуатації має тривалий термін служби.  
Переваги залежать від особливостей конструкції: 
- кроковий двигун може забезпечити дуже точне переміщення на заданий 
кут, причому без зворотного зв'язку - поворот ротора залежить від числа 
поданих імпульсів на пристрій управління. 
 
8 
- висока точність позиціонування і повторюваність, так якісні крокові 
двигуни мають точність не гірше 5% від величини кроку, при цьому 
дана помилка не нагромаджується; 
- хороша надійність двигуна, зумовлена відсутністю щіток, при цьому 
термін служби двигуна обмежується лише ресурсом підшипників; 
- забезпечує отримання низьких швидкостей обертання вала без 
використання редуктора; 
- робота в широкому діапазоні швидкостей, так як швидкість прямо 
залежить від кількості вхідних імпульсів. 
 
Недоліки: 
- кроковий двигун схильний до резонансу; 
- може пропустити кроки і реальна позиція вала виявиться 
розсинхронизована з позицією, заданою в керуючій системі; 
- низька питома потужність крокового приводу; 
- споживана енергія не меншає при відсутності навантаження; 
- малий момент на високих швидкостях. 
Крокові двигуни складаються із рухомої частини, яка має назву ротор, та 
нерухомої, яка називається статор. На статорі встановлюються 
електромагніти, а частини ротора, які взаємодіють з електромагнітами, 
виконуються із магнітотвердого або магнітом’якого матеріалу [1]. 
Відповідно до того, з якого матеріалу виконано ротор двигуна, вони 
розділяються на наступні види : 
⚫  двигун із постійними магнітами ; 
⚫  двигун із змінним магнітним опором ; 
⚫  гібридний двигун ; 
⚫  біполярні та уніполярні двигуни. 
  
 
9 
 
1.1.1 Двигун із постійними магнітами 
На рис 1.1 зображено конструкцію крокового двигуна з постійними 
магнітами. 
 
Рис. 1.1 Кроковий двигун з постійними магнітами 
Показаний на рис 1.1 двигун має в своїй конструкції три пари полюсів 
ротора та дві пари полюсів статора [1]. 
Принцип дії такого двигуна полягає в тому, що при включенні в одну з його 
котушок струму, ротор робить оберт таким чином, щоб його різнойменні 
полюси та полюси статора знаходилися навпроти один одного. 
Для розгляду принципу роботи такого двигуна, приймемо,  що  ротор 
робить оберт на 90 градусів , якщо подавати імпульс струму на обмотки статора. 
На рис 1.2 зображено принципова схема роботи крокових двигунів. 
 
 
 
 
Рис. 1.2 Принципова схема роботи крокового двигуна 
 
10 
 
Коли через обмотку CD буде протікати струм, то в статорі буде 
створюватися магнітне поле. При цьому, при взаємодії полів статора та ротора 
створюється момент, завдяки якому ротор робить оберт таким чином, щоб осі 
їх магнітних полів співпадали [1]. Магнітний потік при цьому буде 
максимальним. Завдяки цьому, кроковий двигун робить один крок і займе 
положення стійкої рівноваги, що і показано на рис 1.2 а). 
Обмотка CD після цього буде знеструмлена і струм буде протікати через 
обмотку AB. Ротор двигуна вийде з положення стійкої рівноваги завдяки 
моменту, завдяки якому він і робить наступний оберт. При знеструмлені 
обмотки AB, ротор знову буде знаходитися в положенні стійкої рівноваги. Далі, 
двигун знову підключений до обмотки CD, проте він має іншу полярність 
ротора , тому і полярність обмоток має змінитися на протилежну. Коли це буде 
зроблено, двигун зробить ще один крок, який зображено на рис 1.2 г). Ротор 
двигуна буде знаходитися при цьому між обмотками AB, через які має 
протікати струм протилежної полярності для повернення ротора в положення , 
яке зображене на рис 1.2 а) [2]. 
Такі двигуни роблять за оберт від 24 до 48 кроків, при цьому оберт складає 
від 15 до 7.5 градусів відповідно.  
На рис 1.3 зображено розріз крокового двигуна з постійними магнітами [2]. 
 
Рис. 1.3 Розріз крокового двигуна з постійними магнітами 
 
 
11 
 
Магнітопровід статора виконаний у вигляді штампованого стакану, з 
метою здешевлення конструкції. Фазові обмотки розміщені на двух різних 
магнітопроводах , які розташовані один на одній. Ротор в свою  чергу являє 
собою циліндричний багатополюсний постійний магніт [3]. 
Перевагами такого двигуна є : 
⚫  Регулювання струму керування, що дає можливість двигуну 
працювати в оптимальному режимі при впливі реактивної енергії. 
⚫  Висока перевантажувальна здатність. Шляхом підвищення струму 
збудження, можна провести значне підвищення перевантажувальної здатності. 
Це відбувається на момент різкого і короткочасного виникнення додаткового 
навантаження на вихідному валу. 
⚫  Швидкість обертання двигуна є незмінною при підключені любого 
типу навантаження , якщо він не перевищує показника перевантажувальної 
здатності. 
Недоліком такого типу двигунів є вплив зворотної ЕРС зі сторони ротора, 
яка обмежує їх максимальну швидкість. Для роботи на великих швидкостях 
використовується двигуни із змінними магнітами [3-4]. 
 
1.1.2 Двигун із змінними магнітним опором 
На рис 1.3 зображений кроковий двигун із змінним магнітним опором , що 
конструктивно має 4 зубці на роторі і 6 полюсів на статорі. Для розгляду 
принципу роботи двигуна, обмотки під’єднано до джерела напруги за 
допомогою ключів, з метою їх комутації. 
 
12 
 
Рис. 1.4 Двигун із змінним магнітним опором : 1 - сердечник статора , 2 - 
сердечник ротора 
 
В такому типі двигунів є три незалежні одна від одної обмотки , кожна з 
яких намотана на двох протилежних полюсах статора. Обмотка I підключена до 
джерела живлення через ключ I , причому саме через цей ключ в даному 
випадку іде комутація. Струм, протікаючи в обмотці, створює магнітний потік 
[5]. Оскільки сердечник статора і ротора виконані із магнітом’яких матеріалів , 
то ротор намагається зайняти таке положення , при якому два із чотирьох його 
зубців будуть розташовуватися на одній прямій з зубцями статора. 
Якщо потім розімкнути фазу I і замкнути фазу II , в зубцях статора , 
відповідний цій фазі , виникає магнітний потік [5].Зубці ротора , намагнічені 
полем, будуть притягуватися к зубцям статора , поки не окажуться з ними на 
одній лінії. В результаті цього, ротор двигуна повернеться на кут 30 градусів , 
що і буде кроком двигуна. Таким чином, якщо через ключі комутувати фази, 
можна керувати кутовим положенням ротора. Швидкість обертання валу буде 
визначатися частотою комутації фаз, а напрямок буде залежати від того, в якому 
порядку буде відбуватися зміна фаз. Так, якщо після I фази скомутувати II , то 
ротор буде  обертатися проти годинникової стрілки, а якщо II, то за нею. Для 
того щоб зменшити крок двигуна, необхідно або збільшити кількість фаз, або 
кількість зубців ротора, або все разом. 
Нехай в двигуні буде протікати струм через одну обмотку. Тоді два зубці 
ротора розташовані на одній прямій з двома зубцями статора. Якщо до валу 
 
13 
ротора буде прикладено зовнішній момент, то при цьому виникає утримуючий 
момент , який перешкоджає виведенню ротора із положення рівноваги. Цей 
процес зображено на рис 1.4 . 
В результаті викривлення магнітних силових ліній в них виникає натяг, під 
дією якого силові лінії прагнуть стати коротшими та прямішими. 
 
 
Рис. 1.4 Моменти , що діють на ротор : 1 - силові лінії, 2 - зовнішній 
момент, 3 - утримуючий момент 
 
1.1.3 Гібридний кроковий двигун 
На рис 1.5 зображена конструкція такого двигуна, де 1 - магнітопровід 
статора ; 2 - обмотка ; 3 - магнітопровід ротора ; 4  - обмотка ; 5 - постійний 
магніт. 
Гібридний двигун за своєю конструкцією складається з елементів двигуна 
із змінним магнітним опором та двигуна з постійним магнітом. 
 
 
 
14 
 
 
Рис. 1.5 Конструкція гібридного двигуна 
 
Ротор такого двигуна складається з двох частин, зубці однієї з них є 
північним полюсом магніта, а іншої половини- південним. Крім того, нижні та 
верхні зубці ротора повернуті один відносно одного на величину , рівну 
половину кута кроку зубців, що дозволяє зменшити крок двигуна. Зубці ротора 
забезпечують менший опір магнітного кола в певних положеннях ротора , що 
підвищує статичний та динамічний момент [6].  Це досягається за рахунок 
відповідного розташування зубців,  коли частина зубців ротора знаходиться 
строго навпроти зубців статора , а частина між ними. 
Завдяки такому двигуну можна керувати кроком ротора в діапазонах від 
1.8 до 0.9 градусів, при використанні 8 основних полюсів статора і 3.6 градусів 
при використанні 4 полюсів. 
Гібридні крокові двигуни є дорожчими серед усіх типів таких двигунів, 
проте вони мають меншу величину кроку ,більшу швидкість та більший момент 
у порівнянні з іншими двигунами [7]. Число кроків за оберт складає від 100 до 
400 , що відповідає діапазону кутів 3.6 -0.9. Такі двигуни є мають у своїй 
конструкції всі плюси, які є у двох попередніх двигунів. 
 
1.1.4 Біполярні та уніполярні двигуни 
В залежності від кількості обмоток, двигуни поділяються на біполярні, 
уніполярні та чотирьохобмоточні. На рис 1.6 зображено різні види двигунів, в 
 
15 
залежності від кількості обмоток. 
Біполярний двигун складається з двох обмоток , при чому одна обмотка 
знаходиться в одній фазі. Для комутації таких обмоток слід змінювати напрям 
магнітного поля за допомогою системи керування. Для керування біполірними 
двигунами використовують різноманітні мостові та полумостові драйвери [7]. 
Чотирьохобмоточний двигун складається із 4 пар обмоток, при цьому при 
різних комутація цих обмоток його можна використовувати як біполярний або 
як уніполярний двигун. 
Уніполярні двигуни також мають дві обмотки , причому кількість виводів 
двигуна може складати 5 або 6. У кожної обмотки є один вивід, що знаходиться 
посередині. Кількість цих виводів залежить від того, з’єднані ці виводи між 
собою всередині двигуна чи кожен центральний вивід є незалежним один від 
одного. При такій конструкції значно простіше змінювати напрям струму в 
обмотках крокового двигуна, внаслідок чого значно простіше змінювати 
напрям струму в обмотках крокового двигуна , що спрощує реалізацію системи 
керування кроковим двигуном [8]. 
Перевагою такого типу двигунів є їх простота реалізації системи керування 
ними, що дає широке використання таких двигунів у промисловості. Недоліком 
такої конструкції є більш низький момент чим у біполярного двигуна при тих 
самих розмірах. 
На рис 1.6 зображені види крокових двигунів в залежності від кількості 
обмоток. 
 
 
 
 
Рис. 1.6 Види двигунів по обмоткам : а) біполярний ; б) уніполярний ; в) 
чотирьохобмоточний; 
 
 
16 
1.1.5 Способи підключення обмоток крокового двигуна 
Для підключення крокового двигуна з 6 обмотками до драйверу 
керування можна застосовувати два наступні способи : 
⚫  Уніполярний ; 
⚫  Біполярне послідовне з’єднання обмоток двигуна ; 
Для підключення крокового двигуна з 8 обмотками до драйверу 
керування можна застосовувати наступні три способи : 
⚫  уніполярний ; 
⚫  біполярне послідовне з’єднання обмоток двигуна ; 
⚫  біполярне паралельне з’єднання обмоток двигуна ; 
Кожен вивід двигуна з’єднаний дротом певного кольору. На рис.1.7 
зображено уніполярний спосіб під’єднання крокового двигуна. 
 
 
 
Рис. 1.7 Уніполярний спосіб підключення обмоток крокового двигуна 
 
При підключені та керуванням всіх обмоток двигуна електричні 
характеристики  двигуна,   до   яких   відносять   струм   обмотки   ,   її опір 
,індуктивність, обертовий момент відповідають номінальним значенням. Таке 
підключення найбільш ефективне на середніх швидкостях з усього діапазону 
робочих швидкостей [9-10]. 
На рис 1.8 зображено біполярне послідовне з’єднання обмоток двигуна. 
 
17 
 
 
 
Рис. 1.8 Біполярне послідовне включення обмоток крокового двигуна 
 
Такий тип підключення найкраще підходить для низьких швидкостях з 
робочого діапазону та має певні обмеження для керування. Так як обертовий 
момент двигуна є величиною прямопропорційною до величини магнітного 
поля, що створюється в його обмотках, то він збільшується при збільшені 
числа витків обмотки і зменшується при спаді величини струму, що проходить 
через обмотки. Оскільки струм зменшився в 2 рази, а число витків при цьому 
збільшилося в два рази,   то обертовий момент збільшиться в 2 разів [10].  
Характеристики двигуна при паралельному біполярному підключені 
наведені в табл. 1.1. 
 
Таблиця 1.1 - Характеристики крокового двигуна при послідовному 
біполярному включенні 
Параметр Значення 
Струм обмотки Iбп = 0.707I ун 
Опір обмотки Rбп = 2Rун 
Індуктивність обмотки Lбп = Lун 
Обертовий момент Mбп = 1.4М ун 
 
Одразу на рисунку 1.9 зображено біполярне паралельне з’єднання 
обмоток двигуна. 
 
18 
 
 
 
Рис. 1.9 Біполярне паралельне включення обмоток крокового двигуна 
 
Такий тип підключення найкраще підходить для високих швидкостей робочого 
діапазону. 
Характеристики двигуна при паралельному біполярному підключені 
наведені до табл. 1.2. 
 
Таблиця 1.2 - Характеристики крокового двигуна при паралельному 
біполярному включенні 
Параметр Значення 
Струм обмотки Iбп = 1.4I ун 
Опір обмотки Rбп = 0.5Rун 
Індуктивність обмотки Lбп = 4Lун 
Обертовий момент Mбп = 1.4М ун 
 
В таблиці 1.3 зведено всі можливі способи підключення обмоток 
двигуна, наведено їх переваги та недоліки та максимальна ефективність 
використання. 
Залежність моменту двигуна при різних способах підключення наведена 
на рис 1.10 . 
 
 
19 
 
Рис. 1.10 Залежність моменту крокового двигуна від частоти 
 
1.2 Методи керування кроковими двигунами 
Основними методами керування кроковими двигунами є : 
⚫  повнокроковий режим без перекриття фаз ; 
⚫  повнокроковий режим з перекриттям фаз ; 
⚫  напівкроковий режим ; 
⚫  мікрокроковий режим . 
 
1.2.1 Повнокроковий режим без перекриття фаз 
Даний метод забезпечує почергову комутацію фаз, тобто в один момент 
часу комутація проходить тільки через одну фазу, а в інший момент часу через 
іншу. На рис 1.11 зображено приклад повнокрокового режиму без перекриття 
фаз [13]. 
 
20 
 
 
 
 
 
Рис. 1.11 Повнокроковий режим без перекриття фаз 
 
Ротор двигуна займає положення навпроти обмотки, через яку протікає 
струм.  
Зірочки позначають збуджену фазу, а пусті клітинки - знеструмлену. При 
такому порядку подачі струму на фази кроковий двигун буде обертатися за 
годинниковою стрілкою. 
Перевагою такого способу керуваня є простота його реалізації в системі 
керування. До недоліків відносят те, що таким способом рух ротора двигуна 
буде не плавним, ривковим. Окрім в двигунах буде застосовуватись не всі 
обмотки : для біполярного двигуна з таким способом керування 
використовуватиметься лише 50 % обмоток, а в уніполярному 25 %. Це 
призведе до того, що таким способом неможливо отримати повний момент 
двигуна [13-14]. 
 
1.2.2 Повнокроковий режим з перекриттям фаз. 
При цьому способі керування ротор двигуна фіксується в проміжних 
позиціях між полюсами статора . 
 
 
21 
 
 
Рис. 1.12 Комутація фаз двигуна у повнокроковому режимі з 
перекриттям фаз 
 
При вмиканні і вимиканні живлення двигуна слід не знеструмлювати 
його обмотки для того, щоб двигун забезпечував повний момент, оскільки 
ротор може зсунутися на половину кроку і втратити своє положення. Для 
запобігання цього в обмотки слід подавати з системи керування струм 
утримання, що і відносять до основоного недоліку такого режиму [14]. 
 
1.2.3  Напівкроковий режим 
Напівкроковий режим - є синтезом двох вищезазначених режимів, тобто 
ротор зупиняється як навпроти полюсів статора, так і в проміжному положенні 
між ними .З одного боку це дозволяє зменшити крок у два рази, з іншого будуть 
мати місце коливання моменту [4]. На рис 1.13 зображено комутацію фаз 
крокового двигуна в напівкроковому режимі. 
 
 
 
 
Рис. 1.13 Комутація фаз двигуна в напівкроковому режимі 
 
22 
В результаті такого керування, кутове зміщення ротора складає 
половину кута кроку для перших двох способів керування. 
В момент часу, коли струм проходить через одну обмотку двигуна, 
залежність моменту від кута оберту ротора буде мати форму синусоїди взятої 
по модулю, що і показано на рис. 1.14 . 
 
 
 
Рис. 1.14 Залежність моменту від кута повороту ротора при комутації 
однієї фази 
 
 
 
Рис. 1.15 Залежність моменту від кута повороту ротора при комутації 
двох фаз двигуна. 
 
23 
 
При проходженні струму через дві обмотки , загальний момент буде 
становити суму із окремих обмоток двигуна, що і показано на рис 1.16. 
При умові того, що струми в обмотках будуть однаковими , то 
максимальне значення моменту утримання зміститься на половину кроку , 
точка рівноваги також зміститься та значення моменту буде більшим в                                    
     у порівнянні з комутацією струму через одну обмотку. 
 
 
Рис. 1.16 Залежність сумарного моменту від кута повороту ротора 
Сумарний момент двигуна не є постійним і має певну величину пульсацій, 
що буде негативно впливати на його роботу. Для того щоб запобігти цьому 
явищу , слід змінити форму та закон керування струмом для комутації обмоток 
двигуна. 
На рис 1.17 можна побачити різницю між величиною та можливими 
напрямками магнітного поля при проходженні струму через одну та через дві 
 
24 
обмотки відповідно [12]. 
Рис. 1.17 Величина моменту та його напрямок при різних режимах 
живлення фаз 
 
При протіканні струму через одну обмотку, ротор може зайняти положення  
1,  3,  5,  7.  Коли струм  протікає через  дві обмотки,  то ротор 
займає положення 2, 8, 6, 4. Якщо ці два режими роботи сумістити між 
собою, то ротор зможе займати всі положення від 1 до 8. 
При напівкроковому режимі при резонансі відбувається часткова втрата 
моменту, навідмінну від повнокрокового режиму, в якому 
Недоліком покрокового режиму є досить значне коливання моменту від 
кроку до кроку. У тих положеннях ротора, коли живиться одна фаза, момент 
складає приблизно 70% від повного, коли живляться дві фази. Ці коливання 
можуть бути причиною підвищених вібрацій і шуму, хоча вони все одно 
залишаються меншими, ніж в повнокроковому режимі [16]. 
 
1.2.4     Мікрокроковий режим 
Мікрокроковий режим - це режим керування кроковим двигуном , при 
якому при подачі одного керуючого імпульсу кроковий двигун здійснює 
оборот ротора не менше ніж на половину кроку. При цьому менший кут 
кроку забезпечує більш точне керування ротором. 
 
25 
Для того щоб отримати необхідний напрям магнітного поля, слід обрати 
не тільки правильне положення струмів в катушках, але і правильне 
відношення цих струмів. На рис 1.18 зображена залежність моменту від кута 
повороту ротора у випадку різних значень фаз струму [16]. 
 
 
 
Рис. 1.18 Залежність моменту від кута повороту ротора у випадку 
різних значень фаз струму 
 
На практиці при здійсненні кожного кроку двигуна, ротор не одразу 
зупиняється в новому положенні рівноваги, а здійснює затухаючі коливання 
вокруг положення рівноваги. Ці коливання не завжди є бажаними , тому як раз 
з метою позбавлення від них і використовується мікрокроковий режим. На рис 
1.19 показані зміщення ротора при роботі в повнокроковому і мікрокроковому 
режимах . 
 
 
 
Рис. 1.19 Порівняння переміщення ротора в повнокроковому та 
мікрокроковому режимах 
 
 
26 
Характер прямої для мікрокрокового режиму є більше лінійним та 
плавним, без викидів, які присутні в повнокроковому режимі. Якщо через 
обмотки крокового двигуна протікає струм синусоїдальної форми, то в нього 
будуть спостерігатися певні коливання швидкості [17]. 
Це явище пояснюється нестабільністю повітряного проміжку між 
полюсами ротора і статора, наявністю явища гістерезису , яке веде за собою 
зміну напрямку магнітного поля та похибку його величини. Тому на практиці 
положення рівноваги та момент мають відхилення завдяки формі зубців ротора 
та статора та матеріалу, з яких вони зроблені. 
При повнокроковому режимі роботи для більшої точності та 
максимального моменту утримання застосовуються певні конструктивні 
рішення , які пов’язані з формою зубців ротора та статора. При такій формі 
зубців магнітний потік буде сильно зростати. Такий підхід не підійде для 
мікрокрокового режиму, оскільки точність його роботи стане меншою. 
Для покращення точності в мікрокроковому режимі слід викорстовувати 
двигуни , у яких момент утримання в знеструмленому стані менше. Полюси 
ротора і статора в них мають скошену форму зубців [17]. 
Ще одне джерело похибок позиціювання - це помилка квантування ЦАП, 
за допомогою якого формуються струми фаз. Справа в тому, що струм повинен 
формуватися за синусоїдальним законом, тому для мінімізації похибки 
лінійний ЦАП повинен мати підвищену розрядність. Навіть якщо ЦАП точно 
сформував синусоїдальну опорну напругу, його потрібно підсилити і 
перетворити в синусоїдальний струм обмоток. 
Багато драйверів мають значну нелінійність поблизу нульового значення 
струму, що викликає значні спотворення форми і, як наслідок, значні помилки 
позиціонування [18]. 
Мікрокроковий режим має такі переваги серед інших режимів роботи: 
⚫  значне зменшення кількості вібрацій ; 
⚫  значне зменшення шуму; 
⚫  вирівнювання моменту; 
 
27 
⚫  уникнення явища резонансу; 
⚫  найбільша точність кроку серед усіх інших режимів;  
До мінусів такого режиму можна віднести: 
⚫  зниження максимальної частоти обертання ротора; 
⚫  зниження максимального моменту крокового двигуна; 
В роботі буде використовуватися мікрокроковий режим керування, 
оскільки він має більш високу точність позиціонування ротора , що дає змогу 
двигуну працювати плавно , без перебоїв. 
 
1.3  Вплив навантаження та тертя на момент двигуна 
 
1.3.1  Вплив навантаження на момент двигуна 
Момент, що розвиває кроковий двигун залежить від величини струму в 
його обмотках, швидкості та системи керування. При розробці та розрахунку 
систем керування слід врахувати, що обмотки двигуна являють собою 
індуктивність , яка буде визначати час спадання та зростання струму. На рис 
1.20 зображено графік форми струму при різних швидкостях роботи двигуна . 
 
 
 
 
Рис. 1.20 Форма струму при різних швидкостях 
 
З рис 1.20 а) видно, що час зростання та спаду струму не впливає на 
 
28 
момент, проте при високих швидкостях струм не встигає досягти свого 
номінального значення , що показано на рис 1.20 б). 
Для мінімізації втрати моменту двигуна ,системи керування робляться 
таким чином, щоб збільшити частоту комутації фаз. Це призведе до того, що 
починаючи з деякої частоти зрізу момент почне спадати. Параметри двигуна 
при різних видах навантаженнях будуть мати різні значення. Залежність 
моменту від швидкості наведена на рис 1.21 . 
 
 
 
Рис. 1.21 Залежність моменту від швидкості 
 
Ця залежність складається з двох кривих - області розгону та старту. 
Область розгону показує, який має бути момент , щоб кроковий двигун 
підтримував оберти без пропуску кроків. При перетині цієї кривої осі v - 
можна знайти максимальну швидкість для даного двигуна в режимі 
холостого ходу. 
Область старту показує , при якому максимальному моменті тертя для 
даної швидкості кроковий двигун здатний рушити . При перетині цієї кривої 
осі v - знаходиться максимальна швидкість старту в режимі холостого ходу, 
тобто без навантаження [18]. 
 
29 
Для синхронної роботи двигуна стартувати слід з низької швидкості в 
області старту, і плавно підвищувати швидкість в області розгону. При 
зупинці потрібно діяти в зворотному порядку: спочатку виконати 
гальмування, і тільки увійшовши в область старту можна припинити подачу 
керуючих імпульсів. На практиці використовуються швидкості до 10000 
повних кроків за секунду ,що і досягається шляхом синхронної роботи 
двигуна. 
Для здійснення розгону слід правильно обрати закон за яким буде 
змінюватися швидкість і прискорення набуватиме максимального значення. 
Цей закон обирається експериментальним шляхом за критерієм мінімального 
часу для конкретного навантаження. Його реалізація проводиться за 
допомогою мікроконтролеру , для якого пишеться програма. 
Мікроконтролер слугує також джерелом тактової частоти для драйверу 
крокового двигуна. Для генерації частоти слід використовувати апаратний 
таймер таким чином, щоб він зчитував тривалість кроку. Якщо ж двигун 
розганяється або гальмується, цей період змінюється з кожним новим кроком 
[18]. 
При розгоні або гальмуванні з постійним прискоренням частота 
повторення кроків повинна змінюватися лінійно, відповідно значення 
періоду, яке необхідно завантажувати в таймер, має змінюватися за 
гіперболічним законом [18-19]. 
 
1.3.2 Вплив тертя на момент двигуна 
За рахунок сили тертя в кроковому двигуні виникають мертві зони , при 
яких момент двигуна буде рівний нулю. На рис. 1.22 показана залежність 
моменту від кута повороту ротора. 
 
 
 
30 
 
 
Рис. 1.22 Виникнення мертвих зон в результаті дії тертя 
 
  
На рис 1.22 а) зображена залежність моменту від кута повороту, яка 
відповідає ідеальному кроковому двигуну і має синусоїдальну форму. Точки S 
є положеннями рівноваги ротора для ненавантажуваного двигуна і 
відповідають кільком послідовним крокам. 
. 
На практиці крокові двигуни стикаються із проблемою подолання сили 
тертя при прикладені до нього моменту. Ця сила може бути як статичною так 
і динамічною [19]. 
Мертві зони обмежують точність позиціонування. Наприклад, наявність 
статичного тертя в половину від пікового моменту двигуна з кроком 90 град. 
викличе наявність мертвих зон в 60 град. Це означає, що крок двигуна може 
коливатися від 30 до 150 град., В залежності від того, в якій точці мертвої 
зони зупиниться ротор після чергового кроку [19]. 
Коли до двигуна під’єднати навантаження , виникають зрушення між 
положенням ротора та напрямком магнітного поля. Потрібно відзначити, що 
запізнювання або випередження відноситься тільки до положення, але не до 
швидкості. У будь-якому випадку, якщо синхронність роботи двигуна не 
втрачена, це запізнювання або випередження не може перевищувати 
величини двох повних кроків. 
Кожен раз, коли кроковий двигун здійснює крок, ротор повертається на 
 
31 
S радіан. При цьому мінімальний момент має в місце, коли ротор знаходиться 
рівно між сусідніми положеннями рівноваги, що і зображено на рис 1.23 . 
 
 
 
 
Рис. 1.23 Момент утримання і робочий момент крокової двигуна 
 
Такий момент називають робочим моментом і він характеризує який 
найбільший момент долає двигун при обертанні з малою швидкістю. 
Розглянувши всі методи керування кроковим двигуном можна зробити 
висновок про те , що кожен із цих методів підходить під певні умови задачі. 
Проте у кожному з цих методів форма струму і відповідно момент двигуна 
мають певну величину пульсацій, яку слід прибрати для того, щоб величина 
моменту мала постійне значення. 
Сумарний моменту при комутації двох обмоток має пульсації, які 
негативно впливатимуть на роботу двигуна. Вони виникають за рахунок 
зубчатої структури двигуна та імпульсного моменту струму керування. 
Пульсація негативно впливатиме на його застосування в приладах , в яких 
необхідне точне позиціонування та досить велика точність кроку, наприклад у 
принтерах. При ривковій, непостійній швидкості їх роботи буде виникати 
неправильна робота таких приладів. Надійність та ресурс крокового двигуна 
при цьому буде значно зменшена, оскільки підшипники будуть швидко 
зношуватися [20]. 
 
 
32 
1.4 Резонанс крокового двигуна 
 
Для крокових двигунів досить поширеним явищем , яке досить суттєво 
впливає на їхню роботу - є явище резонансу. 
Цей ефект проявляється у вигляді спаду величини моменту на деяких 
швидкостях. Внаслідок цього зменшується точність позиціонування двигуна, 
оскільки зубці статора починають проскакувати зубці ротора і синхронна 
робота цих двох деталей неможлива. Явище резонансу виникає за умови, 
коли частота кроку співпадає з власною резонансною частотою ротора 
двигуна [18]. 
При кроці двигуна , ротор не може миттєво зайняти нову позицію , а 
здійснює певні коливання до того моменту, поки не ввійде в стан рівноваги. 
Це явище поянюється тим, що статор ,ротор та магнітне поле, яке виникає 
внаслідок протікання струму через обмотки двигуна - являє собою маятник, 
частота роботи якого залежить від моменту інерції ротора , навантаження та 
величини магнітного поля 
Резонансу частоту визначає момент інерції ротора крокового двигуна і 
момент інерції навантаження , що підключене до валу двигуна. На практиці, для 
режиму холостого ходу двигуна , частота роботи ротора задається як параметр, 
проте слід зауважити, що будь-яке підключення навантаження може змінити 
значення цієї частоти [17]. 
В реальних умовах при ввімкненому в схему навантаженні явище 
резонансу призводить до труднощів при роботі на частоті, що по своїй величині 
близька до резонансної. Сумарний момент буде дорівнювати нулю , тому для 
вирішення цього явище потрібно створити такі умови, внаслідок яких двигун 
при розгоні буде долати величину цієї резонансної частоти. В деяких випадках, 
проблеми з втратою точності позиціонування можуть виникати і на гармоніках 
частоти основного резонансу. 
При подачі на обмотки двигуна сигналів , які не мають синусоїдальної або 
косинусоїдальної форми струму, головню причиною виникнення резонансу є 
нестабільне обертання ротору двигуна. Коли ротор робить один крок, то до 
 
33 
нього передається певна енергія, що провокує поштовх [19].Через цей поштовх 
і формуються коливання. Для полукрокового режиму роботи двигуна , 
величина енергії становить 30% від енергії повного кроку, що призводить до 
зменшення амплітуди коливань. Проте, при реалізації мікрокрокового режиму 
ця величина становить близько 0.1% , якщо крок обертання буде становити 1/32 
від основного кроку. 
Для боротьби із цим явищем можно використати електронні методи та 
механічні. Ротор який коливається, створює в обмотках крокового двигуна ЕРС. 
Якщо після її появи обмотки будуть закорочуватися, то на даному кроці не буде 
відбуватися явища резонансу. 
При проектуванні крокового двигуну можна використовувати різноманітні 
еластичні матеріали при виконанні механічних муфт зв’язку з навантаженням. 
Такий матеріал дасть змогу поглинати енергію в резонансній системі, внаслідок 
чого коливання будуть затухати. 
Ще одним способом є побудова алгоритмів роботи драйверу керування. 
Якщо комутувати дві фази крокового двигуна , то частота його роботи буде на 
20% більшою у порівнянні з однією фазою. Тому при розрахованому значенні 
резонансної частоти можна змінювати режими роботи двигуна з комутації 
однієї фази на комутацію двох фаз, внаслідок чого величина цієї частоти буде 
пройдена [19]. 
Також слід враховувати той факт, що при старті та зупинці двигуна можна 
використовувати частоти , які за величиною будуть вищими ніж резонансна. 
Така реалізація можлива за допомогою мікроконтролерних систем керування та 
каналу зворотнього зв’язку. 
  
 
34 
РОЗДІЛ 2 
ПРОЄКТУВАННЯ СИСТЕМИ КЕРУВАННЯ 
 
2.1. Вимоги до проєктованої системи 
Проектування будь-якої системи слід починати із чіткого визначення вимог та 
функцій, які система має реалізовувати. Для вирішення цієї задачі доречно 
використати UML – мову візуального моделювання. UML є мовою широкого 
профілю, це відкритий стандарт, що використовує графічні позначення для створення 
абстрактної моделі системи. 
Для створення діаграми прецедентів слід скористатися програмою, яка 
спеціалізована на розробці діаграм UML. Такими є: Rational Rose, Umbrella, StarUML 
тощо. Завдяки надійності, набору необхідних функцій та приємному інтерфейсу 
користувача прийнято рішення використати програму StarUML. 
За допомогою UML можна спроектувати систему у вигляді UML-діаграм. 
Розрізняються діаграми прецедентів (варіантів використання), стану, діяльності, 
класів, узагальнення тощо. Для даного випадку достатньо побудувати діаграму 
прецедентів (див. рис. 2.1). Варіанти використання являтимуть собою перелік 
функцій, які повинна реалізовувати розроблювана система. 
Як видно на рисунку 2.1, система має реалізовувати кілька алгоритмів 
керування двигуном, а саме: повнокроковий (ПР), повнокроковий з перекриттям фаз, 
режим напівкроку, а також мікрокроковий режим (режим дроблення кроку). 
Детальніше про кожен алгоритм описано в першому розділі цієї роботи. Окрім цього, 
оператор повинен мати змогу обирати джерело керуючих сигналів. Слід реалізувати 
два варіанти: внутрішнє джерело (від контролера), що є демонстраційним режимом, а 
також зовнішнє джерело – наприклад тактовий генератор (пристрій, призначений для 
генерації електричних тактових імпульсів заданої частоти (зазвичай прямокутної 
форми). 
Керування описаним функціоналом слід реалізувати так, щоб оператор міг 
легко та інтуїтивно користуватися всіма реалізованими функціями. 
 
 
35 
 
Рис. 2.1. Use-case діаграма 
 
Проєктована система повинна працювати на основі керуючої програми. 
Виходячи з вимог до системи, а також теми цієї роботи, прийнято рішення 
використати мікроконтролер для зберігання та виконання керуючої програми. 
Детальний опис потрібної програми викладено в підрозділі 2.4 цього розділу. 
Тип двигуна: ПБМГ-200-265Ф. Для визначення висновків 
застосовувався тестер. Виявилося, що двигун має чотири обмотки. Дві 
обмотки з'єднані один з одним і мають загальний провід білого кольору, другі 
висновки цих обмоток червоного і зеленого кольору. Дві інші обмотки також 
з'єднані один з одним і мають загальний провід чорного кольору, інші 
висновки цих обмоток блакитного і жовтого кольору. Якщо з'єднати білий і 
чорний дроти, виходить практично та ж схема, що і описана в оригінальній 
статті. Для управління кроковим двигуном можна використовувати 
 
36 
мікросхему драйвера ULN2003, яка містить сім потужних транзисторних 
ключів, зібраних за схемою Дарлінгтона. Кожен ключ здатний управляти 
навантаженням з струмом споживання до 500 мА. Мікросхема має резистори 
в ланцюзі бази, що дозволяє безпосередньо підключити її входи до звичайних 
цифровим мікросхем. Все емітери пов'язані один з одним і виведені на 
окремий висновок. На виходах транзисторних ключів є захисні діоди, що 
дозволяє управляти за допомогою цієї мікросхеми індуктивними 
навантаженнями при мінімумі зовнішніх компонентів. У нашій конструкції 
використано лише чотири транзисторних ключа. Електрична схема 
підключення крокового двигуна показана на рис. 2.2. 
 
 
Рис. 2.2 Електрична схема підключення крокового двигуна 
 
Уніполярний двигун має одну обмотку в кожній фазі, від середини обмотки 
зроблений відвід. Це дозволяє змінювати напрямок магнітного поля, що створюється 
обмоткою, простим перемиканням половинок обмотки. При цьому істотно 
спрощується схема драйвера. Драйвер повинен мати тільки 4 простих ключа. Середні 
висновки обмоток можуть бути об'єднані всередині двигуна, тому такий двигун може 
мати 5 або 6 висновків. Іноді уніполярні двигуни мають роздільні 4 обмотки, з цієї 
 
37 
причини їх помилково називають 4-х фазними двигунами. Кожна обмотка має окремі 
висновки, тому все висновків 8. Через простоту підключення і управління 
униполярного двигуна в цій статті розглянемо саме цей тип крокового двигуна. 
 
Рис. 2.3 Схематичне зображення уніполярного крокового двигуна 
 
Для управління 6-вивідним уніполярним кроковим двигуном потрібно 4 
незалежних керуючих елемента - транзистора VT1 - VT4. Транзистори 
бажано використовувати складові типу КТ829, КТ973 або імпортні аналоги. 
Можна взяти окремі транзистори, можна використовувати спеціальну 
мікросхему ULN2003A, яка містить цілих сім транзисторів, і крім того, там є 
ще 7 захисних діодів, які пропускають через себе струм самоіндукції при 
відключенні електромагнітів. Підключення униполярного крокової двигуна 
до мікроконтролерів AVR. 
 
38 
 
Рис.2.4 Схема електрична принципова підключення уніполярного 
крокового двигуна 
 
Керуючий контролер Atmega8, тактується від внутрішнього генератора 
частотою 8МГц. У програмі використовуємо два зовнішніх переривання і 
переривання по переповненню таймера Т0. Всі переривання визначаємо і 
налаштовуємо в головній функції, також налаштовуємо порти введення / 
виводу мікроконтролера. Для запуску двигуна в ту чи іншу сторону 
необхідно подати на його обмотки послідовність імпульсів зсунутих по фазі. 
Сигнали управління обмотками двигуна формуються на портах PB3 - PB0 
програмно. Формування імпульсних послідовностей виконується в 
обробнику переривання таймера 0. Перемикання фаз відбувається тільки при 
переповненні програмного таймера. Регулювання швидкості обертання 
здійснюється змінним резистором R8, середній висновок якого підключений 
до каналу ADC0. 
Крокові двигуни широко застосовуються в додатках, що вимагають 
точність. На відміну від двигуна постійного струму у крокової двигуна 
відсутні щітки і комутатор - для цього там кілька окремих обмоток, які 
комутуються зовнішньої електронікою (драйвером). Обертання ротора 
 
39 
відбувається за рахунок комутації обмоток крок за кроком, без зворотного 
зв'язку. Тут проявляється і один недолік крокових двигунів - в разі механічної 
перевантаження, коли ротор не рухається, кроки починають плутатися і рух 
стає неточним. По виду обмоток, крокові двигуни поділяються на два типи: 
уніполярні і біполярні крокові двигуни. За будовою їх поділяють ще на три 
види: - зі змінним магнітним опором (висока точність, низький крутний 
момент, низька ціна) - з постійним магнітом (низька точність, високий 
крутний момент, низька ціна) - гібридний (висока точність, високий крутний 
момент, висока ціна). У крокових двигунів зі змінним магнітним опором 
зубчасті обмотки і зубчастий ротор з заліза. Максимальна сила тяги виникає 
при перекритті зубів обох сторін. У крокових двигунах з постійним магнітом, 
як випливає з назви, є постійний магніт, який орієнтується в залежності від 
полярності обмотки. У гібридних використовуються обидві технології. 
Незалежно від моделі крокової двигуна для створення одного повного 
обороту валу (360 градусів) потрібно сотня комутаційних кроків. Для 
забезпечення стабільного та плавного руху використовують відповідну 
керуючу електроніку, яка управляє двигуном відповідно до його 
параметрами (інертність ротора, крутний момент, резонанс і т.д.). До того ж 
в керуючої електроніці можна застосовувати різні методи комутації. 
Комутацію послідовно по одній обмотці називають повним кроком, але якщо 
комутується черзі одна і дві обмотки, то це називається півкроком. 
Використовують так само синусоїдальні мікрошаги, що дає особливу 
точність і плавність управління. Уніполярний кроковий двигун. Обмотки 
униполярного крокової двигуна. Уніполярний кроковий двигун має п'ять або 
шість проводів. У відповідності зі схемою приводу запускається разом тільки 
одна четверта обмоток. Лінії Vcc зазвичай з'єднуються з позитивним годує 
напругою двигуна. Кінці обмоток 1a, 1b, 2a, і 2b з'єднуються при комутації 
через транзистори тільки з землею, в зв'язку, з чим їх керуюча електроніка 
досить проста. 
 
40 
 
Рис.2.5 Схема комутації біполярного крокового двигуна 
Біполярний кроковий двигун. Обмотки біполярного крокової двигуна. 
Біполярний кроковий двигун відрізняється від униполярного крокової 
двигуна тим, що полярність обмоток змінюється під час комутації. Разом 
активується половина обмоток, що забезпечує в порівнянні з уніполярними 
кроковими двигунами велику ефективність. У біполярних крокових двигунів 
чотири дроти, які все з'єднуються окремо півмилі. При комутації напівмости 
прикладають до кінців обмоток позитивне або негативне напруга. Уніполярні 
крокові двигуни можна запускати і за допомогою біполярного драйвера: для 
цього потрібно з'єднати тільки лінії обмоток 1a, 1b, 2a і 2b (Vcc залишається 
з'єднаним). Необхідні комутації повного кроку і півкроку крокових двигунів 
з обома видами обмоток відображає наступна таблиця. Так як у випадку 
драйвера униполярного крокової двигуна відбувається тільки відмикання 
транзисторів, то ці кроки представлені логічними числами 0 і 1. Управління 
біполярним кроковим двигуном може зажадати більше сигналів, і його кроки 
представлені вихідний полярністю драйвера. 
 
41 
 
 
Рис.2.6 Схема електрична структурна установки для дослідження 
крокових двигунів 
 
Рис. 2.7 Схема електрична принципова керування кроковим двигуном 
 
 
42 
 
2.2. Розробка апаратної частини 
Проектована система керування кроковим двигуном являє собою 
електронний пристрій на базі мікроконтролера. До того, як мікроконтролери 
здобули популярності в якості основи систем керування, схеми управління 
будувалися на простих електронних компонентах (жорстка логіка). Схема на 
жорсткій логіці є дешевшою в реалізації, але їй притаманна «однозадачність»,  
тобто, спроектувавши та виготовши схему, змінити алгоритм керування вже не 
можливо, так як це й же алгоритм є основою, за якою й розроблялася схема. В 
умовах сучасного технологічного розвитку такий підхід використовується 
вкрай рідко. 
Значної популярності набули мікроконтролери. На сьогодні є широкий 
вибір мікроконтролерів з різною архітектурою, призначенням тощо. Серед 
лідер з продажу є вироби від фірми Atmel, яка спеціалізується ви виготовленні 
мікроконтролерів з архітектурою Гарвардського типу. 
Мікроконтролери різняться за такими параметрами, як: обсяг пам’яті 
програм (Flash), в якій зберігається керуюча програма; пам’яті даних, або 
оперативна пам’ять (SRAM); обсяг енергонезалежної пам’яті (EEPROM); 
робочою температурою; корпусом, в якому поставляється мікросхема 
(найбільш поширені – DIP та SOIC); комплектацією (АЦП, таймер, кількість 
портів введеня-виведення) тощо. Відповідо до задачі, слід обрати 
мікроконтролер з оптимальними параметрами. 
Задача – обрати оптимальний мікроконтролер для реалізації алгоритму 
управління кроковим електродвигуном. Для реалізації проектованої системи 
мікроконтролер повинен мати як мінімум вісім ліній введеня-виведення (з 
урахуванням ліній для формування керуючих сигналів та зміни конфігурації 
системи, тобто зміни алгоритму керування) та не менше 2 Kб пам’яті програм. 
Завдяки своїй популярності, перевагу надано мікроконтролерам AVR 
фірми Atmel. Існує 3 основні групи мікроконтролерів від Atmel – ATXMega – 
(найбільш укомплектовані, напотужніші та найдорожчі серед продукції Atmel), 
ATMega – свого роду «золота середина», та ATTiny – «найскромніші» 
 
43 
мікроконтролери від Atmel. Зважаючи на описані вище умови до проектованої 
системи, ідельним рішенням буде мікроконтролер із серії ATTiny, а саме 
ATTiny44A у корпусі для поверхневого монтажу (SMD). 
Принципові електричні схеми призначенні для повного відображення 
взаємозв'язків пристроїв з урахуванням принципів їх дії і послідовності роботи. 
На принципових електричних схемах електричні елементи зображують за 
допомогою умовних позначень, а також вказують лінії зв'язків між ними, 
блоками та модулями. На схемі, також, розміщується наступна інформація: 
умовне зображення принципу роботи функціональних вузлів, пояснювальні 
написи, частини окремих елементів, діаграми переключення контактів тощо. 
Для складання принципової схеми обрано програмне середовище Proteus 
8.1. 
 До переваг даного програмного середовища у порівняні з аналогами 
можна віднести зручність у використанні, інтуїтивний та приємний інтерфейс, 
повну бібліотеку компонентів, можливість перевірити зібрану схему на 
працездатність, змоделювавши її роботу. 
Відповідно до проектованої системи, електрична схема повинна містити 
контакти для подачі напруги живлення, контакти для підключення 
програматора, а також контакти для підведення виходів обмоток двигуна 
На рисунку 2.8 зображено фрагмент принципової схеми проектованої 
системи, що відповідає за ділення напруги для схеми (5V, +5 V), та напруги, що 
подаватиметься на двигун (MVCC, до +52 V). 
Рис. 2.8. Фрагмент схеми для розподілення напруги 
 
44 
 
Як було описано вище, для керування кроковим двигуном необхідний 
драйвер. Проте, при розробці даної системи керування було прийнто рішення 
скористатися підсилюючими каскадами та мостовою схемою замість готового 
драйвера. Це пояснюється вищою надійністю та меншою вартістю системи у 
порівнянні з використанням готового драйвера (наприклад, L293D). 
У розробеній системі сигнал управління надходить на каскад посилення 
зібраного на транзисторі BCP68. Після чого потрапить на Н міст з 
комплементарної пари BCP68 та BCP51 (див. рис. 2.9). 
 
Рис. 2.9. Схема керування одного з виходів двигуна 
 
Каскад посилення необхідний, так як потужності струму на виході з 
мікроконтролера недостатньо для відкриття силових транзисторів. Після 
силових транзисторів встановлені діоди для гасіння самоіндукції мотора. 
Для реалізації функції зміни конфігурації системи, а саме зміни алгоритму 
керування кроковим двигуном та зміни джерела керуючих сигналів прийнято 
рішення використати перемикач (див. рис. 2.10). 
Кожен вихід пермикача під’єднаний до окремої лінії мікроконтролера (до 
 
45 
окремих пінів). Таким чином, використавши перемикач на чотири відділення 
можна отримати шістнадцять різних комбінацій, кожній з якиї може 
відповідати певна конфігурації проектованої системи. Зважаючи на 
елементарність схеми підключення перемикача вона не наводиться в тексті цієї 
роботи. Завершену електронну схему можна переглянути в додатку А (див. рис. 
А.1). 
 
Рис. 2.10. Перемикач 
 
Реалізувавши електронну схему в середовищі Proteus та провівши 
тестування зібраної схеми на коректність (шляхом прошивання віртуального 
контролера тестовим варіантом керуючої програми) в тому ж середовищі, 
реалізовано наступний етап розробки мікросхеми, а саме – розведення доріжок 
для друкованої плати . 
Як зазначалося раніше, система являє собою мікросхему на базі 
мікроконтролера. На основі розведених доріжок виготовлено друковану плату 
(див. рис. 2.11). 
 
46 
 
 
 
 
 
 
 
 
 
 
 
 
Рис.2.11. Виготовлена плата 
 
Виготовлена плата є двосторонньою. На верхній стороні плати розміщено 
мікроконтролер, конектори для підключення обмоток двигуна та живлення як 
двигуна, так і самої схеми, перемикач для зміни конфігурації системи, а також 
один із чотирьох підсилюючих каскадів. На нижній стороні розміщено три 
підсилюючі каскади, а також виходи для підключення програматора або 
зовнішнього джерела керуючих сигналів (комбінований конектор). 
Також, на верхній стороні плати розміщено світлодіод червоного кольору 
(див. рис. 2.12). Основна задача даного компоненту – індикація роботи системи. 
 
47 
 
Рис.2.12. Світлодіод для індикації роботи системи 
 
Для тестування виготовленої системи керування взято кроковий двигун (як 
на рис. 2.7) та підключено виходи його обмоток до розробленої мікросхеми. В 
якості джерела живлення взято адаптер, що забезпечив живлення схеми у 12 V. 
Оскільки мікроконтролер розрахований на напругу живлення в межах від 
2.8 V до 5.5 V, реалізовано подільник напруги. Верхнє плече подільника 
складається з резистора, опір якого рівний 1кОм. В якості нижнього плеча 
подільника використано стабілітрон на 5.1 V. Для перевірки правильності 
роботи подільника проведено виміри напруги на ділянці, паралельній виходам 
стабілітрона (нижнє плече подільника). Мультиметр показав напругу у 4.56 V 
(див. рис. 2.8), що є прийнятною для живлення мікроконтролеру. 
 
 
48 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Рис. 2.13. Тестування розробленої системи 
 
На рисунку 2.13 показано роботу зібраної системи. До виходів мікросхеми 
підключено уніполярний двофазний кроковий двигун, а також джерело 
живлення. За допомогою перемикача, система налаштована на роботу в 
демонстраційному режимі (внутрішнє джерело керуючих сигналів) з 
використанням повнокрокового алгоритму керування двигуном з перекриттям 
фаз. Напрям обертання ротора – проти годинникової стрілки.  
Перевірено також і інші режими роботи системи. Встановлено, що кожен з 
алгоритмів працює правильно, а поведінка двигуна відповідає теоретичним 
 
49 
матеріалам.  
Рис. 2.14. Напруга, що подається для живлення мікроконтролера 
 
Отже, створена система працює правильно, реагує на зміну конфігурації, 
шляхом зміни положень кожного з розрядів перемикача, а також реалізовує весь 
потрібний функціонал. 
 
 
 
 
 
 
 
 
 
 
 
 
 
50 
 
РОЗДІЛ 3 
ПРОГРАМНА РОЗРОБКА 
3.1. Встановлення та налаштування програмного середовища 
Для завантаження останньої версії програми “ Visual C++” необхідно зайти 
на офіційний сайт розробників - https://www.microsoft.com/ru-
RU/download/details.aspx?id=48145 обрати мову програми та натиснути кнопку 
“Скачать”. 
 
Рис. 3.1 Вікно завантаження останньої версії програмного середовища 
Завантажити файл який підходить для операційної системи користувача.  
 
 
 
Рис. 3.2 Вибір файла встановлння в залежності від розрядності ОС 
 
51 
 
Приймаємо умови ліцензії програми та тиснемо «Установить». 
 
 
 
 
 
 
 
 
 
 
 
Рис. 3.3 Прийняття умов ліцензії та початок встановлення 
 
Чекаємо завершення встановлювання програми на ПК. 
 
 
 
 
 
 
 
 
 
 
 
Рис. 3.4 Процес встановлення програми на ПК 
 
 
52 
3.2. Програмна реалізація 
Після встановлення середовища і розробки програми в результаті 
отримали програму з зручним і зрозумілим інтерфейсом. 
 
 
Рис. 3.5 Інтерфейс програми 
 
Внизу програмного вікна знаходиться поле для вибору компорту 
підключення стенду і ПК. 
 
 
 
Рис. 3.6 Поле вибору компорту 
 
Паралельно вгорі зноходиться два поля для вводу. Перше поле для вводу 
кількості кроків які має зробити двигун, а сусуднє поле відповідає за те скільки 
часу для цього має бути потрібно. Ці два значення формують собою швидкість 
роботи крокового двигуна. По замовчуванні це 5 кроків за 3 секунди.  
 
 
 
 
 
 
 
Рис. 3.7 Поля для задання швидкості 
 
53 
 
Нище знаходяться чекбокси які дозволяють вибрати в який бік буде 
рухатись двигун. А також можливість зациклити роботу програми що дозволить 
двигуну працювати з заданими параметрами безперервно.  
 
 
 
 
 
 
 
 
 
 
Рис. 3.7 Вибір напрямку руху та можливість зациклювання 
 
Зліва від основних параметрів розташований блок чекбоксів для вибору 
режиму роботи крокового двигуна . Підтримується: повний крок, півкроку , 1\4 
кроку та 1\8 кроку.  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Рис. 3.8 Вибір режиму роботи КД 
 
 
 
 
 
54 
 
 
 
 
 
 
 
 
 
 
 
Рис. 3.9 Графічне відображення роботи КД 
 
З лівого боку знаходиться блок з візуальним відображенням роботи 
двигуна. Графік показує стан сигналу на кожному з 4 провідників які зєднують 
розроблену плату і двигун. По осі Х показуються кроки зроблені двигуном.  
  
 
55 
ВИСНОВКИ 
 
В даній кваліфікаційній роботі бакалавра проведено аналіз існуючих 
автоматизованих систем керування кроковими двигунами, виявлено їх переваги і 
недоліки. Проведено дослідження сучасних технологій, що застосовуються в 
крокових двигунах 
Розроблено схему електричну принципову керування кроковим двигуном. 
Проведено порівняльний аналіз різних мов програмування, за результатами якого 
обрано мову програмування С++ і середовище розробки Microsoft Visual C++, що 
дозволило зручно розробити програмний додаток з усіма потрібними елементами та 
зручним інтерфейсом.  
В ході виконання роботи було розроблено програму для керування кроковим 
двигуном яка забезпечила його коректнішу та швидшу роботу. Візуальне 
проектування роботи крокового двигуна полегшує аналіз його роботи. Розроблена 
програма  дозволяє користувачу управляти роботою крокового двигуна, змінювати 
його напрям руху, швидкість та режим роботи, а також візуально спостерігати за 
змінами що відбуваються при роботі двигуна. 
 
 
56 
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 
 
1. Іванов А.О. Теорія автоматичного керування / А.О. Іванов. – 
Дніпропетровськ: Національний гірничий університет. – 2019. – 250 с.  
2. Лавріненко Ю.М., Марченко О.С., Савченко П.І., Синявський 
О.Ю., Войтюк Д.Г. Лисенко В.П. Електропривод: підручник (за ред. Лавріненка 
Ю.М.). – К.: вид-во Лір-К., 2018. – 504 с. 
3. Bishop. Robert H. The Mechatronics handbook / Robert H. Bishop. – 
Austin: The University of Texas at Austin. – 2020. – 1229 p. 
4. Козловський О.В., Кухарчук В.В., Поджаренко В.О. 
Мікропроцесорні засоби вимірювання контролю обертового моменту: 
Монографія. - Вінниця: УНІВЕРСУМ, 2018. – 125 с. 
5. Лекція: "Крокові двигуни" [Електронний ресурс] – Режим доступу 
до ресурсу: 
http://em.fea.kpi.ua/images/doc_stud/distsiplini/brem/BREM_Lekciya_10.pdf. 
6. Розодюк М. П., Козак М. О. Методичні вказівки до виконання 
лабораторної роботи з дисципліни "Дослідження крокового двигуна". – 
Вінниця: ВНТУ, 37 с. 
7. Московець П. А. Дослідження електроприводів постійного струму 
з імпульсними перетворювачами напруги [Електронний ресурс] / П. А. 
Московець. – Режим доступу до ресурсу: 
http://masters.donntu.org/2013/etf/moskovets/diss/indexu.htm. 
8. F.A. Toliyat, S.G. Campbell, «DSP-based electromechanical motion 
control», CRC Press, 2004. 
9. Логінов А., Фадєєв І. Застосування DSP мікроконтролерів в 
керуванні вентильними двигунами без датчика положення ротора // Електронні 
компоненти. 2020. №4 
 
 
  
 
57 
Додаток А. 
Лістинг програми для крокового двигуна 
 
 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.IO.Ports; 
 
namespace StepperControl 
{ 
    public partial class Form1 : Form 
    { 
        SerialPort port = new SerialPort(); 
        string[] ports; 
 
        int totalTime, totalSteps, steps;   // how many steps left  
 
        bool rotDir = true;      //clockwize or counterCW 
        byte errors = 0; 
        int stepMode = 1; 
 
        public Form1() 
        { 
            InitializeComponent(); 
        } 
 
        private void Form1_Load(object sender, EventArgs e) 
        { 
            GetComPortsList(); 
            grClear(); 
 
            chart1.ChartAreas[0].AxisX.Maximum = 33; 
            chart1.ChartAreas[0].AxisX.Interval = 8; 
 
58 
            chart1.ChartAreas[0].AxisX.MajorGrid.Interval = 8; 
            chart1.Series[4].Points[0].XValue = 33; 
        } 
 
        void portWrite(string pw) 
        { 
            if (port.IsOpen) port.Write(pw); 
            switch (pw) 
            { 
                case "l": 
                    { //left 
                        dir = false; 
                        if (stepMode == 1) Step(); 
                        if (stepMode == 2) halfStep(); 
                        if (stepMode == 4) quartStep(); 
                        if (stepMode == 8) eightStep(); 
                    }; break; 
 
                case "r": 
                    { //right 
                        dir = true; 
                        if (stepMode == 1) Step(); 
                        if (stepMode == 2) halfStep(); 
                        if (stepMode == 4) quartStep(); 
                        if (stepMode == 8) eightStep(); 
                    }; break; 
            } 
        } 
 
        private void GetComPortsList() 
        { 
            cbCOMPortList.Items.Clear(); 
            ports = SerialPort.GetPortNames(); 
 
            if (ports.Length > 0) 
            { 
                foreach (string p in ports) cbCOMPortList.Items.Add(p); 
 
                LockControls(); 
                bStop.Enabled = false; 
 
59 
                cbCOMPortList.Enabled = true; 
                bConnect.Enabled = true; 
                cbCOMPortList.SelectedIndex = 0; 
            } 
            else 
            { 
                cbCOMPortList.Text = (" --- No port available --- "); 
                cbCOMPortList.Enabled = false; 
                bConnect.Enabled = false; 
                UnlockControls(); 
            } 
        } 
 
        private void bRefresh_Click(object sender, EventArgs e) 
        { 
            GetComPortsList(); 
        } 
 
        private void portDisconnect() 
        { 
            cbCOMPortList.Enabled = true; 
            bRefresh.Enabled = true; 
            LockControls(); 
            port.Close(); 
            bConnect.Text = "Connect"; 
        } 
 
        private void portConnect() 
        { 
            try 
            { 
                port.PortName = ports[cbCOMPortList.SelectedIndex]; 
                port.BaudRate = 9600; // speeds -> 
http://osr600doc.sco.com/en/HW_io/config_trigger_level.html 
                port.DataBits = 8;  
                port.Parity = System.IO.Ports.Parity.None; 
                port.StopBits = System.IO.Ports.StopBits.One; 
                port.ReadTimeout = 1000; 
                port.WriteTimeout = 1000; 
                port.Open(); 
 
60 
            } 
            catch (Exception ex) 
            { 
                MessageBox.Show("ERROR: невозможно открыть порт: \n" + 
ex.ToString(), "FAIL", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); 
                return; 
            } 
 
            bConnect.Text = "Disconnect"; 
            cbCOMPortList.Enabled = false; 
            bRefresh.Enabled = false; 
            UnlockControls(); 
            bStop.Enabled = false; 
        } 
 
        private void bConnect_Click(object sender, EventArgs e) 
        { 
            if (port.IsOpen) {  
                portWrite("p");  
                programStop();  
                portDisconnect();  
                bStop.Enabled = false;   
            } else portConnect(); 
        } 
 
        private void LockControls() 
        { 
            pMain.Enabled = false; 
            pStepMode.Enabled = false; 
            bStart.Enabled = false; 
            progressBarMain.Value = 0; 
        } 
 
        private void UnlockControls() 
        { 
            pMain.Enabled = true; 
            pStepMode.Enabled = true; 
            bStart.Enabled = true; 
            progressBarMain.Maximum = progressBarMain.Value; 
 
 
61 
        } 
 
        private void bLeft_Click(object sender, EventArgs e) 
        { 
            portWrite("l"); 
            label1.Text = currSN.ToString(); 
        } 
 
        private void bRight_Click(object sender, EventArgs e) 
        { 
            portWrite("r"); 
            label1.Text = currSN.ToString(); 
        }      
 
        private void programStop() 
        { 
            timerMain.Enabled = false; 
            progressBarMain.Value = progressBarMain.Maximum; 
        } 
 
        private void bStop_Click(object sender, EventArgs e) 
        { 
            portWrite("p"); 
            programStop(); 
            UnlockControls(); 
        } 
 
        private void CheckValues() 
        { 
            errors = 0; 
 
            try 
            { 
                totalSteps = Convert.ToInt32(tbSteps.Text); 
            } 
            catch (FormatException) 
            { 
                errors = 1; 
                MessageBox.Show("Помилка в полі 'Кроки'. Введіть ціле число 
кроків", "MHR_Control", MessageBoxButtons.OK, 
 
62 
MessageBoxIcon.Exclamation); 
                return; 
            } 
            if (totalSteps < 0 | totalSteps > 10000) 
            { 
                errors = 1; 
                MessageBox.Show("Недоступне значення в полі 'Кроки'. Їх має 
бути не менше нуля і не більше 10 000 ", "MHR_Control", 
MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
                return; 
            } 
 
 
 
            try 
            { 
                totalTime = Convert.ToInt32(tbTime.Text); 
            } 
            catch (FormatException) 
            { 
                errors = 1; 
                MessageBox.Show("Помилка в полі 'Час'. Введіть ціле число 
секунд", "MHR_Control", MessageBoxButtons.OK, 
MessageBoxIcon.Exclamation); 
                return; 
            } 
            if (totalTime < 0 | totalTime > 3600) 
            { 
                errors = 1; 
                MessageBox.Show("Недоступне значення в полі 'Час'. Секунд має 
бути не менше нуля і не більше 3600", "MHR_Control", 
MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
                return; 
            } 
        } 
 
 
 
        private void bStart_Click(object sender, EventArgs e) 
        { 
 
63 
            CheckValues(); 
            if (errors > 0) return; 
             
            LockControls(); 
            bStop.Enabled = true; 
 
            progressBarMain.Maximum = totalSteps + 1; 
            steps = totalSteps; 
 
            timerMain.Interval = (totalTime * 1000) / totalSteps; 
 
            if (timerMain.Interval >= 5) // 50 steps per second 
                timerMain.Enabled = true; 
            else 
            { 
                MessageBox.Show("Занадто швидко, двигун буде пропускати 
кроки", "MHR_Control", MessageBoxButtons.OK, 
MessageBoxIcon.Exclamation); 
                UnlockControls(); 
                bStop.Enabled = false; 
            } 
        } 
 
 
        private void progressBarMainValue(int mvalue) 
        { 
            progressBarMain.Value = mvalue + 1; 
            progressBarMain.Value--; // dirty avoid w7 progress bar AnImAtIoN ...  
        } 
 
 
        private void timerMain_Tick(object sender, EventArgs e) 
        { 
            if (steps > 0) 
            { 
                if (rotDir) portWrite("r"); else portWrite("l"); 
                if (!cbCycle.Checked) 
                { 
                    steps--; 
                    progressBarMainValue(totalSteps - steps); 
 
64 
                } 
            } 
            else 
            { 
                portWrite("p"); 
                timerMain.Enabled = false; 
                UnlockControls(); 
                bStop.Enabled = false; 
 
            } 
            label1.Text = currSN.ToString(); 
        } 
 
        private void rbLeft_CheckedChanged(object sender, EventArgs e) 
        { 
            if (rbLeft.Checked) rotDir = false; else rotDir = true; 
        } 
 
        private void rStepFull_CheckedChanged(object sender, EventArgs e) 
        { 
            if (rbStepFull.Checked) 
            { 
                portWrite("1"); stepMode = 1; 
                grClear(); 
            } 
        } 
 
        private void rStepHalf_CheckedChanged(object sender, EventArgs e) 
        { 
            if (rbStepHalf.Checked) {  
                portWrite("2"); stepMode = 2; 
                grClear(); 
            } 
        } 
 
        private void radioButton1_CheckedChanged(object sender, EventArgs e) 
        { 
            if (rbStepQuart.Checked) {  
                portWrite("4"); stepMode = 4; 
                grClear(); 
 
65 
            } 
        } 
 
        private void rbStepEight_CheckedChanged(object sender, EventArgs e) 
        { 
            if (rbStepEight.Checked) 
            {  
                portWrite("8"); stepMode = 8; 
                grClear(); 
            } 
        } 
 
        private void grClear() 
        { 
            for (int k = 0; k < 4; k++) 
            { 
                chart1.Series[k].Points.Clear(); 
                p[k] = k + 1;  
            } 
            p[0] += 0.8; 
            for (int k = 0; k < 4; k++) 
            { 
                chart1.Series[k].Points.Add(p[k]); 
            } 
             
            currSN = 1; 
        } 
 
 
 
         bool dir = true; 
         int currSN = 1; 
 
        public void Step() 
        { 
            if (currSN == 1) 
            { 
                analogWrite(3, 0, true); 
                if (dir) 
                { 
 
66 
                    analogWrite(6, 255); 
                    currSN = 2; 
                } 
                else 
                { 
                    analogWrite(9, 255); 
                    currSN = 4; 
                } 
                return; 
            } 
 
            if (currSN == 2) 
            { 
                analogWrite(6, 0, true); 
                if (dir) 
                { 
                    analogWrite(5, 255); 
                    currSN++; 
                } 
                else 
                { 
                    analogWrite(3, 255); 
                    currSN--; 
                } 
                return; 
            } 
 
            if (currSN == 3) 
            { 
                analogWrite(5, 0, true); 
                if (dir) 
                { 
                    analogWrite(9, 255); 
                    currSN++; 
                } 
                else 
                { 
                    analogWrite(6, 255); 
                    currSN--; 
                } 
 
67 
                return; 
            } 
 
            if (currSN == 4) 
            { 
                analogWrite(9, 0, true); 
                if (dir) 
                { 
                    analogWrite(3, 255); 
                    currSN = 1; 
                } 
                else 
                { 
                    analogWrite(5, 255); 
                    currSN--; 
                } 
            } 
        } 
 
 
        public  void halfStep() 
        { 
            if (currSN == 1) 
            { 
                analogWrite(3, 255, true); 
                if (dir) 
                { 
                    analogWrite(6, 255); 
                    currSN++; 
                } 
                else 
                { 
                    analogWrite(9, 255); 
                    currSN = 8; 
                } 
                return; 
            } 
 
            if (currSN == 2) 
            { 
 
68 
                analogWrite(3, 255, true); 
                analogWrite(6, 255, true); 
                if (dir) 
                { 
                    analogWrite(3, 0); 
                    currSN++; 
                } 
                else 
                { 
                    analogWrite(6, 0); 
                    currSN--; 
                } 
                return; 
            } 
 
            if (currSN == 3) 
            { 
                analogWrite(6, 255, true); 
                if (dir) 
                { 
                    analogWrite(5, 255); 
                    currSN++; 
                } 
                else 
                { 
                    analogWrite(3, 255); 
                    currSN--; 
                } 
                return; 
            } 
 
            if (currSN == 4) 
            { 
                analogWrite(5, 255, true); 
                analogWrite(6, 255, true); 
                if (dir) 
                { 
                    analogWrite(6, 0); 
                    currSN++; 
                } 
 
69 
                else 
                { 
                    analogWrite(5, 0); 
                    currSN--; 
                } 
                return; 
            } 
 
            if (currSN == 5) 
            { 
                analogWrite(5, 255, true); 
                if (dir) 
                { 
                    analogWrite(9, 255); 
                    currSN++; 
                } 
                else 
                { 
                    analogWrite(6, 255); 
                    currSN--; 
                } 
                return; 
            } 
 
            if (currSN == 6) 
            { 
                analogWrite(5, 255, true); 
                analogWrite(9, 255, true); 
                if (dir) 
                { 
                    analogWrite(5, 0); 
                    currSN++; 
                } 
                else 
                { 
                    analogWrite(9, 0); 
                    currSN--; 
                } 
                return; 
             
 
70 
        double[] p = new double[4]; 
        void analogWrite(int i, int j, bool fake = false) 
        { 
            int ii = 0; 
            double jj = 0; 
 
            if (i == 3) { ii = 0; jj = 1; } 
            if (i == 5) { ii = 1; jj = 2; } 
            if (i == 6) { ii = 2; jj = 3; } 
            if (i == 9) { ii = 3; jj = 4; } 
 
            if (j == 64) { jj += 0.2; } 
            if (j == 128) { jj += 0.4; } 
            if (j == 192) { jj += 0.6; } 
            if (j == 255) { jj += 0.8; } 
 
            p[ii] = jj; 
 
            if (!fake) 
            { 
                for (int k = 0; k < 4; k++) 
                {                    
                    while (chart1.Series[k].Points.Count > 32) 
                    { 
                        chart1.Series[k].Points.RemoveAt(0); 
                    } 
                    chart1.Series[k].Points.RemoveAt(chart1.Series[k].Points.Count-1); 
                    chart1.Series[k].Points.Add(p[k]); 
                    chart1.Series[k].Points.Add(p[k]); 
 
                } 
            } 
        } 
 
        private void chart1_Click(object sender, EventArgs e) 
        { 
            for (int i = 0; i < 4; i++) 
                chart1.Series[i].Points.Clear(); 
        } 
    } 
 
71