Управление ракетной техникой

Разработка комплекса программных средств управления летательными аппаратами. Контроль измерения параметров полёта. Сохранение информации во флеш-памяти на борту ракеты. Структура данных модуля навигации. Специфика операционных систем в микроконтроллерах.

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

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

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

BottLED();

}

break;

case 2://PF5 P

code = BUT_GetBut();//берем код события

if (code==3)//одинарное отпускание

{

angleP=700;

BottLED();

}else

if (code==5) //двойное

{

angleP=2300;

BottLED();

}

break;

case 3://PF6 CS2

code = BUT_GetBut();//берем код события

if (code==3)//одинарное отпускание

{

angleCS2=700;

BottLED();

}else

if (code==5) //двойное

{

angleCS2=2300;

BottLED();

}

break;

case 4://PF7 PH

code = BUT_GetBut();//берем код события

if (code==3)//одинарное отпускание

{

anglePH=700;

BottLED();

}else

if (code==5) //двойное

{

anglePH=2300;

BottLED();

}

break;

}

uxHighWaterMark = uxTaskGetStackHighWaterMark( NULL );

//printf(" Polling WaterMark %u ", uxHighWaterMark);

}

}

//Подпрограмма-обработчик прерывания по приходу байта с GPS

ISR(USART0_RX_vect)

{

u8 val=UDR0;

/*if ( val!='A'){//if ( UDR0!=lf){ //<CR> - Возврат каретки (0x0D) - добавим,<LF> - Подача строки - не будем уже передавать в очередь,

FBuf.GPS_Buf[FBuf.GPS_idxIN++] =val;

FBuf.GPS_idxIN &= sizeof(FBuf.GPS_Buf)/sizeof(FBuf.GPS_Buf[0])-1;//BUF_MASK;

}

else //а выставим семафор - из очереди можно изъять байты

{

printf(" ISR bits ");

xEventGroupSetBits(FBuf.GPSEventGroupSdOrCC, (1<<1)|(1<<0));

//xSemaphoreGiveFromISR(GPS_Ready, NULL);

}*/

//if (rand(10)==1)

{//Это тестовый код, рабочий - сверху

for (int i = 48; i<59;i++){

FBuf.GPS_Buf[FBuf.GPS_idxIN++] =i;

FBuf.GPS_idxIN &= sizeof(FBuf.GPS_Buf)/sizeof(FBuf.GPS_Buf[0])-1;}

FBuf.GPS_Buf[FBuf.GPS_idxIN++] ='a';

FBuf.GPS_idxIN &= sizeof(FBuf.GPS_Buf)/sizeof(FBuf.GPS_Buf[0])-1;FBuf.GPS_Buf[FBuf.GPS_idxIN++] ='A';

FBuf.GPS_idxIN &= sizeof(FBuf.GPS_Buf)/sizeof(FBuf.GPS_Buf[0])-1;

printf(" ISR bits ");

xEventGroupSetBits(FBuf.GPSEventGroupSdOrCC, (1<<1)|(1<<0));}

}

void uart_Init( void )

{

UBRR0H = GPS_BAUD_PRESCALE >> 8; // Load upper 8-bits of the baud rate value into the high byte of the UBRR register

UBRR0L = GPS_BAUD_PRESCALE; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register

//8 бит данных, 1 стоп бит, без контроля четности

UCSR0C = ( 1 << UCSZ1 ) | ( 1 << UCSZ0 ); //( 1 << URSEL ) |

//разрешить прием, передачу данных и прерывание по приёму байта

UCSR0B = ( 1<<RXCIE )| ( 1 << TXEN ) | ( 1 <<RXEN );

}

/*инициализация SPI модуля в режиме master*/

void SPI_Init(void)

{

/*настройка портов ввода-вывода

все выводы, кроме MISO выходы*/

DDRB |= (1<<SPIC_MOSI)|(1<<SPIC_SCLK)|(1<<SPIC_CS)|(0<<SPIC_MISO);

PORTB |= (1<<SPIC_MOSI)|(1<<SPIC_SCLK)|(1<<SPIC_CS)|(1<<SPIC_MISO);

DDRD|=1<<SPIC_extraCS;

PORTD|=1<<SPIC_extraCS;

/*разрешение spi,старший бит вперед,мастер, режим 0, частота 16M/4=4MHz*/

SPCR = (1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)|(0<<SPR1)|(0<<SPR0);

SPSR = (0<<SPI2X);

}

u16 RTC_500msDetection;

ISR(TIMER2_COMP_vect){//T=10ms

RTC_500msDetection++;//32.768 кГц dt26

if (RTC_500msDetection==49) {

RTC_TimeMult++;//увеличиваем множитель времени по основанию 500ms

xSemaphoreGive( RTC_Time_Ready );//Семафорим, что пора выписать время

RTC_500msDetection=0;

}

PORTG ^= (1<<PG2);

mmc_disk_timerproc();//FatFs дела

BUT_Poll();//опросить кнопки

FRESULT open_append (

FIL* fp, // [OUT] File object to create

const char* path // [IN] File name to be opened

)

{

FRESULT fr;

/* Opens an existing file. If not exist, creates a new file. */

fr = f_open(fp, path, FA_WRITE | FA_OPEN_ALWAYS);

if (fr == FR_OK) {

/* Seek to end of the file to append data */

fr = f_lseek(fp, f_size(fp));

if (fr != FR_OK)

f_close(fp);

}

return fr;

}

void vADCStart( void *pvParameters )//Инициализация и запуск ADC

{

ADMUX = 0b00000000;//// Internal Vref turned off, выравнивание по правой границе 7й канал, 10бит

ADCSRA |= (1<<ADEN)|(0<<ADSC)|(0<<ADFR)|(0<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);//вкл adc, не запустить первое преобраз, непрер режим прерыван выкл (ADFR), ADCпрерывание выкл, делитель 128 (62.5kHz)

TickType_t xLastWakeTime;

const TickType_t xFrequency = 2000;//ms

xLastWakeTime=xTaskGetTickCount();

unsigned short ADCdata;

float voltage;

for( ;; )

{

ADCSRA |= 1<<ADSC;//начать новое преобразование (раз в ~50 ms)

vTaskDelay(1);//Пусть другие повыполняются 1 такт диспетчера

while (!(ADCSR & 1<<ADIF));//ждать флага прерывания по готовности ацп

ADCdata = ADCW; // В ADCW хранится напряжение в двоичном коде

voltage = ADCdata * 0.0048876; // 5 вольт / 1023 = 4.8875

//прерывание ADC, ring buffer

FBuf.ADC_Buf[FBuf.ADC_idxIN++] =ADCdata;

FBuf.ADC_idxIN &= sizeof(FBuf.ADC_Buf)/sizeof(FBuf.ADC_Buf[0])-1;

vTaskDelayUntil(&xLastWakeTime,xFrequency);

}

}

void Timer2_10ms(void)//ATmega128 ButtUpdate_and_FatFsUpdate_Driver

{

//Таймер2 - 10ms для FatFs и кнопок

TCCR2 |= (1<<WGM21) |(1<<CS22)|(0<<CS21)|(1<< CS20);//CTC, предделитель 1024, то 7812,5Hz таймер

//нужно 10ms

OCR2=77;//р-р сравнения

//TCCR2 |= (1<< CS20);//CTC, предделитель 64, то 125kHz таймер

TIMSK |= 1<<OCIE2;//Разрешить прерывание

}

ISR(INT7_vect){//Чеки PE7 прерывание по переходу низкий->высокий

if (PINE & 1<<PE7){

//vTaskSuspend(PollingFromButt_lib_Handle);нельзя из-под ISR! //засыпаем (кнопки серв уже не нужны)

xTaskResumeFromISR(BottLED_Handle);//моргнуть vBottLED -> PORTG |= (1<<PG0);

xTaskResumeFromISR(ADC_Handle);//Начать юзать ADC vADCStart

xTaskResumeFromISR(FatFsWrite_Handle);//Начать бэкапить на SD vFatFsWrite

xTaskResumeFromISR(CCWrite_Handle);//Начать бэкапить на CC vCCWrite

xTaskResumeFromISR(FligthServo_Handle);//Начать выбрасывать кансаты и открывать парашют vFligthServo

}

}

//внешние прерывания http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh128/8.htm

void ChecaInit(){

//Если на PE7 высокий уровень, чека сошла (полёт?)

PORTE |= (1<<PE7);//поддяжка к питанию

DDRE &= ~(1<<PE7);//На ввод

EIMSK |=1<<INT7;//вне прерывание на ножке PE7

EICRB |=(1<<ISC71)|(1<<ISC70);

}

portSHORT main(void)

{

DDRG |= (1<<PG0)|(1<<PG2)| (1<<PG4);//vLEDInit(); //иниц портов подкл к светодиод

//Инициализация Servo

ServoDriverInit();//timer3_init

DDRC=0xFF;//Порты - на вывод ШИМ серв

//Инициализация Buttons

BUT_Init();

Timer2_10ms();//ATmega128 ButtUpdate_and_FatFsUpdate_Driver

SPI_Init();//это пересделает FatFs, но у нас в SPI_Init ещё экстра чипселекты на выход настраиваются

//Инициализация лога на флешке

sei();//сомнительное место для sei, но иначе таймер для FatFS не запашет

///*Монтируем том, для использования диска */

res=f_mount (&fs,"0",1);

if (res==FR_OK)

printf("f_mount ok\n"); else printf(" f_mount no, state= %X ",res);

/* Opens an existing file. If not exist, creates a new file. */

//Коля res=f_open(&fil, "1.txt", FA_WRITE | FA_OPEN_ALWAYS);

res=open_append(&fil, "1.txt");

if (res== FR_OK)

printf(" open ok\n"); else printf(" f_open no, state= %X ", res);

cli();

//Инициализация UART и i/o (printf, ect)

uart_Init();

stdout = &mystdout;

_delay_ms(20); //нужно после старта не писать ничего в ML8088 20ms

/*Так как нам достаточно одного сообщения RMC, в значение параметра CDB-ID 201 запишем 0x00000040. Достаточное время вывода RMC - 0,5 с, то в CDB-ID 190, задающий время вывода Набора сообщений 0 запишем 0x01.*/

printf("$PSTMSETPAR,1201,00000040,0*0D0A");//<cr> - возврат каретки 0x0D, <lf> - подача строки 0x0A.

printf("$PSTMSETPAR,1190,01,0*0D0A");

//Инициализация чеки

ChecaInit(); //use вне прерывания при потери на PE7 низкого уровня

RTC_Time_Ready = xSemaphoreCreateMutex();

FBuf.GPSEventGroupSdOrCC = xEventGroupCreate();

FBuf.ADCEventGroupSdOrCC = xEventGroupCreate();

FBuf.Orient_EventGroupSdOrCC = xEventGroupCreate();

xTaskCreate( vPollingFromButt_lib, ( const char * ) "FatFS", 115, NULL, 2, &PollingFromButt_lib_Handle );

xTaskCreate( vFatFsWrite, ( const char * ) "FatFS", 245, NULL, 2, &FatFsWrite_Handle );

vTaskSuspend(FatFsWrite_Handle);//засыпаем (бэкапить на SD пока не нужно)

xTaskCreate( vCCWrite, ( const char * ) "CCWr", 250, NULL, 2, &CCWrite_Handle );

vTaskSuspend(CCWrite_Handle);//засыпаем (бэкапить на CC пока не нужно)

xTaskCreate( vBottLED, ( const char * ) "vBottLED", 80, NULL, 2, &BottLED_Handle );

vTaskSuspend(BottLED_Handle);//засыпаем (мигнуть пока не нужно)

xTaskCreate( vADCStart, ( const char * ) "ADCStart", 200, NULL, 2, &ADC_Handle );

vTaskSuspend(ADC_Handle);//засыпаем (ADC пока не нужен)

xTaskCreate( vFligthServo, ( const char * ) "FlServ", 200, NULL, 3, &FligthServo_Handle );

vTaskSuspend(FligthServo_Handle);

//xTaskCreate( vOrient, ( const char * ) "Orient", 200, NULL, 2, &Orient_Handle );

//vTaskSuspend(Orient_Handle);//

vTaskStartScheduler(); //start scheduler

while(1){}

}

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


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

  • Задача накопления, обработки и распространения информации. Характеристика систем управления. Схема комплекса средств автоматизации. Функционирование АСУ комплекса средств автоматизации. Требования, предъявляемые к АРМ РД. Структура базы данных.

    реферат [29,1 K], добавлен 12.06.2009

  • Разработка алгоритма фильтрации данных, полученных с систем спутниковой навигации с помощью GNSS-модуля. Анализ работы фильтра Калмана, его программная реализация под конкретную задачу. Выбор навигационных модулей для получения данных позиционирования.

    дипломная работа [3,6 M], добавлен 12.01.2016

  • Порядок работы менеджера турфирмы. Анализ рынка программных приложений для ведения туристического бизнеса. Выбор средств проектирования и разработки системы управления баз данных. Разработка, реализация и анализ работы программного модуля, его запуск.

    дипломная работа [3,4 M], добавлен 19.07.2015

  • Особенности архитектуры Java. Технология Java Database Connectivity. Кроссплатформенность Java-приложений. Преимущества языка программирования. Логическая структура базы данных. Структура программного комплекса. Верификация программных средств.

    курсовая работа [962,8 K], добавлен 13.01.2016

  • Структура данных в динамической памяти, однонаправленные списки. Разработка программного комплекса, предназначенной для хранения и предоставления пользователям данных об улицах города. Реализация данной программы при помощи метода расширения ядра.

    курсовая работа [438,3 K], добавлен 11.01.2016

  • Изучение области применения комплекса для проведения имитационных испытаний микропроцессорных систем железнодорожной автоматики на функциональную безопасность. Разработка программного обеспечения модуля управления и отладки. Тестирование системы команд.

    курсовая работа [1,1 M], добавлен 22.11.2014

  • Система управления базами данных как совокупность программных и языковых средств, предназначенных для создания и обработки данных. Анализ деятельности обувной мастерской. Особенности разработки функциональной диаграммы и тестирования программного модуля.

    дипломная работа [2,9 M], добавлен 04.11.2012

  • Проблемы и тенденции проектирования операционных систем, структура ОС. Руководящие принципы при разработке интерфейса. Парадигмы пользователя, исполнения и данных. Примеры применения ортогональности и связывания. Методы практической реализации систем.

    реферат [60,9 K], добавлен 26.01.2011

  • Основные функции системы управления базами данных. Комплекс программных и лингвистических средств общего или специального назначения. Условия принятой технологии обработки данных. Управление буферами оперативной памяти. Журнализация и её значение.

    курсовая работа [1,2 M], добавлен 19.01.2012

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

    дипломная работа [5,0 M], добавлен 08.06.2017

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