Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Программное обеспечение системы




Для разработки ПО микроконтроллеров Atmelмогут быть использованы языки программированияasm, C или C++. Для выбора конкретного языка были составлены требования:

1. Адекватное время разработки ПО;

2. Возможность перехода на другой МК;

3. Мощный инструментарий для программирования от производителя.

Этим требованиям соответствует язык C, имеющий действительно широкую поддержку от производителя: множество примеров кода для конкретного МК, фреймворк ASF, кодогенератор AtmelStart, а также огромное сообщество пользователей. Производитель предлагает бесплатную среду разработки AtmelStudio, набор программ для компиляции (AVR GCC toolchain). В настоящее время AVR GCC toolchain является наиболее мощным и постоянно поддерживаемым средством создания C и C++ программ для МК Atmel.

Работоспособность ПО бортовой системы даже при потере функционала – основная цель, которой добивались при разработке. Допускается, что любое внешнее устройство может выйти из строя, перестать отвечать. Также была учтены масштабность проекта, особенно с учётом расширений функциональности и возможность наличия в команде нескольких программистов.

5.2Структура программного обеспечения

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

Инициализация выполняется в начале программы, при запуске системы, единожды.Инициализируются контроллеры всех используемых интерфейсов: SPI, I2C, USART, GPIO, прерываний, счётчики-таймеры; инициализируетсяработа с файловой системой, открывается файл для записи. В конце инициализации создаются нити, часть из них запускается, часть из них приостанавливается, чтобы быть запущенными в нужный момент.

Ниже представлено описание важных нитей (тасков).

vPollingFromButt_libзанимается опросом клавиатуры управления сервомашинками, запускается вначале, прекращается после срыва чеки;

vFligthServoзапускает исполнительные механизмы в нужный момент, запускается после срыва чеки, прекращается после выполнения цикла управления механизмами;

vADCStartработает с датчиком дифференциального давления, сохраняет результат в буфер, запускается после срыва чеки;

vFatFsWriteзаписывает информацию из буферов в карту памяти, запускается после срыва чеки;

vCCWriteзаписывает информацию из буферов в трансивер, запускается после срыва чеки;

Каждая нить решает свою задачу, но также у нитей существуют общие ресурсы, поэтому в программе используются средства взаимодействия: кольцевые буферы, группы событий и др.Основной вопрос взаимодействия в системе возник между нитями vCCWrite и vFatFsWrite, они читают одни и те же данные. Так как данные постоянно приходят новые, прочитанное необходимо удалять. Однако нити работают с разными скоростями. Это заставляет либо использовать две очереди, либо не использовать очереди вовсе.

Одно из возможных решений экономит память. Обе нити используют один и тот же кольцевой буфер. Данные заносятся по индексу idxIN, считываются нитью vFatFsWrite по индексу idxOUT_SD и нитью vFatFsWrite по индексу idxOUT_CC.Главное, чтобы скорость записи не превысила скорость чтения, это необходимозакладывать при разработке ПО. Учитывая скорость выдачи данных модулем навигации был задан необходимый размер кольцевого буфера с некоторым запасом.

В ситуации нескольких кольцевых буферов (под каждый источник данных свой) происходит хаотичная передача пакетов данных. Например, может быть передан пакет местоположения и ещё один пакет местоположения, а затем уже результат АЦП. Это вызывает необходимость помечать принадлежность данных к тому или иному источнику.Однако есть и преимущество, если какой–либо пакет не может прийти в принципе (например из–за поломки датчика), работоспособность системы не будет нарушена. Это ценное свойство в бортовой системе сбора данных и управления моделью ракеты.

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

При разработке ПО для обмена данными между нитями использовались кольцевые буферы. Принцип работы кольцевого буфера поясняет рисунок 16.

Рисунок 16 – Модель кольцевого буфера

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

Кольцевой буфер – это участок в памяти, имеются две переменных, указывающих на начало и на конец. Ниже приведён пример объявления восьмибайтного буфера ADC_Buf. Переменная ADC_idxIN указывает на первую ячейку в буфере, используется при чтении. Переменная ADC_idxOUTуказывает на последнюю актуальную ячейку, тогда запись будет происходить в следующую за ней.

u8 ADC_idxIN, ADC_idxOUT;

unsigned short ADC_Buf[0b1000];

Операция занесения нового байта

ADC_Buf[ADC_idxIN++] =ADCdata;

ADC_idxIN &= 0b0111; //Наложение маски

Операция выборки из буфера

value = ADC_Buf[ADC_idxOUT++];

ADC_idxOUT&= 0b0111; //Наложение маски

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

Размер буфера задаётся произвольно, но обычно кратно степени двойки для быстрого манипулировать индексами. Максимально удобны буфера размером 256 байт – в этом случае маску при операциях с переменными–указателями уже накладывать не надо, код получается в этом случае максимально быстрый и компактный. Кольцевой буфер удобен для случаев, когда имеется один отправитель и несколько получателей, но нужно иметь для каждого получателя отдельный индекс idxOUT. Кольцевой буфер не очень удобен для случаев, когда имеется несколько отправителей и один получатель, тогда при выборке информации из буфера необходимо правильно её сортировать. Если задан только один получатель и только один отправитель, то кольцевой буфер обеспечивает быстродействие и простоту реализации. В бортовой системе для формирования пакета передачи (см. таблицу 1)

опрашивается несколько кольцевых буферов. Это не очень удобно, в дальнейшем планируется использование флажкового буфера или очередей ОС [20].

5.4Драйвер CC1125

Программная модель трансивера представлена 301 регистром; значительно упрощает процесс конфигурирование SmartRF Studio – утилита от производителя трансивера, которая делает настройку более понятной и не позволяет задать недопустимую комбинацию параметров [21]. На рисунке ниже представлен внешний вид SmartRF Studio.

Рисунок 17 – Внешний вид ПО SmartRF Studio

Таким образом, желательно выбрать необходимый режим работы в ПО SmartRF Studio, которое сгенерирует первоначальные значения для регистров. Необходимо скопировать их в программу МК, в раздел инициализации трансивера. Это и было сделано в процедуре CC112XInit.Были написаны и процедуры, облегчающие коммуникацию с трансивером CC1125. 

Процедура CC112X_ReadRegister позволяет прочитать регистр по адресу address, прочитанное значение сохраняется по адресу data. CC112X_ReadRegister справляется как с обращением к (основному) пространству регистров, так и к расширенному пространству регистров. Дополнительно возвращается статус-байт приёмопередатчика. Процедура updateStatus по содержимому статус-байта анализирует текущее состояние CC1125.

Процедура CC112X_WriteRegister позволяет записать в регистр по адресу address значение data. CC112X_WriteRegister справляется как с обращением к (основному) пространству регистров, так и к расширенному пространству регистров. Дополнительно возвращается статус-байт приёмопередатчика.

Процедуры CC112X_BurstRead и CC112X_BurstWrite позволяют прочитать из регистров и записать в регистры соответственно. Используется режим Burst (Бёст), передаётся адрес первого регистра, массив байт для записи (чтения) и количество регистров для записи (чтения). Процедуры используют возможности CC1125 по автоинкременту адреса, так что такой подход позволяет снизить нагрузку на управляющий канал и на микроконтроллер при последовательной записи (чтении) множества регистров. Процедуры подходят для обращения к (основному) пространству регистров и к расширенному пространству регистров.

Процедуры CC112X_WriteStrobe и CC112X_UnsafeStrobe позволяют записать в приёмопередатчик строб-команду. Строб-команда – это короткая (один байт) команда без адреса, предписывающее совершить конкретное действие, например, перезагрузиться, отчистить приёмный буфер и другие. CC112X_WriteStrobe проверяет команду на соответствие синтаксису (два старших бита должны быть занулены), CC112X_UnsafeStrobe этого не делает, обеспечивая повышенное быстродействие.

Где vTaskDelay и portTICK_PERIOD_MS есть части операционной системы FreeRTOS. vTaskDelay(1/portTICK_PERIOD_MS) создаёт задержку на 1 мс, что аналогично использованию _delay_ms стандартного модуля delay.h в Atmel Studio.

Нить vCCWrite отвечает за передача по радиоканалу, в её бесконечном цикле ожидается наполнение кольцевых буферов GPS и вертикальной скорости, извлекаются данные из них и записываются непосредственно в FIFO трансивера, который при достижении заданной длины пакета (устанавливается регистром PKT_LEN) отправляет его по радиоканалу.

5.5Сервис FatFs

Для резервирования принятых данных используется SD карта памяти. Для работы с ней используется SPI модуль, на его базе функционирует высокоуровневый сервис карты памяти FatFS, что обеспечивает переносимость кода для других платформ (ARM, AVR, 8051, PIC, Z80, 68k, Windows и другие), поддержку файловых систем, совместимых с ОС Windows. Таким образом, данные пишутся на карту, и для их считывания не требуется дополнительное ПО. В качестве файловой системы выбрана FAT16.

Лицензия сервиса FatFS – однопунктовая лицензия BSD: при повторном распространении исходного кода должно оставаться уведомление об авторском праве и последующий отказ от гарантий [22]. Алгоритм работы с сервисом FatFS:

ИнициализизацияSPI

SPI_Init();

Монтаж тома

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

Открытиефайла

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

В нити приёмника vFatFsWrite запись данные из кольцевого буфера

f_printf(&fil, "%c", value);

f_sync(&fil);//flush буфера

f_close(&fil);   //Послеприземлениязакрытиефайла


Отладка контроллера

Отладка проводилась в системе моделированияProteus 8. Далее перечислены достоинства этого продукта:

•   Единая среда для разработки электронных схем, программного обеспечения и печатной платы (включая и 3D моделирование);

•   Удобство разработки схем на основе МК;

•   Единая база данных компонентов обеспечивает обмен данными между модулями Proteus в текущем проекте;

•   Расширенные средства для работы с документацией к проекту;

•   Большое количество различных моделей: аналоговые и цифровые электронные компоненты, периферийные устройства, интерактивные элементы ввода-вывода: кнопки, переключатели, двигатели, реле, виртуальные терминалы (UART, SPI, I2C, USB), виртуальные измерительные приборы и генераторы.

•   возможность работы в многопроцессорном режиме;

•   большое количество примеров проектирования устройств на основе МК различных типов.

Целью отладки является проверка алгоритмов, ПО, проверка взаимодействия МК, использующего ОСРВ FreeRTOS,с переферийными устройствами.

Схема, собранная в Proteus, приведена на рисунке Рисунок19. Далее приведено описание компонентов схемы для отладки в Proteus.

МК является основным компонентов схемы отладки.

Виртуальная карта памяти подключена МК. Данная карта имитирующая реальную карту MMC в режиме SPI; сохранение полученной информации производится в файл на компьютере. Дополнительно для контроля SPI используется осциллограф, это позволяет видеть не только результат передачи, но и структуру сигналов.

Сервомашинки моделируются с помощью компонента PWMServo, специально предназначенного для моделирования сервомашинок, управляемых ШИМ.Для контроля управляющих сигналовсервомашинки были подключены к осциллографу (рисунок 18).

Рисунок 18– Отладка ШИМ

Клавиатура для ручного управления сервомашинками представлена четыремя кнопками, подключена к GPIO.

Бинарный датчик начала движения ракеты – чека – представлена кнопкой с соответствующим названием, подключён к GPIO.

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

Модуль местоположения подключён к аппаратному USARTМК и представляет из себя виртуальный терминал USART. Этопозволяетвидеть данные для настройки модуля, посылаемые МК при старте, вводить строку данных местоположения; также этот терминал использовался для целей отладки – вывода сообщений МК на компьютер (рисунок 19).

Рисунок 19– Монитор модуля местоположения, карта памяти

Трансивер представлен SPIтерминалом, это позволяет контролировать передаваемую информацию.

При отладке бортовой системы используемые нити, прерывания были частично модифицированы, в них добавился функционал по индикации своего состояния по USART. Это позволило на ПК видеть состояние программы, значение интересующих переменных, факт того, что сообщение (не) приходит в нужный момент времени и др. Особенно удобна для целей отладки оказалась функция printf – мощное средство форматированного вывода.На рисунке ниже представлена схема для отладки в Proteus.

Рисунок 20 – Работа в эмуляторе

Для реализации основного функционала было затрачено 28556 байт памяти программ (21,8 %) и 3921 байт памяти данных (95,7 %), что делает дальнейшее расширение на базе Atmega128 затруднительным.

На таблице ниже представлено распределение ресурсов МК.

Таблица 3– Распределение ресурсов МК

Наименование вывода Назначение
PE7 Чека
PА4–PА7 Клавиатурауправления сервомашинками
PF0 АЦП для датчика давления
PE0–PE1 UART
PC0–PC7 Выходы ШИМ (сервомашинки)
PB1–PB3 SPI
PB0 Выбор ведомого (карта памяти)
PD5 Выбор ведомого (трансивер)
PD0–PD1 I2C
PG2 Линия подключения светодиода

 

Для начала работы необходимо запустить среду Proteus 8 Professional и открыть приложенный файл проекта. Для начала симуляции в меню Debug выбрать Start VSM Debugging или нажать комбинацию клавиш Ctrl+F12, а затем Run Simulation или клавишу F12.

После запуска симуляции убедиться, что сервомашинки вышли на положение «закрыто» (+23,3), мигает светодиод-индикатор таймера D1. Одинарным нажатием одной из четырёх кнопок управления можно перевести соответствующую сервомашинку в положение «открыто» (-124). Двойное нажатие переводит соответствующую сервомашинку в положение «закрыто». При отрыве чеки аппаратура переходит в режим полёта, запускается индикатор режима полёта – раз в секунду начинает меняться уровень на PG0. На 16 секунде полёта открывается сервомашинка PH (блокировка крышки парашюта), на 17 секунде – сервомашинка PARACHUTE, на 18 секунде – CANSAT1, на 20 секунде – CANSAT2. В течении времени полёта (заданного заранее) происходит измерение ADC0 с делителя напряжения, получение данных с GPS имитируется посылкой любого символа в терминал.



Заключение

Целью выпускной квалификационной работы является разработка бортовой системы сбора данных и управления моделью ракеты типа TSR, разработанной студентами Самарского университета для участия в C’Space.

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

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

Выбраны технические средства для реализации системы.

Разработано ПО, написанное на языке высокого уровня Си, сиспользованиемкомпилятораGCC.

Модель системы, состоящая из основных, базовых элементов отлажена в среде моделирования Proteus. В процессе моделирования доказана работоспособность основных компонентов и ПО в целом.

Анализ результата моделирования показал, что ресурсы использованного МК по объёму памяти программ и данных выбраны почти полностью. Таким образом при дальнейшем развитии системы предполагается использовать 32-х разрядный МК с большим объёмом памяти. Результаты могут быть использованы в проектаходноступенчатых ракет и во вторых ступенях ракет типаTSR.










Последнее изменение этой страницы: 2018-04-12; просмотров: 389.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...