Специальные цены   новые товары
+ Ответить в теме
Страница 35 из 165 ПерваяПервая ... 25 33 34 35 36 37 45 ... ПоследняяПоследняя
Показано с 1,361 по 1,400 из 6569

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

Тема раздела Квадрокоптеры. Общие вопросы в категории Квадрокоптеры и мультироторы; d+цифирка эта маплавское (аля ардуинское) обозачение, полагаю такая ботва без маловского ИДЕ реткосный геморой, если только из ИДЕ соответсвующую функцию ...

  1. #1361

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,472
    d+цифирка эта маплавское (аля ардуинское) обозачение, полагаю такая ботва без маловского ИДЕ реткосный геморой, если только из ИДЕ соответсвующую функцию выдрать.

  2.  
  3. #1362

    Регистрация
    18.02.2013
    Адрес
    Москва
    Возраст
    31
    Сообщений
    61
    Добрый день, друзья! На сколько я понимаю, все автопилоты и системы стабилизации с ними, работают по следующему алгоритму: опрос РРМ сигнала с приемника аппаратуры, опрос всех датчиков, коррекция РРМ сигнала и передача его на двигатели. Поскольку изачально частота обновления РРМ сигнала 50Гц (в футабе 7 вроде 68Гц), то с учетом потери времени на опрос датчиков, на выходе мы будем иметь как максимум 25Гц обновления РРМ сигнала с приемника, а то и меньше. Я все правильно понимаю?

  4. #1363

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Радио задаёт либо угол наклона, либо угловую скорость, ну и т.д. - ну в общем знать, что пилот от аппарата хочет, а к обсчёту ИНС или как это ИМУ, ну как кому больше нравится, никакого отношения не имеет, это КУК там да нопами загружен - ждёт прерывания со входа, потом опрашивает гиры и высчитывает выходы на моторы 50Гц ему за глаза для обсчёта....

    Цитата Сообщение от rual Посмотреть сообщение
    d+цифирка эта маплавское (аля ардуинское) обозачение,
    да вот с этим и воюю, зато порты перепишу без особых напрягов под свою плату, хотя г. редкостное, но на начальной стадии от этого не смогу отказаться - потренируюсь на том, что есть.... а да онож можно писать как уже говорил, и просто цыфирку, и Dцыфирка, и порт сам прописать аля PAкакойнибудь - всё переварит....
    Последний раз редактировалось SergDoc; 10.03.2013 в 19:59.

  5. #1364

    Регистрация
    18.02.2013
    Адрес
    Москва
    Возраст
    31
    Сообщений
    61
    Цитата Сообщение от SergDoc Посмотреть сообщение
    50Гц ему за глаза для обсчёта....
    но важно как можно быстрее передать изменение РРМ сигнала с радио на выход платы. В идеальном случае, если просто транслировать сигнал с радио на выход через плату стабилизации, то все изменения можно передавать так же с частотой 50Гц. но стоит только отвлечься на обработку датчиков, так сразу как минимум одну пачку импульсов РРМ придется пропустить, соответственно на выход передавать изменение РРМ через раз, с частотой 25Гц. просто хочется понять, это нормальное явление? и с какой минимальной частотой можно передавать изменения РРМ с радио на выход?

  6.  
  7. #1365

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    относительно КУКа - простой самый, работает на 8-ми МГц. и большую часть времени, между прерываниями курит:
    Код:
    void delay_us(uint8_t time)            /* time delay for us */
    { 
     while(time--)
     {
    	asm volatile ("NOP"); asm volatile ("NOP"); 
    	asm volatile ("NOP"); asm volatile ("NOP"); 
    	asm volatile ("NOP"); asm volatile ("NOP"); 
    	asm volatile ("NOP"); 
     }
    }
    гы пока копался нашел радио (всмысле входы)
    Код:
    //PIN assignment
    #define THROTTLEPIN 2
    #define ROLLPIN 4
    #define PITCHPIN 5
    #define YAWPIN 6
    #define AUX1PIN 7
    // alias for RC
    #define ROLL 4
    #define PITCH 2
    #define YAW 3
    #define THROTTLE 1
    #define MODE 5
    #define AUX1 6
    #define AUX2 7
    #define AUX3 8

    APM_RC_MP32.h - если кому интересно, выходы там же
    Последний раз редактировалось SergDoc; 10.03.2013 в 20:40.

  8. #1366

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,472
    Цитата Сообщение от SergDoc Посмотреть сообщение
    а да онож можно писать как уже говорил, и просто цыфирку, и Dцыфирка, и порт сам прописать аля PAкакойнибудь - всё переварит....
    Я бы всёж посмотрел на ту функцию, которая данный тип переваривает.



    Цитата Сообщение от Alexsis1109 Посмотреть сообщение
    Поскольку изачально частота обновления РРМ сигнала 50Гц (в футабе 7 вроде 68Гц), то с учетом потери времени на опрос датчиков, на выходе мы будем иметь как максимум 25Гц обновления РРМ сигнала с приемника, а то и меньше. Я все правильно понимаю?
    Ну это ведь как напишите код, если тупить в ожидании окончания чтения всех каналов РУ, то может обновление выхода и реже 25Гц будет. У меня эти процессы друг с другом не связаны, обновление горизонта 400Гц с запуском по готовности ДУС, обновление ПИДов и ШИМ с запуском от таймера ШИМ 400Гц, получение ППМ по фронту-спаду на входах захвата таймера (примерно 50Гц), зависит от сигнала. И абсолютно не важно сколько раз обновляется ППМ, да хоть 1 раз в секунду, обновление выхода всё равно будет 400Гц (т.е. каждый период ШИМ) и стабилизация будет работать с той же частотой, а вот задача на углы будет менятся раз в секунду.

  9. #1367

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Цитата Сообщение от rual Посмотреть сообщение
    Я бы всёж посмотрел на ту функцию, которая данный тип переваривает.
    В ардуине, на сколько помню, тоже можно порты на прямую обзывать PA.. PB.. но вот то, что цифирка или Dцифирка меня тоже убила

  10.  
  11. #1368

    Регистрация
    18.02.2013
    Адрес
    Москва
    Возраст
    31
    Сообщений
    61
    Цитата Сообщение от rual Посмотреть сообщение
    И абсолютно не важно сколько раз обновляется ППМ, да хоть 1 раз в секунду, обновление выхода всё равно будет 400Гц (т.е. каждый период ШИМ) и стабилизация будет работать с той же частотой, а вот задача на углы будет менятся раз в секунду.
    можно вот тут поподробнее... не совсем понял как Вы это реализуете. Расскажу как я это делаю, а Вы скажите что не так. Имеется обычный приемник от Futtaba 7. У него на выходе, ШИМ каждого канала обновляется примерно с частой 68ГЦ. И имеются гироскопы. И вот какой алгоритм программы: захват "1" ШИМа первого канала приемника - подсчет его длительности, как только на первом канале "0", переходим к подсчету длительности второго канала, и так далее все каналы по подряд. Потом опрос гироскопа - коррекция ШИМа и передача РРМ сигнала на двигатели. Получается, что когда я перехожу к опросу гироскопа, я пропускаю следующую пачку РРМ сигнала которая может уже быть с другими длительностями ШИМов каналов. Вот главная проблема и как ее решить? Или например время получения данных с барометра BMP085 в самом точном режиме составляет 30мс. А ШИМ с приемника обовляется с частотой 68Гц, т.е. примерно 15мс. Получается пока я буду сидеть в цикле опроса барометра, успеет пройти аж две новых пачки РРМ сигнала?((((

    Цитата Сообщение от rual Посмотреть сообщение
    если тупить в ожидании окончания чтения всех каналов РУ, то может обновление выхода и реже 25Гц будет.
    разве можно между чтением двух каналов РУ еще что-то делать? допустим если первый канал в самом минимуме а это 1мс, то до второго канала остается время не более 1мс, это в лучшем случае, а то и меньше. Вы хотите сказать что в это время нужно считывать, домустим, инфу с датчиков? разве спасет 1мс? или я не так понял?
    Последний раз редактировалось Alexsis1109; 11.03.2013 в 00:50.

  12. #1369

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    39
    Сообщений
    1,941
    Цитата Сообщение от Alexsis1109 Посмотреть сообщение
    разве можно между чтением двух каналов РУ еще что-то делать? допустим если первый канал в самом минимуме а это 1мс, то до второго канала остается время не более 1мс, это в лучшем случае, а то и меньше. Вы хотите сказать что в это время нужно считывать, домустим, инфу с датчиков? разве спасет 1мс? или я не так понял?
    1. За 1мс, можно горы свернуть (Например чтение значений Гиры, Акселя и Температуры через I2C шину с датчика MPU6050, занимает 550мкс (это на ATMEGA2560))
    2. Для декодирования PPM, достаточно ловить переход из 0 в 1 (или наоборот). Для этого используйте прерывание.
    3. Пока вы читаете значения из Гироскопа или делаете другие вычисления. Вам абсолютно ничего не мешает обрабатывать PPM через прерывания.

  13. #1370

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    45
    Сообщений
    435
    Цитата Сообщение от Sir Alex Посмотреть сообщение
    1. За 1мс, можно горы свернуть (Например чтение значений Гиры, Акселя и Температуры через I2C шину с датчика MPU6050, занимает 550мкс (это на ATMEGA2560))
    У меня получается примерно в четыре раза медленнее, причем без чтения температуры, но на ATMEGA 32. Использую стандартную библиотеку от Jeff Rowberg, команду getMotion6(&ax, &ay, &az, &gx, &gy, &gz). Если запрашивать гиры и аксели по отдельности (getAcceleration(&ax, &ay, &az), getRotation(&gx, &gy, &gz), получается медленнее. Процессор, насколько я в курсе, не должен влиять на скорость опроса, ибо основной затык в шине i2C и в самом чипе MPU6050.

    Не поделитесь своим методом получения данных с MPU6050, при котором на опрос всех датчиков уходит 550 микросекунд? Или это секрет?

  14. #1371

    Регистрация
    18.02.2013
    Адрес
    Москва
    Возраст
    31
    Сообщений
    61
    Цитата Сообщение от Sir Alex Посмотреть сообщение
    1. За 1мс, можно горы свернуть (Например чтение значений Гиры, Акселя и Температуры через I2C шину с датчика MPU6050, занимает 550мкс (это на ATMEGA2560))
    а как Вы прокомментриуете пример с барометром 085 на обработку которого уходит примерно 30мс? Тут то придется пропустить парочку пачек РРМ сигнала или и тут усть какой то выход?

  15. #1372

    Регистрация
    07.04.2012
    Адрес
    Брянск
    Возраст
    29
    Сообщений
    1,675
    Записей в дневнике
    6
    Цитата Сообщение от Alexsis1109 Посмотреть сообщение
    а как Вы прокомментриуете пример с барометром 085 на обработку которого уходит примерно 30мс? Тут то придется пропустить парочку пачек РРМ сигнала или и тут усть какой то выход?
    посмотрите для примера код мультивия - будет понятно.
    Все что можно по прерываниям делать - делается по прерываниям.
    на остальное есть общий цикл, в котором идет подсчет времени.
    если прошло необходимое время (для аппы - 20мс, для баро там 3-4 пункта, каждый через отдельный промежуток времени) то выполняем нужные действия (внутри баро оператор case с запоминанием текущего шага), иначе пропускаем данный пункт и выполняем прочие действия.

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

  16. #1373

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    39
    Сообщений
    1,941
    Цитата Сообщение от Alexsis1109 Посмотреть сообщение
    а как Вы прокомментриуете пример с барометром 085 на обработку которого уходит примерно 30мс? Тут то придется пропустить парочку пачек РРМ сигнала или и тут усть какой то выход?
    Обработку???? Чтение барометра занимает порядка 200-300мкс (я точно не помню по BMP085), накиньте еще 50-100мкс на обсчет давления и температуры.

    Цитата Сообщение от Gene Посмотреть сообщение
    Не поделитесь своим методом получения данных с MPU6050, при котором на опрос всех датчиков уходит 550 микросекунд? Или это секрет?
    Почему секрет, код Мегапирата открыт для всех
    Чтение выполняется одной командой в пакетном режиме:
    Код:
        // now read the data
        uint8_t rawMPU[14];
        
        if (I2c.read(mpu_addr, MPUREG_ACCEL_XOUT_H, 14, rawMPU) != 0) {
    //        healthy = false;
            return;
        }
        
        _sum[0] += (((int16_t)rawMPU[0])<<8) | rawMPU[1]; // Accel X
        _sum[1] += (((int16_t)rawMPU[2])<<8) | rawMPU[3]; // Accel Y
        _sum[2] += (((int16_t)rawMPU[4])<<8) | rawMPU[5]; // Accel Z
        _sum[3] += (((int16_t)rawMPU[6])<<8) | rawMPU[7]; // Temperature
        _sum[4] += (((int16_t)rawMPU[8])<<8) | rawMPU[9]; // Gyro X
        _sum[5] += (((int16_t)rawMPU[10])<<8) | rawMPU[11]; // Gyro Y
        _sum[6] += (((int16_t)rawMPU[12])<<8) | rawMPU[13]; // Gyro Z

  17. #1374

    Регистрация
    07.04.2012
    Адрес
    Брянск
    Возраст
    29
    Сообщений
    1,675
    Записей в дневнике
    6
    П.С. гдето уже писал... так вот опробовал опрос датчиков на и2с 800кГц - все отлично работает, цикл в вие сразу упал примерно на 500мкс, на 1,2МГц датчики уже не опрашиваются у меня)))

  18. #1375

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    45
    Сообщений
    435
    Цитата Сообщение от Sir Alex Посмотреть сообщение
    Почему секрет, код Мегапирата открыт для всех
    Чтение выполняется одной командой в пакетном режиме
    Я не совсем понял идет ли речь о MPU6000 или MPU6050? В коде библиотеки я не нашел упоминания о второй. Или они полностью совместимы?

  19. #1376

    Регистрация
    07.04.2012
    Адрес
    Брянск
    Возраст
    29
    Сообщений
    1,675
    Записей в дневнике
    6
    Цитата Сообщение от Gene Посмотреть сообщение
    Я не совсем понял идет ли речь о MPU6000 или MPU6050
    насколько помню они совместимы, различие в том, что в 6050 только и2с, а в 6000 еще SPI есть.

  20. #1377

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    39
    Сообщений
    1,941
    Цитата Сообщение от Gene Посмотреть сообщение
    Я не совсем понял идет ли речь о MPU6000 или MPU6050? В коде библиотеки я не нашел упоминания о второй. Или они полностью совместимы?
    Я говорил про MPU6050 подключенный по I2C, но 6000 то же самое, только он еще может работать через SPI. Через SPI естественно еще быстрее будет прочитать регистры.
    Через SPI работает библиотека ArduCopter'a

  21. #1378

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Вопрос программистам: настраиваю пины под usart по типу:
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    т.е. в регистр MODER ставлю тип ноги "AF", далее надо как то указать что мне на этой ноге нужен именно USART, но как ?
    Есть регистр (два) AFR для IO, есть функция его настройки, но в хедерах в качестве параметров для нее только безликие GPIO_Mode_AF_х....
    Где найти однозначное соответствие между _AF_x и устройством ?
    Как вообще ремаппинг правильно делается ?
    Прошу подсказки...

  22. #1379

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,472
    Цитата Сообщение от oleg70 Посмотреть сообщение
    Как вообще ремаппинг правильно делается ?
    это не про Ф3, ремапинг это Ф0,1,4. Изначально под функцию предназначены выводы определенного порта, ремапинг переключает на другие фиксированые группы выодов, порт достаточно перевести в алтернативный режим и всё.

    Цитата Сообщение от oleg70 Посмотреть сообщение
    Прошу подсказки...
    Для Ф3 немного по другому
    Код:
     /* подадим такт на порт */
      RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
      /* настройка выводов порта */
      GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_4|GPIO_Pin_5;  
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
      GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
      GPIO_Init(GPIOC, &GPIO_InitStructure);
      
      /* Соединим выводы портов с AF7 */
     GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_7);
     GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_7);
    Не претендую на точность изложения, но GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; указывает на то что вывод порта будет пользован альтернативной функцией, а функция для вывода порта выбирается GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_7);
    номер функции GPIO_AF_7 берётся из таблицы, найдите сами в ДС.

  23. #1380

    Регистрация
    18.02.2013
    Адрес
    Москва
    Возраст
    31
    Сообщений
    61
    Цитата Сообщение от mataor Посмотреть сообщение
    посмотрите для примера код мультивия - будет понятно.
    с удовольствием, можно ссылочку?

    Цитата Сообщение от Sir Alex Посмотреть сообщение
    Обработку???? Чтение барометра занимает порядка 200-300мкс (я точно не помню по BMP085), накиньте еще 50-100мкс на обсчет давления и температуры.
    если я правильно понял, все обращения к датчикам и сбор с них информации происходит как бы в свободное время между чтения каналов ШИМа РРМ сигнала?

  24. #1381

    Регистрация
    18.02.2013
    Адрес
    Москва
    Возраст
    31
    Сообщений
    61
    вот правильно ли я делаю: завожу счетчик на 10 мкс и начинаю смотреть состояние 1 канала РРМ сигнала. если после "0" пришла "1" начинаю подсчет длительности ШИМа с интервалом 10мкс. после того как настал "0" значит ШИМ закончился, запоминаю результат и перехожу к опросу 2 канала. И так же если после "0" пришла "1" начинаю подсчет длительности и так все 7 каналов приемника. Правильный ли метод? В таком случае, длительность ШИМа можно посчитать с точностью +-10мкс, что на практике выходит очень и очень грубо. Я так понимаю нужна точность как минимум 1мкс. Но счетчик отказывается работать быстрее чем 5 мкс. В чем дело? И кто с какой точностью считывает ШИМ с приемника?

  25. #1382

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,472
    Цитата Сообщение от Alexsis1109 Посмотреть сообщение
    вот правильно ли я делаю
    Все совсем не так... Вы код обработчика ППМ на прошлой странице смотрели? С работой таймера в режиме захвата знакомы? Что такое прерывания и для чего они знаете? Поймите правильно, я не могу курс лекций расписать, могу подсказать , посоветовать. Вот и советую подробно разобраться с работой таймера, посмотреть готовый рабочий код.

  26. #1383

    Регистрация
    18.02.2013
    Адрес
    Москва
    Возраст
    31
    Сообщений
    61
    Цитата Сообщение от rual Посмотреть сообщение
    Все совсем не так...
    рабочий код вижу. расскажите, пожалуйста, в двух словах суть самого процесса считывания ШИМа, чтобы лучше код осмыслить...

  27. #1384

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    39
    Сообщений
    1,941
    Цитата Сообщение от Alexsis1109 Посмотреть сообщение
    если я правильно понял, все обращения к датчикам и сбор с них информации происходит как бы в свободное время между чтения каналов ШИМа РРМ сигнала?
    Ага, вроде того, но не совсем. Вам надо обрабатывать PPM, Датчики - по прерываниям. Т.е. у вас постоянно крутится основной цикл программы, который занимается обсчетами углов, команд от пользователя, телеметрией и др. делами. И когда приходит прерывание от барометра, вы читаете его новое значение и запоминаете, дальше управление возвращается в главный цикл. Когда приходит прерывание от PPM, считаете ширину импульса очередного канала, как только прочитали весь пакет, записываете в переменные, которые потом читаются из главного цикла. Ну а главный цикл постоянно что то обсчитывает и выдает результат в виде управляющих сигналов на моторы.

    Все это утрированно, т.к. датчики могут быть и не подключены с использованием прерываний (как правило этот вывод называется INT). Тогда вам надо отсчитывать определенное время в главном цикле и если например прошло 9ms, можно прочитать свежее значение барометра.

  28. #1385

    Регистрация
    18.02.2013
    Адрес
    Москва
    Возраст
    31
    Сообщений
    61
    Цитата Сообщение от Sir Alex Посмотреть сообщение
    Когда приходит прерывание от PPM
    т.е. на каждый канал приемника нужно завести в контроллере свое прерывание? и по "1" начинать его измерять?

    Цитата Сообщение от Sir Alex Посмотреть сообщение
    считаете ширину импульса очередного канала
    ширина импульса, на сколько я понимаю, считается с помощью счетчика (таймера) и чем чаще этот счетчик тикает тем точнее можно измерить длительность ШИМа. так? если это так, то с какой максимальной точностью можно измерить ШИМ в Atmega128? у меня завести таймер быстрее 5мкс не получалось, он переставал работать
    Последний раз редактировалось Alexsis1109; 11.03.2013 в 23:52.

  29. #1386

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    Цитата Сообщение от rual Посмотреть сообщение
    Всё правильно, вот только в этом этом режиме АППАРАТ не знает своё положение в пространстве, а просто пытается удерживать заданные Р/У угловые скорости.
    это 3D (акро) режим, который есть почти во всех полетных контроллерах...

  30. #1387

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    39
    Сообщений
    1,941
    Цитата Сообщение от Alexsis1109 Посмотреть сообщение
    т.е. на каждый канал приемника нужно завести в контроллере свое прерывание? и по "1" начинать его измерять?
    Так вам надо работать с PPM (8 каналов передается по одному проводу) или PWM (передается каждый канал по своему проводу)?
    Для PPM вешается одно прерывание на один вывод процессора, ловим переход из 0 в 1. Ширина импульса будет равна времени между двумя прерываниями.
    Для PWM - зависит от возможностей процессора. Если есть возможность повесить 8 аппаратных прерываний -вперед. Но можно и одним обойтись и проверять какие пины изменили свое состояние, тут надо естественно ловить оба перехода из 0 в 1 и из 1 в 0.

    Цитата Сообщение от Alexsis1109 Посмотреть сообщение
    ширина импульса, на сколько я понимаю, считается с помощью счетчика и чем чаще этот счетчик тикает тем точнее можно измерить длительность ШИМа. так? если это так, то с какой точностью можно измерить ШИМ?
    Ну например в МегаПирате, точность таймера 0.5мкс, этого достаточно. Можно и точнее, но нет в этом смысла.

  31. #1388

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    Цитата Сообщение от mataor Посмотреть сообщение
    П.С. гдето уже писал... так вот опробовал опрос датчиков на и2с 800кГц - все отлично работает, цикл в вие сразу упал примерно на 500мкс
    ну тыж понимаешь, что это не штатный режим и тут уже как карта ляжет... выйдешь на мороз, какой нить из параметров подплывет и привет кирпич Ж)

  32. #1389

    Регистрация
    18.02.2013
    Адрес
    Москва
    Возраст
    31
    Сообщений
    61
    Цитата Сообщение от Sir Alex Посмотреть сообщение
    Так вам надо работать с PPM (8 каналов передается по одному проводу) или PWM (передается каждый канал по своему проводу)?
    у меня аппаратура Futaba 7C, там, на сколько мне известно PPM сигнал. просматривая осцилом каналы приемника, заметил странную вещь. условно возьмем 1 и 2 канал. так вот ШИМ 1 канала изменялся влево, а ШИМ 2 канала изменялся вправо. Т.е. у них как бы была общая стеночка по середине. Для первого канала эта стеночка была концом, а для 2 канала началом.тогда в этом случае захватив переход из 0 в 1 первого канала можно "пролететь" аж в конец второго о_0. Вы с таким сталкивались? а все остальные каналы начинаются нормально, слево начало и увеличивают шим вправо.

    Цитата Сообщение от Sir Alex Посмотреть сообщение
    Ну например в МегаПирате, точность таймера 0.5мкс, этого достаточно. Можно и точнее, но нет в этом смысла.
    Вы не знаете, можно ли на Atmega128 завести таймер на 0.5мкс? У меня уже при 5мкс он переставал работать, зависал... в чем тут может быть дело?

  33. #1390

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Код:
        if (usePPM) {
            // Configure TIM2_CH1 for PPM input
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
            GPIO_Init(GPIOA, &GPIO_InitStructure);
    
            // Input timer on TIM2 only for PPM
            NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
            NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
            NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
            NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
            NVIC_Init(&NVIC_InitStructure);
    
            // TIM2 timebase
            TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
            TIM_TimeBaseStructure.TIM_Prescaler = (72 - 1);
            TIM_TimeBaseStructure.TIM_Period = 0xffff;
            TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
            TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
    
            // Input capture on TIM2_CH1 for PPM
            TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
            TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
            TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
            TIM_ICInitStructure.TIM_ICFilter = 0x0;
            TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
            TIM_ICInit(TIM2, &TIM_ICInitStructure);
    
            // TIM2_CH1 capture compare interrupt enable
            TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);
            TIM_Cmd(TIM2, ENABLE);
    
            // configure number of PWM outputs, in PPM mode, we use bottom 4 channels more more motors
            numOutputChannels = 10;
        } else {
            // Configure TIM2 all 4 channels
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
            GPIO_Init(GPIOA, &GPIO_InitStructure);
            
            // TODO Configure EXTI4 1 channel
    
            // Input timers on TIM2 for PWM
            NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
            NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
            NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
            NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
            NVIC_Init(&NVIC_InitStructure);
    
            // TIM2 timebase
            TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
            TIM_TimeBaseStructure.TIM_Prescaler = (72 - 1);
            TIM_TimeBaseStructure.TIM_Period = 0xffff;
            TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
            TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
    
            // PWM Input capture
            TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
            TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
            TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
            TIM_ICInitStructure.TIM_ICFilter = 0x0;
            
            for (i = 0; i < 4; i++) {
                TIM_ICInitStructure.TIM_Channel = Channels[i].channel;
                TIM_ICInit(Channels[i].tim, &TIM_ICInitStructure);
            }
            
            // TODO EXTI4
    
            TIM_ITConfig(TIM2, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4, ENABLE);
            // TODO EXTI4
            TIM_Cmd(TIM2, ENABLE);
    
            // In PWM input mode, all 4 channels are wasted
            numOutputChannels = 4;
        }
    так на всякий... это к фишке 90-й если чё...


    я тут с портами навоевался, аж башка трешит - мысли через уши лезут, этож блин пол кодятника перелопатил, вроде как настроил входы - выходы, SPI под мпу и spi под флешку, i2c, компилится, да вот проверить не на чем, щас смотрю - надо было со старой прошивки начинать, она бы и vet6 влезла, жду апреля....
    Последний раз редактировалось SergDoc; 12.03.2013 в 00:54.

  34. #1391

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,472
    Цитата Сообщение от Alexsis1109 Посмотреть сообщение
    рабочий код вижу. расскажите, пожалуйста, в двух словах суть самого процесса считывания ШИМа, чтобы лучше код осмыслить...
    У обычного таймера СТМ32 всего один вектор прерываний, но события, с которыми он в этот вектор выпадает, могут быть разными или набором событий. У таймера есть 4 входа захвата ШИМ, используем их соответственно для каждого канала РУ.
    Алгоритм для одного канала такой:
    1. Проверяем наличие флага захвата канала, если нет переходим к следующему каналу п4.
    2. Если порт в "1",
    то перенастраиваем канал на приём спада,
    сохраняем значение из регистра захвата в буфере.
    3. Если порт "0",
    перенастраиваем канал на приём фронта,
    делаем беззнаковое вычитание буфера из регистра захвата (получаем длительность в тактах таймера),
    обнуляем счётчик пропусков.
    4. ....... здесь аналогично остальные каналы ................

    5. Если установлен флаг переполнения, то увеличиваем счётчики пропусков всех каналов.
    6. сбрасываем все флаги.
    Но это для СТМ32 (я для oleg70 писал), для АВР по другому (я бы сказал намного хуже).


    Цитата Сообщение от mahowik Посмотреть сообщение
    это 3D (акро) режим, который есть почти во всех полетных контроллерах...
    я не делал отдельный режим, у меня все режимы влияют только на вращение управляющего кватерниона, задаётся либо наклон, либо скорость вращения вокруг соответствующей оси. АП просто пытается привести текущее положение к заданому.

    Цитата Сообщение от SergDoc Посмотреть сообщение
    аж башка трешит - мысли через уши лезут, этож блин пол кодятника перелопатил
    Вот поэтому я и пишу своё, только иногда иногда что то заимствую. В вий и пират мне страшно заглядывать ( да и не нужно уже ).

  35. #1392

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Как вариант измерения ШИМ: на каждую (желаемую) входную ногу "вешаем" отдельную однотипную функцию прерывания по обоим фронтам в которой:
    1.если порт/бит =1 стартуем счетчик.
    2.если порт/бит=0 останавливаем счет, пишем в переменную, обнуляем счетчик.
    Плюсы (мое мнение):
    1.однозначно определен номер канала
    2.не нужно ничего вычитать
    3.как следствие, лаконичней код обработчика прерывания.
    Интересно Ваше мнение на этот счет ? (пока я не начал ковыряться с реализацией).

  36. #1393

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,472
    Цитата Сообщение от oleg70 Посмотреть сообщение
    Интересно Ваше мнение на этот счет ?
    Работать будет, но сколько Вам потребуется счетчиков и входов прерываний? В п.2 сколько времени нужно для в хода в прерывание если оно не самое преоритетное, такты не пропустите?


    Цитата Сообщение от oleg70 Посмотреть сообщение
    пока я не начал ковыряться с реализацией

    А Вы попробуйте! Возможно появится стимул изучить подробней возможности перифирии, а она у СТМ32 зело способная

  37. #1394

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    39
    Сообщений
    1,941
    Оптимальный вариант, использовать ICP пины, по одному на каждый канал. Естественно, если процессор это позволяет. В большинстве случаев, приходится извращаться, т.к. доступен бывает только один таймер и что хуже всего, при изменении одного из 8 пинов, приходит одинаковое прерывание. Но это все фигня и вполне, даже AVR вполне с этим справляется.
    В сети можно найти кучу реализаций обработки PPM или PWM. Начиная от multiwii и пирата, потом PPM Encoder у Ардукоптера. Ну хватает опенсорсных проектов под STM32... Зачем изобретать велосипед???

  38. #1395

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от Sir Alex Посмотреть сообщение
    Зачем изобретать велосипед???
    Мыж тут о "собственной системе стабилизации" размышляем, потому и пост..
    Если велосипед едет лучше мотоцикла, почему не попробовать изобрести,
    а так то конечно "все давно придумано".
    Думаю так: готовых проектов много, общие принципы ясны, разница только в подходах к реализации (как раз в этих мелочах типа приоритетов и методов) и результаты у разных систем особенные... что собственно и интересно..

  39. #1396

    Регистрация
    06.04.2012
    Адрес
    Moscow
    Возраст
    34
    Сообщений
    202
    Подскажите, пожалуйста проекты на STM32F103 и на STM32F4 с открытым исходным кодом, чтобы не изобретать велосипед.
    Я нашел:
    OpenPilot вроде под STM32F103 - хорош, но специфический набор датчиков (у меня их нет) и структура такая, как будто они винду пишут на МК.
    Afroflight - вроде ничего, под какой именно МК не знаю
    APM32 (Flymaple, если я ничего не напутал)- ардуино-подобная мешанина в коде под F4
    MultiPilot32?
    У меня есть комплект сенсоров L3G4200D, HMC5883L, BMP085, ADXL345. А также у друга лежит ITG3200+ADXL345. Вот под них и хочу код надергать.

  40. #1397

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Цитата Сообщение от RaJa Посмотреть сообщение
    У меня есть комплект сенсоров L3G4200D, HMC5883L, BMP085, ADXL345. А также у друга лежит ITG3200+ADXL345. Вот под них и хочу код надергать.
    Naze32 на F103 все эти датчики поддерживает сразу, мультипилот есть под 103 есть под407 - но под ваши датчики всё переписывать надо, как в принципе и ОпенПилот СС, СС3D - 103, Revo -405 и BMP выкиньте сразу...

    Весна уже на дворе, какие разработки? уже летать надоооо

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

  41. #1398

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    39
    Сообщений
    1,941
    Цитата Сообщение от RaJa Посмотреть сообщение
    Afroflight - вроде ничего, под какой именно МК не знаю
    F103
    Цитата Сообщение от RaJa Посмотреть сообщение
    Подскажите, пожалуйста проекты на STM32F103 и на STM32F4
    Посмотрите еще ArduCopter. Последние исходники уже написаны под разные платформы, в том числе и F4 (плата называется PX4). Правда это усложняет структуру кода, т.к. они пишут свой HAL под каждую платформу.
    Multipilot32 вроде тот же ArduCopter портированный под железо VRBrain....

    Цитата Сообщение от SergDoc Посмотреть сообщение
    Весна уже на дворе, какие разработки? уже летать надоооо
    Мы в разных странах живем? У меня за окном сугробы по пояс

  42. #1399

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,472
    Цитата Сообщение от RaJa Посмотреть сообщение
    Подскажите, пожалуйста проекты на STM32F103 и на STM32F4 с открытым исходным кодом, чтобы не изобретать велосипед.

    Цитата Сообщение от SergDoc Посмотреть сообщение
    Мультипилот, на мой взгляд не совсем хорошее решение, копаюсь в PWM и таймерах - бррр...
    Вот неплохой проект http://code.google.com/p/gluonpilot/, aka Drinker подсказал, весь проект не смотрел, но ИМУ у него (то что на кватернионах) правильное. Именно АХРС советую, математика быстрая, горизонт устойчивый , думаю в свой пролект встроить.

  43. #1400

    Регистрация
    18.02.2013
    Адрес
    Москва
    Возраст
    31
    Сообщений
    61
    Подскажите, пожалуйста, как завести таймер на Atmega128 на 0,5мкс для подсчета ШИМа??? У меня ниже 5мкс он виснуть начинает(((( может нужно как то специально его регистры конфигурить и еще чего?? подскажите, пожалуйста, кто знает как...

+ Ответить в теме

Похожие темы

  1. Система стабилизации гиро+акселерометр
    от Фантомас в разделе Полеты по камере, телеметрия
    Ответов: 32
    Последнее сообщение: 25.01.2011, 14:47
  2. Продам Продам Клона Trex 450SEV2 + Аппаратура + Запчасти+ система стабилизации RTF
    от omegapraim в разделе Барахолка. Вертолеты
    Ответов: 1
    Последнее сообщение: 12.01.2011, 18:16
  3. Продам Трёхосевую систему стабилизации Turnigy V-Bar 600
    от avi@tor в разделе Барахолка. Аппаратура
    Ответов: 1
    Последнее сообщение: 08.11.2010, 13:02
  4. Продам Gaui система стабилизации GU365, дёшево.
    от avi@tor в разделе Барахолка. Вертолеты
    Ответов: 3
    Последнее сообщение: 03.08.2010, 11:13
  5. Системы стабилизации
    от max815 в разделе Фото и видеосъемка, системы стабилизации
    Ответов: 16
    Последнее сообщение: 11.03.2010, 03:14

Метки этой темы

Ваши права

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