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

  • Аватар профиля kozin Алексей Козин в 7 г., 2 мес. назад

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

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 7 г., 2 мес. назад
    [2017-01-11 14:41:30] kozin писал(а): особенно хорошо для всяких лодок чтоб по камышам не ломились и роверов

    Для летающих тоже неплохо - одно дело спокойно лететь в ущелье над рекой, и совсем другое - ломиться через километровые горы. Для чего собственно и...

    [2017-01-11 14:47:21] kozin писал(а): да, бред собачий.

    Угу-с. Че там у них происходить последнее время я понять уже не могу. То ли после банкротства 3DR совсем похужело и все занялись хлебом насуЧным, то ли зимнее обострение - но за 125 шагов PWM ногами бить нада.

    Я делаю таймер на 16МГц, 1000 шагов, остановка по прерыванию UPDATE, запуск по push()

    [2017-01-11 14:51:17] kozin писал(а): кто то делал колекторники

    Простите мне мой французский, но нахерали коллекторники на Арду? Их ниша - контроллеры весом 1-2 грамма а в этот размер даже RevoMini  не укладывается

  • Аватар профиля kozin Алексей Козин в 7 г., 2 мес. назад

    if (_pwm_type == PWM_TYPE_ONESHOT125 && (_motor_fast_mask & (1U<<chan))) {

            // OneShot125 uses a PWM range from 125 to 250 usec

            pwm /= 8;

            /*

              OneShot125 ESCs can be confused by pulses below 125 or above

              250, making them fail the pulse type auto-detection. This

              happens at least with BLHeli

            */

            if (pwm < 125) {

                pwm = 125;

            } else if (pwm > 250) {

                pwm = 250;

            }

        }

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

    ужс.

    я читал их обсуждение "делать ли ваншот", там все были решительно против, и похоже просто сделали "на отвяжись", типО вот увидите что еще хуже все стало :-/

    UPD. нашел поискком - так это даже не в HALе а в MotorMatrix! то есть вытянуть нормальный сигнал в этом режиме вообще не получится - шкала априори урезана!

    Ну все, пойду делать свою давнюю хотелку - конфигурируемые параметры для HAL-а...

  • Аватар профиля kozin Алексей Козин в 7 г., 2 мес. назад

    Если можно пара идей - пожеланий.

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

    примерно как визвестном проекте клинфлайт. польза будет в том что при добавлении кастомной платы не будет необходимости вносить правки в основной код, поддерживать такой проект будет проще.

    и еще идея под добавление праты сделать скрипт, которому на входе передаешь тип проца, частоту кварца а он генерит необходимые для платы файлы и мэйк таргет

    кстати в клинфлайте еще ништяк что все порты задаются не по номерам по названию  например PE5

    этот подход упрощает создание своего конфига под новую плату

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 7 г., 2 мес. назад
    [2017-01-12 10:20:13] kozin писал(а): озможно ли (может даже планируется) вынести все определения назначеия пинов в конфиг платы

    ни малейших проблем - делается нужный дефайн в конфиге платы #define BOARD_чтототам и потом в нужном месте используется для локального дефайна. Например так я вынес ноги SoftI2C и USB_SENSE, и имено так я и собираюсь даже список SPI-устройств задавать.

    Но собирать это по разным файлам проще всего именно при попытке портировать на ДРУГУЮ плату, на этой-то и так работает :)

    [2017-01-12 10:20:13] kozin писал(а): в клинфлайте еще ништяк что все порты задаются не по номерам по названию

    Дело вкуса, мне наоборот по номерам больше нравится ибо универсальнее - никто не мешает их задефайнить обратно в имена.  Если уж на то пошло то в клинфлайте вообще все кишки на поверхности :)

    mpuSpi6000CsPin = IOGetByTag(IO_TAG(MPU6000_CS_PIN));

        IOInit(mpuSpi6000CsPin, OWNER_MPU, RESOURCE_SPI_CS, 0);

    вместо кошерного _pinMode(MPU6000_CS_PIN, OUTPUT) ;   :roll:

     UPD. Какой такой конфиг платы если у Ардушников адрес и номер(!) шины I2C задается прямо в ToshibaLED_I2C.cpp  :evil:

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 7 г., 2 мес. назад
    [2017-01-11 15:02:49] kozin писал(а): if (_pwm_type == PWM_TYPE_ONESHOT125

    Посмотрел я все это безобразие внимательно.  Тут остается либо пытаться добиться отмены этого ужаса дабы HAL получал полный сигнал, либо ставить в настройках обычный OneShot  а в HALе уже игнорить в этом режиме все остальное и генерировать самостоятельно честный OneShot125. И второй путь явно проще...

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 7 г., 2 мес. назад
    • OneShot готов для тестирования
    • начальная поддержка параметров для HAL
  • Аватар профиля kozin Алексей Козин в 7 г., 2 мес. назад

    по интервалам обновления ваншот удобно отслеживать частоту маин лупа. не смотрели осцилографом 400гц стабильно?

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

    Пока не смотрел, ибо как уже говорил обработка (в прерывании!) данных с гиракселя может занимать 1286uS, а еще 2 обработчика имеют среднее время 632 и 442uS, так что пока обработка датчиков не будет хоть немножко оптимизирована о строгом соблюдении времени можно и не думать.

    Прочитал про ваши успехи, шикарный щелчок по носу официалам :) Но не могу не удивиться режиму ULTRAPWM8х - от меня ускользает его тайный смысл... Если и придумывать улучшательства то IMHO куда-то в эту сторону.

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

    Испытал сегодня когнитивный диссонанс. Условия: 

    Обработка прерываний от таймера, функция dispatch_general_h(). Если строку сброса флагов прерывания "dev->regs->SR &= ~dsr" расположить после всех вызовов "handle_irq()"  то все замечательно работает. Но если эту строку перенести перед вызовами "handle_irq()"  то не будет вызван ни один обработчик. Хотя казалось бы какая разница - установленные битовые флаги прерываний мы ведь уже получили!

     Однако если в любое место этой функции ДО вызова нужного обработчика поставить точку отладки то все самым магическим образом снова работает... Ничего не понимаю :(

  • Аватар профиля An_private An_private в 7 г., 2 мес. назад
    [2017-01-16 04:55:38] night_ghost писал(а): Но если эту строку перенести перед вызовами "handle_irq()"  то не будет вызван ни один обработчик.
    Надо внутрянки хендлеров смотреть. Насколько я помню (правда давно это было) внутри хендлеров тоже есть проверка флагов.
  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 7 г., 2 мес. назад

    Не понял. Тех что вызываются по ссылке как handler()? В них нет никакой проверки, все отдано в драйвер. И вобщем-то до них дело не доходит -  вызова обработчика не производится, брекпоинт на "blx Rn" не срабатывает пока нет брекпоинта выше.

    Тут самый цимес вобщем-то в том что отладка влияет на исполнение программы... Таковое обычно говорит о временах, но каким боком оно к исполнению программы в проце?!

  • Аватар профиля An_private An_private в 7 г., 2 мес. назад
    [2017-01-16 07:27:51] night_ghost писал(а): В них нет никакой проверки, все отдано в драйвер.

    А, хорошо. Просто помню была как-то подобная проблема.

     

  • Аватар профиля Night_Ghost Night_Ghost287 пунктов в 7 г., 2 мес. назад
    [2017-01-16 07:48:46] anprivate писал(а): А, хорошо

    Что ж хорошего в том что кусок кода нельзя отлаживать пошагово?

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

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

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

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