Создание собственной системы стабилизации

mahowik

Серега, так когда мы будем у тебя уже плату покупать? ))
либо если она опен сорс, то создай проект под GPL или как там принято…

rual
mahowik:

А сорсы под какую среду? Coocox гад не саппортит ф3, а только ф4…

кейл 4,60, размер кода войдёт в бесплатныю версию. Файл проекта там же, только поправить нужно размещение библиотек, )) ну и скачать их с оф.сайта.
Кста, Александр, покажи скрины с идикатора, хочу посмотреть какой вектор кажет магнитометр.

mahowik:

вот нашел… можно под eclipse настроить www.engineering-diy.blogspot....e-openocd.html

Да и ещё на СТшном сайте есть дока по настройке среды под кейл, эклипс и пр., Квик Стартед вроде…

зы: приложил расписание выводов для своего проекта под Ф3.
СПИ1-дус;и2ц1-аксель и маг;ТИМ2/3-ппм;ТИМ1/4-шим; УСАРТ1-терминал/телеметрия; СПИ2/И2Ц2/УСАРТ2/3-пока свободны.

RusINS1_0F3D.rar

SergDoc

Я чёт тут подумал, для тех кто в теме - если вместо надписи “Логотип?” невзначай впихнуть M25P16 (там SPI разъём рядом и места хватает) что получится? Правильно порт Рево, ну почти, входы выходы не совпадают (их больше и другие таймеры) ну и естественно I2C и SPI другие. Но как говорится “Она конечно не Венера, но что-то венерическое в ней есть” (С) 😃 Думаю впихну на всякий случай - ну вот, показал картинку - переделать захотелось 😃 а ещё там не видно - под магнитометром EEprom-ка стоит, так что девайс становится довольно универсальным - можно много чего портировать 😃

Да, Вопрос - в какую религию обращать? MultiWii пробовал, CC - тоже летал… конечно субъективное мнение, но Wii понравился больше: код более понятен (ну не программер я) и танцев с бубном и I2C не было, но ведь кругом ещё столько опенсорсных вариантов…

SergDoc

В общем на обеде флешка влезла 😃
Вечером наконец-то начну верхнюю плату 😃

rual

Вот и моя Ф3 полетела:

Ролик короткий для удобства выкладывания в тубу. Вариант ПО ещё очень сырой и не полный, портирован только только лётный алгоритм и ИНС, по мере переноса менял структуру кода, посему есть нестыковчки в процессах подготки к пуску (почему-то прерывается калибровка ДУС). Вобщем работы ещё много, но хотелось похвастаться:) Как только допилю старт и терминал с сохранением настроек выложу хекс.

mahowik
rual:

Александр, покажи скрины с идикатора, хочу посмотреть какой вектор кажет магнитометр.

на вых-х сделаю… а то вчера дрюкался со стабилизацией предсказателя высоты… таки стабилизировал его гада! 😃

SergDoc:

Да, Вопрос - в какую религию обращать? MultiWii пробовал, CC - тоже летал… конечно субъективное мнение, но Wii понравился больше: код более понятен (ну не программер я) и танцев с бубном и I2C не было, но ведь кругом ещё столько опенсорсных вариантов…

посмотри mwc-ng от ziss_dm у него там правильная архитектура заложена… кросплатформенность avr/arm, tasks management with fixed time loop наскока помню…
code.google.com/p/mwc-ng/

SergDoc

Примерка:
примека принесла две новости

  1. Всё сошлось - можно плату изготавливать:)
  2. Барометр с гудлака оказался паяный 😦 (до этого времени не распаковывал)

rual
SergDoc:

Всё сошлось - можно плату изготавливать

Красиво. Какой софт портировать будешь? Когда ждать первый полет?

SergDoc:

Барометр с гудлака оказался паяный (до этого времени не распаковывал)

Интересно, он не в заводской упаковке? Мож предпродажная проверка?

SergDoc

Наверно Мультипилот - он в VET6 влезет, на барометре пластик родной но был заклеен скотчем - перевернул - следы флюса и припой на лапах, если с какой дефектной платы сняли - куда ни шло, а если бракованный сам - плохо…

mahowik
rual:

Кста, Александр, покажи скрины с идикатора, хочу посмотреть какой вектор кажет магнитометр.

отлично компас отрабатывает! никуда не скачет при наклонах… и это без калибровки? точненькА юг север запад восток показывает!
я так понимаю у тебя автокалибровка компаса сделана? т.к. на команду “c” по идее только гира и аксель калибруется…

только один баг странный, иногда гуй подвисает на 1-3 сек, потом оклемается и дальше пашет…

rual

Ты получается ближе меня к “магнитному пупу” Земли, судя по вектору )))

mahowik:

отлично компас отрабатывает! никуда не скачет при наклонах… и это без калибровки?

Да, это без калибровки. Особо не вижу в этом смысла, по кругу расхождение в максимумах единицы градусов.

mahowik:

я так понимаю у тебя автокалибровка компаса сделана? т.к. на команду “c” по идее только гира и аксель калибруется…

нет, автокалибровки нет. Пробовал делать, но мне не понравилась, т.к. случайные выбросы смещают центры и масштаб осей. Клибровку компаса надо делать в услових близким к идельным, но как писал выше смысла не вижу… По команде “с” делается клибровка ДУС в части постоянных дрейфа осей, калибровка акселя тут не правильная (это не страшно если оси пропорциональны и отцентрованы), выполняется только замер средней магнитуды вектора G. Нужна была для экспериментов с измерением акселем линейных перемещений.

mahowik:

только один баг странный, иногда гуй подвисает на 1-3 сек, потом оклемается и дальше пашет…

Проблема в функциях millis() и micros(), надо заменить их на это hw_config.c

__IO uint16_t Sys_time_ms;
__IO uint8_t SysTime_256;
uint16_t millis(void)
{
 Sys_time_ms = (((uint32_t)~SysTick->VAL>>16)&0x0ff)|((uint16_t)SysTime_256)<<8;
 return Sys_time_ms;
}

hw_config.h

#define SysTick_Reload (uint32_t)0x00ffffff
#define micros() ((uint16_t)~SysTick->VAL>>3)
extern __IO uint16_t Sys_time_ms;
extern __IO uint8_t SysTime_256;
uint16_t millis(void);

stm32f30x_it.c

void SysTick_Handler(void)
{
 if (inLoop){
  /* àâàðèéíûé çàïðîñ ÄÓÑà */
  if (GPIO_ReadInputDataBit(L3GD20_SPI_INT2_GPIO_PORT,L3GD20_SPI_INT2_PIN)==Bit_SET)
   if(EXTI_GetITStatus(L3GD20_SPI_INT2_EXTI_LINE)==RESET)
    if (cntDUSRdy--==0){
       cntDUSRdy=5;
       DUS_Zapros();
    }
  /* àâàðèéíûé çàïðîñ àêñåëÿ */
  if (GPIO_ReadInputDataBit(LSM303DLHC_I2C_INT1_GPIO_PORT,LSM303DLHC_I2C_INT1_PIN)==Bit_SET)
   if(EXTI_GetITStatus(LSM303DLHC_I2C_INT1_EXTI_LINE)==RESET)
    if (cntAccRdy--==0){
     cntAccRdy=20;
     Acc_Zapros();
    }
 }
 /* ñèñòåìíîå âðåìÿ */
 SysTime_256 ++;
 Sys_time_ms = (((uint32_t)~SysTick->VAL>>16)&0xff)|((uint16_t)SysTime_256)<<8;
}
Sir_Alex

Кто нибудь знает, какие есть критерии при выборе частоты LPF фильтра гиры и акселя?
Я пока только одно упоминание увидел более-менее вразумительное, в исходниках ArduCopter’a: “Частота LPF выбирается в два раза меньше SAMPLE Rate”

rual
Sir_Alex:

“Частота LPF выбирается в два раза меньше SAMPLE Rate”

Это классика, следствие из теоремы Котельникова.
Вполне справедливо, нужно чтобы отсчёты не “пролетели” мимо обработки.

Sir_Alex
rual:

Это классика, следствие из теоремы Котельникова. Вполне справедливо, нужно чтобы отсчёты не “пролетели” мимо обработки.

Как теорему Котельникова применить к обработке Аналогово сигнала я знаю.
Sample Rate тут по всей видимости никаким боком (Это частота на которой обновляются регистры с выходными данными). Потому что гира на самом деле оцифровывается с частотой 1KHz или 8KHz (для MPU6000). Если я правильно понимаю, LPF отсеивает вибрации ниже определенной частоты. Вопрос только в том, какие частоты в виде помех обычно бывают на коптере. Отсюда видимо и надо плясать при выборе LPF (и возможно HPF).

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

HikeR
Sir_Alex:

при работающих моторах…

моторы обычно не вращаются с одной и той же скоростью, особенно когда их несколько ;)

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

Sir_Alex
HikeR:

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

AP_InertialSensor_MPU6000.cpp:

    // sample rate and filtering
    // to minimise the effects of aliasing we choose a filter
    // that is less than half of the sample rate
HikeR:

моторы обычно не вращаются с одной и той же скоростью, особенно когда их несколько 😉

Логично, поэтому надо строить график при Throttle от нуля до 100%.

HikeR
Sir_Alex:

AP_InertialSensor_MPU6000.cpp:

о, эту штуку недавно добавили только в ArduPlane, но это скорее обычное усреднение, чем какой-то специальный ФНЧ или ФВЧ, суммируем N значений и делим на N. для самолетов, мол, хватает.

Sir_Alex:

строить график при Throttle от нуля до 100%.

это если мотор один, а как складывать гармоники будете от четырех-восьми работающих вразнобой?

p.s.
все-таки почитал вдумчивее, это действительно LPF, который имется в MPU6000 (цифровой встроенный), invensense.com/mems/gyro/…/RM-MPU-6000A.pdf страница 13-14. судя по временной задержке ничего сложнее усреднения там нет.

Sir_Alex
HikeR:

это если мотор один, а как складывать гармоники будете от четырех-восьми работающих вразнобой?

Вразнобой как раз и будет интересно анализировать, т.к. они будут резонировать на каких то частотах, где один работающий мотор не даст вообще никаких помех.
Т.е. в теории будет так: “плавно поднимаем газ от 0 до 100, при этом на графике FFT отмечаются максимумы, после этого меняем частоты LPF и HPF и повторяем тест до тех пор, пока не избавимся от помех от моторов”.

mahowik
Sir_Alex:

Кто нибудь знает, какие есть критерии при выборе частоты LPF фильтра гиры и акселя?

в вие я на этом собаку сьел! 😃

внутренние LPF:

  1. гира 42гц - если для умеренных и быстрых полетов
    гира 20гц - для авто полетов, фпв и начнающих летунов
    Не смотря на довольно низкие значения скорости гир вполне хватает для четкой стабилизации и отброса вибраций…
  2. аксель 5-10гц - при условии что внутреннее усреднение сделано по нормальному в чипе, т.е. при понижении LPF не уменьшается самплиннг… т.к. к примеру в какашечном adxl345 сделано именно уменьшением самплинга…

внешние/алгоритмические LPF:

  1. гира - не трогаем 😃
  2. аксель - душим на 0.1-0.5гц, т.е. оставляем его скорость сходной со скоростью “корректора”… в вие это компл. фильтр, в арду dcm, но сути не меняет…
Sir_Alex
mahowik:
  1. гира 42гц - если для умеренных и быстрых полетов гира 20гц - для авто полетов, фпв и начнающих летунов Не смотря на довольно низкие значения скорости гир вполне хватает для четкой стабилизации и отброса вибраций… 2) аксель 5-10гц - при условии что внутреннее усреднение сделано по нормальному в чипе, т.е. при понижении LPF не уменьшается самплиннг… т.к. к примеру в какашечном adxl345 сделано именно уменьшением самплинга…

Эммм… так вроде в MPU, LPF выставляется одновременно для Гиры и Акселя.
Посмотрим какие будут отзывы о мерапирате 2,9 - там можно выбрать частоту LPF…

mahowik

еще оч. важный параметр акселя это внутр. диапазон акселя… нужно брать 8-16g, иначе от вибраций и внутренних резонансов на этих самых вибрациях может происходить перенасыщение внутреннего АЦП акселя и тогда уже никакие внутр/внешн. фильтры и матеметика не помогут… типа как синусоида режется в меандр с диким расширением спектра гармоник…
в вие пока не доперли до этого, мучались с дрейфами в став/левел моде ибо “на столе” все пахало, а полете всплывало…

Sir_Alex:

Эммм… так вроде в MPU, LPF выставляется одновременно для Гиры и Акселя.

ну да, я тоже задавался этом вопросом, но в даташит так и не залез… оставил на 42-20гц + внешний НЧ для акселя…