Специальные цены   новые товары
+ Ответить в теме
Страница 34 из 165 ПерваяПервая ... 24 32 33 34 35 36 44 ... ПоследняяПоследняя
Показано с 1,321 по 1,360 из 6569

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

Тема раздела Квадрокоптеры. Общие вопросы в категории Квадрокоптеры и мультироторы; Сообщение от oleg70 Смотрю примеры кода в инете в основном на F10x, вижу например следующую строку заполнения структуры: RCC->APB2ENR|=RCC_APB2ENR_IOPCEN; начинаю ...

  1. #1321

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,472
    Цитата Сообщение от oleg70 Посмотреть сообщение
    Смотрю примеры кода в инете в основном на F10x, вижу например следующую строку заполнения структуры: RCC->APB2ENR|=RCC_APB2ENR_IOPCEN; начинаю искать в хедерах на F303 сие "RCC_APB2ENR_IOPCEN" -- НЕТУ ! Это чеж, на каждую линейку Cortex свою отдельную библиотеку изучать надо?
    Для начала предлагаю пользоваться библиотеками, да и последующих проектах не вижу смысла от них отказываться. Перифирия у каждого семейства имеет особенности, Ф3 особо отличается от предшествинников - у него структура шин другая. Перифирию и библиотеки придётся изучать снова, благо там отличия не большие, но код нужно переписывать. Демо-проекты Вам в помощь.


    Цитата Сообщение от oleg70 Посмотреть сообщение
    Где ж тогда "переносимость" кода и прочие удобства от CMSIS ?
    Это совместимость на уровне ядра, к перифириии отношения не имеет.

  2.  
  3. #1322

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

  4. #1323

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


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

  5. #1324

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Вернусь к нашим баранам: мелкоплате и ЛСМ, почему сейчас в вие не читают регистр статуса, раньше вроде было, может мне его читать и на основе данных решать переписывать значения по осям или нет?
    ну вот что-нибудь такое?
    Код:
    static void LSM330ACCRead(int16_t *accelData)
    {
        uint8_t buf[7];
        uint8_t status;
    
        i2cRead(LSM330ACC_ADDRESS, LSM330_STATUS_REG +0x80, 7, buf);
        status= buf[0]
    if status>0 {
        accelData[0] = ((buf[2] << 8) | buf[1]);
        accelData[1] = ((buf[4] << 8) | buf[3]);
        accelData[2] = ((buf[6] << 8) | buf[5]);
        }
       
    }
    не, думаю лучше задействовать fifo и лапу прерывания....
    Последний раз редактировалось SergDoc; 01.03.2013 в 10:42.

  6.  
  7. #1325
    DVE
    DVE вне форума

    Регистрация
    16.06.2008
    Адрес
    EU
    Возраст
    37
    Сообщений
    4,386
    Цитата Сообщение от oleg70 Посмотреть сообщение
    меня такая структуризация пока только с толку сбивает где? что?....
    Чем и хорош Coocox - выбираем в визарде нужные компоненты (например timer или gpio), он сам скопирует в проект требуемые файлы.

  8. #1326

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,472
    Запрос по и2ц готовности выглядит некрасиво, т.к. тратит время шины, а вот обработка по готовности это правильное направление мысли. Можно задействовать вывод готовности акселя и опрашивать его программно, это много времени не займет. Либо считывание и расчет положения по акселю в прерывании, у меня так...
    Цитата Сообщение от SergDoc Посмотреть сообщение
    не, думаю лучше задействовать fifo
    Насчёт фифы не уверен, ибо отложенная обработка старых значений акселя не будет соответствовать актуальному положению как физическому, так вычисленному по ДУСам.

  9. #1327

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Просто плюнуть и оставить недоделанной плату как-то нехорошо, хотя давно не тестировал в полёте, только на столе, может уже и можно летать с акселем, показания вроде неплохие....

    По большой
    03/02/2013 In production D73414_Multirotor is coming back from production workshop.

  10.  
  11. #1328

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Прикольно http://www.goodluckbuy.com/mpu6050-6...t-module-.html

    сегодня провоевал с IDE vrobotix так и родной скетч мультиплота не скомпилировал
    vgt6 так и не привезли, ну и ладно vet6 есть, на первое время хватит....

  12. #1329

    Регистрация
    16.12.2005
    Адрес
    Москва
    Возраст
    34
    Сообщений
    4,452
    Записей в дневнике
    13
    Цитата Сообщение от SergDoc Посмотреть сообщение
    Дорого
    Мне на днях с ебея по 5,98 пришли

  13. #1330

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Замучился я с eclipse как-нибудь можно перенести проект под coocox?

  14. #1331
    DVE
    DVE вне форума

    Регистрация
    16.06.2008
    Адрес
    EU
    Возраст
    37
    Сообщений
    4,386
    Как правильно не знаю, обычно самое простое - это создать новый проект, дальше перенести файлы копипастом. Это куда легче чем поштучно настройки переносить...

  15. #1332

    Регистрация
    06.04.2012
    Адрес
    Moscow
    Возраст
    34
    Сообщений
    202
    Цитата Сообщение от SergDoc Посмотреть сообщение
    Замучился я с eclipse как-нибудь можно перенести проект под coocox?
    Из эклипс можно, вряд ли там особо сложные настройки, я даже из IAR переносил код в проект на CooCox - под эклипс наверняка тот же компилер используется, значит инструкций специфичных для KEIL или IAR не будет.

  16. #1333

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Вроде разобрался с Эклипс, по крайней мере проект Acopter32 под F4 собрался
    теперь буду подсовывать ACopter32 rev 2.9.1rc1, ну а ежели всё нормально пойдёт, то адаптировать под свю плату, главно чтобы влезло в 256к флеши, т.к. проект под vgt6 а не под vet6 как пишут...

    Уряя заработало!!! rev 2.9.1rc1 скомпилировалась!!!
    402888 5849 6350 415087 6556f (TOTALS)

    Final Size:
    text data bss dec hex filename
    350408 7296 9312 367016 599a8 build/laserlab_MP32V1F4.elf

    **** Build Finished ****
    правда почему-то пришлось собирать IDE из двух одну, ну а потом патчи переписывать, ну да ладно буду усиленно изучать что получилось, а то ведь не ровен час платки приедут

    правда проц всёже менять надо
    Миниатюры Миниатюры Нажмите на изображение для увеличения
Название: eclipse.jpg‎
Просмотров: 862
Размер:	37.0 Кб
ID:	761858  
    Последний раз редактировалось SergDoc; 04.03.2013 в 22:00.

  17. #1334

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    IDE брал это http://code.google.com/p/multipilot3...1.rar&can=2&q=
    добавил недостающие библиотеки отсюда http://code.google.com/p/multipilot3...1.rar&can=2&q= странно но это ide работать адекватно не захотело пришлось извращатся
    ну и исходники здесь http://code.google.com/p/multipilot3...4.rar&can=2&q=

  18. #1335

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Друзья! подскажите мне на пальцах: что из файлов (*.h и *.c) мне нужно иметь для проекта (не важно Coocox или Iar) чтобы просто настроить мой F303 без периферии а только скажем тактовый генератор, и скомпилить..
    Перечитал кучу примеров и обзоров, ну ни как не пойму - одни подключают "всю кучу из CMSIS и SPL" , другие как то вообще одним Includ-ом F10x.h обходятся... Т.о. даже начать не могу...
    Фирменные файлы на линейку есть, внутри - темный лес, сплошная "рыба", один хедер инклюдит другой, запутался я .....
    Не откажите в ликбезе! просто минимальный набор!
    (как же было просто с avr один хедер на чип)

  19. #1336

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

  20. #1337
    DVE
    DVE вне форума

    Регистрация
    16.06.2008
    Адрес
    EU
    Возраст
    37
    Сообщений
    4,386
    Выложите проект под Coocox (и файлы заодно под 303й), будет ясно что не компиляется. Навыком телепатии здесь никто не обладает

  21. #1338

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Понял.. что не просто.. Попробую еще KEIL и Ваш проект... Спасибо.

    А в Coocox -е что я могу выложить то ? 303-го там нет, ставлю "галочки" на ARM M4, "CMSIS Core", и "Startup_code", подключает он мне 5 файлов и все
    а дальше то что ?

    Думал что структура проекта хотя бы на в пределах Cortex-a одинакова, сделал в Iar проект скурпулезно по видео из инета (правда на 103-й) мигалку и все! требует какой то файл которого вообще нет в архиве с либами. Потому и спрашиваю минимальный набор файлов для "копания".
    (видимо он большой и не уместится на этом форуме).Все равно спасибо.

  22. #1339

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Цитата Сообщение от oleg70 Посмотреть сообщение
    спрашиваю минимальный набор файлов для "копания".
    не знаю, у меня вышло что-то около 2-3 гигабайта чтобы всё срослось, но я-то особо не программер, так что и лишнего мог захватить

    Цитата Сообщение от DVE Посмотреть сообщение
    Навыком телепатии здесь никто не обладает
    Ну почему, я обладаю, но только по фотографии и только железо а чужая душа(ПО) да - для меня потёмки

  23. #1340

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от rual Посмотреть сообщение
    Олег, может на кейл перейдете .
    Перешел на Keil, вроде картина вырисовывается! (спс).
    Один вопрос : запускаю дебаг эмуляцию, вывожу просмотр состояния регистров View->System Viewer->RCC
    но состояние битов не меняется - почему?
    Keil c оффсайта (с ограничением 32К), компиляция и сборка проходит, где что рыть?

  24. #1341

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,472
    Цитата Сообщение от oleg70 Посмотреть сообщение
    Один вопрос : запускаю дебаг эмуляцию, вывожу просмотр состояния регистров View->System Viewer->RCC
    версия какая ? у меня 4.70 отладчик для ф3 отсутсвует. Странно что у Вас вообще показывает перифирию, в настройках проекта в Target стоит STM32F303?

  25. #1342

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от rual Посмотреть сообщение
    Target стоит STM32F303?
    Да стоит: STM32F303VC (без Т), версия вроде тоже 4.70.0.0 (вчера качнул),
    лезу в "View"->"System Viewer" после начала дебага, а не в "Peripherals"....
    может не то смотрю...?

  26. #1343

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    по поводу всего этого дела:
    Цитата Сообщение от SergDoc Посмотреть сообщение
    Уряя заработало!!! rev 2.9.1rc1 скомпилировалась!!!
    нашел практически всё - i2c, SPI, Usartы, ну и т.д. порты все практически,
    нашел где программируются таймеры, но так и не нашел где же всё-таки порты (входы выходы) назначаются ибо как-то странно - таймер запускается если указан канал, а он в свою очередь берётся из номера порта, а вот где он прописан пока так и не нашел, так же у меня возникнут в следствии этого проблемы с таймерами, т.к. они у меня на другие порты запланированы (в часности 1-й и 5-тый) ну да ладно с этим разберусь, ещё посмотрел - помоему FPU отключен - знаю где включается, надо условия пересмотреть, в общем копать не перекопать

    нашел - пойду застрелюсь - шутка, буду разбираться как это всё переназначит на нужные мне таймеры....


    по моему вот для начала что мне надо переписать под себя:
    Код:
    extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = {
    
        /* Top header */
    
        {_GPIOB,   NULL, NULL, 10, 0, ADCx}, /* D0/PB10 */
        {_GPIOB,   NULL, NULL,  2, 0, ADCx}, /* D1/PB2 */
        {_GPIOB,   NULL, NULL, 12, 0, ADCx}, /* D2/PB12 */
        {_GPIOB,   NULL, NULL, 13, 0, ADCx}, /* D3/PB13 */
        {_GPIOB,   NULL, NULL, 14, 0, ADCx}, /* D4/PB14 */
        {_GPIOB,   NULL, NULL, 15, 0, ADCx}, /* D5/PB15 */
        {_GPIOC,   NULL, _ADC1,  0, 0,   10}, /* D6/PC0 */
        {_GPIOC,   NULL, _ADC1,  1, 0,   11}, /* D7/PC1 */
        {_GPIOC,   NULL, _ADC1,  2, 0,   12}, /* D8/PC2 */
        {_GPIOC,   NULL, _ADC1,  3, 0,   13}, /* D9/PC3 */
        {_GPIOC,   NULL, _ADC1,  4, 0,   14}, /* D10/PC4 */
        {_GPIOC,   NULL, _ADC1,  5, 0,   15}, /* D11/PC5 */
        {_GPIOC, TIMER8, NULL,  6, 1, ADCx}, /* D12/PC6 */
        {_GPIOC, TIMER8, NULL,  7, 2, ADCx}, /* D13/PC7 */
        {_GPIOC, TIMER8, NULL,  8, 3, ADCx}, /* D14/PC8 */
        {_GPIOC, TIMER8, NULL,  9, 4, ADCx}, /* D15/PC9 */
        {_GPIOC,   NULL, NULL, 10, 0, ADCx}, /* D16/PC10 */
        {_GPIOC,   NULL, NULL, 11, 0, ADCx}, /* D17/PC11 */
        {_GPIOC,   NULL, NULL, 12, 0, ADCx}, /* D18/PC12 */
        {_GPIOC,   NULL, NULL, 13, 0, ADCx}, /* D19/PC13 */
        {_GPIOC,   NULL, NULL, 14, 0, ADCx}, /* D20/PC14 */
        {_GPIOC,   NULL, NULL, 15, 0, ADCx}, /* D21/PC15 */
        {_GPIOA, TIMER1, NULL,  8, 1, ADCx}, /* D22/PA8 */
        {_GPIOA, TIMER1, NULL,  9, 2, ADCx}, /* D23/PA9 */
        {_GPIOA, TIMER1, NULL, 10, 3, ADCx}, /* D24/PA10 */
        {_GPIOB, TIMER4, NULL,  9, 4, ADCx}, /* D25/PB9 */
    
        /* Bottom header */
        /* Note: D{48, 49, 50, 51} are also TIMER2_CH{1, 2, 3, 4}, respectively. */
        /* TODO remap timer 2 in boardInit(); make the appropriate changes here */
    
        {_GPIOD,   NULL, NULL,  2, 0, ADCx}, /* D26/PD2 */
        {_GPIOD,   NULL, NULL,  3, 0, ADCx}, /* D27/PD3 */
        {_GPIOD,   NULL, NULL,  6, 0, ADCx}, /* D28/PD6 */
        {_GPIOG,   NULL, NULL, 11, 0, ADCx}, /* D29/PG11 */
        {_GPIOG,   NULL, NULL, 12, 0, ADCx}, /* D30/PG12 */
        {_GPIOG,   NULL, NULL, 13, 0, ADCx}, /* D31/PG13 */
        {_GPIOG,   NULL, NULL, 14, 0, ADCx}, /* D32/PG14 */
        {_GPIOG,   NULL, NULL,  8, 0, ADCx}, /* D33/PG8 */
        {_GPIOG,   NULL, NULL,  7, 0, ADCx}, /* D34/PG7 */
        {_GPIOG,   NULL, NULL,  6, 0, ADCx}, /* D35/PG6 */
        {_GPIOB, TIMER3, NULL,  5, 2, ADCx}, /* D36/PB5 */
        {_GPIOB, TIMER4, NULL,  6, 1, ADCx}, /* D37/PB6 */
        {_GPIOB, TIMER4, NULL,  7, 2, ADCx}, /* D38/PB7 */
        {_GPIOF,   NULL, _ADC3,  6, 0,    4}, /* D39/PF6 */
        {_GPIOF,   NULL, _ADC3,  7, 0,    5}, /* D40/PF7 */
        {_GPIOF,   NULL, _ADC3,  8, 0,    6}, /* D41/PF8 */
        {_GPIOF,   NULL, _ADC3,  9, 0,    7}, /* D42/PF9 */
        {_GPIOF,   NULL, _ADC3, 10, 0,    8}, /* D43/PF10 */
        {_GPIOF,   NULL, NULL, 11, 0, ADCx}, /* D44/PF11 */
        {_GPIOB, TIMER3, _ADC1,  1, 4,    9}, /* D45/PB1 */
        {_GPIOB, TIMER3, _ADC1,  0, 3,    8}, /* D46/PB0 */
        {_GPIOA, TIMER5, _ADC1,  0, 1,    0}, /* D47/PA0 */
        {_GPIOA, TIMER2, _ADC1,  1, 2,    1}, /* D48/PA1 */
        {_GPIOA, TIMER2, _ADC1,  2, 3,    2}, /* D49/PA2 */
        {_GPIOA, TIMER2, _ADC1,  3, 4,    3}, /* D50/PA3 */
        {_GPIOA,   NULL, _ADC1,  4, 0,    4}, /* D51/PA4 */
        {_GPIOA,   NULL, _ADC1,  5, 0,    5}, /* D52/PA5 */
        {_GPIOA, TIMER3, _ADC1,  6, 1,    6}, /* D53/PA6 */
        {_GPIOA, TIMER3, _ADC1,  7, 2,    7}, /* D54/PA7 */
    
        /* FSMC (triple) header */
    
        {_GPIOF,   NULL, NULL,  0, 0, ADCx}, /* D55/PF0 */
        {_GPIOD,   NULL, NULL, 11, 0, ADCx}, /* D56/PD11 */
        {_GPIOD, TIMER4, NULL, 14, 3, ADCx}, /* D57/PD14 */
        {_GPIOF,   NULL, NULL,  1, 0, ADCx}, /* D58/PF1 */
        {_GPIOD, TIMER4, NULL, 12, 1, ADCx}, /* D59/PD12 */
        {_GPIOD, TIMER4, NULL, 15, 4, ADCx}, /* D60/PD15 */
        {_GPIOF,   NULL, NULL,  2, 0, ADCx}, /* D61/PF2 */
        {_GPIOD, TIMER4, NULL, 13, 2, ADCx}, /* D62/PD13 */
        {_GPIOD,   NULL, NULL,  0, 0, ADCx}, /* D63/PD0 */
        {_GPIOF,   NULL, NULL,  3, 0, ADCx}, /* D64/PF3 */
        {_GPIOE,   NULL, NULL,  3, 0, ADCx}, /* D65/PE3 */
        {_GPIOD,   NULL, NULL,  1, 0, ADCx}, /* D66/PD1 */
        {_GPIOF,   NULL, NULL,  4, 0, ADCx}, /* D67/PF4 */
        {_GPIOE,   NULL, NULL,  4, 0, ADCx}, /* D68/PE4 */
        {_GPIOE,   NULL, NULL,  7, 0, ADCx}, /* D69/PE7 */
        {_GPIOF,   NULL, NULL,  5, 0, ADCx}, /* D70/PF5 */
        {_GPIOE,   NULL, NULL,  5, 0, ADCx}, /* D71/PE5 */
        {_GPIOE,   NULL, NULL,  8, 0, ADCx}, /* D72/PE8 */
        {_GPIOF,   NULL, NULL, 12, 0, ADCx}, /* D73/PF12 */
        {_GPIOE,   NULL, NULL,  6, 0, ADCx}, /* D74/PE6 */
        {_GPIOE,   NULL, NULL,  9, 0, ADCx}, /* D75/PE9 */
        {_GPIOF,   NULL, NULL, 13, 0, ADCx}, /* D76/PF13 */
        {_GPIOE,   NULL, NULL, 10, 0, ADCx}, /* D77/PE10 */
        {_GPIOF,   NULL, NULL, 14, 0, ADCx}, /* D78/PF14 */
        {_GPIOG,   NULL, NULL,  9, 0, ADCx}, /* D79/PG9 */
        {_GPIOE,   NULL, NULL, 11, 0, ADCx}, /* D80/PE11 */
        {_GPIOF,   NULL, NULL, 15, 0, ADCx}, /* D81/PF15 */
        {_GPIOG,   NULL, NULL, 10, 0, ADCx}, /* D82/PG10 */
        {_GPIOE,   NULL, NULL, 12, 0, ADCx}, /* D83/PE12 */
        {_GPIOG,   NULL, NULL,  0, 0, ADCx}, /* D84/PG0 */
        {_GPIOD,   NULL, NULL,  5, 0, ADCx}, /* D85/PD5 */
        {_GPIOE,   NULL, NULL, 13, 0, ADCx}, /* D86/PE13 */
        {_GPIOG,   NULL, NULL,  1, 0, ADCx}, /* D87/PG1 */
        {_GPIOD,   NULL, NULL,  4, 0, ADCx}, /* D88/PD4 */
        {_GPIOE,   NULL, NULL, 14, 0, ADCx}, /* D89/PE14 */
        {_GPIOG,   NULL, NULL,  2, 0, ADCx}, /* D90/PG2 */
        {_GPIOE,   NULL, NULL,  1, 0, ADCx}, /* D91/PE1 */
        {_GPIOE,   NULL, NULL, 15, 0, ADCx}, /* D92/PE15 */
        {_GPIOG,   NULL, NULL,  3, 0, ADCx}, /* D93/PG3 */
        {_GPIOE,   NULL, NULL,  0, 0, ADCx}, /* D94/PE0 */
        {_GPIOD,   NULL, NULL,  8, 0, ADCx}, /* D95/PD8 */
        {_GPIOG,   NULL, NULL,  4, 0, ADCx}, /* D96/PG4 */
        {_GPIOD,   NULL, NULL,  9, 0, ADCx}, /* D97/PD9 */
        {_GPIOG,   NULL, NULL,  5, 0, ADCx}, /* D98/PG5 */
        {_GPIOD,   NULL, NULL, 10, 0, ADCx}, /* D99/PD10 */
        {_GPIOB,   NULL, NULL, 11, 0, ADCx}, /* D100/PB11 */
        {_GPIOB, TIMER4, NULL,  8, 3, ADCx}, /* D101/PB8 */
    };
    
    extern const uint8_t boardPWMPins[BOARD_NR_PWM_PINS] __FLASH__ = {
        13, 14, 15, 16, 23, 24, 25, 26, 38, 39, 46, 47, 48, 49, 50, 51, 54, 55
    };
    
    extern const uint8_t boardADCPins[BOARD_NR_ADC_PINS] __FLASH__ = {
        7, 8, 9, 10, 11, 12, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
        54, 55
    };
    
    extern const uint8_t boardUsedPins[BOARD_NR_USED_PINS] __FLASH__ = {
        BOARD_LED_PIN, BOARD_BUTTON_PIN, BOARD_JTMS_SWDIO_PIN,
        BOARD_JTCK_SWCLK_PIN, BOARD_JTDI_PIN, BOARD_JTDO_PIN, BOARD_NJTRST_PIN,
        56, 58, 59, 61, 62, 64, 65, 67, 68, 70, 71, 73, 74, 76, 77, 78, 79, 81,
        82, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100
    };
    
    
    #endif
    файл laserlab_MP32V1F4.cpp
    Последний раз редактировалось SergDoc; 08.03.2013 в 19:00.

  27. #1344

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Таак начались проблемы, не все нужные мне порты есть (заняты возможно usart и spi, а у меня они на других портах).... значит придётся закапываться ещё глубже... начну с портов их самых i2c, usart-ты spi...

  28. #1345

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    блин, ну как же так, половина стандартные библиотеки STM, а половина, я так понимаю - maple, иначе зачем изврат такой с портами? вот и сиди кури этот бамбук, хоть ты с нуля всё начинай, а то получается в двадцати местах меняй всё, ну переименовали порты, так давайте все, а то щас ищи блин что родное, а что переименованое. Да ещё - эклипс подсвечивает, я так понял, "неиспоьзуемые" - невыполняющиеся функции, но потом смотрю и то что надо, тоже частенько подсвечено?

  29. #1346

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Вот вот.... И я о том же... Начал с нуля копать родные библиотеки и понял, что написаны они довольно в произвольной форме даже на уровне "дефайнов", и нахаляву взять кусок кода из одного проекта и присобачить к своему - проблема. (поэтому пошел по пути работы прямо с регистрами и как следствие обошелся всего лишь одним stm32F30x.h файлом пока!).

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

  30. #1347

    Регистрация
    11.05.2008
    Адрес
    Великий Новгород
    Возраст
    38
    Сообщений
    3,939
    Записей в дневнике
    22
    Цитата Сообщение от oleg70 Посмотреть сообщение
    на выходе тоже получаем углы
    углы на выходе - побочный продукт, в общем случае конкретные значения вобще не нужны.

  31. #1348

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Тогда что ж мы рассчитываем? , подаем на ПИД не их ли ?
    Я то думал что как раз на ПИД подаются углы "уставки" с RC приемника и углы текущего положения "тела", а на выходе получаем заветное значение управляющего воздействия на моторы...

  32. #1349

    Регистрация
    11.05.2008
    Адрес
    Великий Новгород
    Возраст
    38
    Сообщений
    3,939
    Записей в дневнике
    22
    вы описали частный случай. для режима удержания, например, вобще не нужны ни кватернионы ни матрицы, стики задают желаемую угловую скорость. управление аппаратом не ограничивается висящими в горизонте коптерами

    а кватернион (либо матрица) всего лишь более компактный (либо менее ресурсоемкий) метод хранения текущего положения.

  33. #1350

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


    Цитата Сообщение от oleg70 Посмотреть сообщение
    Начал с нуля копать родные библиотеки и понял, что написаны они довольно в произвольной форме даже на уровне "дефайнов", и нахаляву взять кусок кода из одного проекта и присобачить к своему - проблема.
    Не факт, мне очень помогли с Ф1 на Ф3 перелезть.

    Цитата Сообщение от oleg70 Посмотреть сообщение
    А теперь по теме ветки: не кажется ли Вам странным что при использовании кватернионов мы на входе (функции расчета) имеем углы с гиры и акса и на выходе тоже получаем углы..??? В чем смысл то ?
    Не так, ДУС (гира) даёт мгновенную угловую скорость, аксель дает вектор суммы всех ускорений.
    Углы ДУСа и углы на выходе кватерниона не одно и тоже, представьте что самоль летит левым крылом к земле и перекладывает рули высоты на кабрирование, что измениться тангаж или курс?

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

    Всё правильно, вот только в этом этом режиме АППАРАТ не знает своё положение в пространстве, а просто пытается удерживать заданные Р/У угловые скорости.

  34. #1351

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

  35. #1352

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от rual Посмотреть сообщение

    Всё правильно, вот только в этом этом режиме АППАРАТ не знает своё положение в пространстве,.
    Предлагаю тогда поделиться общими соображениями об организации основного рабочего цикла программы стабилизации по типу:
    0.чтение Р/У
    1.чтение ДУС.
    2.Чтение Акселя.
    3.Усреднение ДУС (по желанию)
    4.Вычисление углов
    и т.д. ,
    а то кажется есть разночтения на этот счет.

  36. #1353

    Регистрация
    11.05.2008
    Адрес
    Великий Новгород
    Возраст
    38
    Сообщений
    3,939
    Записей в дневнике
    22
    Цитата Сообщение от rual Посмотреть сообщение
    в этом этом режиме АППАРАТ не знает своё положение в пространстве
    так ему и не нужно его знать )

    Цитата Сообщение от oleg70 Посмотреть сообщение
    общими соображениями об организации основного рабочего цикла программы стабилизации по типу
    вы какие величины стабилизировать хотите и на каком аппарате? а то пример только один напрашивается:
    1) читаем датчики
    2) ничего не делаем
    3) конец цикла

  37. #1354

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

  38. #1355

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Поправьте если не прав:
    Коррекция положения происходит все же по акселю (компас опционально) и при ручном управлении скорректированная ориентация рамы стремится к ориентации заданной Р/У (приведенной например к диапазону 0-45 грд. по крену и тангажу)
    И еще, Александр, как реализовали оцифровку ППМ (аппаратно, программно)?? Хочу попробовать на Capture от таймеров.

  39. #1356

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    так примерно если по простому http://habrahabr.ru/post/118192/ и ПИД тоже доспупно http://we.easyelectronics.ru/Theory/...praktikov.html

  40. #1357

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,472
    Цитата Сообщение от oleg70 Посмотреть сообщение
    Коррекция положения происходит все же по акселю (компас опционально) и при ручном управлении скорректированная ориентация рамы стремится к ориентации заданной Р/У (приведенной например к диапазону 0-45 грд. по крену и тангажу)
    Да. Да, я не делал отдельный АКРО режим , смысла в этом не увидел, аппрат всегда знает своё положение (в рамках допустимой ошибки ), при желании можно дать РУ вращать заданое положение по всем осям на 360 градусов.

    Цитата Сообщение от oleg70 Посмотреть сообщение
    как реализовали оцифровку ППМ (аппаратно, программно)?? Хочу попробовать на Capture от таймеров.
    Всё работает в прерывании, в режиме захвата таймером
    Код:
    uint16_t ppm1_buf[4];  /* буфер для значений каналов ППМ */ 
    uint8_t  ppm1_nimp[4]; /* значения счетчиков пропусков ППМ */ 
    /* прерывание по ППМ сигналу */
    void TIM_PPM1_IRQHandler(void) /* ППМ 1-4 */
    {  
     static uint16_t ccr_buf[4]; /* буфер для временного хранения начала импульса */
     
     uint16_t port = TIM_PPM1->CCER;
     uint16_t ccr;   
     if (TIM_GetFlagStatus(TIM_PPM1,TIM_FLAG_CC1) == SET) /* 1 канал */
     {
      ccr = TIM_GetCapture1(TIM_PPM1);
      if((port & TIM_CCER_CC1P) == 0) {
       ccr_buf[0] = ccr;
       TIM_OC1PolarityConfig(TIM_PPM1,TIM_ICPolarity_Falling);
      } else {   
       TIM_OC1PolarityConfig(TIM_PPM1,TIM_ICPolarity_Rising);
       if (TIM_GetFlagStatus(TIM_PPM1,TIM_FLAG_CC1OF) == RESET) 
        ppm1_buf[0] = ccr - ccr_buf[0];
       else TIM_ClearFlag(TIM_PPM1,TIM_FLAG_CC1OF);
      }
      ppm1_nimp[0] = 0;
      TIM_ClearITPendingBit(TIM_PPM1, TIM_IT_CC1);
     }
     
     if (TIM_GetFlagStatus(TIM_PPM1,TIM_FLAG_CC2) == SET) /* 2 канал */
     {
      ccr = TIM_GetCapture2(TIM_PPM1);
      if ((port & TIM_CCER_CC2P) == 0) {
       ccr_buf[1] = ccr;
       TIM_OC2PolarityConfig(TIM_PPM1,TIM_ICPolarity_Falling);
      } else {   
       TIM_OC2PolarityConfig(TIM_PPM1,TIM_ICPolarity_Rising);
       if (TIM_GetFlagStatus(TIM_PPM1,TIM_FLAG_CC2OF) == RESET) 
        ppm1_buf[1] = ccr - ccr_buf[1];
       else TIM_ClearFlag(TIM_PPM1,TIM_FLAG_CC2OF);
      }
      ppm1_nimp[1] = 0;
      TIM_ClearITPendingBit(TIM_PPM1, TIM_IT_CC2);
     }
     
     if (TIM_GetFlagStatus(TIM_PPM1,TIM_FLAG_CC3) == SET) /* 3 канал */
     {
      ccr = TIM_GetCapture3(TIM_PPM1);
      if((port & TIM_CCER_CC3P) == 0) {
       ccr_buf[2] = ccr;
       TIM_OC3PolarityConfig(TIM_PPM1,TIM_ICPolarity_Falling);
      } else {
       TIM_OC3PolarityConfig(TIM_PPM1,TIM_ICPolarity_Rising);
       if (TIM_GetFlagStatus(TIM_PPM1,TIM_FLAG_CC3OF) == RESET)    
        ppm1_buf[2] = ccr - ccr_buf[2];
       else TIM_ClearFlag(TIM_PPM1,TIM_FLAG_CC3OF);
      }
      ppm1_nimp[2] = 0;
      TIM_ClearITPendingBit(TIM_PPM1, TIM_IT_CC3);
     }  
     
     if (TIM_GetFlagStatus(TIM_PPM1,TIM_FLAG_CC4) == SET) /* 4 канал */
     {
      ccr = TIM_GetCapture4(TIM_PPM1);
      if((port & TIM_CCER_CC4P) == 0) { 
       ccr_buf[3] = ccr;
       TIM_OC4PolarityConfig(TIM_PPM1,TIM_ICPolarity_Falling);
      } else {   
       TIM_OC4PolarityConfig(TIM_PPM1,TIM_ICPolarity_Rising);
       if (TIM_GetFlagStatus(TIM_PPM1,TIM_FLAG_CC4OF) == RESET) 
        ppm1_buf[3] = ccr - ccr_buf[3];
       else TIM_ClearFlag(TIM_PPM1,TIM_FLAG_CC4OF);
      }
      ppm1_nimp[3] = 0;
      TIM_ClearITPendingBit(TIM_PPM1, TIM_IT_CC4);
     }
     
     if (TIM_GetFlagStatus(TIM_PPM1,TIM_FLAG_Update) == SET)
     {
      if (ppm1_nimp[0]< PPM_NCNT) ppm1_nimp[0]++;
      if (ppm1_nimp[1]< PPM_NCNT) ppm1_nimp[1]++;
      if (ppm1_nimp[2]< PPM_NCNT) ppm1_nimp[2]++;
      if (ppm1_nimp[3]< PPM_NCNT) ppm1_nimp[3]++;
      Rdy_PPM1();
      TIM_ClearITPendingBit(TIM_PPM1, TIM_IT_Update);
     } 
    }

  41. #1358
    Учит правила (до 14.01.2017)
    Регистрация
    14.12.2012
    Адрес
    Голицыно
    Возраст
    40
    Сообщений
    133
    Записей в дневнике
    4
    Охеренный перевод, особенно точность терминов радует)

  42. #1359

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Блин совсем запутался, порты выведеные обозначены как D-тра-ля-ля, а порты не выведеные обозначены цыфирками - а вот где они так обозначаются, наверно одним разрабам известно. Что пишут:
    To add a new board type, add a new pair of files to
    /wirish/boards/, update the section below with a new "BOARD" type,
    and update /wirish/rules.mk to include your boards/your_board.cpp
    file in the top-level Makefile build.
    тоесть переписать всё под свою плату(создать новую) но всё равно мне надо знать где прячутся порты под цыфрами...

    ага, пофиг как, все можно просто цыфирками обозвать или d+цыфирка - без разницы и убрать ненужные добавить нужные, эх понеслась душа в рай
    Последний раз редактировалось SergDoc; 10.03.2013 в 14:01.

  43. #1360

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    вот как оно это делается:
    Код:
    typedef struct stm32_pin_info {
        gpio_dev *gpio_device;      /**< Maple pin's GPIO device */
        timer_dev *timer_device;    /**< Pin's timer device, if any. */
        adc_dev* adc_device;       /**< ADC device, if any. */
        uint8 gpio_bit;             /**< Pin's GPIO port bit. */
        uint8 timer_channel;        /**< Timer channel, or 0 if none. */
        uint8 adc_channel;          /**< Pin ADC channel, or ADCx if none. */
    } stm32_pin_info;
    т. е. ненужные заменить нужными, но не удалять, а то нумерация испортится....

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

Похожие темы

  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

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

Ваши права

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