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

SergDoc

Вот только интересный момент, у меня получается на одном таймере теперь висит и 50Гц шим и 400Гц - как-то нехорошо получаеццо…

rual
SergDoc:

у меня получается на одном таймере теперь висит и 50Гц шим и 400Гц - как-то нехорошо получаеццо…

Не очень, у всех каналов таймера будет герцовка как у последнего в структуре по ссылке в hardwareMaps[]

SergDoc

так вот я и хочу повесить trigger сонара на порт A-какой нибудь PA13 или PA14 - как правильно в драйвере записать GPIO ?

серва то работает, а она бы на 400Гц не потянула…

вот где переключается канал в 50Гц режим


if (init->useServos) {
            // remap PWM9+10 as servos
            if (port == PWM9 )//|| port == PWM10)
                mask = TYPE_S;
        }

и отсчёт моторов сдвигается - я закоментировал PWM 10 -порт PA11, отсчёт пошол с него и мотор на нём завёлся, возможно что теперь он не на 400Гц а на 50Гц.

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

SergDoc

вот статейка шимы на одном таймере но с разной частотой по каналам… это я себя успокаиваю - будет погода подлетну посмотрю 😃

rual
SergDoc:

так вот я и хочу повесить trigger сонара на порт A-какой нибудь PA13 или PA14 - как правильно в драйвере записать GPIO ?

вылож файлы сонара .c и .h поправлю

SergDoc

я впринципе попробовал перекидывать - не вышло

case sonar_pwm56:
        trigger_pin = GPIO_Pin_8;   // здесь номер порта
        echo_pin = GPIO_Pin_9;      // PWM6 (PB9) - 5v tolerant
        exti_line = EXTI_Line9;
        exti_pin_source = GPIO_PinSource9;
        exti_irqn = EXTI9_5_IRQn;
        break;
-------------------------------------------------------------------------
// tp - trigger pin
    GPIO_InitStructure.GPIO_Pin = trigger_pin;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure); // сам порт 
rual
SergDoc:

я впринципе попробовал перекидывать - не вышло

// tp - trigger pin
    GPIO_InitStructure.GPIO_Pin = trigger_pin;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure); // сам порт

Порт забыл поменять…

drv_hcsr04.rar

SergDoc

Нет менял, это просто для примера, возможно он где-то задействован в программном (возможно для переключения в cli как в арду или переключение каких-то режимов), но я не нашел и даже упоминаний…

ааа вот оно чё


 last_measurement = current_time;
    distance_ptr = distance;

    GPIO_SetBits(GPIOB, trigger_pin);
    //  The width of trig signal must be greater than 10us
    delayMicroseconds(11);
    GPIO_ResetBits(GPIOB, trigger_pin);

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

замерял линейкой сонар врёт на сантиметр…

SergDoc

На портах А не пошло…

это порты для отладки через St-Link , их надо где-то переназначить…

не надо голову дурить, у меня ещё порт B не кончился 12, 13, 14, 15 - тобиш SPI но я его как порядочная св не развёл придётся припаятся пямо к лапе…

SergDoc

В общем trigger переехал на PA11, моторы на 4-й таймер, серва на 1-м, всё завелось 😃

rual
SergDoc:

всё завелось

отлично, удержание высоты проверял?

SergDoc

Я ещё только пытаюсь алт холд Александра (Mahovik) воткнуть, т.к. не пошли прошивки последние, а потом уже вклинивать сонар в IMU буду, он сейчас только показывает высоту и всё, в расчётах не учавствует…

Ещё идея лезет, от прошлого проекта осталась платка под GPS (можно крепить поверх мелкой на стойках), пожертвовать двумя AUXами - на первом сделать LEVEL, LEVEL+Alt Hold, LEVEL+Alt Hold+Headfree - трёхпозиционник, на втором переключение GPS - удержание позиции и возврат домой, под GPS освободить второй UART…

SergDoc

Новый Алт Холд вклинил, в отличии от Таймкопа - моторы работают, набираюсь смелости и вперёд за сонаром…

SergDoc

Не знаю, толи мои кривые руки, толи особенности программирования ARM, алгоритм я полностью не осилил, сделал проверки на адекватность сонара непосредственнов IMU, так же Alt Hold теперь работает если активирован сонар (не важно есть он или нет его физически - главное чтоб задефайнен был - надеюсь пока), вобщем всё размазано по всему проекту, даже страшно показывать что есть на данный момент, сейчас разбираюсь с фильтрами на сонаре - надо они, ненадо? С ошибками тоже лопухнулся немного по сей причине пока переключение с барометра на сонар затягивается, ну это поправлю, по крайней мере в GUI уже что-то вменяемое показывает, беспокоит аксель, как бы фильтронуть его по ВЧ - желательно прямо сырые данные, а может и не надо. Вывел в Cli параметры для фильтров сонара - можно баловатся не перешивая (но пока я вообще фильтр отключил чтобы в гуи посмотреть что реально творится) главное сейчас не заленится и продолжить испытания, хотя для меня сейчас уже радость что во первых компилируется, а во вторых довольно вменяемые данные 😃
ну если добью огрехи, выложу этот страх божий на обозрение 😃

Razek
SergDoc:

сейчас разбираюсь с фильтрами на сонаре - надо они, ненадо?

А сонар какой HC-SR04? Все зависит от сонара и его монтажа. Если данные скачут то фильтр нужен хотя он и будет снижать быстродействие, ессено на столовых тестах они могут и не скакать. Товарищ Алексмос добивался хороших результатов без фильтра на вие

SergDoc

Да HC-SR04 сначала попробую без фильтра, показания похожи на правду, главное над тряпками не летать - даже рубашка глушит сонар полностью 😦
О, надо над ковром попробовать…

HikeR

при приеме данных сонара кто-нибудь учитывает крен/тангаж?

rual
HikeR:

при приеме данных сонара кто-нибудь учитывает крен/тангаж?

А смысл? Сонар не имеет четкой направленности в пределах рабочего сектора. Если только сфокусировать его…

HikeR

и что он покажет при наклоне аппарата больше “рабочего сектора”? дунул ветер при посадке (или висении), аппарат наклонился для компенсации, высота резко “увеличилась”, софт обязан сбросить газ.
в симуляторе (эмуляция сонара с 10° сектором и идеально ровной земли) это приводит к такой колбасне, что после 2-3 раза обязательно последует падение.

tusik
HikeR:

кто-нибудь учитывает крен/тангаж?

Что-то, в свое время на мегапирате пробовали

Sir_Alex
HikeR:

и что он покажет при наклоне аппарата больше “рабочего сектора”?

Реально поможет только повесить сонар на подвес, смотрящий всегда вниз. При большем угле чем 10-15гр - показания будут равны нулю.
В Ардукоптере (и в мегапирате) есть такая коррекция, но отключена всегда:

            #if SONAR_TILT_CORRECTION == 1
                // correct alt for angle of the sonar
                float temp = cos_pitch_x * cos_roll_x;
                temp = max(temp, 0.707);
                sonar_alt = (float)sonar_alt * temp;
            #endif