Додаток призначений для передачі керуючих команд на МК
МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
КРЕМЕНЧУЦЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
ІМЕНІ МИХАЙЛА ОСТРОГРАДСЬКОГО
ІНСТИТУТ
ЕЛЕКТРОМЕХАНІКИ
Кафедра СИСТЕМ АВТОМАТИЧНОГО УПРАВЛІННЯ
Пояснювальна записка
до курсової роботи з навчальної дисципліни
«МІКРОПРОЦЕСОРНі ПРистрої»
Тема курсової роботи:
«РОЗРОБКА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ ДЛЯ
Керування процесом роботи роботу ТУР-10»
Розробив: студент групи СІ-08-1
Неборак Олександр Ігорович
№ залікової книжки 083121
Керівник проекту: Конох І.С.
Форма № У 6.01
______________________________
(назва вищого навчального закладу)
Кафедра ______________________________
Дисципліна ______________________________
Спеціальність ______________________________
Курс _________ Група _____________ Семестр
______________________________
ЗАВДАННЯ
на курсовий проект (роботу) студента
______________________________
(прізвище, ім’я, по батькові)
1. Тема проекту (роботи) ______________________________
______________________________
2. Строк здачі студентом
3. Вихідні дані до проекту
(роботи) ______________________________
______________________________
4. Зміст розрахунково-
______________________________
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових креслень) ___________
______________________________
6. Дата видачі завдання ______________________________
КАЛЕНДАРНИЙ ПЛАН
|
№ п/п |
Назва етапів курсового проекту (роботи) |
Строк виконання етапів проекту (роботи) |
Примітки |
Студент ______________________________
(підпис)
Керівник ______________________________
(підпис) (прізвище, ім’я, по батькові)
«_____» ______________________________ 20 ___ р.
РЕФЕРАТ
Курсова робота містить: 16 сторінок, 8 рисунків, 6 літературних джерел.
Тема курсової роботи: додаток призначений для передачі керуючих команд на МК.
Об’єкт розробки – робота з COM-портом у ОС сімейства MS Windows.
Мета роботи – Розробка алгоритму та програми
COM-ПОРТ, ДОДАТОК, ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ, КЕРУЮЧІ СИГНАЛИ, МІКРОКОНТРОЛЛЕР, ТУР-10.
ПЕРЕЛІК СКОРОЧЕНЬ
ОС – операційна система.
ПЗ – програмне забезпечення.
МК – мікроконтроллер.
ЗМІСТ
Вступ
Значні досягнення у галузях обробки інформації, машинного зору, теорії керування та цифрової обробки сигналів як на апаратному, так і на програмному рівнях дають можливість представлення, аналізу та розуміння динамічно змінюваних дорожніх умов, а також реагування на ці умови автономних транспортних засобів. Розробка систем керування автономними транспортними засобами є актуальною задачею тому що забезпечує значно більшу безпеку та зручність ніж ручне керування.
- Аналіз технічного завдання
Мета роботи і задачі дослідження. Розробка алгоритму та програми керування процесом роботи роботу ТУР-10.
Для досягнення поставленої мети необхідно вирішити наступні задачі:
- розробити конструкцію нестійкого двоколісного транспортного засобу;
- розробити алгоритм керування;
- розробити програмне забезпечення.
Об'єкт дослідження є нестійкий двоколісний транспортний засіб на базі Mindstorm LegoNXT .
Предмет дослідження являється система керування транспортним засобом з ПІД-регулятором. В якості якого виступає датчик світла.
При вирішенні поставлених задач використовувались загальні методи теорії автоматичного керування та програмування.
Розроблена модель нестійкого двоколісного транспортного засобу. Для забезпечення стійкого положення рівноваги була розроблена програма керування з ПІД-регулятором.
У роботі показана можливість розробки систем керування транспортними засобами з використанням регуляторів.
- Схемотехнічне завдання
Огляд продукції LEGO NINDSTORMS як елементної бази для створення зразків транспор
тних засобів
NXT є «мозком» робота MINDSTORMS®. Це інтелектуальний, керований комп'ютером елемент конструктора LEGO®, що дозволяє роботу MINDSTORMS ожити і здійснювати різні дії.
Структура NXT:
- NXT оснащений трьома портами виходу для підключення моторів. Щоб мотор працював, він повинен бути підключений до одного з портів A, В або C
- NXT Оснащений чотирма портами входу для підключення сенсорів. Сенсори необхідно підключати до портів 1, 2, 3 або 4.
- Є можливість підключитт кабель USB до порту USB та завантажувати програми c комп'ютера на NXT (або передавати дані від робота на комп'ютер). Для завантаження та обміну даними можна також використовувати 6еспроводний канал Bluetooth.
- Створіть програму з реальними звуками, при запуску програми звуки будуть відтворюватися. Кнопки NXT Помаранчева кнопка: Вкл. / Введення Світло-сірі стрілки: використовуються для переміщення вліво-вправо по меню NXT. Темно-сіра кнопка: Видалити / повернутися.
- Помаранчева кнопка: Вкл. / Введення Світло-сірі стрілки: використовуються для переміщення вліво-вправо по меню NXT. Темно-сіра кнопка: Видалити / повернутися.
Технічні параметри:
- 32-бітовий мікроконтроллер ARM7 256 Кбайт FLASH, 64 КБ RAM 8 - бітовий мікроконтроллер AVR 4 Кбайта FLASH, 512 байт RAM Бездротовий канал Bluetooth (пристрій відповідає вимогам Bluetooth Class IIV 2.0)
- Швидкісний порт USB (12 Мбіт / с)
- порта входу, 6-дротовий кабель для цифрової платформи (Один з портів включає порт розширення, відповідний вимогам I ЄС 61158 Туре 4/EN 50170 для використання в майбутньому)
- порти виходу, 6-дротовий кабель для цифрової платформи
- Графічний ЖК-дисплей 100 х 64 пікселів
- Гучномовець - якість аудіо 8 кГц. Аудіоканал c 8-бітовим квантуванням і частотою семплірованія 2-16 КГц. Джерело живлення: 6 батарей типу АА
Вибір датчика для системи керування
Сенсор освітленості (або колірної сенсор) з набору Lego Mindstorms NXT (Що зображений на рис. 2.1), один з найбільш використовуваних сенсорів при конструюванні та програмуванні Lego-роботів.
Рисунок 2.1 – Датчик освітлення
По внутрішньому устрою, він не такий складний як сенсор відстані. Основним елементом у ньому є світлочутливий елемент (фоторезистор або фототранзистор рис. 2.2).
Рисунок 2.2 – Будова датчика
У режимі вимірювання навколишнього освітлення, кількість світла, що потрапило на світлочутливий елемент, перетворюється в цифрове значення, яке вже використовується в програмі. Наприклад, з датчиком, що працює в цьому режимі, можна зібрати робота, який шукає саме освітлене місце у кімнаті як на рис.1.3.
Рисунок 2.3 – Принцип дії датчика
У режимі вимірювання відбитого кольору, крім світлочутливого елемента, активується світовипромінюючий елемент (світлодіод). Світло, випущене цим елементом, відбивається від якої-небудь поверхні і потрапляє назад у світлочутливий елемент.
Залежно від того наскільки світла відбиває поверхня, в світлочутливий елемент приходить більше світла. Ця кількість світла перетворюється в цифрове значення і передається в програму. Чим темніше поверхню, тим менше світла приходить - в програму приходять маленькі значення; чим світліше поверхню, тим більше світла приходить - програма оперує з великими значеннями.
Датчик світлочутливості являється
ПІД-регулятором. Пропорційно-інтегрально-
Якщо якісь із складових не використовуються, то регулятор називають пропорційно-інтегральним, пропорційно-диференціальним, пропорційним і т. п.
Призначення ПІД-регулятора - в підтримці заданого значення x0 деякої величини x за допомогою зміни іншої величини u. Значення x0 називається установкою, а різниця e = (x0 - x) - нев'язкої або неузгодженістю.
Вихідний сигнал регулятора u визначається трьома складовими:
де Кp, Кi, Кd - коефіцієнти посилення пропорційної, інтегральної і диференціальної складових регулятора, відповідно.
Пропорційна складова, відповідає за позиціонування системи у заданому стані. У певних випадках може викликати пере регулювання з послідуючими автоколиваннями. Тобто ПІД-регулятор може «перестаратися» і робота буде заносити із сторони у сторону.
Інтегральна складова накопичує від’ємний досвід (сумує помилки) і викликає компенсуючи дію. При найменших відхиленнях пропорційна складова «ослабіває» і інтегральна, за рахунок свого швидкого збільшення сумуванням, допомагає «дотягнути» установлену величину до встановленої.
Диференційна складова слідкує за швидкістю зміни стану системи і протидіє можливому пере регулюванню. В деяких випадках Д-складова має протилежний знак навідмінно пропорційної, а в деяких співпадає.
Розробка конструкції транспорт
ного засобу
На рис. 2.4 зображено структурну схему транспортного засобу на базі Lego NXT.
Рисунок 2.4 – Структурна схема
Наша программа в LabView, компілюється і передається на пристрій по каналу Bluetooth або за допомогою USB.
Lego Mindstorm має два мікроконтролери ARM7 і Atmega48, що взаємодіють між собою за допомогою інтерфейсу I2C.
Рисунок 2.5 – Внутрішня будова Lego NXT
Дисплей з’єднаний з ARM7 SPI-шиною. А Bluetooth шиною UART. До цього ж мікроконтроллера приєднаний динамік. Клавіші приєднані до Atmega48. До обох контролерів під’єднанні порти вводу/виводу.
На рисунку 1.6 зображений зовнішній вигляд транспортного засобу segway. Ця конструкція вибрана не випадково, адже від неї залежить на скільки стійкий буде наш транспортний засіб. Саме тому головний блок був закріплений як найнижче так як являється центром маси. До головного блоку Lego NXT ми додали мотори з колесами з кожного боку. З верху був закріплений «водій» на серводвигуні. Датчик освітленості був закріплений максимально близько до землі, перпендикулярно головному блоку.
Серводвигун що підключений до порту А знаходиться в рухомому стані, для того щоб можна було скоригувати центр маси робота. Після запуску програми він фіксується.
Рисунок 2.6 – Транспортний засіб segway
Діаметр колеса був вибраний не надто великий для більшої стійкості але й не надто малий для допустимої маневреності. Потрібно враховувати що під час руху робота по лінії велику роль грає відстань між колесами. Чим більша відстань тим більший радіус повороту. Датчик відстані що закріплений на самій верхівці робота, має декоративне призначення, проте при незначних змінах може додатково використовуватись для координації руху.
- Програмна частина
Алгоритм керування транспортни
м засобом
Рисунок 3.1 – Алгоритм керування
Спочатку ми фіксуємо мотор, що підключений до порту А. Далі через одну секунду вмикається датчик світла. Наступний крок – цикл, умовою виходу з якого є нерівність 100<x<-100, де x – керуючий сигнал. Якщо умова не виконується програма завершує свою роботу. Якщо ж керуючий сигнал задовольняє умові, отримуємо початкове значення датчику світла. Після цього подаємо звуковий сигнал, що підтверджує початок роботи програми. Далі отримуємо поточне значення датчику і вираховуємо різницю між початковим і поточним. Задаємо коефіцієнти і формуємо керуючий сигнал. Наступне що робить програма, перевіряє результат порівняння поточного і початкового значень. Якщо вони рівні, ми переходимо на цикл, що відповідає за рух сігвея вздовж чорної лінії. Якщо початкове значення більше за поточне, подаємо керуючий сигнал на мотори С і В, інакше ми подаємо реверсний сигнал. Після чого переходимо до циклу що відповідає за рух вздовж чорної лінії. Умовою якого є реакція датчику дотику. Доки він не спрацював ми повторюємо формувати керуючий сигнал і подавати його на двигуни, інакше знову переходимо на цикл, що відповідає за рівновагу.
Вибір програмного забезпечення для написання програми
Програмне забезпечення LEGO® MINDSTORMS® NXT дозволяє програмувати ваших NXT роботів і завантажувати програми NXT через USB або Bluetooth з'єднання. Інтуїтивне Mac і PC сумісне програмне забезпечення ,на базі National Instruments LabVIEW, постачається з інструкціями зборки та керівництв з програмування. Тому почати програмування з MINDSTORMS NXT досить легко.
Програма RoboLab фірми LEGO Dacta A / S дозволяємо зсередини вивчити робототехніку на основі NXT навчиться конструювати розумні керовані машини.
Програма RoboLab заснована на більш потужною програмою LabView - це потужна середовище програмування, що використовується інженерами і вченими в дослідницьких інститутах і промисловості.
У 1997 році, коли NASA розсекретила свою програму SOJOURNER ROVER'S, з'ясувалося, що для забезпечення орієнтації, приземлення і функціонування космічних апаратів застосовувалася програма LabVIEW National Instruments (Техас, США).
Програму розробили три гіганти:
Tufts University College of Engineering
LEGO Group
National Instruments LabVIEW
RoboLab - це спрощена модель
для програмування ЛЕГО-комп'
Він чимось нагадує Бейсік, Фортран або Сі, але головна відмінність RoboLab в тому, що він базується на графіку замість текстових рядків. Це означає, що LabVIEW заснований на логічному узгодженні уявлень і абсолютно не залежить від писемної мови.
У RoboLab ви зможете схематично будувати схеми і проводити розрахунки, після чого тестувати їх і переносити схему в програму NXT-G.
LabVIEW (англ. Laboratory Virtual Instrumentation Engineering Workbench) - це середовище розробки і платформа для виконання програм, створених на графічній мові програмування «G» фірми National Instruments (США). Перша версія LabVIEW була випущена в 1986 році для Apple Macintosh, в даний час існують версії для UNIX, Linux, Mac OS і пр., а найбільш розвиненими і популярними є версії для Microsoft Windows.
LabVIEW використовується в системах збору й обробки даних, а також для управління технічними об'єктами і технологічними процесами. Ідеологічно LabVIEW дуже близька до SCADA-системам, але на відміну від них більшою мірою орієнтована на вирішення завдань не стільки в області АСУ ТП, скільки в області АСНІ.
Реалізація програми керування
На рис. 3.2 зображена програма керування яка була розроблена у середовищі LabView. Окрім якого нам довелося використати плагін LabVIEW Toolkit.
Рисунок 3.2 – Программа керування
LEGO® MINDSTORMS® NXT Software 1.0 використовує графічний мову програмування NXT-G, це мова програмування на основі National Instruments LabVIEW 7.1. На високому рівні програмування блоків в NXT-G блок-схеми побудовані з більш низького рівня блок діаграми LabVIEW.
У кінцевому рахунку, NXT-G блоки це просто особливий вид VI, розроблені для використання з MINDSTORMS.
Використання LabVIEW Toolkit для Lego Mindstorms NXT з LabVIEW дозволяє обхід високого рівня обмежень, що накладаються NXT-G. Це інструмент дозволяє створювати передові програм з використанням ВП і завантажити їх на NXT. Крім того, LabVIEW надає більш розширені можливості редагування навколишнього середовища, ніж Lego Mindstorms NXT Software 1.0.
Для завантаження нашої програми потрібно ввімкнути мікрокомп’ютер NXT і відкрити нашу програму в середовищі LabView. Підключимо NXT через USB-порт або ввімкнемо Bluetooth.
Далі потрібно відкрити NXT Terminal, що знаходиться в Tools->NXT Tools->NXT Terminal.
Рисунок 3.3 – NXT Terminal
У з’явившомуся вікні потрібно вибрати Find NXT. Для того щоб знайти і підключити ваш NXT. Потрібно враховувати що при підключенні по Bluetooth пошук може зайняти досить тривалий період часу. Після того як всі пристрої будуть знайдені, потрібно виділити необхідний і натиснути Connect.
В NXT Terminal буде відображено інформацію про підключений мікрокомп’ютер. Після чого можна запускати програму в режимі відладки, або за допомогою команди File->Target to NXT ви зможете компілювати і завантажувати програми безпосередньо на NXT.
Рисунок 3.4 – Find NXT
Під час розробки даної програми ми використали деякі не стандартні для LabView блоки з тулкіту NXT:
- Це блок двигуна. У випадаючому списку якого можна призначити дію. У даному випадку це повна зупинка. Також до цього блоку потрібно підвести порт до якого підключений двигун. На малюнку він зазначений синьою лінією.
- Це датчик світла. До нього потрібно підвести порт (клема зверху), а також можна отримати значення(нижня клема справа).
-Цей блок відображає затримку.
Інтервал якої можна задати
числовим значенням під’
-Блок звукового супроводження.
Висновки
В результаті роботи над даним проектом, ми розробили алгоритм і програму для управління нестійкою транспортною системою Segway. В процесі розробки був використаний датчик світла для стабілізації об’єкту керування. Це є досить не типово на відміну від гіроскопа, але значно дешевше та простіше. Завдяки досягненням у галузях обробки інформації, машинного зору, теорії керування та цифрової обробки сигналів як на апаратному, так і на програмному рівнях ми змогли розробити систему яка може аналізувати та реагувати на динамічні зміни дорожніх умов. Розробка систем керування автономними транспортними засобами є актуальною задачею тому що забезпечує значно більшу безпеку та зручність ніж ручне керування.
Перелік посилань
- Белиовская Л.Г. Программируем микрокомпьютер NXT в LabView. − М.: ДМК Пресс, 2010. − 280 с.: ил.
- Бардов В.М, "Интеллектуальные системы управления и обработки данных.
- Тревис Д. LabView для всех. – 2011
- Жуков К. Модельное проектирование встраиваемых систем в LabVIEW
- Суранов А.Я. LabView Справочник по функциям. – 2011
- Mindstorms.su – http://mindstorms.su/index.
html. - Mindstorms – http://mindstorms.lego.com/
eng/default.aspx. - Wikipedia The Free Encyclopedia – http://ru.wikipedia.org/
- Образовательные инициативы – http://edu.holit.ua
Додаток А
Лістинг вихідного коду програми
Unit1.h
//----------------------------
#ifndef Unit1H
#define Unit1H
//----------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <ComCtrls.hpp>
#include <Dialogs.hpp>
//----------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TGroupBox *GroupBox1;
TLabel *Label1;
TComboBox *ComboBox1;
TLabel *Label2;
TComboBox *ComboBox2;
TSpeedButton *SpeedButton1;
TButton *Button3;
TButton *ButtonTest;
TButton *ButtonStop;
TEdit *EditSpeed;
TButton *ButtonMinus;
TButton *ButtonPlus;
TButton *ButtonReset;
TComboBox *ComboBoxShip;
TCheckBox *CheckBoxRevers;
TMemo *Memo2;
void __fastcall SpeedButton1Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall ButtonMinusClick(TObject *Sender);
void __fastcall ButtonPlusClick(TObject *Sender);
void __fastcall ButtonResetClick(TObject *Sender);
void __fastcall ComboBoxShipChange(TObject *Sender);
void __fastcall ButtonTestClick(TObject *Sender);
void __fastcall ButtonStopClick(TObject *Sender);
void __fastcall CheckBoxReversClick(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//----------------------------
extern PACKAGE TForm1 *Form1;
//----------------------------
#endif
Unit1.cpp
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//----------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
#define BUFSIZE 255 //ёмкость буфера
unsigned char bufrd[BUFSIZE], bufwr[BUFSIZE]; //приёмный и передающий буферы
//----------------------------
HANDLE COMport; //дескриптор порта
//структура OVERLAPPED необходима для асинхронных операций, при этом для операции чтения и записи нужно объявить разные структуры
//эти структуры необходимо
OVERLAPPED overlapped; //будем использовать для операций чтения (см. поток ReadThread)
OVERLAPPED overlappedwr; //будем использовать для операций записи (см. поток WriteThread)
bool fl=0; //флаг, указывающий на успешность операций записи (1 - успешно, 0 - не успешно)
bool bPortOpen = false;
unsigned long counter; //счётчик принятых байтов, обнуляется при каждом открытии порта
void COMOpen(void); //открыть порт
void COMClose(void); //закрыть порт
HANDLE reader; //дескриптор потока чтения из порта
HANDLE writer; //дескриптор потока записи в порт
DWORD WINAPI ReadThread(LPVOID);
DWORD WINAPI WriteThread(LPVOID);
void ReadPrinting(void);
//----------------------------
//главная функция потока, реализует приём байтов из COM-порта
DWORD WINAPI ReadThread(LPVOID)
{
COMSTAT comstat; //структура текущего состояния порта, в данной программе используется для определения количества принятых в порт байтов
DWORD btr, temp, mask, signal; //переменная temp используется в качестве заглушки
overlapped.hEvent = CreateEvent(NULL, true, true, NULL); //создать сигнальный объект-событие для асинхронных операций
SetCommMask(COMport, EV_RXCHAR); //установить маску на срабатывание по событию приёма байта в порт
while(1) //пока поток не будет прерван, выполняем цикл
{
WaitCommEvent(COMport, &mask, &overlapped); //ожидать события приёма байта (это и есть перекрываемая операция)
signal = WaitForSingleObject(
if(signal == WAIT_OBJECT_0) //если событие прихода байта произошло
{
if(GetOverlappedResult(
if((mask & EV_RXCHAR)!=0) //если произошло именно событие прихода байта
{
ClearCommError(COMport, &temp, &comstat); //нужно заполнить структуру COMSTAT
btr = comstat.cbInQue; //и получить из неё количество принятых байтов
if(btr)
{
ReadFile(COMport, bufrd, btr, &temp, &overlapped); //прочитать байты из порта в буфер программы
counter+=btr;
ReadPrinting();
}
}
}
}
}
void ReadPrinting()
{
memset(bufrd, 0, BUFSIZE); //очистить буфер (чтобы данные не накладывались друг на друга)
}
DWORD WINAPI WriteThread(LPVOID)
{
DWORD temp, signal; //temp - переменная-заглушка
overlappedwr.hEvent = CreateEvent(NULL, true, true, NULL); //создать событие
while(1)
{WriteFile(COMport, bufwr, 1, &temp, &overlappedwr); //записать байты в порт (перекрываемая операция!)
signal = WaitForSingleObject(
SuspendThread(writer);
}
}
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//----------------------------
//обработчик нажатия на кнопку "Открыть порт"
void __fastcall TForm1::SpeedButton1Click(
{
if(SpeedButton1->Down)
{
COMOpen(); //если кнопка нажата - открыть порт
//показать/спрятать элементы на форме

- Дозатор
- Дозвіллєва діяльність молодших школярів
- Дозиметрическое планирование лучевой терапии для трех клинических случаев
- Дозирование сыпучих матриалов
- Дозирование физических нагрузок в занятиях оздоровительной направленности
- Дозировочно-формовочное оборудование
- Дознаватель
- Догоор хранения
- Догоров дарения
- Догосударственное общество
- Додатковий капітал
- Додаткові підстави розірвання трудового договору з ініціативи роботодавця
- Додаткові послуги як фактор прибутку рессторану
- Додаток для автоматизації роботи готелю