Ардупилот на платах OpenPilot Revolution / RevoMini (записей: 1756)

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 3 мес. назад

    Посмотрел - нет, там софтверный глюк. 

     

    UPD. Чем дальше в лес тем толще партизаны ... MC5611 отказывается работать в режиме DMA - какой-то мусор считывается из ПРОМ вместо данных. Без логического анализатора не разобраться : (

  • Аватар профиля m--s s s6 пунктов в 8 г., 3 мес. назад

    Ещё у stm32f4 есть какие проблемы с dma, если несколько устройств одним dma контроллером обрабатываются. Может быть в этом проблема. Хотя маловероятно.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 3 мес. назад
    [2017-08-30 12:27:28] m-s писал(а): Ещё у stm32f4 есть какие проблемы с dma

    Ага, настольная кинга прям, 2.1.10. Не наш случай

    PS. Все, победил я DMA - сейчас ВЕСЬ прием по I2C идет через DMA

  • Аватар профиля m--s s s6 пунктов в 8 г., 3 мес. назад
    [2017-08-30 14:15:11] night_ghost писал(а): Ага, настольная кинга прям, 2.1.10. Не наш случай PS. Все, победил я DMA - сейчас ВЕСЬ прием по I2C идет через DMA

    Отличные новости. 

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 3 мес. назад
    [2017-08-31 00:20:28] m-s писал(а): Отличные новости.

    Угу, особенно учитывая что в инете готовых решений нет, те что идут как сэмплы к новой Ардуине на Ф4 не работают нормально, а даташит что-то недоговаривает. Так что все делалось исключительно "на осчупь". 

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

    PS. также удалось поднять скорость работы внешней I2C с 100кГц до 250кГц

  • Аватар профиля m--s s s6 пунктов в 8 г., 3 мес. назад

    А на revo с внутренним компасом тоже проблемы были? Или только на airbot с внешним компасом и барометром?

    Кстати, а downclock i2c не помогает?

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 3 мес. назад

    Только с внешней шиной. Емкость проводов в куче вызывает звон, вот железо в камне и дуреет. В более других камнях есть аналоговый и цифровой подавители шума, а в 405 ноги просто наружу торчат и весь этот звон идет на корявое I2C железо.

    Даунклок до 100кГц  не помогал, и даже до 75 - все равно шина звенит и лезут ошибки. Опять же, в Еррата описана бага - флаг BERR выставляется случайно и препятствует дальнейшему обмену, обход - следить и просто сбрасывать. И вторая бага, когда залипает BUSY и нужен СофтРесет. 

    В примере выше, когда железо "забывало" поднять нужный флаг, оказалось нужно не только регистр SR1 опрашивать, но и регистр CR1 трогать, тогда камень "развисает" и флаги устанавливаются вовремя. Ну и так далее, шаманство вобщем.

  • Аватар профиля An_private An_private в 8 г., 3 мес. назад

    А тупо резисторы по 100 ом повесить последовательно на провода не помогает?

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 3 мес. назад

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

    PS. Кстати, может поэтому у РевоМини и нет проблем при работе с внешней I2C :)

    UPD. пришла мысЕль сделать SoftI2C по таймерным прерываниям... чтоб также как с ДМА дать команду - и заниматься другими делами

  • Аватар профиля An_private An_private в 8 г., 3 мес. назад
    [2017-08-31 07:21:50] night_ghost писал(а): . Стараюсь избегать навеснухи лишней, она от вибрации склонна отваливаться

    Тоже верно. Хотя можно китайскими термосоплями залить - не должно отвалиться :)

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 3 мес. назад
    [2017-08-31 08:31:34] anprivate писал(а): можно китайскими термосоплями залить

    А это лишний вес. 

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 3 мес. назад

    Бинарники новой версии готовы

  • Аватар профиля DChernov DChernov в 8 г., 3 мес. назад

    Прошил РевоМини последним бинарником. Приёмник появился. Но какая-то чума с барометром - скачет на 10 километров, лёжа на столе.

    С прошивкой с больным приёмником барометр был адекватный.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 3 мес. назад

    Да, есть такое. Починяю

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 3 мес. назад

    От постоянных перепрошивок похоже сдох камень на плате Аирбот :-/ Грузится всегда в DFU, независимо от перемычек. Возвращаюсь к плате РевоМини

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 3 мес. назад

    Таймерный драйвер I2C готов! Прием 2х байт на частоте 125кГц требует 189 прерываний, занимая в течение ~400uS 22% времени процессора. И, как и предыдущий софтверный драйвер, не имеет ошибок шины - проверено как на внутренней, так и на внешней шине.

    Бинарники будут чуть позже  готовы

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 3 мес. назад

    Исправлена проблема с логами, бинарники готовы

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 3 мес. назад

    также готовы бинарники с последними изменениями из апстрима

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 3 мес. назад

    где-то во французских Альпах

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 3 мес. назад

    Похоже чуду-юду поймал. 

    Преамбула. Таймерный драйвер SoftI2c, который работал на РевоМини как лапочка, на плате АирботВ2 начал давать регулярные ошибки таймаута. Раскопки показали, что иногда (!) неожиданно (!!) останавливается таймер, переставая генерировать прерывания. Отчего ожидание обмена и вылетает по таймауту. Можно конечно взять второй таймер и изобразить на нем Watchdog для прерывания первого таймера, но мин пардон, ЧТОЭТОЗАХРЕНЬ??? Таймер больше нигде не используется, так что конфликт исключается.

    Смена таймера меняет частоту глюков, но не устраняет их полностью. 

    Фабула. Похоже помеховая обстановка на платах Аирбот препятствует их реальному использованию.

  • Аватар профиля m--s s s6 пунктов в 8 г., 3 мес. назад

    Что-то тут не так. Inav на airbot v2  и bn-800 gps/compass нормально работают даже на hw i2c с 0 ошибок на шине

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад

    Я регулярно поглядываю в их код, и да - "что-то тут не так" (С). Потому что чудовищное количество ошибок I2C на некоторых платах с новым драйвером не раз обсуждалось на их форуме, а их SPI драйвер работает для чтения пары байт из МПУ, но не всего буфера в килобайт - проверено.

    вопрос тут один: почему таймер ИНОГДА перестает генерировать прерывания? и почему это происходит на одной плате, и не происходит на другой? В отладчике прекрасно видно - регистр управления разрешает работу таймера, а он - стоит и не считает. ЧТО ЭТО???

    Могу скриншот отладчика сделать, где видно что таймер разрешен, но не считает.

  • Аватар профиля m--s s s6 пунктов в 8 г., 2 мес. назад

    Мистика какая-то. Там счётчик не обновляется или только прерывания не генерируются?

    Может как-то отключается клок у таймеров...

    Если понизить системную частоту не изчезает проблема?

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад

    Счетчик не обновляется. Именно что мистика, действительно похоже что тактиривание останавливается - но происходит это и у тех таймеров что не имеют выбора источника тактов! Пробовал 4 и 9 таймеры, сегодня остальные  свободные попробую. С частотой играть не пробовал, смысла не вижу. Попробовал переключить все выводы в медленный режим - звона стало меньше, но все равно таймеры глючат.

    UPD. после снижения скорости выводов стал себя более прилично вести аппаратный I2C так что пока вернулся к нему

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад

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

  • Аватар профиля m--s s s6 пунктов в 8 г., 2 мес. назад

    Отлично, хороший стресс-тест для шедулера получился)

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад

    ну кажется все

    I2C stats
    bus 1 addr 77 errors 0 last error=0
    bus 1 addr 1E errors 0 last error=0


    sleep time 28.13759%
    task 0 (0x80AE2E1) times: full 122034.1ms ( 122.03%) mean 1501.8uS max 95267uS at 1000FF58// this is main task
    task 1 (0x80AEE71200058E8) times: full 0.0ms ( 0.00%) mean 2.7uS max 9uS at 1000DEF0 // this is 10s task
    task 2 (0x80AF5B920005920) times: full 4196.5ms ( 4.20%) mean 48.2uS max 978uS at 1000D9E8 // this is compass driver
    task 3 (0x803BA0120009430) times: full 950.6ms ( 0.95%) mean 7.8uS max 47uS at 1000D4C0 // this is analog read
    task 4 (0x80AE671) times: full 8746.2ms ( 8.75%) mean 26.2uS max 996uS at 1000D048 // this is io_tasks process
    task 5 (0x803E945200094F8) times: full 1841.2ms ( 1.84%) mean 29.1uS max 996uS at 1000AFB0 // this is baro driver
    task 6 (0x8047B8D2000DF10) times: full 33621.2ms ( 33.62%) mean 262.4uS max 2902uS at 1000AA30 // this is MPU6000 driver

    IO completion time= 543.7ms ( 0.418%)
    task 80AD335200081F8 time 340.1ms ( 0.261%) mean 3.278uS // this is PPM1 parser
    task 80AD33520008320 time 0.0ms ( 0.000%) mean nanuS
    task 80AF99D20008448 time 16.2ms ( 0.012%) mean 256.762uS // this is DSM parser
    task 80AB651200084C0 time 0.0ms ( 0.000%) mean nanuS
    IO completion effectiveness= 65.515%

    мы понесли тяжелую утрату - шедулер по прерываниям таймера нас покинул. Теперь все датчики обрабатываются в задачах кооперативной многозадачности. Это позволило исключить время драйвера MPU6000, достигавшее порой 3000мкс, из времени прерывания. Оно конечно никуда не делось, но хотя бы происходит тогда когда основной процесс ждет. Также время различных задержек, которое тратилось бесполезно во время прерывания, теперь время для других задач. 

    В прерываниях остались обработчики действительно важных и быстрых задач, например RC_Input

    UPD. бинарники готовы

  • Аватар профиля m--s s s6 пунктов в 8 г., 2 мес. назад

    Последняя версия на airbot v2.

    Какие-то проблемы с гироскопом/аксерерометром. Медленно грузятся параметры. С i2c проблем нет. Барометр тоже определился нормально.

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 8 г., 2 мес. назад

    я знаю, уже переделал и тестю

  • Аватар профиля m--s s s6 пунктов в 8 г., 2 мес. назад

    Хорошо, ждём )

← Форум группы   Все форумы К последней записи
Постов на странице:

Вы автоматически вступите в эту группу, когда ответите в теме.

Добавить ответ:

-
Рейтинг@Mail.ru