Мехатронная колебательная система с компьютерным управлением

Разработка системы прямого компьютерного управления двузвенным мини-роботом на качелях. Использование сервопривода фирмы Hitec HS-85BB+ в качестве исполнительного механизма. Обратная связь с объектом управления через встроенную программную модель.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 20.10.2011
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

нормируемая освещенность - 300 лк;

показатель дискомфорта - < 40;

коэффициент пульсации освещения < 15 %.

Для освещения рабочих мест в учебной лаборатории можно использовать некоторые светильники серии ЛСО, ЛПО и другие. Для расчетов возьмем светильник типа ЛСО 02-2Х40/Р-02, который имеет следующие параметры:

· тип лампы ЛБ40;

· класс светораспределения Р;

· тип КССД;

· КПД 65%;

· защитный угол 30°;

· степень защиты 20;

· климатическое исполнение У4.

Расчет количества светильников

Количество светильников указанного типа должны обеспечивать необходимую нормируемую освещенность рабочих мест (300 лк). Для расчета числа светильников используется формула:

n = ЕnКзSz/ФлUОУ,

где

· Фл - общий световой поток, лм,

· z - неравномерность освещения,

· S - площадь помещения, м2,Кз - коэффициент запаса,

· Еn - необходимая нормируемая освещенность, лк,

· Uoy - коэффициент использования.

Параметры лаборатории:

S = 40 м2, Кз = 1,5 (в случае разрядных ламп), Еn = 300 лк,

Параметры светильников:

z = 1.1 (для люминесцентных ламп при расположении их в виде линий).

Для определения Uoy необходимо знать индекс помещения iп, коэффициенты отражения потолка, стен и пола, соответственно, рп, рс и рр.

Для заданного помещения эти значения равны:

iп =1.25, рп = 0.7, рс = 0,3, рр = 0.1.

Для этих значений и КСС светильника типа Д по соответствующим таблицам было найдено значение Uoy = 0.5.

Светильник ЛСО 02-2Х40/Р-02 состоит из двух ламп ЛБ40 со световым потоком 3200 лм, поэтому общий световой поток светильника Фл = 2x3200 лм= 6400 лм.

Расчет п по формуле 5.1:

n = (300 лк*1.5*40 м2*1.1) / (6400 лм*0.5) ? 6.

Таким образом, для обеспечения нормальной освещенности рабочих мест учебной лаборатории необходимы 6 светильников типа ЛСО 02-2Х40/Р-02.

6.4 Требования к параметрам дисплея

При разработке данного проекта использовался планшетный компьютер (ноутбук) с ЖК дисплеем фирмы Fujitsu. Размер дисплея - 13,3 дюйма (33,78 см). Рабочая разрешающая способность дисплея - 1024х768, что соответствует стандарту XGA. Яркость монитора - 280 кд/м2, что позволяет выставить наиболее комфортную яркость и соответствует приведенным выше требованиям к ВДТ. Частота обновления эквивалентна 120 Гц для ЭЛТ-мониторов (по требованиям приемлемая частота обновления - 75 Гц). Размер пикселя - 0,269 мм.

С позиций гигиены зрения компьютер предлагают устанавливать так, чтобы, подняв глаза от экрана, можно было увидеть самый удаленный предмет в комнате. Возможность перевести взгляд на дальнее расстояние - один из самых эффективных способов разгрузки зрительной системы во время работы с компьютером.

Ноутбук позволяет устанавливать дисплей наиболее удобным для пользователя образом. В процессе работы ноутбук был установлен на расстоянии 90 см от пользователя, что соответствует эргономическим требованиям.

Заключение

В процессе работы над проектом было произведено моделирование и произведена реализация и функциональное тестирование отдельных модулей компьютерной системы управления мехатронным колебательным объектом типа "качели", представляющим собой слабоуправляемую систему.

В процессе моделирования, которое производилось с использованием системы MatLab был выбран логический алгоритм управления. Была спроектирована и протестирована программная модель объекта управления, необходимая для организации виртуальной обратной связи.

Была произведена реализация логического задатчика управления и его функциональное тестирование.

В результате была доказана принципиальная возможность компьютерного управления слабоуправляемым объектом.

Список использованных источников

1. Новиков Ю.В., Калашников О.А., Гуляев С.Э. Разработка устройств сопряжения для персонального компьютера типа IBM PC. Практ. Пособие - М: ЭКОМ., 1997 - 224 с.

2. Колесников А.А. Синергетическая теория управления: концепция, методы, тенденции развития // Известия ТРТУ. Тематический выпуск "Синергетика и проблемы управления", 2001, № 5б с 7-27

3. Топчиев Б.В. Синергетическое управления мобильными роботами. "Нелинейный мир", вып. № 4, т.2, 2004г.

4. Малаян К.Р. Безопасность при работе с компьютером - СПб: Издательство СПбГПУ, 2002 - 124с.

5. Изерман, Р. Цифровые системы управления: Пер. с англ. - М: Мир, 1984 - 542 с.

6. Цыпкин, Яков Залманович. Теория нелинейных импульсных систем - М: Наука, 1973 - 414 с.

7. Черноусько Ф.Л., Акуленко Л.Д., Соколов Б.Н. Управление колебаниями - М: Наука, 1980 - 384с.

Приложение 1. Техническое задание

Программа "control_system"

Техническое задание

Листов 3

РП.68124-01

2009

Аннотация

Данный документ содержит задание на разработку программы управления мехатронным колебательным объектом типа "качели".

1. Введение

Программа "control_system. c" предназначена для управления двузвенным мини-роботом. В качестве исполнительного механизма используется сервопривод фирмы Hitec HS-85BB+. Для разработки, загрузки и запуск программы необходима ЭВМ с установленной ОС Linux с версией ядра 2.6.

2. Основания для разработки

Программа разрабатывается для лаборатории "Электромеханические системы".

3. Назначение разработки

Программа предназначена для анализа возможности прямого компьютерного управления сложными динамическими объектами с организацией обратной связи через модель.

4. Требования к программе

Требования к функциональным характеристикам

Программа должна выполнять следующие функции:

1) вычислять текущее положение объекта управления, используя его математическую модель

2) рассчитывать управление двигателем мини-робота по заранее известному закону (логический закон управления)

3) выдавать на LPT-порт ЭВМ управляющий сигнал в соответствии с рассчитанным значением управления.

4) считывать из конфигурационного файла параметры управления

Требования к надежности

Программа должна выполняться в режиме реального времени. Это осуществляется при помощи средств операционной системы.

Условия эксплуатации

Программа может функционировать в любых условиях пригодных для эксплуатации оборудования, на котором предполагается её использовать.

Требования к составу и параметрам технических средств

Программа должна быть рассчитана на использование на ЭВМ типа РС с процессором класса Pentium III 800 МГц и выше, ОЗУ 128 МВ, подсистемой графического вывода типа SVGA. Обязательно наличие операционной системы Linux с ядром версии не ниже 2.6 Связь с сервоприводом HS-85BB+ осуществляется с помощью специального кабеля.

Требования к транспортировке и хранению

Для транспортировки и хранения должны быть использованы накопители на основе гибких магнитных дисках класса 3,5 дюйма, отформатированные на 1.44МВ.

5. Требования к программной документации

С программой должны быть предоставлены следующие программные документы:

1) Техническое задание

2) Описание программы

3) Текст программы

4) Программа и методика испытаний

6. Технико-экономические показатели

С помощью программы должна быть достигнута возможность включения в цикл лабораторных работ работы по изучению прямого компьютерного управления. Программа не направлена на получение прямой экономической выгоды.

7. Стадии и этапы разработки

Программа должна быть разработана в срок до 31.12.2008 года.

8. Порядок контроля и приемки

Основные параметры приёмки:

стабильность работы при нескольких перезапусках (не менее 10 раз). Более подробно способ проверки описан в документе "Программа и методика испытаний".

Стабильность работы при различных параметрах запуска.

Приложение 2. Описание программы

Программа "control_system"

Описание программы

Листов 2

РП.68124-01.13 01

2009

Аннотация

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

1. Общие сведения

Программа "control_system" предназначена для управления двузвенным мини-роботом типа "качели", с исполнительным механизмом - сервоприводом Hitec HS-85BB+. Программа разработана на языке C. Для разработки, загрузки запуска программы необходима ЭВМ с установленной на ней операционной системой Linux с версией ядра не ниже 2.6.1.1 Так же ЭВМ должна быть оснащена параллельным (LPT) портом.

2. Функциональное назначение

Программа "control_system" предназначена для управления двузвенным мини-роботом. Программа получает данные о положении робота из встроенной виртуальной модели, формирует управляющее воздействие в соответствии с логическим алгоритмом управления движением маятника переменной длины и выдает управляющее воздействие через LPT-порт на исполнительный элемент (сервопривод).

3. Описание логической структуры

Описание алгоритма работы программы приведено в подразделе 4.3.

4. Используемые технические средства

Программа рассчитана на использование на ЭВМ типа РС с процессором класса Pentium III 800 МГц и выше, ОЗУ 128 МВ, подсистемой графического вывода типа SVGA. Обязательно наличие операционной системы Linux с ядром версии не ниже 2.6 Связь с сервоприводом HS-85BB+ осуществляется с помощью специального кабеля.

5. Вызов и загрузка

Включение питания системы осуществляется следующим образом:

· Включается ЭВМ с помощью кнопки питания

· Включается монитор

· Загружается операционная система Linux

· Если объект управления не подключен к LPT-порту - подключается объект управления.

· Поворотом тумблера включается блок питания. О включении должна сигнализировать красная лампа на блоке питания

· Установка готова к работе.

Вызов программы осуществляется следующим образом:

· Если программа отсутствует на ЭВМ - необходимо скопировать ее. Каталог, в котором находится программа, далее абсолютный путь к этой директории обозначим как %homedir.

· Проверить конфигурационный файл "control_system. cfg" и внести необходимые изменения

· В linux shell (bash, kshell или другом) запустить программу “%homedir/control_system. exe [time]". time - опциональный параметр запуска программы, определяющий время выполнения программы. По умолчанию программа будет выполняться 5 минут.

6. Выходные данные

В качестве выходных данных в работе программы в выходной файл "control_system. dat" выводятся последние 1000 точек в следующем формате:

метка_времени положениеу правление

где положение - текущее положение системы (угол поворота маятника), управление - угол поворота сервопривода в момент времени, обозначенный в метке_времени (измеряется в миллисекундах с момента старта программы).

Приложение 3. Текст программы

Программа "control_system"

Текст программы

Листов 4

РП.68124-01.12 01

2009

Аннотация

Данный документ содержит текст программы "control_system", которая предназначена для управления двузвенным мини-роботом, представляющим собой колебательную системы типа "качели". Документ содержит тексты основного файла "control_system. c", написанного на языке C.

Текст программы

/*********************************************************************

*

* control_system. c: программа управления сервоприводом

*

*

* Автор: Сичевая Э. А.

*

********************************************************************/

#include <stdio. h>

#include <stdlib. h>

#include <unistd. h>

#include <sched. h>

#include <errno. h>

#include <sys/io. h>

#include <pthread. h>

#include <math. h>

#define ge 9.8 // ускорение свободного падения

#define f00.5 // значение по умолчанию для начального угла

#define x04 // значение по умолчанию для начальной длины подвеса

#define dx00 // начальная скорость подвеса

#define ro0.15 // значение по умолчанию коэффициента трения

#define hd0.0002 // значение по умолчанию для шага интегрирования

#define md0.5 // значение по умолчанию для массы подвеса

// значения по умолчанию для геометрических параметров объекта управления

#define l110

#define l210

#define L22

/*

Структура для хранения информации о текущем положении точки,

а также текущем и предыдущем значении первой и второй производной

*/

typedef struct {

double val;

double d [2];

double d2 [2];

} point_data;

void SU_Regulator (point_data*, point_data*);

double SU_Converter (double x);

int main (int argc, char* argv [])

{

/* Для значений положения и угла */

point_datax, f;

int iter, i;

double h, m;

struct timespec TimeSpec;

struct sched_param SchedParam;

struct timespec ttt, ret;

FILE *pFOut;

int nNumIter, nDivider;

nNumIter = 1000000;

nDivider = 100;

h = hd;

m = md;

/*

открываем выходной файл для перезаписи

*/

if ( (pFOut = fopen ("output. dat","w")) == NULL)

{

if ( (pFOut = fopen ("output. dat","a")) == NULL)

{

printf ("Cannot open file. failed");

return - 1;

}

}

/*обнуляем значения структур*/

memset (&SchedParam, 0, sizeof (struct sched_param));

memset (&TimeSpec, 0, sizeof (struct timespec));

memset (&ttt, 0, sizeof (struct timespec));

memset (&ret, 0, sizeof (struct timespec));

SchedParam. sched_priority = 2;

/*

производим вычисления

*/

/*выставляем дисциплину управления*/

if (sched_setscheduler (0, SCHED_FIFO, &SchedParam))

{

printf ("Error while setting scheduler parameters, exiting. \n");

return - 1;

}

/*получаем привелегии для доступа к устройствам ввода-вывода*/

if (ioperm (LPT_BASE, 1, 1))

{

printf ("Error while obtaining IO permissions, exiting. \n");

return - 1;

}

/*

устанавливаем начальные значения

*/

x. d2 [0] = 0;

x. d [0] = dx0;

x. val = x0;

f. d2 [0] = 0;

f. d [0] = 0;

f. val = f0;

ttt. tv_sec = 0;

ttt. tv_nsec = 15000000;

TimeSpec. tv_sec = 0;

TimeSpec. tv_nsec = 66666; // количество микросекунд, приходящихся на 1 градус

for (iter = 0; iter < nNumIter; iter++)

{

/*выводим 1 в 1 дата-вывод LPT-порта*/

outb (0x01, LPT_BASE);

/*ждем до окончания импульса в зависимости от выводимого угла (по таблице angle_var) */

for (i = 0; i < (int) f. val; i++)

{

nanosleep (&TimeSpec);

}

outb (0x00, LPT_BASE);

/*

вычисления текущего положения модели

*/

f. d2 [1] = x. d [0] *f. d [0] /x. val - ge*f. val/x. val - (ro * f. d [0]) / (m*x. val*x. val);

f. d [1] = f. d [0] + h/2 * (f. d2 [1] +f. d2 [0]);

f. val = f. val + h/2 * (f. d [1] + f. d [0]);

f. d2 [0] = f. d2 [1];

f. d [0] = f. d [1];

if (! (iter % nDivider))

{

SU_Regulator (&x, &f);

fprintf (pFOut, "%i \t %f \t %f \t %f \t %f \t\n", iter, f. val, x. val, x. d [1], SU_Converter (x. val));

}

/*засыпаем на 15 мс*/

nanosleep (&ttt, NULL);

}

return 0;

}

/**************************************************************************

*

* void SU_Regulator (point_data* x, point_data* f)

* Описание функции: Функция регулятора. Производит вычисление

*значения управляющего сигнала.

*

* Входные параметры: f - указатель на структуру типа point_data, в

*которой хранятся значения угла подвеса,

*его скорости и ускорения

* Выходные параметры: x - указатель на структуру типа point_data, в

*которой хранятся значения положения подвеса,

*его скорости и ускорения - сигнал управления

*

**************************************************************************/

void SU_Regulator (point_data* x, point_data* f)

{

doubleampl_f, /* амплитуда колебаний */

k_ampl, /* коэффициент усиления регулятора ускорения */

A_ampl, /* дополнительный коэфициент */

u_reg; /* управление */

signedsDf,/* Знак скорости изменения угла */

sF,/* Знак угла */

sD2x; /* Знак ускорения изменения положения подвеса */

k_ampl = 5;

A_ampl = 0.3;

/* Вычисляем знаки углов */

sDf = (f->d [1] > 0);

sF= (f->val> 0);

sD2x = sDf ^ sF; /* XOR */

sD2x = sD2x * 2 - 1; /* Приводим к базису (1; - 1) */

/* Вычисляем амплитуду угла */

ampl_f = (k_ampl*A_ampl) * (A_ampl - fabs (f->val));

x->d2 [1] = ampl_f*sD2x;

x->d [1] = x->d [0] + h/2 * (x->d2 [1] + x->d2 [0]);

x->val = x->val + h/2 * (x->d [1] + x->d [0]);

x->d2 [0] = x->d2 [1];

x->d [0] = x->d [1];

u_reg = f->d [1] * x->d [1];

return;

}

/**************************************************************************

*

* void SU_Regulator (point_data* x, point_data* f)

* Описание функции: Функция преобразования значения положения подвеса

*в угол поворота исполнительного механизма.

*

* Входные параметры: x - значение положения подвеса

*

* Выходные параметры: фактический угол поворота исполнительного механизма

*

**************************************************************************/

double SU_Converter (double x)

{

return acos ( ( (l1*l1) + (l2*l2) - (L-x) * (L-x)) / (2*l1*l2));

}

Приложение 4. Программа и методика испытаний

Программа "control_system"

Программа и методика испытаний

Листов 2

РП.68124-01.51 01

Аннотация

Данный документ содержит методику испытаний программы "control_system", которая предназначена для управления двузвенным мини-роботом типа "качели". Испытания программы представлены в пункте 4.4 пояснительной записки.

1. Объект испытания

Объектом испытания выступает программа "control_system". Программа "control_system" предназначена для управления двузвенным мини-роботом типа "качели".

2. Цель испытаний

Цель испытаний - соотсве6тствие программы техническому заданию.

3. Требования к программе

Программа должна соответствовать функциональным характеристикам, приведенным в техническом задании.

4. Требования к программной документации

К моменту испытаний должны быть представлены следующие программные документы:

1) Техническое задание

2) Описание программы

3) Программа и методика испытаний

5. Средства и порядок испытаний

Для проведения испытаний необходимо иметь все технические средства, указанные в описании программы.

6. Программа и методика испытаний

В первую очередь необходимо произвести частичное функциональное тестирование программы. Убедиться, что программа производит управления сервоприводом в заданной последовательности от 0 до 180 градусов включительно. Убедиться, что программа формирует корректный управляющий сигнал.

7. Представление результатов испытаний

Представление удобнее всего делать с помощью графиков, формируемых из данных, выводимых в файл результатов программы.

Приложение 5. Текст программы тестовой модели

/*********************************************************************

*

* control_model. cpp: файл содержит функции, используемые для исследования

*корректности модели робота и дискретной системы

*управления.

*

* Автор: Сичевая Э. А.

*

********************************************************************/

#include "stdafx. h"

#include "math. h"

#define ge 9.8

#define f00.5

#define x04

#define dx00

#define ro0.15

#define h0.0002

#define m0.5

#define h0.0002

#define l11

#define l21

#define L4

/*

Структура для хранения информации о текущем положении точки,

а также текущем и предыдущем значении первой и второй производной

*/

typedef struct {

double val;

double d [2];

double d2 [2];

} point_data;

void SU_Regulator (point_data*, point_data*);

double SU_Converter (double x);

int main (int argc, char* argv [])

{

/* Для значений положения и угла */

point_datax, f;

int iter;

FILE *pFOut;

int nNumIter, nDivider;

/*

считываем аргументы командной строки,

иначе - заполняем значениями по умолчанию

*/

nNumIter = 1000000;

nDivider = 100;

/*

устанавливаем начальные значения

*/

x. d2 [0] = 0;

x. d [0] = dx0;

x. val = x0;

f. d2 [0] = 0;

f. d [0] = 0;

f. val = f0;

/*

открываем выходной файл для перезаписи

*/

if ( (pFOut = fopen ("output. dat","w")) == NULL)

{

if ( (pFOut = fopen ("output. dat","a")) == NULL)

{

printf ("Cannot open file. failed");

return - 1;

}

}

/*

производим вычисления

*/

for (iter = 0; iter < nNumIter; iter++)

{

/*

вычисления текущего положения модели

*/

f. d2 [1] = x. d [0] *f. d [0] /x. val - ge*f. val/x. val - (ro * f. d [0]) / (m*x. val*x. val);

f. d [1] = f. d [0] + h/2 * (f. d2 [1] +f. d2 [0]);

f. val = f. val + h/2 * (f. d [1] + f. d [0]);

f. d2 [0] = f. d2 [1];

f. d [0] = f. d [1];

if (! (iter % nDivider))

{

SU_Regulator (&x, &f);

fprintf (pFOut, "%i \t %f \t %f \t %f \t %f \t\n", iter, f. val, x. val, x. d [1], SU_Converter (x. val));

}

}

return 0;

}

/**************************************************************************

*

* void SU_Regulator (point_data* x, point_data* f)

* Описание функции: Функция регулятора. Производит вычисление

*значения управляющего сигнала.

*

* Входные параметры: f - указатель на структуру типа point_data, в

*которой хранятся значения угла подвеса,

*его скорости и ускорения

* Выходные параметры: x - указатель на структуру типа point_data, в

*которой хранятся значения положения подвеса,

*его скорости и ускорения - сигнал управления

*

**************************************************************************/

void SU_Regulator (point_data* x, point_data* f)

{

doubleampl_f, /* амплитуда колебаний */

k_ampl, /* коэффициент усиления регулятора ускорения */

A_ampl, /* дополнительный коэфициент */

u_reg; /* управление */

signedsDf,/* Знак скорости изменения угла */

sF,/* Знак угла */

sD2x; /* Знак ускорения изменения положения подвеса */

k_ampl = 5;

A_ampl = 0.3;

/* Вычисляем знаки углов */

sDf = (f->d [1] > 0);

sF= (f->val> 0);

sD2x = sDf ^ sF; /* XOR */

sD2x = sD2x * 2 - 1; /* Приводим к базису (1; - 1) */

/* Вычисляем амплитуду угла */

ampl_f = (k_ampl*A_ampl) * (A_ampl - fabs (f->val));

x->d2 [1] = ampl_f*sD2x;

x->d [1] = x->d [0] + h/2 * (x->d2 [1] + x->d2 [0]);

x->val = x->val + h/2 * (x->d [1] + x->d [0]);

x->d2 [0] = x->d2 [1];

x->d [0] = x->d [1];

u_reg = f->d [1] * x->d [1];

return;

}

/**************************************************************************

*

* void SU_Regulator (point_data* x, point_data* f)

* Описание функции: Функция преобразования значения положения подвеса

*в угол поворота исполнительного механизма.

*

* Входные параметры: x - значение положения подвеса

*

* Выходные параметры: фактический угол поворота исполнительного механизма

*

**************************************************************************/

double SU_Converter (double x)

{

return acos ( ( (l1*l1) + (l2*l2) - (L-x) * (L-x)) / (2*l1*l2));

}

Приложение 6. Текст программы программного управления сервоприводом

/*********************************************************************

*

* model. cpp: программа управления сервоприводом

*

*

* Автор: Сичевая Э. А.

*

********************************************************************/

#include "stdafx. h"

#include <math. h>

#define ge 9.8 // ускорение свободного падения

#define f00.5 // значение по умолчанию для начального угла

#define x04 // значение по умолчанию для начальной длины подвеса

#define dx00 // начальная скорость подвеса

#define ro0.15 // значение по умолчанию коэффициента трения

#define h0.0002 // значение по умолчанию для шага интегрирования

#define m0.5 // значение по умолчанию для массы подвеса

// значения по умолчанию для геометрических параметров объекта управления

#define l110

#define l210

#define L22

/*

Структура для хранения информации о текущем положении точки,

а также текущем и предыдущем значении первой и второй производной

*/

typedef struct {

double val;

double d [2];

double d2 [2];

} point_data;

void SU_Regulator (point_data*, point_data*);

double SU_Converter (double x);

int main (int argc, char* argv [])

{

/* Для значений положения и угла */

point_datax, f;

int iter, i;

double h, m;

FILE *pFOut;

int nNumIter, nDivider;

nNumIter = 1000000;

nDivider = 100;

/*

открываем выходной файл для перезаписи

*/

if ( (pFOut = fopen ("output. dat","w")) == NULL)

{

if ( (pFOut = fopen ("output. dat","a")) == NULL)

{

printf ("Cannot open file. failed");

return - 1;

}

}

/*

производим вычисления

*/

/*

устанавливаем начальные значения

*/

x. d2 [0] = 0;

x. d [0] = dx0;

x. val = x0;

f. d2 [0] = 0;

f. d [0] = 0;

f. val = f0;

for (iter = 0; iter < nNumIter; iter++)

{

/*

вычисления текущего положения модели

*/

f. d2 [1] = x. d [0] *f. d [0] /x. val - ge*f. val/x. val - (ro * f. d [0]) / (m*x. val*x. val);

f. d [1] = f. d [0] + h/2 * (f. d2 [1] +f. d2 [0]);

f. val = f. val + h/2 * (f. d [1] + f. d [0]);

f. d2 [0] = f. d2 [1];

f. d [0] = f. d [1];

if (! (iter % nDivider))

{

SU_Regulator (&x, &f);

fprintf (pFOut, "%i \t %f \t %f \t %f \t %f \t\n", iter, f. val, x. val, x. d [1], SU_Converter (x. val));

}

}

return 0;

}

/**************************************************************************

*

* void SU_Regulator (point_data* x, point_data* f)

* Описание функции: Функция регулятора. Производит вычисление

*значения управляющего сигнала.

*

* Входные параметры: f - указатель на структуру типа point_data, в

*которой хранятся значения угла подвеса,

*его скорости и ускорения

* Выходные параметры: x - указатель на структуру типа point_data, в

*которой хранятся значения положения подвеса,

*его скорости и ускорения - сигнал управления

*

**************************************************************************/

void SU_Regulator (point_data* x, point_data* f)

{

doubleampl_f, /* амплитуда колебаний */

k_ampl, /* коэффициент усиления регулятора ускорения */

A_ampl, /* дополнительный коэфициент */

u_reg; /* управление */

signedsDf,/* Знак скорости изменения угла */

sF,/* Знак угла */

sD2x; /* Знак ускорения изменения положения подвеса */

k_ampl = 5;

A_ampl = 0.3;

/* Вычисляем знаки углов */

sDf = (f->d [1] > 0);

sF= (f->val> 0);

sD2x = sDf ^ sF; /* XOR */

sD2x = sD2x * 2 - 1; /* Приводим к базису (1; - 1) */

/* Вычисляем амплитуду угла */

ampl_f = (k_ampl*A_ampl) * (A_ampl - fabs (f->val));

x->d2 [1] = ampl_f*sD2x;

x->d [1] = x->d [0] + h/2 * (x->d2 [1] + x->d2 [0]);

x->val = x->val + h/2 * (x->d [1] + x->d [0]);

x->d2 [0] = x->d2 [1];

x->d [0] = x->d [1];

u_reg = f->d [1] * x->d [1];

return;

}

/**************************************************************************

*

* void SU_Regulator (point_data* x, point_data* f)

* Описание функции: Функция преобразования значения положения подвеса

*в угол поворота исполнительного механизма.

*

* Входные параметры: x - значение положения подвеса

*

* Выходные параметры: фактический угол поворота исполнительного механизма

*

**************************************************************************/

double SU_Converter (double x)

{

return acos ( ( (l1*l1) + (l2*l2) - (L-x) * (L-x)) / (2*l1*l2));

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.