Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Записка

.pdf
Скачиваний:
1
Добавлен:
12.02.2016
Размер:
2.92 Mб
Скачать

Висновок

В даній роботі розроблено пристрій автоматичного керування циклічним роботом на основі мікроконтролера АT89S8252 компанії ATMEL. Опираючись на технічні характеристики робота, особливості його конструкції та принцип роботи було створено програму на мові С, котра з допомогою чотирьох перемикачів організовує рух робочого органу на наперед задану кількість кроків,

крок вперед - крок назад та зміну напряму закручення торсіона. Схема керування роботом містить сигнальний світло діод, котрий загоряється, коли відбувся збій і необхідне вручання людини.

Розроб.

Рольський В.Б

 

 

 

 

Арк.

Перев.

Мушеник П. І.

 

 

КПМВМЗ 0909910.07

ПЗ

22

 

 

 

 

 

Зм.

Арк.

№ Докум.

Підпис

Дата

 

 

 

 

 

 

 

 

 

 

 

Список використаної літератури:

1. Ключковський С.М. Розробка і дослідження універсального транспортно-

подавального модуля для поліграфічних машин і автоматичних ліній , Львів ,

1994.

2.Теорія автоматичного керування./Под ред. Воронова А.А.-М., Высш.шк.

3.Книга В.І. Захарова і М.П. Васильєва “ Промислові роботи”

4.Макаров І.М., Менський Б.М. Лінійні автоматичні системи.-М.:

Машинобудування, 1982.

5. Воронов А. А., Основи теорії автоматичного управління, ч.3, М. - Л., 1970.

Розроб.

Рольський В.Б

 

 

 

 

Арк.

Перев.

Мушеник П. І.

 

 

КПМВМЗ 0909910.07

ПЗ

23

 

 

 

 

 

Зм.

Арк.

№ Докум.

Підпис

Дата

 

 

 

 

 

 

 

 

 

 

 

Додатки

Додаток 1. Код основної програми на мові С

#include <reg52.h> #include "utils.h"

sfr Indicator_state = 0x90; sfr Buttons_state = 0xA0;

uint8_t state=0;

bit Button_1 = 0; bit Button_2 = 0; bit Button_3 = 0; bit Button_4 = 0;

 

uint8_t Step_Number_Max = 20;

// кількість кроків в функції;

 

 

 

 

 

крок - оберт верхнього або нижнього диска

 

uint8_t

Step_Number =0; // поточна кількість кроків

sbit

TorsionTorque = P0^0;

// моніторить напрям закручення торсіона

sbit

Relay_1 = P2^6;

// при встановленому біті реле 1 спрацьовує

sbit

Relay_2 = P2^7;

// при встановленому біті реле 2 спрацьовує

sbit

Indicator_1 = P1^0;

 

//біт, який =1 коли диск знаходиться в

 

 

 

положенні, готовому до включання реле; при диску1

sbit

Indicator_2 = P1^1;

 

// - // - при диску2

sbit

Err

= P1^2;

 

// сигнальний діод

 

void main(void)

{

// Ініціалізація

TorsionTorque = 1; //задаємо напрям закручення торсіона Relay_1 = 0; //обидва реле не увімкнені

Relay_2 = 0;

Err = 0; // помилок немає

InitUtils();

//який перемикач натиснуто?

while(1)

Розроб. Рольський В.Б

Арк.

Перев.

Мушеник П. І.

КПМВМЗ 0909910.07 ПЗ

24

 

 

Зм.

Арк.

№ Докум. Підпис Дата

 

 

 

 

 

 

 

{

Buttons_state = 0x0F;

state = Buttons_state&0x0F; Button_1 = state&0x01; Button_2 = state&0x02; Button_3 = state&0x04; Button_4 = state&0x08;

if (Button_1)

{

Move_Clockwise(TorsionTorque);

}else if (Button_2)

{

Move_CounterClockwise(TorsionTorque);

}else if (Button_3)

{

Move_OneStep(TorsionTorque); } else if (Button_4)

{

Change_TorsionTorque(TorsionTorque);

}

if (!Indicator_1 && !Indicator_2)

{

Err = 1; //вмикаємо сигнальний діод - помилка робота!

}

}

}

 

 

 

 

 

 

 

void Move_Clockwise (uint8_t TorsionTorque)

// оберт дисків за год

 

 

 

 

 

 

 

стілкою

 

{

 

 

 

 

 

 

 

 

while (Step_Number < Step_Number_Max)

 

 

 

 

{

 

 

 

 

 

 

 

 

if (TorsionTorque == 1)

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

Upper_Disk_Routing(TorsionTorque);

 

 

 

 

} else

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

Lower_Disk_Routing(TorsionTorque);

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Розроб.

Рольський В.Б

 

 

 

 

 

Арк.

Перев.

Мушеник П. І.

 

 

 

КПМВМЗ 0909910.07 ПЗ

25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Зм.

Арк.

№ Докум.

Підпис

Дата

 

 

 

 

 

 

 

 

 

 

 

 

Step_Number++;

}

}

void Move_CounterClockwise (uint8_t TorsionTorque) // оберт дисків проти год стрілки

{

while (Step_Number < Step_Number_Max)

{

if (TorsionTorque == 1)

{

Lower_Disk_Routing(TorsionTorque);

} else

{

Upper_Disk_Routing(TorsionTorque);

}

Step_Number++;

}

}

 

 

 

 

 

 

 

 

 

void Move_OneStep (uint8_t TorsionTorque)

// оберт дисків на

 

 

 

 

 

 

 

крок за і крок проти год стрілки

 

{

 

 

 

 

 

 

 

 

 

 

while (Step_Number < 3)

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

if (TorsionTorque == 1)

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

Upper_Disk_Routing(TorsionTorque);

 

 

 

 

 

} else

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

Lower_Disk_Routing(TorsionTorque);

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

Step_Number++;

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

void Change_TorsionTorque (uint8_t TorsionTorque)

// зміна напряму

 

 

 

 

 

 

 

 

 

закручення торсіона

 

{

 

 

 

 

 

 

 

 

 

 

if (TorsionTorque == 1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Розроб.

Рольський В.Б

 

 

 

 

 

 

 

Арк.

Перев.

Мушеник П. І.

 

 

 

КПМВМЗ 0909910.07 ПЗ

 

26

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Зм.

Арк.

№ Докум.

Підпис

Дата

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

Lower_Disk_Routing(TorsionTorque); } else

{

Upper_Disk_Routing(TorsionTorque);

}

}

uint8_t Upper_Disk_Routing (uint8_t TorsionTorque) // оберт верхнього диска на 1 крок. Нижній нерухомий

{

while (Indicator_2 && Indicator_1)

{

Relay_1 = 1; Indicator_1 = 0; Delay(50); Relay_1 = 0; Indicator_1 = 1;

if (TorsionTorque == 1)

{

TorsionTorque = 0;

return !TorsionTorque; // поветраємо збережений і оновлений напрямок закручення торсіона

} else

{

TorsionTorque = 1; return TorsionTorque;

}

return P0^0;

}

 

}

 

uint8_t Lower_Disk_Routing (uint8_t TorsionTorque)

// оберт нижнього

диска на 1 крок. Верхній нерухомий

{

while (Indicator_1 && Indicator_2)

{

Relay_2 = 1; // спрацьовує реле 2, вмикає електромагніт 2

Розроб. Рольський В.Б

Арк.

Перев.

Мушеник П. І.

КПМВМЗ 0909910.07 ПЗ

27

 

 

Зм.

Арк.

№ Докум. Підпис Дата

 

 

 

 

 

 

 

Indicator_2 = 0; // розмикає на певний час індикатор положення диска

Delay(50); // час, потрібний для зміни моменту закручення торсіона - робот робить 1 цикл

Relay_2 = 0; //реле відключає електромагніт

Indicator_2 = 1; // електромагніт після спрацювання відпускає напрямну, котра включає індикатор

if (TorsionTorque == 1) // змінюється напрямок моменту закручення торсіона

{

TorsionTorque = 0;

return !TorsionTorque; // поветраємо збережений і оновлений напрямок закручення торсіона

} else

{

TorsionTorque = 1; return TorsionTorque;

}

}

}

Розроб.

Рольський В.Б

 

 

 

 

Арк.

Перев.

Мушеник П. І.

 

 

КПМВМЗ 0909910.07

ПЗ

28

 

 

 

 

 

Зм.

Арк.

№ Докум.

Підпис

Дата

 

 

 

 

 

 

 

 

 

 

 

Додаток 2. Код файлу Utils.h

#ifndef _UTILS_H #define _UTILS_H

#include "types.h"

void InitUtils(void);

void Delay(uint16_t msDelay);

void StartTimer(uint16_t msDelay); uint8_t CheckTimer();

uint8_t Upper_Disk_Routing (uint8_t TorsionTorque); uint8_t Lower_Disk_Routing (uint8_t TorsionTorque);

void Move_Clockwise (uint8_t TorsionTorque);

void Move_CounterClockwise (uint8_t TorsionTorque); void Move_OneStep (uint8_t TorsionTorque);

void Change_TorsionTorque (uint8_t TorsionTorque);

#endif

Розроб.

Рольський В.Б

 

 

 

 

Арк.

Перев.

Мушеник П. І.

 

 

КПМВМЗ 0909910.07

ПЗ

29

 

 

 

 

 

Зм.

Арк.

№ Докум.

Підпис

Дата