Специальные цены   новые товары
+ Ответить в теме
Страница 51 из 165 ПерваяПервая ... 41 49 50 51 52 53 61 ... ПоследняяПоследняя
Показано с 2,001 по 2,040 из 6569

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

Тема раздела Квадрокоптеры. Общие вопросы в категории Квадрокоптеры и мультироторы; Еще вот вспомнил. Некоторые аксели плохенькие, с уменьшением частоты среза внутреннего НЧ фильтра банально уменьшают самплинг (имел дело когда то ...

  1. #2001

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    Еще вот вспомнил. Некоторые аксели плохенькие, с уменьшением частоты среза внутреннего НЧ фильтра банально уменьшают самплинг (имел дело когда то и намучался с ADXL345). В итоге получается к примеру на 10гц всего 20 самплов и при вибрациях, результат только хуже, т.к. выборки идут из всплесков шума. Потому надо поднимать самплинг хотя бы до 100гц (лучше 200гц) и забить на внутренний НЧ, точнее установить его так, что бы было честных 100 самплов. А далее уже читать эти raw самплы и давить софтовым НЧ фильтром. Как писал выше на ~0.2-0.5гц и отдавать в ИМУ...
    Ну а в нормальных акселях, при уменьшении внутреннего НЧ фильтра, самплы не режутся и делается честное усреднение заданного кол-ва самплов на выбранный НЧ фильтр. В частности переход на bma020 тогда дал совсем другую картинку...
    Также надо не забывать, что диапазон должен быть не менее 8g, дабы избежать переполнения на внутреннем АЦП акселя.
    И последний печальный момент. У некоторых акселей, есть свои внутренние физические резонансы, которые ну никак не убрать. Тогда только менять на другой... mpu6050 ну просто песня в этом плане!

  2.  
  3. #2002

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

  4. #2003

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

  5. #2004

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Т.к. платы пока нет и программировать пока нечего (даже пытаться не хочется), начал рисовать реинкорнацию мелкоплаты. Из названия - размер 36X36, ну если удастся то ещё и меньше.
    проц stm32F405(407)RGT6
    гироаксель MPU6050 - из-за размера не смогу позволить SPI да и дешевле
    барометр MS5611
    компас HMC5883 подключен через MPU
    вход один
    выходов 8-10 (как выйдет)
    2 UART
    1 -2 SPI
    АЦП
    флешка (25P16)
    Разъём сонара
    возможны дополнительно свободные i2с и can
    Пожелания имеются?

  6.  
  7. #2005

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от mahowik Посмотреть сообщение
    почему ты выбрал вийный протокол, а не мавлинк тот же?!
    мавлинк мне сильно сложным показался по началу, вий проще было портировать. Тем более ранее возможности мавлика были на пару голов выше моих потребностей. Теперь нахожу мавлинк весьма продуманным и удобным, кроме того есть полное описание. Но пока цейтнот из-за конкурса и дачных проблем. Как будет время буду портировать мавлика.

    Цитата Сообщение от mahowik Посмотреть сообщение
    если уж это не поможет, подруби mpu6050 и сравни...
    Так и сделаю, только вот нет у меня девплаты под МПУ, почта ходит хреново, а самому делать лень.

    Цитата Сообщение от SergDoc Посмотреть сообщение
    Пожелания имеются?
    Для мелких особых расширений не нужно, может только СПИ для сурагатного ОСД или под оптикфлоу.


    Цитата Сообщение от oleg70 Посмотреть сообщение
    Если кто нибудь имеет "инфу" по NMEA0183 поделитесь пожалуйста...

    http://yug-gps.narod.ru/docs/000x/st007.htm все величины в десятичных дробях , кроме градусов долготы-широты

  8. #2006

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Цитата Сообщение от rual Посмотреть сообщение
    Для мелких особых расширений не нужно, может только СПИ для сурагатного ОСД или под оптикфлоу.
    короче, пока получается всё наоборот, i2c оно же uart3 выведены в отдельный порт, датчики по SPI (маг через MPU6000, лапу прерывания с магнитометра наверно нет смысла выводить? всё равно всё в регистрах MPU будет) всё лишнее (eeprom flash) убрал нафиг, СПИ выведен но не для ОСД, а скорей для управления этой крохой (малина или ещё что), платка в принципе самодостаточная, но задумка есть использовать её как спинной мозг с мозжечком, а управление отдать чему-то другому.
    8 выходов, 2 из которых могут быть i2c, а ещё 2 can, вход один, 2 входа АЦП, разъём под сонар, выход на пищалку, USB (наверно придётся ставить микро, мини полплаты занимает ), ну и вездессущий вездесущий uart1, контактные площадки под ST Link, всё больше ничего. рисую просто так, для занятся чем - нибудь, до изготовления когда дело дойдёт - незнаю, по готовности выкину всё в гит, может кому интересно будет...

  9. #2007

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от SergDoc Посмотреть сообщение
    задумка есть использовать её как спинной мозг с мозжечком
    На Ф4 увесистый мозжечек получается))) Ф1 конечно скучно, но мож Ф3?

  10.  
  11. #2008

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Ну во первых, платы хочу совместимые, что маленькая, что большая, во вторых - не оставляет надежда на полный фильтр Калмана, а там Ф4 придётся как нельзя лучше, ну и третье ф3 - не видел и не знаю, а с Ф4 более менее познакомился чесно - я так устал, у меня на протяжении всей этой истории косяк за косяком, как буд-то злой рок какой-то, всё чёрт знает как: управление отказывало, микросхемы ломал, жег, то вышлют то не вышлют, то вообще запрет на штатовские детали (полупроводники), как следствие доставать всё (все комплектующие) сложнее, да и штатных (нештатных) ситуаций сколько, батарейки дохнут, моторы отказывают. Тут наверно в пору бросит всё, но нет - доведу до конца, надо, да и упрямство сильнее
    Последний раз редактировалось SergDoc; 26.05.2013 в 13:08.

  12. #2009

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

  13. #2010
    DVE
    DVE вне форума

    Регистрация
    16.06.2008
    Адрес
    EU
    Возраст
    37
    Сообщений
    4,386
    И Наза и Х4 отлично садятся без каких-либо внешних датчиков, по изменению высоты с барометра наверно.

    Имхо интереснее копать в сторону программной реализации.

  14. #2011

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

  15. #2012

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от DVE Посмотреть сообщение
    И Наза и Х4 отлично садятся без каких-либо внешних датчиков, по изменению высоты с барометра наверно. Имхо интереснее копать в сторону программной реализации.

    Если аксель и баро адекватны, то для самого процесса посадки достаточно управлять вертикальной скоростью. Сонар больше нужен просто для определения самого наличия поверхности под аппаратом, что важно для полной автоматизации полёта. Или для автопосадки самолётов, там мягкой посадки без него не реализовать.

  16. #2013

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

  17. #2014
    DVE
    DVE вне форума

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

  18. #2015

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от DVE Посмотреть сообщение
    Не, замеряется наверно именно скорость снижения, т.е. текущая дельта по барометру, а не разность давлений взлет/посадка.
    Как там делается я не знаю, но при старте надо бы засекать высоту места, только вот теоретически за время полёта может измениться давление и дрейф ГПС и баро. Посему нужно снижаться до тех пор, пока интегральная составляющая вертикального ПИД не уйдёт существенно в минус, т.е. упёрлись в планету.

  19. #2016

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

  20. #2017

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Есть у кого опыт работы с USART по передаче данных с чипа на чип ?
    Похоже у меня скорости не совпадают, с контроллера полета на OSD еще более-менее, а с GPS на контроллер оч. плохо...
    Делал то же самое (с тем же GPS) на AVRe, вроде стабильно было, скорость минимум -> 9600, провод 25 см. всего...
    Видимо STM по капризней....

  21. #2018

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от oleg70 Посмотреть сообщение
    Видимо STM по капризней....
    Не правда ваша, нет разницы между меж процевым и обменом с внешним компом. СТМ отлично работает.

  22. #2019

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Сделайте прверку на окончание передачи, перед посылкой следующего пакета, ну и на оборот пакет принят - прерывание... писал же выше (правда уарт+дма) пока не сделал проверку на окончание передачи - висяк был, хотя в 103-м этого не требовалось....
    вот драйвер рабочий под ф4 думаю и под ф3 пойдёт, 3 уарта:
    Код:
    #include "board.h"
    
    /*
        DMA UART routines idea lifted from AutoQuad
        Copyright © 2011  Bill Nesbitt
    */
    #define UART_BUFFER_SIZE    512
    
    // Receive buffer, circular DMA
    volatile uint8_t rxBuffer[UART_BUFFER_SIZE];
    uint32_t rxDMAPos = 0;
    volatile uint8_t txBuffer[UART_BUFFER_SIZE];
    uint32_t txBufferTail = 0;
    uint32_t txBufferHead = 0;
    
    static void uartTxDMA(void)
    {
        //while (DMA_GetCmdStatus(DMA2_Stream7) != DISABLE) {
    		//	};
    		DMA2_Stream7->M0AR = (uint32_t)&txBuffer[txBufferTail];
        if (txBufferHead > txBufferTail) {
          //DMA_SetCurrDataCounter(DMA2_Stream7, txBufferHead - txBufferTail);   
    			DMA2_Stream7->NDTR = txBufferHead - txBufferTail;
            txBufferTail = txBufferHead;
        } else {
          //DMA_SetCurrDataCounter(DMA2_Stream7, UART_BUFFER_SIZE - txBufferTail);  
    			DMA2_Stream7->NDTR = UART_BUFFER_SIZE - txBufferTail;
            txBufferTail = 0;
        }
    
        DMA_Cmd(DMA2_Stream7, ENABLE);
    }
    
    void DMA2_Stream7_IRQHandler(void)
    {
    	if(DMA_GetITStatus(DMA2_Stream7,DMA_IT_TCIF7))
      {
        /* Очищаем бит обработки прерывания */
         
        DMA_ClearITPendingBit(DMA2_Stream7,DMA_IT_TCIF7);
        DMA_Cmd(DMA2_Stream7, DISABLE);
    
        if (txBufferHead != txBufferTail)
    			       uartTxDMA();
    	}
    		
    }
    
    
    void uartInit(uint32_t speed)
    {
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        DMA_InitTypeDef DMA_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
    
        // USART1_TX    PA9
        // USART1_RX    PA10
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    	  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
    	  GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
    	  GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
    
        // DMA TX Interrupt
        NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream7_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    
        USART_InitStructure.USART_BaudRate = speed;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_Init(USART1, &USART_InitStructure);
    
        // Receive DMA into a circular buffer
        DMA_DeInit(DMA2_Stream5);
    		while (DMA_GetCmdStatus(DMA2_Stream5) != DISABLE) {
    			}; 
    		DMA_InitStructure.DMA_Channel = DMA_Channel_4;
        DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
        DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR;
        DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)rxBuffer;
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
        DMA_InitStructure.DMA_BufferSize = UART_BUFFER_SIZE;
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
    		DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
        DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
        DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
        DMA_Init(DMA2_Stream5, &DMA_InitStructure);
    
        DMA_Cmd(DMA2_Stream5, ENABLE);
        USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);
        rxDMAPos = DMA_GetCurrDataCounter(DMA2_Stream5);
    
        // Transmit DMA
        DMA_DeInit(DMA2_Stream7);
    		while (DMA_GetCmdStatus(DMA2_Stream7) != DISABLE) {
    			}; 
    		DMA_InitStructure.DMA_Channel = DMA_Channel_4;
        DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR;
        DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    		DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
        DMA_Init(DMA2_Stream7, &DMA_InitStructure);
        DMA_ITConfig(DMA2_Stream7, DMA_IT_TC, ENABLE);
        DMA2_Stream7->NDTR = 0;
        USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
    
        USART_Cmd(USART1, ENABLE);
    }
    
    uint16_t uartAvailable(void)
    {
        return (DMA_GetCurrDataCounter(DMA2_Stream5) != rxDMAPos) ? true : false;
    }
    
    bool uartTransmitEmpty(void)
    {
        return (txBufferTail == txBufferHead);
    }
    
    uint8_t uartRead(void)
    {
        uint8_t ch;
    
        ch = rxBuffer[UART_BUFFER_SIZE - rxDMAPos];
        // go back around the buffer
        if (--rxDMAPos == 0)
            rxDMAPos = UART_BUFFER_SIZE;
    
        return ch;
    }
    
    uint8_t uartReadPoll(void)
    {
        while (!uartAvailable()); // wait for some bytes
        return uartRead();
    }
    
    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();
    }
    
    void uartPrint(char *str)
    {
        while (*str)
            uartWrite(*(str++));
    }
    
    
    /* -------------------------- UART2  ----------------------------- */
    uartReceiveCallbackPtr uart2Callback = NULL;
    #define UART2_BUFFER_SIZE    128
    
    volatile uint8_t tx2Buffer[UART2_BUFFER_SIZE];
    uint32_t tx2BufferTail = 0;
    uint32_t tx2BufferHead = 0;
    bool uart2RxOnly = false;
    
    static void uart2Open(uint32_t speed)
    {
        USART_InitTypeDef USART_InitStructure;
    
        USART_StructInit(&USART_InitStructure);
        USART_InitStructure.USART_BaudRate = speed;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | (uart2RxOnly ? 0 : USART_Mode_Tx);
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_Init(USART2, &USART_InitStructure);
        USART_Cmd(USART2, ENABLE);
    
    
    }
    
    void uart2Init(uint32_t speed, uartReceiveCallbackPtr func, bool rxOnly)
    {
        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
    
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    
        uart2RxOnly = rxOnly;
    
        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    
        // USART2_TX    PD5
        // USART2_RX    PD6
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        if (!rxOnly)
            GPIO_Init(GPIOD, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_Init(GPIOD, &GPIO_InitStructure);
    
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_USART2);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource6,GPIO_AF_USART2);
    
        uart2Open(speed);
        USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
        if (!rxOnly)
            USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
        USART_Cmd(USART2, ENABLE);
    		uart2Callback = func;
    }
    
    void uart2ChangeBaud(uint32_t speed)
    {
        uart2Open(speed);
    }
    
    void uart2Write(uint8_t ch)
    {
        if (uart2RxOnly)
            return;
    
        tx2Buffer[tx2BufferHead] = ch;
        tx2BufferHead = (tx2BufferHead + 1) % UART2_BUFFER_SIZE;
    
        USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
    }
    
    bool uart2TransmitEmpty(void)
    {
        return tx2BufferTail == tx2BufferHead;
    }
    
    void USART2_IRQHandler(void)
    {
        uint16_t SR = USART2->SR;
    
        if (SR & USART_IT_RXNE) {
            if (uart2Callback)
                uart2Callback(USART_ReceiveData(USART2));
        }
        if (SR & USART_FLAG_TXE) {
            if (tx2BufferTail != tx2BufferHead) {
                USART2->DR = tx2Buffer[tx2BufferTail];
                tx2BufferTail = (tx2BufferTail + 1) % UART2_BUFFER_SIZE;
            } else {
                USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
            }
        }
    }
    
    /* -------------------------- UART3  ----------------------------- */
    uartReceiveCallbackPtr uart3Callback = NULL;
    #define UART3_BUFFER_SIZE    128
    
    volatile uint8_t tx3Buffer[UART3_BUFFER_SIZE];
    uint32_t tx3BufferTail = 0;
    uint32_t tx3BufferHead = 0;
    bool uart3RxOnly = false;
    
    static void uart3Open(uint32_t speed)
    {
        USART_InitTypeDef USART_InitStructure;
    
        USART_StructInit(&USART_InitStructure);
        USART_InitStructure.USART_BaudRate = speed;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | (uart3RxOnly ? 0 : USART_Mode_Tx);
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_Init(USART3, &USART_InitStructure);
        USART_Cmd(USART3, ENABLE);
    }
    
    void uart3Init(uint32_t speed, uartReceiveCallbackPtr func, bool rxOnly)
    {
        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
    
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
    
        uart3RxOnly = rxOnly;
    
        NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    
        
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        if (!rxOnly)
            GPIO_Init(GPIOD, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_Init(GPIOD, &GPIO_InitStructure);
    
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_USART2);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource9,GPIO_AF_USART2);
    
        uart3Open(speed);
        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
        if (!rxOnly)
            USART_ITConfig(USART3, USART_IT_TXE, ENABLE);
        USART_Cmd(USART3, ENABLE);
    		uart3Callback = func;
    }
    
    void uart3ChangeBaud(uint32_t speed)
    {
        uart3Open(speed);
    }
    
    void uart3Write(uint8_t ch)
    {
        if (uart3RxOnly)
            return;
    
        tx3Buffer[tx3BufferHead] = ch;
        tx3BufferHead = (tx3BufferHead + 1) % UART3_BUFFER_SIZE;
    
        USART_ITConfig(USART3, USART_IT_TXE, ENABLE);
    }
    
    bool uart3TransmitEmpty(void)
    {
        return tx3BufferTail == tx3BufferHead;
    }
    
    void USART3_IRQHandler(void)
    {
        uint16_t SR = USART3->SR;
    
        if (SR & USART_IT_RXNE) {
            if (uart3Callback)
                uart3Callback(USART_ReceiveData(USART3));
        }
        if (SR & USART_FLAG_TXE) {
            if (tx3BufferTail != tx3BufferHead) {
                USART3->DR = tx3Buffer[tx3BufferTail];
                tx3BufferTail = (tx3BufferTail + 1) % UART3_BUFFER_SIZE;
            } else {
                USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
            }
        }
    }
    Последний раз редактировалось SergDoc; 28.05.2013 в 10:40.

  23. #2020

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

    SergDoc, по новой плате, может сразу заложиться на набортный ГПС с внешней антенной, т.к. без него уже не интересно, а ШИМ входы/выходы сокаратить до 6/6, ведь нет смысла делать просто более жирный мелковий?
    Вложения

  24. #2021

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

  25. #2022

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от rual Посмотреть сообщение
    СТМ отлично работает.
    Спасибо разобрался, глюк был в приоритетах DMA, у меня их два (канала) один гонит на OSD другой читает с GPS с разных UARTов, так вот при одноименном приоритете происходили трудно-понимаемые чудеса....

    Цитата Сообщение от SergDoc Посмотреть сообщение
    и на каком модуле остановиться?
    EB270 или EB500 не хотите? , паять легко, обвеса нет (кроме кварца), у меня нормально служит..

    Цитата Сообщение от rual Посмотреть сообщение
    может сразу заложиться на набортный ГПС
    В следующем проекте (видимо зимой) планирую соорудить LSM333+GPS+баро на одной плате, должно компактно получиться, минимум проводов на модели (только OSD не знаю пока как, отдельно или туда же)..
    Последний раз редактировалось oleg70; 28.05.2013 в 23:59.

  26. #2023

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от SergDoc Посмотреть сообщение
    при наличии в продаже дешевых готовых модулей, как-то не актуально
    Актуально, потому как без ГНСС сейчас не один проект не делают, смысла делить на модули и путаться в проводах нет. Кроме того это доп вес и габариты. Больший смысл как раз имеет сделать полную компактную навигационную часть с небольшим количеством вх./выходов, 6/6 например, или общий ППМ/6выходов ШИМ, а остальные расширения входов и выходов делать отдельной платой опционально (аля ПХ4 только с ГНСС на основной плате).

    Цитата Сообщение от SergDoc Посмотреть сообщение
    приведёт к увеличению размеров, да и с расчётами разводки можно накосячить, и вылавливать потом багоглюки, да и на каком модуле остановиться?
    вот этот модуль http://naviaglonass.ru/ml8088s имеет маленький размер и ни какой внешней обвязки кроме батарейки и разъема антенны. Единственное место, где можно накосячить, это полосковая линия к разъему, но её можно срисовать с родной девплаты.

    Цитата Сообщение от SergDoc Посмотреть сообщение
    вот что-нибудь для передачи телеметрии - хотя тоже спорный вопрос....
    Это тоже важно, возможно снять сами РЧ-модули с 3DR и напаять на свою плату, стабы 3.3В нам не нужны. Дальнейшее развитие, думаю, будет идти в сторону всё большей автоматизации и наличие приемника Р/У будет не обязательным, а вот иметь постоянный двустороний канал уже необходимость.

  27. #2024

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    чёт я не пойму - это у вас рубли такие здоровые? 33,2Х35,5 мм - это же вся моя мелкоплата? надо что-то мельче, у меня модуль с антенной 16Х16 если не ошибаюсь... блин первым делом надо заказать верхнюю плату (во разленился - её и дома сделать можно)...

    Цитата Сообщение от oleg70 Посмотреть сообщение
    EB500 не хотите?
    это MTK? 12Х10 уже более - менее (по размерам)
    Цитата Сообщение от oleg70 Посмотреть сообщение
    LSM333
    что-то мне подсказывает, что аксель там будет кака

    Цитата Сообщение от rual Посмотреть сообщение
    Это тоже важно, возможно снять сами РЧ-модули с 3DR и напаять на свою плату, стабы 3.3В нам не нужны. Дальнейшее развитие, думаю, будет идти в сторону всё большей автоматизации и наличие приемника Р/У будет не обязательным, а вот иметь постоянный двустороний канал уже необходимость.
    ха в мелкопату это явно всё не влезет, но вот на основе большей - вполне (можно всё зафундулить и на верхнюю плату - тогда большую и трогать ненадо)...

  28. #2025

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от SergDoc Посмотреть сообщение
    чёт я не пойму - это у вас рубли такие здоровые? 33,2Х35,5 мм - это же вся моя мелкоплата?
    Ну во-первых там копейка, во-вторых размер модуля 15х13х2,8 ))


    Цитата Сообщение от SergDoc Посмотреть сообщение
    можно всё зафундулить и на верхнюю плату

    Можно и так.

  29. #2026

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    Извиняюсь я GL, а не ML посмотрел, надеюсь его реально достать? сразу три системы (Галилео поддерживается) и с заделом на будущее, не так уж и плохо... только блин название бесит ГЛОНАСС/GPS, Global Positioning System — система глобального позиционирования и ни к какому названию отношения не имеет, Штатовская GPS всегда называлась NAVSTAR, Российская - ГЛОНАСС, а европейская GALILEO.... вот что более интересно, что спутники своими инерциалками расчитывают эфемеиды(Эфемериды, в частности, используются для определения координат наблюдателя. Также эфемеридами называются координаты искусственных спутников Земли, используемых для навигации, например в системе NAVSTAR, ГЛОНАСС, Galileo. Координаты спутников передаются в составе сообщений о местонахождении спутника, в этом случае говорят о передаче эфемерид.) потом корректируют расчёты с других спутников и базовой станцией
    Последний раз редактировалось SergDoc; 29.05.2013 в 16:38.

  30. #2027
    Забанен
    Регистрация
    30.11.2011
    Адрес
    Киев
    Возраст
    36
    Сообщений
    373
    Я себе прикрутил GPS/ГЛОНАСС SIM68R. Пока не летал но в ГУИ, стабильненько положение определяет.

  31. #2028

    Регистрация
    15.06.2011
    Адрес
    Ростов-на-Дону
    Возраст
    45
    Сообщений
    871
    как вариант сделать на одной плате 36*36 GPS модуль и OSD на stm32f103+LM1881 + можно флэшку поставить ака логер ...
    если элементы располагать на одной стороне , то перевернув плату деталями вниз не неё-же можно крепить GPS антенну ...
    как вариант на обратной стороне платы предусмотреть возможность установки модуля с антенной (да хоть тогоже MT3329) ...

  32. #2029

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от SergDoc Посмотреть сообщение
    что-то мне подсказывает, что аксель там будет кака
    Что мне не понравилось, так это физически разделенные (или не соединенные) SPI интерфейсы гиры и акс+маг, видимо просто два кристалла в один побольше слепили...
    А насчет акселя, незнаю, почему Вам так кажется (если не секрет почему?) вроде 16 бит АЦП, может есть какие нибудь лидеры по показателям из доступных к покупке, так подскажите (у меня не велик опыт, только три марки пробовал, по моему они все приблизительно одинаковые)..

  33. #2030

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,462
    Записей в дневнике
    8
    чуть выше, видимо собсвенные резонансы http://forum.rcdesign.ru/f123/thread...ml#post4224107

    Цитата Сообщение от Gapey Посмотреть сообщение
    да хоть тогоже MT3329
    ну это на верхней плате текущего контроллера, вот думаю, пока не делал её - не заменить ли microSD (она как-то и не актуальна для логов хватит и флеши на плате) на приёмо-передатчик, что работает по SPI? ну например маленький RFM22B
    но к нему на втором конце придётся что-то делать USB-> COM->SPI переходник(можно у немцев сколхозить 88 меги у меня есть правда мелкие слишком) было бы с чем совместить....

    думаю эта мысль будет правильней, чем изобретать новую плату, не закончив старую...
    Последний раз редактировалось SergDoc; 30.05.2013 в 00:49.

  34. #2031

    Регистрация
    03.12.2006
    Адрес
    Москва
    Возраст
    38
    Сообщений
    1,145
    Здравствуйте Сергей.Пришли мне на днях платы из того места где Вы заказали свои http://www.seeedstudio.com/depot.
    Я расстроен.Первое-очень криво порезаны,думал что сам накосячил с гербером,но кривизна не повторяется,она уникальна для каждой платы)))Маска и шелкография тоже не на высоте,особенно шелкография.Диаметр отверстий под штырьковые разъемы не тот,штырьки еле еле вставляются.Аналогичная плата,с аналогичными размерами отверстий,заказанная в другом месте-все нормально.....

  35. #2032

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от SergDoc Посмотреть сообщение
    надеюсь его реально достать? сразу три системы (Галилео поддерживается) и с заделом на будущее, не так уж и плохо...
    Прийдёт посылка, достанешь )))


    Цитата Сообщение от SergDoc Посмотреть сообщение
    только блин название бесит ГЛОНАСС/GPS, Global Positioning System — система глобального позиционирования и ни к какому названию отношения не имеет, Штатовская GPS всегда называлась NAVSTAR, Российская - ГЛОНАСС, а европейская GALILEO.
    Вот что википедия говорит:
    В 1973 году была инициирована программа DNSS, позже переименованная в Navstar-GPS, а, затем, в GPS.
    Цитата Сообщение от SergDoc Посмотреть сообщение
    что более интересно, что спутники своими инерциалками расчитывают эфемеиды
    Я конечно не специалист, но думаю, что в космосе ориентироваться с одной стороны сложнее,больше ориентиров, сложнее уравнения движения и больше математики, а с другой стороны проще, ориентация меняется медленней, возмущающих воздействий среды меньше, с вибрациями бороться не нужно. То есть для наших пременений совсем не применим

  36. #2033

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

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

    Цитата Сообщение от rual Посмотреть сообщение
    Вот что википедия говорит
    ей тоже слепо верить нельзя

  37. #2034

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Смотрю везде применяется BMP85 баро, это "самый-самый" или еще что есть (не знаю какой выбрать), для MPX4115 что-то не могу найти АЦП, да и великоват он...
    Ваше мнение, господа...

  38. #2035

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    Цитата Сообщение от oleg70 Посмотреть сообщение
    это "самый-самый" или еще что есть
    ms5611 сейчас самое оно... точность по паспорту вроде +/-10см, а bmp085 +/-1м...

  39. #2036

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


    теперь, с этой доской надо ездить в машине, и проверять работу софта....
    Миниатюры Миниатюры Нажмите на изображение для увеличения
Название: 11.jpg‎
Просмотров: 51
Размер:	48.0 Кб
ID:	801297  

  40. #2037

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

  41. #2038

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    38
    Сообщений
    2,291
    Записей в дневнике
    19
    Подтверждаю )) на гирах без корекциии можно висеть более минуты... пробовал itg3205 и mpu6050...

  42. #2039

    Регистрация
    15.06.2011
    Адрес
    Ростов-на-Дону
    Возраст
    45
    Сообщений
    871
    Цитата Сообщение от SergDoc Посмотреть сообщение
    ну это на верхней плате текущего контроллера, вот думаю, пока не делал её - не заменить ли microSD (она как-то и не актуальна для логов хватит и флеши на плате) на приёмо-передатчик, что работает по SPI? ну например маленький RFM22B
    несоветую ставить передающий модуль на одной плате с GPS приемником , даже если антенны будет вынесены далеко от платы ...
    + написать нормально работающую в наших условиях радиосистему это отдельная довольно сложная задача ... надеюсЪ опенпилоты доведут доума свой OPLink , тогда можно будет использовать его ....

  43. #2040

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

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

Похожие темы

  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

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

Ваши права

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