Специальные цены   новые товары
+ Ответить в теме
Страница 50 из 165 ПерваяПервая ... 40 48 49 50 51 52 60 ... ПоследняяПоследняя
Показано с 1,961 по 2,000 из 6569

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

Тема раздела Квадрокоптеры. Общие вопросы в категории Квадрокоптеры и мультироторы; Сообщение от SergDoc вроде как-то так: RCC_Clocks->SYSCLK_Frequency = HSE_VALUE; // HSE_VALUE=8000000 Итак, если коротко - HSI - это 8 МГЦ, ...

  1. #1961

    Регистрация
    06.04.2012
    Адрес
    Moscow
    Возраст
    34
    Сообщений
    202
    Цитата Сообщение от SergDoc Посмотреть сообщение
    вроде как-то так:
    RCC_Clocks->SYSCLK_Frequency = HSE_VALUE; // HSE_VALUE=8000000
    Итак, если коротко - HSI - это 8 МГЦ, внутренний RC генератор.
    HSE - Это внешний генератор, в данном случае кварц.
    SYSCLK - это системная частота. Она получается умножением кварца на PLL коэффициент. Скорее всего в вашем случае это 168МГц.
    вот описание
    То есть делить нужно не на 8М, а на 8М*PLLCLK. Так что подсказали вам похоже правильно - коэффициент неверный использовался.

  2.  
  3. #1962

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

    вот блин а к 103-му то и нет такой фишки

    небольшей разбор полётов:
    это отсюда
    Код:
    #define DWT_CYCCNT	((volatile uint32 *)0xE0001004)
    ///////////////////////////////////////////////////////////////////////////////
    
    uint32 uSClock(void) {
    	// TODO: no check for wraparound
    
    	register uint32 PrevTick, Tick, mS;
    	__disable_irq();
    	Tick = *DWT_CYCCNT;
    	PrevTick = sysTickCycleCounter;
    	mS = sysTickUptime;
    	__enable_irq();
    	return ((mS * 1000) + (Tick - PrevTick) / TicksuS);
    
    } // uSClock
    у меня же получается:
    Код:
    uint32_t micros(void)
    {
        register uint32_t ms, cycle_cnt;
        do {
            ms = sysTickUptime;
            cycle_cnt = SysTick->VAL; // значение SysTick = 0хЕ000E010 ?   SysTick->VAL = 0x00028831 ?
        } while (ms != sysTickUptime);
        return (ms * 1000) + (168000 - cycle_cnt) / 168;  // а не нормально должно быть (ms*1000)+12 получается 
    }
    остаётся вопрос по sysTickUptime .....
    Миниатюры Миниатюры Нажмите на изображение для увеличения
Название: system.jpg‎
Просмотров: 69
Размер:	50.9 Кб
ID:	790341  
    Последний раз редактировалось SergDoc; 06.05.2013 в 15:04.

  4. #1963

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8

  5. #1964

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    systick вырабатывает прерывание 1000 раз в секунду, значит всё верно

  6.  
  7. #1965

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Наткнулся на странную проблему SPI+DMA в режиме "CIRCULAR", нужно последовательно вывести массив данных из 28-ти полуслов из памяти в SPI, все выводится НО если бит "0" во втором с конца массива элементе равен единице, передача зависает...,
    т.е. передаю в 26-ом элементе 0x0001 - виснет, а при любом другом значении в этом элементе, буфер передается без проблем...
    Пробовал менять длину буфера, но эффект тот же.. (Прям мистика какая то! может я косяк линейки F303 нарыл?)
    Кстати в фирменном архиве что то нет примеров про SPI, SPI+DMA?

  8. #1966

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

  9. #1967

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от oleg70 Посмотреть сообщение
    Кстати в фирменном архиве что то нет примеров про SPI, SPI+DMA?
    Странно, циркуляр не пробловал для СПИ (у меня каждый считанный пакет по новой перезаряжается), у меня вполне уверенно работает
    Код:
    uint8_t DUSbuffer[10];
    /*  íàñòðîéêà ÏÄÏ ÄÓÑ */
    void DUS_DMA_Init(void)
    {
     DMA_InitTypeDef DMA_InitStruct;
     EXTI_InitTypeDef EXTI_InitStructure;
     
       /* Íàñòðîéêà ÏÄÏ äëÿ ÄÓÑ */  
     SPI_Cmd (L3GD20_SPI, ENABLE);           /* ðàçðåøàåì ðàáîòó ÑÏÈ */
     
     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);  
      
     /* çàïîëíÿåì ñòðóêòóðó ÏÄÏ ïî óìîë÷àíèþ */
     DMA_StructInit(&DMA_InitStruct);
     DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;     /* ïîñòîÿííûé àäðåñ ïåðåôèðèè */
      DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;/* ðàçìåðíîñòü óñ-âà - áàéò */
     DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;        /* ñ÷åò÷èê áóôåðà óâåëè÷èâàåòñÿ */ 
     DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;     /* ðàçìåðíîñòü áóôåðà - áàéò */ 
      DMA_InitStruct.DMA_Mode = DMA_Mode_Normal;             /* íîðìàëüíûé ðåæèì  */   
     DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;              /* ìåæäó ïåðåôèðèåé è ÎÇÓ */
     DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)&L3GD20_SPI->DR; /* çàäàäåì àäðåñ ïðèåìíèêà äàííûõ  */
     DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)&DUSbuffer[0];    /* çàäàåì àäðåñ èñòî÷íèêà äàííûõ  */
     DMA_InitStruct.DMA_BufferSize = 9;                 /* óêàçûâàåì ÷èñëî ïåðåñûëàåìûõ äàííûõ */ 
     /* ïðèìåíÿåì ñòðóêòóðó äëÿ çàïèñè */ 
     DMA_InitStruct.DMA_Priority = DMA_Priority_Medium;         /* ïðèîðåòåò çàïèñè ñðåäíèé */ 
     DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralDST;           /* ïîðò - ïðèåìíèê */   
     DMA_Init(DUS_DMA_Wr, &DMA_InitStruct); 
     /* ïðèìåíÿåì ñòðóêòóðó äëÿ ÷òåíèÿ */
     DMA_InitStruct.DMA_Priority = DMA_Priority_High;          /* ïðèîðåòåò ÷òåíèÿ âûñîêèé   */ 
     DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC;           /* ïîðò - èñòî÷íèê */
     DMA_Init(DUS_DMA_Rd, &DMA_InitStruct);
     /* ðàçðåøèòü çàïðîñ ÏÄÏ äëÿ ÑÏÈ */  
     SPI_I2S_DMACmd(L3GD20_SPI, SPI_I2S_DMAReq_Rx, ENABLE);
     SPI_I2S_DMACmd(L3GD20_SPI, SPI_I2S_DMAReq_Tx, ENABLE);
     
     /* òàêòèðóåì ïîðò */
     RCC_AHBPeriphClockCmd(L3GD20_SPI_INT2_GPIO_CLK, ENABLE);  
     /* êîíôèãóðàöèÿ ïîäêëþ÷åíèÿ ê ïîðòàì */
     SYSCFG_EXTILineConfig(L3GD20_SPI_INT2_EXTI_PORT_SOURCE,L3GD20_SPI_INT2_EXTI_PIN_SOURCE);
     /* çàïðîñ ïðåðûâàíèÿ ïî ãîòîâíîñòè äàííûõ ÄÓÑ*/
     EXTI_ClearITPendingBit(L3GD20_SPI_INT2_EXTI_LINE);
      EXTI_InitStructure.EXTI_Line = L3GD20_SPI_INT2_EXTI_LINE; 
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;
      EXTI_Init(&EXTI_InitStructure);
    }
    /* ðàçðåøàåì ðàáîòó ïåòëè ÄÓÑ */
    void DUS_PetlyaInit(void)
    {
     /* ïåðåíàñòðîèì ÏÄÏ ÄÓÑà*/
     DUS_DMA_Init();
     /* ðàçðåøàåì ïðåðûâàíèÿ îò ÏÄÏ äëÿ êàíàëà ÷òåíèÿ */
     DMA_ITConfig(DUS_DMA_Rd, DMA_IT_TC, ENABLE); 
     /* ðàçðåøèòü çàïðîñ ÏÄÏ äëÿ ÑÏÈ */  
     SPI_I2S_DMACmd(L3GD20_SPI, SPI_I2S_DMAReq_Rx, ENABLE);
     SPI_I2S_DMACmd(L3GD20_SPI, SPI_I2S_DMAReq_Tx, ENABLE);
     /* ðàçðåøàåì ðàáîòó ÏÄÏ */ 
     DMA_Cmd (DUS_DMA_Rd, ENABLE);            /* ñíà÷àëà ðàçðåøàåì ÷òåíèå(!!!!) */
     DMA_Cmd (DUS_DMA_Wr, ENABLE);
     /* íàñòðîéêà ïðåðûâàíèÿ ïîñëå ÏÄÏ */
     NVIC_EnableIRQ(DMA1_Channel2_IRQn);
      NVIC_SetPriority(DMA1_Channel2_IRQn, 2);  
     /* íàñòðîéêà ïðåðûâàíèÿ ïî ëèíèè ãîòîâíîñòè ÄÓÑ */
     NVIC_EnableIRQ(L3GD20_SPI_INT2_EXTI_IRQn);
      NVIC_SetPriority(L3GD20_SPI_INT2_EXTI_IRQn, 2);
     /* òîëêíåì ïåòëþ ÄÓÑ */ 
     DUS_Zapros();
    }
    /* çàïðåòèòü ðàáîòó ïåòëè ÄÓÑ */
    void DUS_PetlyaDeInit(void)
    {
     __IO uint32_t L3GD20Timeout = L3GD20_FLAG_TIMEOUT;
     /* çàïðåòèì ïðåðûâàíèÿ ïî ëèíèè ãîòîâíîñòè ÄÓÑ */
     NVIC_DisableIRQ(L3GD20_SPI_INT2_EXTI_IRQn);
     
     /* äîæäåìñÿ îêîí÷àíèÿ ÏÄÏ */
     while (GPIO_ReadInputDataBit(L3GD20_SPI_CS_GPIO_PORT,L3GD20_SPI_CS_PIN)==Bit_RESET){
        if((L3GD20Timeout--) == 0)  L3GD20_TIMEOUT_UserCallback();
      }
     
     /* çàïðåòèì ðàáîòó ÏÄÏ */
     DMA_Cmd (DUS_DMA_Wr, DISABLE);  /* ñíà÷àëà çàïðåòèì çàïèñü(!!!!) */
     DMA_Cmd (DUS_DMA_Rd, DISABLE); 
     /* çàïðåòèì ïðåðûâàíèÿ ïîñëå ÏÄÏ */
     NVIC_DisableIRQ(DMA1_Channel2_IRQn);
    }
    /* çàïðîñ äàííûõ ÏÄÏ */
    void DUS_Zapros(void)
    {
     if (DMA_GetCurrDataCounter(DUS_DMA_Rd)){
      /* çàïðåòèì ïðåðûâàíèÿ ïî ëèíèè ãîòîâíîñòè ÄÓÑ */
      NVIC_DisableIRQ(L3GD20_SPI_INT2_EXTI_IRQn);
      return;
     }
     /* óñòàíîâèì âûáîð âåäîìîãî óñ-âà */
     L3GD20_CS_LOW();
     /* ñáðîñèì ôëàã çàâåðøåíèÿ öèêëà ÏÄÏ */
     DMA_ClearFlag(DMA1_FLAG_GL2);DMA_ClearFlag(DMA1_FLAG_GL3); 
     /* íàñòðîèì àäðåñ è ðåæèì ïåðåäà÷è */
     DUSbuffer[0]= L3GD20_OUT_TEMP_ADDR|READWRITE_CMD|MULTIPLEBYTE_CMD;
     /* ïåðåçàðÿäêà ÏÄÏ */
     DMA_SetCurrDataCounter(DUS_DMA_Rd,9);
     DMA_SetCurrDataCounter(DUS_DMA_Wr,9); 
     /* ðàçðåøàåì ðàáîòó ÏÄÏ */ 
     DMA_Cmd (DUS_DMA_Rd, ENABLE);            /* ñíà÷àëà ðàçðåøàåì ÷òåíèå(!!!!) */
     DMA_Cmd (DUS_DMA_Wr, ENABLE);
    }
    void DUS_EndDMASPITrans_ISR(void)
    {
     /* çàïðåòèì ðàáîòó ÏÄÏ */
     DMA_Cmd (DUS_DMA_Wr, DISABLE);  /* ñíà÷àëà çàïðåòèì çàïèñü(!!!!) */
     DMA_Cmd (DUS_DMA_Rd, DISABLE); 
     /* ñíèìåì âûáîð óñ-âà ñ  âåäîìîãî */
     L3GD20_CS_HIGH();
     /* îáíîâëÿåì äàííûå óc-â ÈÍÑ */
     DUSDataRdy(); 
     NVIC_EnableIRQ(L3GD20_SPI_INT2_EXTI_IRQn);
    }
    void  DUS_TolkPetlu(void)
    { /* ïðèíóäèòåëüíûé çàïóñê ïî âíåøíèì ñèãíàëàì */
     //if (GPIO_ReadInputData(GPIO_IMU) & IMU_DRDY_G)
          EXTI_GenerateSWInterrupt(L3GD20_SPI_INT2_EXTI_IRQn);
    //    if (GPIO_ReadInputData(GPIO_IMU) & IMU_DRDY_A) 
    //       EXTI_GenerateSWInterrupt(EXTI_Line0);
    }

  10.  
  11. #1968

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от rual Посмотреть сообщение
    циркуляр не пробловал
    У Вас "DMA_Mode_Normal" и "DMA_BufferSize = 9;" , если я правильно понимаю, то после одного "толчка" DMA, он передаст один байт из девяти и после девяти таких "толчков" выдаст флаг "трансфер комплит"...
    А в "DMA_Mode_Circular" после одного "толчка" DMA автоматом сольет все 9 байт и поставит флаг...
    Так вот виснет у меня на 26-м (при условии "1" мл.разр.!!!!) из 28..
    Прям чушь какая то, задача достаточно примитивная, а тут просто ступор, это я OSD делаю (видеостроку вывожу в порт), сначала понять не мог, а когда разобрался что дело в 1-ом бите (!) да еще именно в во втором с конца байте, тут мне совсем поплохело..(не могу понять логику происходящего)

  12. #1969

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

  13. #1970

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    Цитата Сообщение от SergDoc Посмотреть сообщение
    вроде как-то так:
    RCC_Clocks->SYSCLK_Frequency = HSE_VALUE; // HSE_VALUE=8000000
    вот неплохая статейка касательно генерации тактовых частот http://easyelectronics.ru/arm-uchebn...tor-stm32.html
    вот еще возможно полезно будет http://easyelectronics.ru/opredeleni...i-otladke.html

  14. #1971

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от SergDoc Посмотреть сообщение
    я тоже ДМА с подвисоном не победил
    Перепробовал что мог (даже на разных процах), после установки SPI_CPHA = SPI_CPHA_2Edge вместо SPI_CPHA_1Edge удалось "передвинуть" косячный байт на последний из буфера (хотя режим МАСТЕР и работает только на передачу), т.е. так ничего и не понял. Ясно только что при передаче младшего бита "1" в последнем байте сигнал "MOSI" меняет полярность (!) и SPI остается в таком состоянии до сброса (!!!), хотя в даташите такого режима не предусмотрено..
    Так что делайте выводы господа... (не настаиваю, но очень похоже на глюк).

  15. #1972

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Я невзначай запустил UART+DMA
    Код:
    void uartWrite( uint8_t ch)
    {
    	  while (DMA_GetCmdStatus(DMA2_Stream7) != DISABLE) { // ЖДАТЬ КОНЦА ПЕРЕДАЧИ!!!
    			};
        txBuffer[txBufferHead] = ch;
    	
        txBufferHead = (txBufferHead + 1) % UART_BUFFER_SIZE;
    
    	
        // if DMA wasn't enabled, fire it up
        if (!(DMA2_Stream7->CR & 1))
            uartTxDMA();
    }
    правда в коде ни у кого не видел, значит ошибка может быть в чём-то другом...

  16. #1973

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от SergDoc Посмотреть сообщение
    запустил UART+DMA
    USART + DMA вроде корректно передает все данные, а вот что у меня с SPI - большой вопрос...

  17. #1974

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    подключил радио, правда пока только PPM шлейф для PWM ещё не сделал - PPM работает так что хоть что-то у меня рабочее с первого раза получилось A вот с уартом траблы какие-то, если сейчас данные передаются ошибок пакетов нет, то cli (терминал) работает как-то боком - приём нормальный, а передача кривая - передаёт не всё

    да у меня передаётся теперь буфер следующий за запрошенным всё нормально - сам дурак printf.c поломал, теперь работает всё...
    Счастье
    Миниатюры Миниатюры Нажмите на изображение для увеличения
Название: set.jpg‎
Просмотров: 25
Размер:	51.2 Кб
ID:	794830  
    Последний раз редактировалось SergDoc; 16.05.2013 в 11:51.

  18. #1975

    Регистрация
    15.05.2013
    Адрес
    Казань
    Возраст
    28
    Сообщений
    99
    Читаю какое-то время тему. Тоже заинтересовался инециальными системами применительно к моделизму.
    Возможно проблемы с DMA потому, что вы используете конец передачи DMA как признак того, что данные успешно отправлены, но это не так. Конец передачи DMA означает что он успешно положил последний байт из памяти в память периферии, а чем занимается в это время периферия и когда закончит передачу, надо интересоваться непосредственно у неё. Поэтому я в основном работаю с периферией на прерываниях, а для юсарта жду выставления бита USART_SR_TC и принудительно его сбрасываю.
    2 SergDoc небольшой вопрос: на каком этапе сейчас проект? Что готово, что нет, что уже летает, что не устраивает и. т. д. Тему я читал но из-за очень большого количества обсуждения специфических деталей реализации тех или иных вещей из памяти выбивается общий ход проекта.

  19. #1976

    Регистрация
    22.08.2011
    Адрес
    Калининград
    Возраст
    35
    Сообщений
    947
    Записей в дневнике
    2
    Цитата Сообщение от oleg70 Посмотреть сообщение
    , а тут просто ступор, это я OSD делаю

    А на каком чипе ОСД?

  20. #1977

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Цитата Сообщение от Coreglider Посмотреть сообщение
    2 SergDoc небольшой вопрос: на каком этапе сейчас проект? Что готово, что нет, что уже летает, что не устраивает и. т. д. Тему я читал но из-за очень большого количества обсуждения специфических деталей реализации тех или иных вещей из памяти выбивается общий ход проекта.
    Ой сейчас всё на этапе ремонта кухни, а так плата контроллера готова - пытаюсь портировать на неё более-менее знакомое ПО (ибо с программированием у меня никак) есть мелкоплата без барометра - снята с аппарата (она летала ), да и аппарат один разобран второй не собран ещё, на большей проверю шимы (выхода) и буду пробовать взлетать - но пока катастрофически нет времени....

  21. #1978

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от Razek Посмотреть сообщение
    А на каком чипе ОСД?
    Чип ST303VCT6, от дискавериF3 (я ими запасся по дешево).

  22. #1979
    Забанен
    Регистрация
    30.11.2011
    Адрес
    Киев
    Возраст
    36
    Сообщений
    373
    Синхру чем ловите?

  23. #1980

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от Alexey_1811 Посмотреть сообщение
    Синхру чем ловите?
    LM1881

  24. #1981
    Забанен
    Регистрация
    30.11.2011
    Адрес
    Киев
    Возраст
    36
    Сообщений
    373
    Также колупаю ОСД. Выходит практически аппаратно рулить выводом ОСД. Используется всего 2 прерывания на кадр.

  25. #1982

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

  26. #1983

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Так у меня небольшой косячок с выходами, первый таймер работает на 800 гц вместо 400 а 8-й не запустился
    Код:
    static void pwmTimeBase(TIM_TypeDef *tim, uint32_t period)
    {
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    
    
        TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
        TIM_TimeBaseStructure.TIM_Period = period - 1;
        TIM_TimeBaseStructure.TIM_Prescaler = (SystemCoreClock / 1000000) - 1; // all timers run at 1MHz
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(tim, &TIM_TimeBaseStructure);
    }
    надо сделать что-то такое:

    Код:
    static void pwmTimeBase(TIM_TypeDef *tim, uint32_t period)
    {
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    
    
        TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
        TIM_TimeBaseStructure.TIM_Period = period - 1;
       if (TIM1||TIM8){
    
    TIM_TimeBaseStructure.TIM_Prescaler = ((SystemCoreClock / 1000000)/2) - 1;
    }
    else{
    
        TIM_TimeBaseStructure.TIM_Prescaler = (SystemCoreClock / 1000000) - 1; // all timers run at 1MHz
    }
    
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(tim, &TIM_TimeBaseStructure);
    }
    но компилятор предупреждение выдаёт что я константу меняю,
    почему не запустился восьмой - надо проверять, по идее должен был запустится на 100 гц вместо 50...

  27. #1984

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Конечно можно выйти из этой ситуации кардинально, в Configuration mode выбрать professional и перед этими таймерами убрать двоечку, либо APB2 Presсaler в единичку поставить см. выше, но как-то не хочется...

  28. #1985

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Цитата Сообщение от SergDoc Посмотреть сообщение
    professional
    expert - но оно вызывает ошибку в конфигураторе!, можно сделать APB2 Presсaler =4

  29. #1986

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    ну вроде вот так правильно:
    Код:
    static void pwmTimeBase(TIM_TypeDef *tim, uint32_t period)
    {
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    
        TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
        TIM_TimeBaseStructure.TIM_Period = period - 1;
    	if ( (tim==TIM1) || (tim==TIM8)) // так предупреждения нет - всё хорошо..
    	{
    		TIM_TimeBaseStructure.TIM_Prescaler = (SystemCoreClock / 1000000) - 1; // теперь сдесь 400 и 50 соответственно для моторов и серв
    	}
    	else
    	{
        TIM_TimeBaseStructure.TIM_Prescaler = ((SystemCoreClock / 1000000)/2) - 1; // т.к. частота в два раза ниже, то и преддедитель должен быть в два раза меньше, а я это первый раз сделал для всех :(
    	}	
    		TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(tim, &TIM_TimeBaseStructure);
    }

  30. #1987

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

  31. #1988

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

  32. #1989

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    гы Роберт закрылся http://code.google.com/p/afrodevices...e/detail?r=328 тенденция однако....

  33. #1990

    Регистрация
    22.08.2011
    Адрес
    Калининград
    Возраст
    35
    Сообщений
    947
    Записей в дневнике
    2
    А что это за бранч был?

  34. #1991

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    Цитата Сообщение от SergDoc Посмотреть сообщение
    гы Роберт закрылся http://code.google.com/p/afrodevices...e/detail?r=328 тенденция однако....
    не удивлен... как правило стимулируют на это всякие неблагодарные упыри на форумах, которым дай все за так, так еще и гадостей напишут... у меня примерно таже история была... да и сам timecop порой отвратительный товариСЧ (приходилось общаться), т.е. мог и он подгадить...

    upd: сделал себе checkout 325-й ревизии... пусть будет...
    Последний раз редактировалось mahowik; 21.05.2013 в 20:32.

  35. #1992

    Регистрация
    22.08.2011
    Адрес
    Калининград
    Возраст
    35
    Сообщений
    947
    Записей в дневнике
    2
    Цитата Сообщение от mahowik Посмотреть сообщение
    сделал себе checkout 325-й ревизии
    А ты кстати не планируешь менять религию на армовскую?

  36. #1993

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

  37. #1994

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    Цитата Сообщение от Razek Посмотреть сообщение
    А ты кстати не планируешь менять религию на армовскую?
    понемногу почитываю... в будущих планах сделать порт baseflight (или еще чего) на discoveryF3 и напихать туда своих фенек...

  38. #1995

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

  39. #1996
    DVE
    DVE вне форума

    Регистрация
    16.06.2008
    Адрес
    EU
    Возраст
    37
    Сообщений
    4,386
    Еще год назад надо было купить за 70$ Naze32 (или за 140$ PX4 если с запасом и на вырост) и спокойненько писать софт под те же MPU и прочее, не отвлекаясь на лишнее... Тогда может и летало бы уже что-нибудь сейчас А параллельно свою версию делать, под специфические нужды если надо.
    Это так, мысли вслух, у автора похоже свой путь джедая

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

  40. #1997

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Цитата Сообщение от DVE Посмотреть сообщение
    Еще год назад надо было купить за 70$ Naze32 (или за 140$ PX4 если с запасом и на вырост) и спокойненько писать
    у меня мелкоплата (барометр только вернуть) и КУК есть, летать есть на чём, всё равно пока некогда, пересоберу плату и можно будет подлетнуть почти сразу.

    да входы реагировали на прикосновение пальцами, притянул их к питанию - то что работать остались это точно (проверил) а вот перестали - ли откликаться на внешние воздействия перестали или нет проверить не успел...
    Код:
    static void pwmGPIOConfig(GPIO_TypeDef *gpio, uint32_t pin, uint8_t input)
    {
        GPIO_InitTypeDef GPIO_InitStructure;
    
        GPIO_StructInit(&GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = pin;
        if (input){
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
            GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
            GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
    		}
        else{
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
            GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        }
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_Init(gpio, &GPIO_InitStructure);
    
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_TIM5);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_TIM5);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_TIM5);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_TIM5);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource15, GPIO_AF_TIM2);
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_TIM2);
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_TIM3);
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_TIM3);
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4);
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_TIM4);
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_TIM4);
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_TIM4);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM8);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM8);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_TIM8);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_TIM8);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource9,  GPIO_AF_TIM1);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_TIM1);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource13, GPIO_AF_TIM1);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource14, GPIO_AF_TIM1);
    
    }

  41. #1998

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от mahowik Посмотреть сообщение
    в будущих планах сделать порт baseflight (или еще чего) на discoveryF3 и напихать туда своих фенек...
    Александр, мою сборку не пробовал? Интересно твоё сравнение с вием. Мне сравнить не с чем. Вообще аксель мотает жутко от вибраций. Хочется понять можно ли что то улучшить алгоритмом или нужен другой датчик.
    Цитата Сообщение от SergDoc Посмотреть сообщение
    а то ещё один нелетающий проект получится, будем надеятся что почта России не сожгла подарок от Александра rual...
    Да, что то долго она зависла на PCI-2, надеюсь что это обычная нерасторопность.

  42. #1999

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

  43. #2000

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    Цитата Сообщение от rual Посмотреть сообщение
    Александр, мою сборку не пробовал? Интересно твоё сравнение с вием. Мне сравнить не с чем. Вообще аксель мотает жутко от вибраций. Хочется понять можно ли что то улучшить алгоритмом или нужен другой датчик.
    в отпуск как маньяк прихватил с собой ф3 и ноут... т.к. в дистрибутивах был только coocox пробовал под него настроить твой проект... после некоторых мучений таки скомпилил, но hex получался нулевой... я java-ст и в сишных компиллерах/линкерах/билдерах как свиня в апельсинах
    под конец отпуска разжился платным инетом и таки скачал Keil, собрал твой проект и даж покрутил в вийном гуи )) кстати, почему ты выбрал вийный протокол, а не мавлинк тот же?!
    по приезду работа... на этом все и закончилось...

    по акселю могу посоветовать зажать его по самое не могу на 0.2-0.5 гц софтовым фильтром и соот-но дать доверия на макс. гире, т.е. так что бы только корректировать дрейф... нормально когда после дикой болтаники платы, горизонт полностью выходит в ноль через 2-4 сек...

    если уж это не поможет, подруби mpu6050 и сравни... благо они сейчас на развес по 4-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

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

Ваши права

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