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

Drinker

Я поизучаю вопрос нащщет пидов. Конфиг рамы конечно спорный. Раздвинуты ноги гыгы.

SergDoc

Пиды возможно и трогать не придётся (если рама примерно 450-я и 10-е пропы), а вот сменить тип рамы на X надо будет (но это даже без перепрошивки) там скорей всего V тип стоит…

SergDoc

DMA в F4 - беда, и как-то надо её решать…
Проблема с 1-м Usart - вроде бы всё красиво, но зачем rx и tx вешать на один канал? хоть и потоки разные, канал один и тотже, (кстати для всей периферии такой маразм) а что происходит? а происходит следующее - потоки “деруться” за канал и побеждает естественно поток с младшим номером, в частности для Usart1 побеждает rx т.к. он либо stream2, либо stream5 тогда как tx stream7… Вопрос - как их разрулить? занизить приоритет одного из потоков - дык он потухнет 😦


rual
SergDoc:

Проблема с 1-м Usart - вроде бы всё красиво, но зачем rx и tx вешать на один канал?

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

Что-то комрад Дринкер за выходные не проявился. Не фотки Хавка не графика акселя в полете…

Drinker
rual:

Что-то комрад Дринкер за выходные не проявился

Я выходные провел далеко и без хобби. Товарищ серг поведал, что в хавк должна быть вставлена симка. Типо без симки он вообще не запустицца. Если так, то вечером будут графики с прошлых полетов.

rual
Drinker:

Я выходные провел далеко и без хобби.

Понятно, ждёмс… В фото хавка интересует набор датчиков.

SergDoc
rual:

Не вижу проблемы

Тогда я вобще не понимаю в чём беда? Mahowik сказат что у него не та, не другая версия драйвера вообще по tx не запустилась…
хотел сегодня вылететь, даже с планшетом договорился, а тут мокрый снег с дождём и ветер 😦

rual
SergDoc:

Тогда я вобще не понимаю в чём беда?

Вот я действительно не понял что за беда происходит, когда нужно временно отключить ПДП, а потом возобновить. Не могу нормально ПОВТОРНО инициализировать поток, хотя остановку ПДП делаю по руководству, дожидаюсь снятия бита DMA_SxCR_EN.

DMA_Cmd (DMA2_Stream3, DISABLE);
while(DMA_GetCmdStatus(DMA2_Stream3) != DISABLE);

Может у вас с этим же проблема?

Показывай код.

SergDoc

Вот старая версия github.com/SergDoc/…/drv_uart.c
Вот новая github.com/SergDoc/…/drv_uart.c
а итог один - тормоза в цыкле 😦 а у Саши вообще не запустился…
или тут надо:

 /* Î÷èùàåì áèò îáðàáîòêè ïðåðûâàíèÿ */

    DMA_ClearITPendingBit(DMA2_Stream7,DMA_IT_TCIF7);
    DMA_Cmd(DMA2_Stream7, DISABLE);
while (DMA_GetCmdStatus(DMA2_Stream7) != DISABLE) {
                   };//добавить?
    if (txBufferHead != txBufferTail)
                               uartTxDMA();
                else
        txDMAEmpty = true;
        }

хоть ты плату снимай…

Не наверно пока новую не соберу снимать не буду, а потом уже на старой буду эксперименты экспериментировать:)

Drinker:

Товарищ серг поведал, что в хавк должна быть вставлена симка.

Логи можно и неразбирая скачать через терминал в планнене…

Drinker
SergDoc:

Логи можно и неразбирая скачать через терминал в планнене…

Попробую. Спасибо. Только ткни куда тыкать.

И чего-то я запуталсо - две версии планнера есть что-ли? На сцайте у 3др версия 2.0, у меня какаято старая и по виду не похожая.

Alexey_1811
SergDoc:

а итог один - тормоза в цыкле а у Саши вообще не запустился… или тут надо:

Попробуйте напрямую с регистрами работать. Говорят в STM32F4xx_StdPeriph_Driver косяки проскакивают.

SergDoc

Есть apm planner (Qt)
и есть Mission planner (net) но по сути они похожи, во вкладке терминал выбрать PX4/PIXHAWK > connect > скачать лог , у меня винда на этом ноуте тормознутая, так что не удивляйтесь - там видно несколько раз тыкался в connect

Alexey_1811:

Говорят в STM32F4xx_StdPeriph_Driver косяки проскакивают

Скорей всего 😦

rual
Alexey_1811:

Говорят в STM32F4xx_StdPeriph_Driver косяки проскакивают.

Пока не встречал, правда один раз пытался на индусов всё свалить… не вышло😁 Библиотеками надо уметь пользоваться, код открытый - читай не хочу 😉

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

Alexey_1811
rual:

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

Пару раз натыкался на то что он выкидывал нужный кусок кода. Помогала установка пустой строки в области кода. Так и не понял почему так случалось.

SergDoc

Может библиотеки заменить? вроде STM32F4xx_StdPeriph_Driver по свежее уже есть?

Alexey_1811:

Пару раз натыкался на то что он выкидывал нужный кусок кода. Помогала установка пустой строки в области кода. Так и не понял почему так случалось.

да есть такое…

SergDoc

Так как нелётная погода и настроение вообще аховое, незнал чем заняццо, ну ничего не получается сегодня, решил под бубунтой Mission Planner запустить:
И так что для этого надо?
установить mono runtime

Mono — это платформа для выполнения и разработки программ на основе стандартов ECMA/ISO. Mono — реализация стандарта с открытым исходным кодом от Novell. Mono предоставляет полную среду CLR (Common Language Runtime), включая компилятор и среду выполнения, с помощью которых можно создавать и исполнять байт-код CIL (Common Intermediate Language), а также библиотеку классов.

Этот пакет содержит виртуальную машину, JIT-компилятор и AOT-генератор кода «mono». «mono» выполняет приложения для CLI (Common Language Infrastructure). В настоящий момент Mono поддерживает только архитектуры X86, PowerPC, ARM, SPARC, S/390, AMD64 и IA64. Опционально этот пакет настраивает поддержку BINFMT.

как это сделать?
в консоли набираем:

sudo apt-get install mono-runtime libmono-winforms2.0-cil libmono-corlib2.0-cil libmono-system-web4.0-cil libmono-system-management4.0-cil

после установки лезем сюда и скачиваем сам планнер в архиве!!! не msi.
распаковываем его куда-нибудь (папки без пробелов в названии и не кириллицей)
далее лезем в ту папку находим ArdupilotMegaPlanner10.exe правой клавишей ->свойства -> права ставим галочку - на разрешения запуска как приложение, открыть с помощью -> mono-runtime. Закрываем всё это дело и двойным кликом запускаем экзешник (тут есть нюанс - попросил обновится и перестал работать, так что я всё это убил и распаковал заново) и вуаля, под винду лазать больше не надо:)

rual
SergDoc:

Вот старая версия github.com/SergDoc/Nev_Multi...src/drv_uart.c
Вот новая github.com/SergDoc/Nev_Multi...src/drv_uart.c
а итог один - тормоза в цыкле а у Саши вообще не запустился…

Странно… как работает новая версия я понять не могу, ибо не вижу инициализации потока ПДП

//DMA_InitStructure.DMA_Channel = DMA_Channel_4;
//DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR;
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)txBuffer;
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
//DMA_InitStructure.DMA_BufferSize = UART_BUFFER_SIZE;
//DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
//DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
//DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
//DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
//DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
//DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
//DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
//DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
//DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;

видимо умолчательные значения совпадают с нужными ))) хотя почему круговой режим изменен на нормальный? особо плохо что закоментина строка

//DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR;

и вообще там есть режим ФИФО, его и надо пользовать.
Если будет желание и возможность, завтра перепишу.

SergDoc:

Может библиотеки заменить? вроде STM32F4xx_StdPeriph_Driver по свежее уже есть?

нее, библиотеки тут не при чем

mahowik
SergDoc:

Может библиотеки заменить? вроде STM32F4xx_StdPeriph_Driver по свежее уже есть?

SergDoc:

а итог один - тормоза в цыкле а у Саши вообще не запустился…

я на дискавери-F4 пробовал + GY-86… т.е. мот какая специфика, типа на PA9,PA10 уже чего нить навешено… хотя простой примерчик (USART без DMA) из тырнета заработал…

SergDoc:

Может библиотеки заменить? вроде STM32F4xx_StdPeriph_Driver по свежее уже есть?

в одном из примеров видел версию 1.0.2, хотя на stm оф. сайте сходу ее не нашел…

SergDoc
rual:

особо плохо что закоментина строка

умолчательные значения да совпадают
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR; // смотрел в примерах - оно один раз только выбирается, зачем два раза?

mahowik

upd: еще можно глянуть в старом порте вия на F4 code.google.com/p/uavp-mods/downloads/detail?name=…

MWArmF4\src\harness\harness.c
MWArmF4\src\harness\serial.c
там вполне структурировано и не коряво с виду написано…

// Rewritten from AQ original Copyright © 2011 Bill Nesbitt
SergDoc

Там оно работает, я проверял, но вот вопрос с dma или без?