« Previous - Version 6/11 (diff) - Next » - Current version
Dmitry Belimov, 11/26/2014 08:01 am


Wiki

Автопилот для БПЛА на основе микроконтроллера PIC32.

Принципиальная схема автопилота

Видео

Процессор

Используемые прерывания процессора

  • 0
  • 1
    • 0 - ядро FreeRTOS
    • 1 - не используется
    • 2 - не используется
  • 2
    • 0 - Timer1 системный, ядро FreeRTOS, драйвер чтение/запись шины I2C1
    • 1 - pin change interrupt, Timer2 отсчет временных интервалов для декодирования PPM сигнала пульта РУ
    • 3 - RFLINK последовательный порт
  • 3
    • 0 - системные вызовы FreeRTOS
  • 4
    • 2 - генерация PWM сигнала PWM OCx

I2C interrupt driver

Использование таймеров

  • Timer1 - системный, ядро FreeRTOS
  • Timer2 - захват сигналов РУ
  • Timer3 - генерация аппаратного ШИМ
  • Timer4 - генерация программного ШИМ
  • Timer5 - не используется

Использование последовательных портов

  • UART1 - Радиолинк
  • UART2 - не используется
  • UART3 - не используется

Использование каналов DMA

  • 0 - не используется
  • 1 - не используется
  • 2 - не используется
  • 3 - не используется
  • 4 - не используется
  • 5 - не используется
  • 6 - не используется
  • 7 - не используется

Аппаратура радиоуправления

  • Описание PPM, PCM кодирования статья
  • Обсуждение на форуме сигналов с приемника форум

Используемые датчики

  • Датчик давления BMP085, как работать с датчиком
  • Датчик ускорения и магнитного поля, 3-х осный акселерометр + 3-х осный компас, размер 3х5мм.
    • В новых версиях автопилота подумать над заменой на LSM303D сенсор LSM303DLHC не рекомендован для новых устройств.
  • Датчик вращения, гироскоп 3-х осный L3G4200D

Замена барометрического датчика

Очень интересен подсказанный барометрический датчик MS5611 Internet , меньше по размерам, более точный, точность до 10см.

Замена датчиков ускорения, магнитного поля, гироскопа

Необходимо рассмотреть вариант замены MEMS датчиков ориентации и магнитного поля на один MPU-9250

Плюс:
  • Уменьшаем количество корпусов микросхем
  • Перенос расчетов в DMP этого датчика
  • Подключение барометра к этому датчику
  • Разгружаем основной процессор
Минусы:
  • Все замутно и проприетарно
  • Переделывать уже работающую часть

Ссылки по теме

Работа с датчиками

Расчет шумов

  • Обсуждение создание собственной системы стабилизации т.е. автопилота Форум
  • Калибровка акселерометра/компаса Интернет
  • Кватернионы, объяснение на английском Интернет
  • AHRS алгоритм определения положения в пространстве Интернет
  • AHRS алгоритм определения положения в пространстве Интернет
  • Определение поворота с использованием магнитометра Код
  • Подробная статья с видеообзором по электронному компасу Интернет
  • Подробная статья на русском по электронному компасу Интернет
  • Определение параметров магнитного поля в нужном месте, напряженность, наклон, уклон Интернет
  • Калибровка магнитного компаса Интернет
  • Статья по расчету углов поворота зная данные акселерометра: Интернет , PDF
  • Еще одна статья по расчету углов поворота и комплиментарному фильтру Интернет
  • Работа с датчиком L3G4200D
  • Чтение преобразование данных с датчиков
  • Чтение и преобразование температуры с датчика LSM303DLHC
     1  def readTemperatureCelsius(self):
     2    "Returns temprature reading in celsius unit" 
     3    temp = self.readTemperature()
     4    return (self.__twos_comp(temp, 12) / 8.0) + 18
     5
     6  def __twos_comp(self, val, bits):
     7    "compute the 2's compliment of int value val" 
     8    if( (val&(1<<(bits-1))) != 0 ):
     9        val = val - (1<<bits)
    10    return val
    
  • Преобразование температуры с датчика L3S4200D, отсюда
    Sensor Output is 25 at 25 Deg C and the output changes -1 for each Deg change in Temp
    The 25 is not the Temperature it is a Reference number
    To Get the Temperature you have to
    Subtract the Value in OUT_TEMP(26h) Register From 25
    then Add that to 25 Then use it as Deg C or Convert it to Deg F =(Deg C*9/5+32)
    Note The Temp is not ambient Temp it is the Sensor Temperature of the chip
    which changes negative for positive temp changes because that the direction the Measurements are affected
    They increase as temp Decreases so an negative correction is needed.
    To Measure Approx Ambient Temp one could add an offset Correction Number to get closer.
    Comment the temperature measurement is Sensor Temp not ambient. The following can be used to create something somewhat useful
    
    VAR
    
    Byte STemp, ESTemp
    
    PUB ReadTemp
    STemp := Read_1B(OUT_TEMP)
    ESTemp := 25 - STemp
    ESTemp := ESTemp + 25 - 4 'Deg C the -4 is my correction yours may be different
    ESTemp := ESTemp * 9 / 5 +32 'Deg F 
    
  • Калибровка компенсация сдвигов при пайке и расположения в корпусе.

PID-регулятор

  • Статья о PID регуляторе, смотреть рекуррентную формулу регулятора Интернет

Рулевые машинки

Программный ШИМ

Телеметрия

  • Описание и управление модулем телеметрии Интернет

Mavlink

microSD

Черный ящик

Замечания по схеме

  • Напряжение питания для подтягивающих сопротивлений для I2C нужно брать то же что используется для питания датчиков на I2C.
  • Входа захвата сигналов аппаратуры РУ не являются pin change interrupt 4 из 8, легко можно захватить только 4 сигнала. Немного исправив схему: PGED1 (25),PGEC1 (24) не используемые при полете можно завести тоже на захват сигнала, тогда будет всего 6 входных каналов. Надо или нет еще 2 большой вопрос. Если отказаться от кварца на 32кГц, можно получить еще 2 входных канала.
  • Входы захвата УЗ дальномеров не все поддерживают pin change interrupt, всего выводов таких 5, надо 5 или 6. Изменить схему, соединить такие выводы с контактами для УЗ дальномеров.
  • Заменить микросхему расширения портов для серв с 4022 на 4017, 0 выход не подключать, начать с 1-го и по 9-ый. В текущей схеме можно использовать только 7 доп.каналов серв.
  • Линейный стабилизатор на 3.3В довольно сильно греется. Стоит рассмотреть вариант его замены на DC-DC высокочастотный преобразователь ADP2108AUJZ-3.3-R7 или подобный. Площадь занимаемая преобразователем практически не изменится - Internet . Катушка индуктивности для него LPS3010-102MRB
  • Заменить барометрический датчик давления BMP085 на что-то другое, например BMP230 в связи с окончанием производства BMP085.
  • Заменить МЕМС датчик LSM303DLHC на LSM303D в связи с окончанием производства, опять же более дешевый.

Замечания по плате

  • Странности
    • Разрыв дорожки под МК от ножек 88, 89 на программный ШИМ U4 14, 15. Причем разрыв именно под МК, переход на стороне МК звонится нормально

Ссылки на статьи и форумы

  • Строим квадрокоптер, цикл статей 1
  • Создание своей системы PID стабилизации для коптера статья
  • Адаптивный регулятор статья

Подобные проекты