ArduCopter Mega: порт на обычную Arduino (тестим)

kren-DEL
kren-DEL:

Но потом перестал опять армиться…

Отпишусь о своей эпопее…
Основная проблема была в том. что при калибровке аппы(FlySky FS-TH9B 2.4G 9CH System ( TX+ RX)) стик Yaw уходил на максимум больше, чем положено, причём в максимальном режиме был довольно высокий шум(расхождение в 15-20 ед.) из-за этого в крайнем правом положении уровень частенько опускался немного, либо не доходил до максимума калибровки - видимо это и стало проблемой арминга, когда стик в правом нижнем положении. Вышел из положения перекалибровкой аппы с уменьшением максимального положения на 30 ед(не доводил стик при калибровке)
Пока тестировал, усадил 2 акка по 3300, взлетает при 45-50% газа, насчёт стабильности пока не выяснил всех нюансов и пидов(занизил согласно инструкции, стал намного стабильнее, но пока не то…)
Следующие этапы:

  1. сборка шилда на плате, подключение к ней по нормальной схеме датчиков и всей периферии
  2. виброизоляция и защита всего мозга вместе с датчиками
  3. прикручивание к системе эхолота(Arduino Ultrasonic Module HC-SR04 Distance Measuring)

Вопрос немного не по теме: Заряжаю липольку 3300mah током 0.4А в режиме балансировки, когда считать, что батарея зарядилась?:

  • на каждой банке по 3.7~3.8В
  • время зарядки 3300/400 = 8.25ч
Gapey
kren-DEL:

Вопрос немного не по теме: Заряжаю липольку 3300mah током 0.4А в режиме балансировки, когда считать, что батарея зарядилась?:

когда на одной из банок (в идеале на всех) на минимальном токе который может выдать зарядка будет 4,2 вольта …
заливать током от 0,5с ( в вашем случае 1,6а) когда некуда торопиться или 1С (3,3а) когда нужно быстрее … при подходе к порогу 4,2 вольта зарядка должна начать уменьшать ток не допуская повышения напруги выше 4,2 вольта и так вплоть до минимума тока , после чего должна остановить цикл заряда …

SovGVD
kren-DEL:

Заряжаю липольку 3300mah током 0.4А

и это при том что ток заряда должен быть 3.3A для обычных аккумов или до 5С (5*3.3) для нанотеков

чего бы крутануть, чтобы на 2.0.49 не так резко коптер реагировал на стики, т.е. сейчас чуть отклонишь, а он уже наклоняется сильно, отпускаешь - резко в горизонт, аж до небольшой осциляции

Lazyan
Sir_Alex:

Там есть какой то косячок с определением координат GPS (врет метров на 600-1км)

С какой версии это началось?

botvoed:

Я на 2.6 редактированной, на четверке и на шестерке летаю - супер!

Какие используете датчики, железо? И что редактировалось в коде, если не секрет?

botvoed
Lazyan:

Какие используете датчики, железо? И что редактировалось в коде, если не секрет?

АРМ1 Я свою разьвел, а то коптеров много )), на все не накупишся -так дешевле!
По поводу пидов - как новое железо включаю, все по дефолту записывается.
Со всеми рамами летает нормально только P и D подкрутить надо, в основном вниз!
Также Лойтер настроить но это уже к ГПС!

Редактировал - я уже писал, добавил фильтры на моторы, маштабирование сигнала (первостепенно выравнивание),ну и так по мелочи - калибровку компаса, полетными режимами дрыгаешь и вкл, а трещит пищалкой (как у немца) и тд.

На фото с права родной!

LeonVS
Chester_kz:

Ох как бы не стало так что 2.0.49 будет последняя летаюшая прошивка

Хм… а вот интересно, прошивко “до портирования” летабельны более поздние? Косяки портирования вылазят, или все же дело в железе?

SovGVD
botvoed:

АРМ1 Я свою разьвел

у нас тут не APM, а обычная ардуинка (т.е. одна атмега и датчики по i2c заведены) с платкой неких датчиков
APM насколько я помню сделан на 2х атмегах + датчики заведены через SPI

настроил сегодня P, висит отменно, если нет ветра - почти не дрейфует (2.0.49), но подвес работает совершенно не адекватно, и работает только когда к компу платка подключена, как буду дома - поковыряю код подробнее + хочется добавить некоторые фишечки из multiwii (например комбинации стиков для настройки)
а кстатии failsafe добавлен в новые прошивки (вроде бы давно писали что приемник перестает сигналы отдавать контроллеру, в multiwii это работает)?

botvoed
SovGVD:

у нас тут не APM, а обычная ардуинка (т.е. одна атмега и датчики по i2c заведены) с платкой неких датчиков
APM насколько я помню сделан на 2х атмегах + датчики заведены через SPI

ААА ну сори!
Вобще я одну атмегу разьвел 2560 и подаю ППМ СУМ, вторая в АРМ декодер.

Вот видео, там в конце два тела летящих в небе увидел, что это до сих пор гадаю???

LeonVS

Хм это он у тебя в стаб моде такой резвый, или в акро летал?

botvoed
LeonVS:

Хм это он у тебя в стаб моде такой резвый, или в акро летал?

Да в стабе.

LeonVS

А что в прошивке то наменял, что не у кого не летает, а у тебя так зачетно пархает 😃?

SovGVD
LeonVS:

А что в прошивке то наменял, что не у кого не летает, а у тебя так зачетно пархает ?

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

kren-DEL

Доброго времени суток!
прошивка 2.6r3
попробовал прикрутить эхолот:Ultrasonic Module HC-SR04 Distance Measuring
вопросы:

  1. К каким контактам подключать правильно? (D9,D10)?
  2. Какой тип датчика выбрать, ато показывает неправильно расстояние(такое ощущение, что в дюймах, хотя пишет в см…)
  3. Как можно проверить сонар (какой режим, Alt Hold) и как правильно настроить удержание по-высоте и при каких условиях он включается?
  4. При полёте постоянно приходится доруливать в одну сторону(и в акро и в стабе), чтобы не упал(доруливаю вправо), что крутить? (датчики откалиброваны, стоит при старте по-горизонтали)
SovGVD

кто нибудь летает с подвесом с сервами на 2.0.49?
какая то непонятная странность у меня (сервы аналоговые), при подключении через usb - сервы нормально работают, но слабо (0.5A всетаки у usb только), при подключении основного питания сервы тупо подрагиваются и не стабилизируют ничего в полете, при этом добавляя очень быструю и паразитную тряску

www.youtube.com/watch?v=NNB_rKVymfk

LeonVS
SovGVD:

ничего он не менял

В оригинальном арду 2 меги, одна делает все то же что и у нас, а вторая лишь из PWM делает PPM_SUM, правильно? Вот интересно, не ужели PPM_SUM жрет столько ресурсов??? Я понимаю если бы одна мега работала только на обработку данных с датчиков чтоб не сбивался алгоритм на всяких других задачах, а другая все остальное…

SovGVD

а еще датчики подключены по шине SPI, если память не изменяет, а у нас через i2c всё

LeonVS

Хм… и в чем приемущество? Не думаю что SPI шина быстрей работает… Интересно какое время исполнения у них быстрого цикла?
Входы выходы на других пинах? Мне по идее PPM_SUM делать не надо, могу его сразу с приемника послать, плату датчиков то же повесить куда угодно, может попробовать оригинальную прошивку, раз на ней все так хорошо и радужно 😃

SovGVD
LeonVS:

может попробовать оригинальную прошивку, раз на ней все так хорошо и радужно

только у нас нет ни логера, ни spi датчиков ни еще какой нибудь приблуды =)

я тут кстаии failsafe ночью начал вкорячивать, щас глянул на код и понял что он сработает только если приемник работает, а не если не работает ^_^ эх, зря до 3 ночи сидел

понять бы как часто read_radio() вызывается… сколько там по времени фаст луп идет?

botvoed
SovGVD:

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

Что менял, написал, в основном это обработка сигнала на моторы фильтры и тд!
Железо тоже, за исключением пары штук, просто давно с IDG работаю!
Я уже понял написал не в ту тему сорри!!

SovGVD

кто желает протестить FAILSAFE? =)
nekaka.com/d/AR9xFg3N9p

тестил только в GUI, если отключить приемник при заведенных моторах, то газ скидывается на 1300 (задается в APM_Config.h), остальные стики (roll/pitch/yaw) по центру, а так же принудительно STABILIZE включается (эта штука не работает с ppmsum (пока что))

в основной код пока не добавляю, т.к. без реальных тестов довольно опасно =)

для Sir Alex: в APM_RC.cpp добавил новую функцию

uint8_t APM_RC_Class::GetFailState(void)
{
	failsafeCnt++;
	if(failsafeCnt > 20) failsafeCnt = 20;
	return(failsafeCnt);
}

в самом прерывании (чтобы обнулялся счетчик, если есть сигнал)

      if (mask & 1<<0) {    // If pulse present on THROTTLE pin, clear FailSafe counter  - added by MIS fow multiwii (copy by SovGVD to megapirateNG)
        failsafeCnt = 0;
      }

ну и failsafeCnt туда же

в основном коде (radio.pde) дергается функция throttle_failsafe() в а в ней дергается GetFailState, который прибавляет счетчик ошибок, пороговое значение 15 быстрых циклов, если за это время счетчик так и не обнулился, то дергается измененная функция set_failsafe, которая дергает евенты + выставляется ch3_failsafe, который в radio.pde->read_radio() меняется принудительно первые 4 значения аппы (стики)

может чего упустил важного, но теоретически должно работать, у кого гарантированно работает RTL, то можно в events.pde->failsafe_on_event() вместо set_mode(STABILIZE); поставить set_mode(RTL); тогда при пропадания сигнала с аппы будет возврат домой (но хз как это соеденится с тем что значения стиков принудительно задаю)

Sir_Alex
SovGVD:

я тут кстаии failsafe ночью начал вкорячивать, щас глянул на код и понял что он сработает только если приемник работает, а не если не работает ^_^ эх, зря до 3 ночи сидел

Я как то пытался по быстрому вкорячить FS, но как оказалось при потере связи не всегда пропадает сигнал на приемнике, причем все приемники ведут себя по разному - не понятно на что ориентироваться. И даже если приемник переходит в режим FS - выдавая постоянно последнее значение, из за способа обработки сигнала, значения немного прыгают - что детектируется как наличия нормального сигнала (т.е. надо вводить Deadband).
Кроме того, в APM - FS реализован на втором проце… по сути в основном коде ничего нет. Если что то и делать, то в самой APM_RC

LeonVS:

Хм… и в чем приемущество? Не думаю что SPI шина быстрей работает… Интересно какое время исполнения у них быстрого цикла?

SPI как минимум в 2 раза быстрее.

С одной стороны Пират имеет лишнюю обработку в виде APM_RC библиотеки (обработка RC приемника), но с другой стороны, у нас нет логирования (ИМХО достаточно медленная операция). Так что по идее, то на то и выходит. Но Оригинал нормально летает, а у нас колбасня какая то. Эх, не хватает у меня времени во всем разобраться. Уже и оригинальный APM имеется… попробую тайминги сравнить.
Кстати, благодаря новому осцилу, нашел один баг в коде обработки датчиков. Все они опрашиваются по таймеру (scheduler), так вот, они вызывались все в момент срабатывания таймера и могли просто не успеть считать все значения до вызова следующего таймера. В новой версии будет вызываться только один драйвер за один вызов таймера.