Система управления учебным робот-манипулятором на базе ПК

Автор dima, Среда, марта 28, 2018, 07:45:57

« предыдущая тема - следующая тема »
Вниз

dima

Среда, марта 28, 2018, 07:45:57 Последнее редактирование: Среда, июня 20, 2018, 01:10:58 от dima
 
Исполнитель: Бова Дмитрий Евгеньевич, 441-об
Научный руководитель: Усенко Валентин Иванович
Тема: "СИСТЕМА УПРАВЛЕНИЯ УЧЕБНЫМ РОБОТ-МАНИПУЛЯТОРОМ НА БАЗЕ ПК"

     ВВЕДЕНИЕ
     Манипуляционные устройства робота - исполнительные органы, имитирующие действие человеческих рук в натуральном масштабе, с любым увеличением или уменьшением, а также усилием по мощности.
     Учебный робот «УР-4» предназначен для наглядного изучения технических характеристик, а также построения системы автоматизации на базе робота-манипулятора. Внешний вид робота изображен на рисунке 1.



Рисунок 1 - Учебный робот

      Робот установлен на металлическую платформу с координатной сеткой с нанесенной на ней системой координат. Рабочее пространство робота оснащено различными датчиками. Так же на платформе установлены три площадки, рисунок 2. Площадки №1 и №2 расположены на одной высоте, но площадка №2 находится на меньшем радиусе к основанию робота. Площадки №3 расположена выше остальных площадок.


Рисунок 2 - Схема платформы

     Звенья робота могут осуществлять движения в трех направлениях: поворот стрелы вокруг своей оси - ось Z; спуск/подъем стрелы - ось Y; вылет стрелы - осьX. Также в движение приводится схват робота.
     За спуск, подъем, и вылет стрелы отвечает шаговый двигатель GD57STH56-2808A. Гибридный шаговый двигатель длиной 56 см. и ширенной фланца 57 см. Имеет 4 обмотки и 8 выводов. Технические характеристики серии GD57STH56 приведены в таблице 1.


     За поворот стрелы вокруг своей оси отвечает шаговый двигатель GD57STH76 марки 2006A. Гибридный шаговый двигатель длиной 76 см. и ширенной фланца 57 см. Имеет 2 обмотки и 6 выводов.  Технические характеристики серии GD57STH76 аналогичны характеристикам серии GD57STH56 и представлены в таблице 1.
     Схват УР приводится в движение гибридным шаговым двигателем GD42STH47- 0406А. Ширина фланца 42 см., а длина двигателя 47 см. Технические характеристики серии GD42STH47 аналогичны двум другим, приведённым выше.
     Из выше сказанного следует, что робот осуществляет движения с помощью шаговых двигателей, которые стоят по одному на каждой оси. До нас была собрана СУ ШД представленная на рисунке 3. Каждый ШД подключен непосредственно к своему драйверу шагового двигателя. Драйвер управляет ШД по протоколу STEP/DIR. Сигнал STEP - шаг, один импульсный сигнал инициирует поворот двигателя на один шаг. Сигнал DIR - сигнал задающий направления вращения двигателя. Данные сигналы поступали c ПК, все управление осуществлялось с помощью программного обеспечения, для ЧПУ - станков, MACH3.



Рисунок 3 - СУ ШД

    Схема включает в себя:
     •   ДШД - драйвер шагового двигателя;
     •   ШД - шаговый двигатель;
     •  BOB 5x2 - плата коммутации драйверов шаговых двигателей;
     •   A+,A-,B+ и B- - выводы обмоток двигателя;
     •   N - число шагов (сигнал Step);
     •   D - направление вращения двигателя (сигнал Dir);
     •   ПК - персональный компьютер.
     Нами была разработана альтернативная СУ ШД, рисунок 4. Протокол STEP/DIR будет формировать МК, в зависимости от команд полученных от ПК. На самом компьютере будет представлена возможность как ручного так и автоматического управления ШД, запросы пользователя ПК будет перерабатывать в команды и посылать их на МК.



Рисунок 4 - Альтернативная СУ ШД

    Схема включает в себя:
     •   ДШД - драйвер шагового двигателя;
     •   ШД - шаговый двигатель;
     •  BOB 5x2 - плата коммутации драйверов шаговых двигателей;
     •   A+,A-,B+ и B- - выводы обмоток двигателя;
     •   N - число шагов (сигнал Step);
     •   D - направление вращения двигателя (сигнал Dir);
     •   ПК - персональный компьютер;
    •   МК - микроконтроллер.


    1 ПОДКЛЮЧЕНИЕ И ПРОГРАММИРОВАНИЕ ПАРАЛЛЕЛЬНОГО ПОРТА ПК
     1.1 Характеристики LPT-порта
     LPT - международный стандарт параллельного интерфейса для подключения периферийных устройств персонального компьютера. В основном используется для подключения к компьютеру принтера, сканера и других внешних устройств, однако может применяться и для других целей. Визуальный вид LPT-порта представлен на рисунке 1.1.

Рисунок 1.1 - LPT-порт

     Выходом LPT-порта является разъем DB25 с 25-контактами. Максимальное напряжение, использующееся в сигнальных линиях порта, составляет +5В. Схема расположения контактов представлена на рисунке 1.2.

Рисунок 1.2 - Разъем DB25

     Схема включает в себя:
     •   Контакты 2-9 - регистр Data;
     •   Контакты 10-13 и15 - регистр Status;
     •   Контакты 1, 14, 16 и 17 - регистр Control;
     •   Контакты 18-25 - GND, земля.
     Из рисунка видно, что выводы порта можно разделить на четыре группы: регистры Data, Status, Control и выводы GND. Далее рассмотрим каждую группу отдельно.
     1.1.1 Регистр Data
     Регистр Data (контакты 2-9) - представляет собой восьмиразрядный двунаправленный регистр ввода/вывода. Он позволяет как c помощью программы, так и из внешнего устройства установить на его контактах логическую 0 или 1, т.е. установить высокий уровень напряжения (+5В) или низкий уровень напряжения (0В). Для обращения к регистру нужно знать его адрес: 0x378 - в шестнадцатеричной системе или 888 - в десятичной системе.
     1.1.2 Регистр Status
     Регистр Status (контакты 10-13 и15) - представляет собой пятиразрядный однонаправленный регистр. Данные изменять в нем можно только через внешние устройства, т.е. с помощью программы данные в него записать нельзя, доступно только чтение. Адрес регистра: 0x379 - в шестнадцатеричной системе или 889 - в десятичной системе.
     1.1.3 Регистр Control
     Регистр Control (контакты 1, 14, 16 и 17) - представляет собой четырёхразрядный однонаправленный регистр. Данные изменять в нем может только программа, т.е. управлять им можно только с помощью программы. Его адрес: 0x380 - в шестнадцатеричной системе или 890 - в десятичной системе.
     1.1.4 GND
     GND, земля (контакты 18-25) - представляет собой контакты на которых всегда установлен низкий уровень напряжения т.е. 0В. Все они так же соединены между собой.
     1.2 Управление LPT-портом
     Управление будет осуществляться персональным компьютером с ОС Windows ХР на языке программирования С++. Так как на нашей ОС прямой доступ к регистрам LPT-порта, из программ пользовательского режима, запрещён, чтобы управлять портом, необходимо все операции проводить через драйвер. Для этого воспользуемся уже готовым инструментом позволяющим без проблем общаться LPT-порту. Ниже рассмотрим самые распространённые.
     Начнем с самого простого, и в тоже время очень мощного средства: библиотеки inpout32.dll.
     Этот комплекс состоит из 3 файлов:
     •   собственно самой динамической библиотеки inpout32.dll;
     •   статической библиотеки LIB, необходимой на этапе сборки программы;
     •   заголовочного файла с прототипами используемых функций.
     При использовании данной библиотеки обращение к LPT-порту происходит с помощью функций: Out32(адрес порта, байт данных) - для записи в порт и Inp32(адрес порта) - для чтения из порта. Эти функции библиотека конвертирует в запросы к стандартному драйверу ОС, через который и идет обмен информацией с портом.
     Второй вариант работы с LPT-портом специальный драйвер GiveIO.sys, который позволяет приложению, запустившему его, свободно работать с любыми портами.
     Работа этого драйвера заключается в том, что в начале работы программы для связи с портом необходимо обратиться к драйверу GiveIO.sys. При этом он установит такие значения системного битового массива карты разрешения (I/O Permission Map) для нашего приложения, что для него будет разрешен прямой доступ к любым портам. I/O Permission Map - это составная часть системы защиты ввода-вывода Windows NT. Он представляет собой битовый массив, каждый бит которого соответствует порту ввода-вывода. Если бит равен 1, то доступ к порту закрыт, если 0, то открыт. Для любого пользовательского приложения все биты установлены в 1, и соответственно мы не можем напрямую вмешаться в работу порта. GiveIO.sys устанавливает в этом массиве везде 0 - т.е. мы получаем возможность обращаться к любому порту из приложения.
     Второй вариант работы с портом является сложнее чем первый, к тому же часто возникают ошибки из-за неудачной установки драйвера GiveIO.sys, поэтому для управления LPT-портом воспользуемся библиотекой inpout32.dll.
     1.3 Исследование LPT-порта
     После того как мы разобрались что представляет из себя LPT-порт и выбрали способ обращения к порту, нужно освоить полученные знания на практике.
     Перейдем к изучению порта, для этого на макетной плате соберём простую схему из 8 светодиодов, соответствующую максимальному размеру регистра - 8 бит, и попробуем поработать с каждым регистром отдельно.
      Для начала подключим нашу схему к регистру Data (контакты 2-9), так чтобы первый светодиод соответствовал первому биту регистра (контакт 2), низкий уровень напряжения возьмем на группе выводов GND (контакты 18-25), контакт можно выбрать любой, в нашем случае возьмем контакт 25. Схема электрических соединений представлена на рисунке 1.3, а подключение нашей схемы к LPT-порту на практике представлено на рисунке 1.4.


Рисунок 1.3 - Схема подключения светодиодов

     Схема включает в себя:
     • VD1-VD8 - светодиоды, в дальнейшем примем что светодиод VD1 подключается к 1 биту интересующего нас регистра и т.д.;
     • R1-R9 - токоограничивающие резисторы;
     • LPT-порт - подключение к регистру Data (контакты 2-9).


Рисунок 1.4 - Подключение к порту

     Для избежание выхода из строя LPT-порта, нужно рассчитать токоограничивающие сопротивление, по формуле:

     Мощность, рассеиваемая на сопротивлении, определяется по выражению:

     Следуя рекомендациям стандарта IEEE 1284 [1] можно принять следующие значения напряжения и тока: U1 =5 В; Iн =14 мА.
      Прямое напряжение на светодиоде зависит от типа светодиода и тока проходящего через него, обычно для номинальных режимов это напряжение находится в пределах 2-3,5 В. Поэтому, приближённо, принимаем значение  ULED=2,5 В. Тогда величина сопротивления следующая:

       Принимаем значение сопротивления, из ряда E24, равное =200 Ом.
     Мощность, рассеиваемая на сопротивлении, будет иметь величину:


     Выберем резистор CF-25 (С1-4) 0.25 Вт, 200 Ом.
     Теперь напишем простую программу на языке С++ для управление регистром Data с помощью программы. Программа будет писаться в среде разработки Microsoft Visual C++ 6.0. Управление будет осуществляться с помощью выбранной нами раннее библиотеки inpout32.dll. Сам код программы с подробными комментариями приведён на рисунке 1.5. Следует отметить, что так как регистр Data 8 разрядный, максимальное число которое можно в него записать равно 255 в десятичной системе исчисления.

Рисунок 1.5 - Код программы

     После того как код программы написан его нужно скомпилировать для этого выбираем в меню программы Build ->Compile (название проекта).cpp, потом Build ->Build (название проекта).exe. Внизу должно появиться сообщение об успешном завершении процесса компиляции программы, в нашем случаи рисунок 1.6.

Рисунок 1.6 - Компиляция

     Перед работой (.exe) файлом необходимо в папку Debug нашего проекта поместить файл inpout32.dll. Файл (.dll) должен быть всегда рядом (в одной директории) с используемой программой, иначе (.exe) файл не сможет работать.
     После всех манипуляций запускаем (.exe) файл нашей программы и переходим к исследованию LPT-порта. Окно программы показано на рисунке 1.7. По логике нашей программы при нажатии на клавиатуре ''1'' должен загораться первый светодиод, а при нажатии на ''0'', все светодиоды должны не гореть, что и подтверждают рисунок 1.8 и рисунок 1.9.


Рисунок 1.7 - Окно программы


Рисунок 1.8 - Результат выполнения программы


Рисунок 1.9 - Результат выполнения программы

     Изменим код таким образом, чтобы при нажатии на клавиатуре ''1'' начиная с первого бита в регистре Data чередуясь устанавливались высокий и низкий уровень напряжения, т.е. логические 1 и 0. Для этого нужно изменить только одну строчку, рисунок 1.10.

Рисунок 1.10 - Код программы

     Скомпилируем заново нашу программу и запустим (.exe) файл. Теперь при нажатии на клавиатуре ''1'' должны загореться 1, 3, 5 и 7 светодиоды, а при нажатии на ''0'', все светодиоды должны гаснуть, что и подтверждают рисунок 1.11 и рисунок 1.12.

Рисунок 1.11 - Результат выполнения программы


Рисунок 1.12 - Результат выполнения программы

      Для управления регистром Data из вне нужно:
     Во-первых, нужно установить пятый бит регистра Control (''1'' - режим ввода, ''0'' - режим вывода), т.е. переключить режим работы регистра
Data.
     Во-вторых, переключение режима работы регистра Data ничего не изменит если выбран неправильный режим работы LPT-порта. Порт способен работать в 4 режимах (Centronics, SPP, ЕРР, ЕСР) и их вариациях. Причём в каждом режиме назначение и активный уровень выводов могут отличаться. Режим, устанавливающийся ОС при загрузке по умолчанию - SPP (Standart Parallel Port). Если мы хотим что-либо считывать с порта, то нам необходимо переключить режим работы порта компьютера в режим EPP (Enhanced Parallel Port - режим двунаправленной передачи данных). Это нужно сделать в BIOS, во время загрузки компьютера когда появится надпись Press DEL to enter setup, нужно нажать DEL, чтобы попасть в меню BIOS, затем выбрать раздел INTEGRATED PERIPHERALS и там выбрать строку PARALLEL PORT MODE: здесь меняем режим работы LPT-порта на EPP или ЕСР/EPP, при выходе нужно сохранить сделанные изменения. Может быть такое что компьютер не поддерживает режим EPP, в таком случае регистром Data возможна только передача данных.
     После выполнения этих двух условий регистр Data перейдет в режим чтения, программой данные в него записать уже не получиться, можно только считать с порта. Так же при переводе порта в режим чтения, на всех его контактах устанавливается логическая 1, т.е. +5В, чтобы изменить состояние любого бита регистра нужно заземлить соответствующие ему контакт (подать на него низкий уровень напряжения).
     В результате можно сделать вывод, что регистр Data является восьмиразрядным двунаправленным регистром, "1" на его контактах соответствует установлению высокого уровня напряжения, т.е. +5В, а "0" соответствует установлению низкого уровня напряжения - 0В.
     Далее подключим нашу схему к регистру Control (контакты 1, 14, 16 и 17), так чтобы первый светодиод соответствовал нулевому биту регистра (контакт 1), низкий уровень напряжения возьмем так же с контакта 25. Особенностью регистра является то что он однонаправленный, данные в него можно записывать только с помощью программы. Так же регистр четырехразрядный, следовательно максимальное число которое в него можно записать равно 15 в десятичной системе исчисления.
     Для изучения регистра воспользуемся ранее написанной программой представленной на рисунке 1.5. Для этого нужно только исправить одну строчку кода, рисунок 1.13.

Рисунок 1.13 - Код программы

     Затем компилируем и запускаем (.exe) файл нашей программы и переходим к исследованию. По логике нашей программы при нажатии на клавиатуре ''1'' должен загораться первый светодиод, а при нажатии на ''0'', все светодиоды должны не гореть, но на самом деле при нажатии ''1'' горят 2 и 4 светодиоды, а нажатии на ''0'' горят 1,2 и 4 светодиоды, что показано на рисунке 1.14 и рисунке 1.15 соответственно.

Рисунок 1.14 - Результат выполнения программы


Рисунок 1.15 - Результат выполнения программы

     Это происходит по тому, что 1, 2 и 4 контакты регистра Control инвертированы, т.е. высокий уровень напряжения заменяется низким и наоборот низкий высоким. Это подтверждает рисунок 1.15, когда при записи числа 0 в регистр на выходе у нас горят светодиоды. Эту особенность нужно будет обязательно учесть в будущем при работе с регистром Control.
     Далее подключим нашу схему к регистру Status (контакты 10-13 и 15), так чтобы 1 светодиод был подключен к контакту 10 и т.д. Особенностью регистра является то что он однонаправленный, данные в него можно записывать только с помощью внешнего устройства. Так же рабочими являются биты регистра под номерами 4-7, а 0-3 не используются, следовательно при работе с ним нужно быть очень внимательными.
     Попробуем управлять регистром из вне, для этого будем изменять состояние бита s7 (11 контакт) и программой считывать данные с порта. Код программы с подробными комментариями представлен на рисунке 1.16. При выполнении программы сначала был считан порт без подачи на 11 контакт низкого уровня напряжения, а затем с его заземлением, результат выполнения программы представлен на рисунке 1.17.


Рисунок 1.16 - Код программы


Рисунок 1.17 - Результат

     По результатам исследований был сделан вывод, что изначально на всех битах регистра, кроме бита s7, установлена логическая 1, на s7 логический 0. А изменение состояние всех доступных битов регистра происходит при подачи на их контакты низкого уровня напряжения.
     Ещё одна важная особенность, при опытах с регистром Status возникает не совсем понятная ситуация с другими выводами LPT-порта. После первого использования выводов регистра Status, начинают мигать выводы регистров Data и Control. Это связано с тем, что порт предназначен для подключения принтера, а выводы Status он использует, для того чтобы сообщить компьютеру некоторую служебную информацию. Изменения на выводах Status регистрирует системный драйвер операционной системы. Он же проводит и ответные действия, для нас наблюдаемые в виде периодического изменения состояния других выводов. Такое поведение следует только при первой работе с регистром, в дальнейшем с ним можно работать без каких-либо проблем.
     Из всего выше сказанного следует, что каждый регистр LPT-порта имеет свои особенности, которые обязательно нужно будет учесть в дальнейшем при работе с портом.


     2 УПРАВЛЕНИЕ ШД ПО ПРОТОКОЛУ STEP/DIR
     В нашем случае для управления ШД используются интерфейсная плата коммутации драйверов шаговых двигателей BOB-5x2 и специальные драйверы шаговых двигателей TB6560-1.
     BOB-5x2 - плата коммутации драйверов шаговых двигателей, визуальный вид представлен на рисунке 2.1. Подключается к ПК через LPT-порт. Поддерживает управление пятью осями. Имеет пять дискретных входов и один аналоговый выход 0-10 В. Так же есть возможность управления силовой нагрузкой с помощью реле. Все управляющие входы оптоизолированы. Выводы интерфейсной платы BOB-5x2 представлены на рисунке 2.2, а назначение этих выводов в таблице 2.1.


Рисунок 2.1 - Визуальный вид платы BOB-5x2


Рисунок 2.2 - Выводы BOB-5x2

   
     Назначение контактов LPT-порта приведены в Таблица 2.2.
   
     Драйвер TB6560-1 - это электронное устройство, которое управляет шаговым двигателем по результатам полученных сигналов управления, визуальный вид представлен на рисунке 2.3. Основные характеристики данных драйверов представлены в таблице 2.3.

Рисунок 2.3 - Драйвер TB6560-1

   
   
   
     Управление шаговыми двигателями осуществляется по протоколу STEP/DIR. Для управления используют три сигнала.
     Сигнал STEP - шаг. Один импульсный сигнал инициирует поворот двигателя на один шаг. Если драйвер управления работает в полу шаговом или микро шаговом режимах, то поворот происходит не на физический шаг двигателя, а на часть шага, определяемого режимом. Частота следования импульсов определяет скорость вращения двигателя. Существуют ограничения по максимальной частоте и по минимальной длительности импульсов сигнала STEP, так как драйвер должен успеть обработать каждый импульс.
     Сигнал DIR - сигнал задающий направления вращения двигателя. При высоком уровне сигнала двигатель вращается по часовой стрелке, при низком против часовой. Сигнал DIR должен формироваться раньше формирования импульсов сигнала STEP.
     Сигнал ENABLE - сигнал разрешения работы драйвера. Разрешающий уровень сигнала ENABLE - низкий, т.е. отсутствие напряжения, запрещающий естественно наоборот. В нашем случае сигнал ENABLE не используется, поэтому в дальнейшем его можно не учитывать.
     Анализируя все выше сказанное составим временную диаграмму сигналов работы протокола STEP/DIR, рисунок 2.4. В дальнейшем эта временная диаграмма послужит основой для написания программы управления шаговыми двигателями.


Рисунок 2.4 - Временная диаграмма

     Схема включает в себя:
     • CW(DIR) - сигнал определяющий направление вращения двигателя (при высоком уровне сигнала двигатель вращается по часовой стрелке, при низком уровне - в противоположную сторону);
     • CLK(STEP) - шаг, это тактирующий сигнал, один импульс говорит о том, что ротор двигателя надо повернуть на один шаг;
     • Ти - длительность импульса сигнала;
     • Т - период импульса сигнала.
    2.1 Управление ШД с персонального компьютера через LPT-порт
     После того как мы изучили протокол STEP/DIR, попробуем реализовать его на практики, а именно попробуем управлять шаговыми двигателями робота-манипулятора через LPT-порт. Программа будет реализована на языке С++ с применением знаний полученных ранее.
     Программа будет управлять одной осью в соответствии с таблицей 2.2, выбор оси будет изменяться программно. Код программы управления осью Х с подробными комментариями приведен на рисунке 2.5. Для плавности работы ШД выберем скважность импульсов равную 2, т.е. длительность импульса сигнала и длительность задержки между сигналами будут равны по времени. Для реализации задержек времени будем использовать функцию "Sleep(время)", данной функции передается время в миллисекундах, время и количество импульсов будем изменять программно.


Рисунок 2.5 - Код программы

     В ходе исследования использовались разные задержки времени: 500, 300, 150, 50 и 1 мс. Управление осуществлялось каждой осью и в результате были сделаны выводы, что задержка даже в 1мс, является слишком большой для реализации протокола STEP/DIR. Во-первых, скорость движения, в режиме управления шаговым двигателем 1/8, очень медленная. Во-вторых, при работе ШД издавал шумы и не обеспечивал плавную работу.
     Следовательно, для управления ШД необходимо использовать задержку в микросекундах. Так как все стандартные функции задержек и таймеров в С++ работают только с миллисекундами, необходимо придумать как реализовать задержку в микросекундах. Есть разные варианты создание таймеров на С++ работающих с микросекундами, но у всех есть один большой недостаток - это нестабильность работы, что для нас является не допустимым. Поэтому программная реализация задержки, на данном уровне, для нас не подходит.
     Так как реализовать протокол STEP/DIR на ПК у нас не получилось, придумаем промежуточное звено между компьютером и платой коммутации драйверов шаговых двигателей, которое будет преобразовывать сигналы поступающие с ПК в протокол STEP/DIR.
     2.2 Управление ШД с помощью микроконтроллера
     Для реализации протокола STEP/DIR, нам нужно программируемое устройство способное формировать задержки, с большой точностью, в микросекундах. На эту роль идеально подходит микроконтроллер.
     В качестве микроконтроллера будет выступать МК из семейства PIC. Данный МК использует гарвардскую архитектуру c RISC - процессором. 
     Особенностью RISC архитектуры является сокращенный набор команд. Поэтому RISC архитектура проще, быстрее, меньше потребляет, проста при программировании и отладки, инструкции фиксированной длины, проще работа с памятью и более богатая регистровая архитектура.
     Для того чтобы проверить справится МК с поставленной задачей или нет, для начала попробуем управлять шаговыми двигателями без участия ПК. Для этого микроконтроллер будем подключать напрямую к плате коммутации драйверов шаговых двигателей. Для управления будем использовать 3 ножки микроконтроллера. Первая ножка будет выдавать низкий уровень напряжения, а вторая ножка соответственно высокий, эти ножки будут использованы как сигнал DIR, чередуя их подключение можно менять направление движение ШД. Это нужно для того чтобы упростить код программы. Третья задействованная ножка МК будет формировать сигнал STEP, причем запишем в микроконтроллер несколько вариантов тактирования сигнала STEP, а выбор между ними будет осуществляться с помощью кнопок управления. Схема управления осью Х, с использованием МК, представлена на рисунке 2.6


Рисунок 2.6 - Схема подключения

      Схема включает в себя:
     • МК - микроконтроллер;
     • Плата BOB 5x2 - плата коммутации драйверов шаговых двигателей;
     • R1-R6 - токоограничивающие резисторы;
     • SA - переключатель сигнала DIR (смена направления движения ШД);
     • SB1-SB5 - кнопки включения тактирующего сигнала STEP (каждая кнопка задает разные режимы работы).
     Для избежание выхода из строя ножек МК, нужно рассчитать токоограничивающие сопротивление (на рисунке 2.6 изображено как R6), по формуле:


     Мощность, рассеиваемая на сопротивлении, определяется по выражению:
   
     Следуя приложению [3] принимаем следующие значения напряжения и тока: U =5 В; Iмк =20 мА. Тогда величина сопротивления следующая:
   
     Так как рассчитанное значение сопротивления является граничным для выхода из строя ножки МК, принимаем значение сопротивления больше рассчитанного, из ряда E24, равное =270 Ом.
     Мощность, рассеиваемая на сопротивлении, будет иметь величину:

     
     Выберем резистор CF-25 (С1-4) 0.25 Вт, 270 Ом.
     Так же нужно уменьшить ток короткого замыкания на землю, при нажатие на кнопку, нужно выбрать токоограничивающие сопротивления (на рисунке 2.6 изображены как R1-R5). Для этой цели были выбраны резисторы CF-25 (С1-4) 0.25 Вт, 1кОм.
     Работа МК будет состоять в том, что при замыкании одной из кнопок будет формироваться соответствующие ей сигнал STEP, а при её размыкании сигнал STEP не будет формироваться. В зависимости от нажатой кнопки, будут использоваться разные задержки времени: 600, 300, 150, 100 и 50 микросекунд соответственно. Скважность импульсов оставим равную 2.  Код программы, с подробными комментариями, на языке Assembler приведен на рисунке 2.7.



Рисунок 2.7 - Код программы

    На рисунке 2.7 не представлены подпрограммы "REZHIM2", "REZHIM3", "REZHIM4", "REZHIM5", "DELAY2", "DELAY3", "DELAY4" и "DELAY5", так как они реализованы подобно подпрограммам "REZHIM1" и "DELAY1" соответственно, то в их отдельном рассмотрение нет необходимости.
     В ходе управления всеми осями с использованием разных задержек времени, было выявлено, что при использовании задержки в 100 микросекунд все оси работают хорошо, т.е. ШД работают тихо, не издавая посторонних шумов, так же обеспечивается высокая скорость и плавность движения. А при использовании других временных задержек данные характеристики ухудшаются.
     В результате данного исследования можно сделать вывод, что микроконтроллер вполне справляется с реализацией протокола STEP/DIR, наиболее благоприятная работа всех ШД достигается при длительности периода импульсов равном 200 микросекунд и скважности равной 2.



      БИБЛИОГРАФИЧЕСКИЙ СПИСОК
      1. Введение в Стандарт IEEE 1284 [Электронный ресурс] // Hardline.RU : Компьютерный Портал. - 2006. - Режим доступа : http://www.hardline.ru/3/37/1232. - 18.03.2018.
      2. Ряд номиналов резисторов Е24 [Электронный ресурс] // RadioLibrary : Портал - Библиотека радиолюбителя. - 2011. Режим доступа : http://www.radiolibrary.ru/reference/resistorseries/e24.html. - 18.03.2018.
      3. Devices Included in this Data Sheet: PIC16F870. All rights reserved. © 2000 Microchip Technology Incorporated. Printed in the USA.

ran

Браво! (Когда я вижу всякие voidы и coutы, а также ассемблерные строчки, я всегда кричу "Браво", начиная с конца 90х).
Такой вопрос. Раньше (давно), когда я занимался (чуть-чуть) низкоуровневым программированием PC, на его борту имелись аппаратные таймеры (кажется, 3), которые действительно можно было настроить на выдачу прерываний с интервалом в мс. Нежели до сих пор ничего не изменилось и разрешающая способность таймеров не улучшилась?

dima

Спасибо за внимание. На сколько я знаю, существует не мало новых функций реализующих задержки и таймеры работающие с мс и даже с мкс, но работают эти функции в свежих версиях Visual Studio, таких как vs 13 и выше.

RVL

Изменим код таким образом, чтобы при нажатии на клавиатуре ''1'' начиная с первого бита в регистре Data чередуясь устанавливались высокий и низкий уровень напряжения, т.е. логические 1 и 0. Для этого нужно изменить только одну строчку, рисунок 1.10.

Рисунок 1.10 - Код программы
Ничем не отличается от предыдущего кода, почему?

dima

Изменим код таким образом, чтобы при нажатии на клавиатуре ''1'' начиная с первого бита в регистре Data чередуясь устанавливались высокий и низкий уровень напряжения, т.е. логические 1 и 0. Для этого нужно изменить только одну строчку, рисунок 1.10.

Рисунок 1.10 - Код программы
Ничем не отличается от предыдущего кода, почему?
Верно подмечено, спасибо за замечание. Вставил не тот рисунок.

mds

с конца 90х).
Такой вопрос. Раньше (давно), когда я занимался (чуть-чуть) низкоуровневым программированием PC, на его борту имелись аппаратные таймеры (кажется, 3), которые действительно можно было настроить на выдачу прерываний с интервалом в мс. Нежели до сих пор ничего не изменилось и разрешающая способность таймеров не улучшилась?

В 1992-93  Краснов Д.Е.  создал  драйвер  на Паскале 5.5  именно для таких  задач. 

До сих пор пользуюсь. Если  работает  зачем  улучшать.

[/quote]

ran

Да речь-то не о драйверах и средах разработки, а о самих таймерах (аппаратных)! Если таймер не допускает задания уставок в мкс, то (чудес не бывает!) никакая программа от него этого не добьется. Надо посмотреть...

mds

Дискретизация  в  мкс достаточна.  Что  можно  потерять  в  меньшем ?

ran

#8
Четверг, марта 29, 2018, 04:12:01 Последнее редактирование: Четверг, марта 29, 2018, 04:20:14 от ran
В ходе управления всеми осями с использованием разных задержек времени, было выявлено, что при использовании задержки в 100 микросекунд все оси работают хорошо, т.е. ШД работают тихо, не издавая посторонних шумов, так же обеспечивается высокая скорость и плавность движения.
- это из доклада, если что...
Добавлено:
Да, в мкс. - достаточно, но этого нет (?).
Добавлено:
Просьба: не вставлять ответ на цитату в саму цитату, а то не понятно, где что.

mds


RVL

Цитировать
Далее подключим нашу схему к регистру Control (контакты 1, 14 и 16-17),
Сколько у вас контактов регистра Control между 16-17?

RVL

Цитировать
Это подтверждает рисунок 1.15, когда при записи числа 0 в регистр на выходи у нас горят светодиоды. Эту особенность нужно будет обязательно учесть в будующем при работе с регистром Control.

RVL

Цитировать
Рисунок 2.2 - Выводы BOB-5x2
Разборные соединения обозначают, threaded - XT
Штырь (вилка), pin - XP
Гнездо (розетка), socket - XS

RVL

Цитировать
Назначение контактов LTP-порта приведены в Таблица 2.2.
LPT - порт.

RVL

Цитировать
Для плавности работы ШД выберем скважность импульсов равную 0,5, т.е. длительность импульса сигнала и длительность задержки между сигналами будут равны по времени.
Скважность = 2.

Вверх