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

SergDoc

Ну вот к примеру - пусть таже наза, как известно спускается она с трудом, имеем разбежку высот старта и посадки ну метров 15-20, ветер - что мы видим аппарат спустился до высоты точки старта - из-за ветра скорость спуска =0 - о да мы сели!!! и с 20 метров в асфальт, или что там под аппаратом…

DVE

Не, замеряется наверно именно скорость снижения, т.е. текущая дельта по барометру, а не разность давлений взлет/посадка.

rual
DVE:

Не, замеряется наверно именно скорость снижения, т.е. текущая дельта по барометру, а не разность давлений взлет/посадка.

Как там делается я не знаю, но при старте надо бы засекать высоту места, только вот теоретически за время полёта может измениться давление и дрейф ГПС и баро. Посему нужно снижаться до тех пор, пока интегральная составляющая вертикального ПИД не уйдёт существенно в минус, т.е. упёрлись в планету.

SergDoc

Я раньше видео выкладывал - не мог посадить из-за бокового ветра, газ практически в 0 а аппарат висит на одной высоте, пока крен против ветра не дал - тогда только ветром и прижало к земле…

oleg70

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

rual
oleg70:

Видимо STM по капризней…

Не правда ваша, нет разницы между меж процевым и обменом с внешним компом. СТМ отлично работает.

SergDoc

Сделайте прверку на окончание передачи, перед посылкой следующего пакета, ну и на оборот пакет принят - прерывание… писал же выше (правда уарт+дма) пока не сделал проверку на окончание передачи - висяк был, хотя в 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);
        }
    }
}
rual
oleg70:

Видимо STM по капризней…

В приложенных файлах всё что вам нужно.

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

RusINS10F3.rar

SergDoc
rual:

может сразу заложиться на набортный ГПС с внешней антенной

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

oleg70
rual:

СТМ отлично работает.

Спасибо разобрался, глюк был в приоритетах DMA, у меня их два (канала) один гонит на OSD другой читает с GPS с разных UARTов, так вот при одноименном приоритете происходили трудно-понимаемые чудеса…

SergDoc:

и на каком модуле остановиться?

EB270 или EB500 не хотите? , паять легко, обвеса нет (кроме кварца), у меня нормально служит…

rual:

может сразу заложиться на набортный ГПС

В следующем проекте (видимо зимой) планирую соорудить LSM333+GPS+баро на одной плате, должно компактно получиться, минимум проводов на модели (только OSD не знаю пока как, отдельно или туда же)…

rual
SergDoc:

при наличии в продаже дешевых готовых модулей, как-то не актуально

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

SergDoc:

приведёт к увеличению размеров, да и с расчётами разводки можно накосячить, и вылавливать потом багоглюки, да и на каком модуле остановиться?

вот этот модуль naviaglonass.ru/ml8088s имеет маленький размер и ни какой внешней обвязки кроме батарейки и разъема антенны. Единственное место, где можно накосячить, это полосковая линия к разъему, но её можно срисовать с родной девплаты.

SergDoc:

вот что-нибудь для передачи телеметрии - хотя тоже спорный вопрос…

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

SergDoc

чёт я не пойму - это у вас рубли такие здоровые? 33,2Х35,5 мм - это же вся моя мелкоплата? надо что-то мельче, у меня модуль с антенной 16Х16 если не ошибаюсь… блин первым делом надо заказать верхнюю плату (во разленился - её и дома сделать можно)…

oleg70:

EB500 не хотите?

это MTK? 12Х10 уже более - менее (по размерам)

oleg70:

LSM333

что-то мне подсказывает, что аксель там будет кака 😦

rual:

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

ха в мелкопату это явно всё не влезет, но вот на основе большей - вполне (можно всё зафундулить и на верхнюю плату - тогда большую и трогать ненадо)…

rual
SergDoc:

чёт я не пойму - это у вас рубли такие здоровые? 33,2Х35,5 мм - это же вся моя мелкоплата?

Ну во-первых там копейка, во-вторых размер модуля 15х13х2,8 ))

SergDoc:

можно всё зафундулить и на верхнюю плату

Можно и так.

SergDoc

Извиняюсь я GL, а не ML посмотрел, надеюсь его реально достать? сразу три системы (Галилео поддерживается) и с заделом на будущее, не так уж и плохо… только блин название бесит ГЛОНАСС/GPS, Global Positioning System — система глобального позиционирования и ни к какому названию отношения не имеет, Штатовская GPS всегда называлась NAVSTAR, Российская - ГЛОНАСС, а европейская GALILEO… вот что более интересно, что спутники своими инерциалками расчитывают эфемеиды(Эфемериды, в частности, используются для определения координат наблюдателя. Также эфемеридами называются координаты искусственных спутников Земли, используемых для навигации, например в системе NAVSTAR, ГЛОНАСС, Galileo. Координаты спутников передаются в составе сообщений о местонахождении спутника, в этом случае говорят о передаче эфемерид.) потом корректируют расчёты с других спутников и базовой станцией

Alexey_1811

Я себе прикрутил GPS/ГЛОНАСС SIM68R. Пока не летал но в ГУИ, стабильненько положение определяет.

Gapey

как вариант сделать на одной плате 36*36 GPS модуль и OSD на stm32f103+LM1881 + можно флэшку поставить ака логер …
если элементы располагать на одной стороне , то перевернув плату деталями вниз не неё-же можно крепить GPS антенну …
как вариант на обратной стороне платы предусмотреть возможность установки модуля с антенной (да хоть тогоже MT3329) …

oleg70
SergDoc:

что-то мне подсказывает, что аксель там будет кака

Что мне не понравилось, так это физически разделенные (или не соединенные) SPI интерфейсы гиры и акс+маг, видимо просто два кристалла в один побольше слепили…
А насчет акселя, незнаю, почему Вам так кажется (если не секрет почему?) вроде 16 бит АЦП, может есть какие нибудь лидеры по показателям из доступных к покупке, так подскажите (у меня не велик опыт, только три марки пробовал, по моему они все приблизительно одинаковые)…

SergDoc

чуть выше, видимо собсвенные резонансы rcopen.com/forum/f134/topic224458/2002

Gapey:

да хоть тогоже MT3329

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

думаю эта мысль будет правильней, чем изобретать новую плату, не закончив старую…

soliada

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

rual
SergDoc:

надеюсь его реально достать? сразу три системы (Галилео поддерживается) и с заделом на будущее, не так уж и плохо…

Прийдёт посылка, достанешь )))

SergDoc:

только блин название бесит ГЛОНАСС/GPS, Global Positioning System — система глобального позиционирования и ни к какому названию отношения не имеет, Штатовская GPS всегда называлась NAVSTAR, Российская - ГЛОНАСС, а европейская GALILEO.

Вот что википедия говорит:

В 1973 году была инициирована программа DNSS, позже переименованная в Navstar-GPS, а, затем, в GPS.

SergDoc:

что более интересно, что спутники своими инерциалками расчитывают эфемеиды

Я конечно не специалист, но думаю, что в космосе ориентироваться с одной стороны сложнее,больше ориентиров, сложнее уравнения движения и больше математики, а с другой стороны проще, ориентация меняется медленней, возмущающих воздействий среды меньше, с вибрациями бороться не нужно. То есть для наших пременений совсем не применим:)

SergDoc
soliada:

Пришли мне на днях платы из того места где Вы заказали свои

Ну извините, я как-то ответственности за китайский народ и их проделки не несу 😃, у меня платы все акуратные (есть небольшие огрехи в площадках под проц на некоторых, но не смертельно), ну а еже-ли начали гнать брак, то просто надо сменить магазин - за информацию спасибо!

rual:

Прийдёт посылка, достанешь )))

Эээ - мы так не договаривались, спасибо - значит верхняя плата в переделку полностью…

rual:

Вот что википедия говорит

ей тоже слепо верить нельзя 😃