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

SergDoc

Просто плюнуть и оставить недоделанной плату как-то нехорошо, хотя давно не тестировал в полёте, только на столе, может уже и можно летать с акселем, показания вроде неплохие…

По большой

03/02/2013 In production D73414_Multirotor is coming back from production workshop.

😃

SergDoc

Прикольно goodluckbuy.com/mpu6050-6000-module-3-axis-gyro-ac…

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

SergDoc

Замучился я с eclipse как-нибудь можно перенести проект под coocox?

DVE

Как правильно не знаю, обычно самое простое - это создать новый проект, дальше перенести файлы копипастом. Это куда легче чем поштучно настройки переносить…

RaJa
SergDoc:

Замучился я с eclipse как-нибудь можно перенести проект под coocox?

Из эклипс можно, вряд ли там особо сложные настройки, я даже из IAR переносил код в проект на CooCox - под эклипс наверняка тот же компилер используется, значит инструкций специфичных для KEIL или IAR не будет.

SergDoc

Вроде разобрался с Эклипс, по крайней мере проект 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 из двух одну, ну а потом патчи переписывать, ну да ладно буду усиленно изучать что получилось, а то ведь не ровен час платки приедут 😃

правда проц всёже менять надо 😦

oleg70

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

rual

Олег, может на кейл перейдете и возьмете мой проект с этой ветки. странцу не скажу, где то сразу после нового года.

DVE

Выложите проект под Coocox (и файлы заодно под 303й), будет ясно что не компиляется. Навыком телепатии здесь никто не обладает 😃

oleg70

Понял… что не просто… Попробую еще KEIL и Ваш проект… Спасибо.

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

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

SergDoc
oleg70:

спрашиваю минимальный набор файлов для “копания”.

не знаю, у меня вышло что-то около 2-3 гигабайта😵 чтобы всё срослось, но я-то особо не программер, так что и лишнего мог захватить 😃

DVE:

Навыком телепатии здесь никто не обладает

Ну почему, я обладаю, но только по фотографии и только железо 😃 а чужая душа(ПО) да - для меня потёмки 😃

oleg70
rual:

Олег, может на кейл перейдете .

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

rual
oleg70:

Один вопрос : запускаю дебаг эмуляцию, вывожу просмотр состояния регистров View->System Viewer->RCC

версия какая ? у меня 4.70 отладчик для ф3 отсутсвует. Странно что у Вас вообще показывает перифирию, в настройках проекта в Target стоит STM32F303?

oleg70
rual:

Target стоит STM32F303?

Да стоит: STM32F303VC (без Т), версия вроде тоже 4.70.0.0 (вчера качнул),
лезу в “View”->“System Viewer” после начала дебага, а не в “Peripherals”…
может не то смотрю…?

SergDoc

по поводу всего этого дела:

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

Таак начались проблемы, не все нужные мне порты есть (заняты возможно usart и spi, а у меня они на других портах)… значит придётся закапываться ещё глубже… начну с портов их самых i2c, usart-ты spi…

SergDoc

блин, ну как же так, половина стандартные библиотеки STM, а половина, я так понимаю - maple, иначе зачем изврат такой с портами? вот и сиди кури этот бамбук, хоть ты с нуля всё начинай, а то получается в двадцати местах меняй всё, ну переименовали порты, так давайте все, а то щас ищи блин что родное, а что переименованое. Да ещё - эклипс подсвечивает, я так понял, “неиспоьзуемые” - невыполняющиеся функции, но потом смотрю и то что надо, тоже частенько подсвечено?

oleg70

Вот вот… И я о том же… Начал с нуля копать родные библиотеки и понял, что написаны они довольно в произвольной форме даже на уровне “дефайнов”, и нахаляву взять кусок кода из одного проекта и присобачить к своему - проблема. (поэтому пошел по пути работы прямо с регистрами и как следствие обошелся всего лишь одним stm32F30x.h файлом пока!).

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

HikeR
oleg70:

на выходе тоже получаем углы

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