Activity

Дубль два

Почти продолжение темы rcopen.com/blogs/74247/23628
В общем, подошел кардинально с другой стороны. Т.Е. железо совсем другое: был куплен на пробу датчик BNO055 и прикручен к первой попавшейся в руки платке с STM32F103
почему такой выбор? да всё просто: на платке есть разведёный разъём i2c и с аппаратным USB - платка самодельная завалялась с эпохи легенд, показывать её нет смысла. Если кому интересно - можно взять какую-нибудь stm32duino на 103-м проце бакса за 2-3. BNO лучше брать шилдик без дополнительного проца ( STM8 ставят) иначе его придётся отрезать ибо мешает он, ну и в даташите уточнить адрес датчика на шилде.
Так вот собирал я эту хрень для сына - что бы башкой можно было крутить в БЗС, тундре и других авиа симуляторах, кстати даже на старичке ИЛ2 работает. При остром желании можно легко переделать эту штуку в хедтрекер для FPV-шников…
Но, к сожалению, после испытаний на сыне, выяснилось, что не хочет он “дополненой реальности” в играх и играет он дальше как и было…
в общем я этот проект бросил… в github может кому пригодиться. Для сборки понадобиться STM32CubeMX и STSW-STM32095 (предупреждение, хоть программульки и совершенно бесплатные, но регистрироваться для их скачивания придётся)… Ну вот вроде и всё, проект закрыт.
p.s. При опытах и экспериментах ни один сын не пострадал)))

Возвращение в хобби, новый проект, понимай как хочешь...

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

Если кому интересен сам процесс могу рассказать с картинками и видео, но позже - когда решу проблему…
И так: взят STM32CUBE MX (генератор кода для STM - пока без ссылок - всё можно взять у них на сайте ST), там же System Workbench for STM32 ( бесплатная среда, требуется регистрация для скачивания, ссыль так же есть на сайте ST) собственно F4BY (хотя неважно - любой контроллер STM32 - суть не в этом).

Короче, в STM32CUBE MX конфигурируешь то что хочешь получить от процессора(создаёшь хардварный абстрактный слой для нужного проца, в System Workbench for STM32 просто дописываешь то, что тебе нужно…

Проблема: не смог прочитать компас HMC5883/5983 по шине i2c - что говорит шина - return HAL_BUSY - занято, “перезвоните попозже”. Ладно, было принято решение “прозвонить” шину по адресам (какие есть) - ответ получаю стабильно - 2 устройства компас и баро, но как только пытаюсь читать компас получаю пустые данные (так для понятия картины - настраивать и читать его я умею - это частный случай), перепробовал кучу вариантов работы с i2c в данном хале, примеры:

void HMC5883L_initialize() {

    HAL_I2C_Mem_Write(&hi2c2, HMC5883l_ADDRESS, 0x00 , 1, &RegSettingA , 1, 100);
    HAL_I2C_Mem_Write(&hi2c2, HMC5883l_ADDRESS, 0x01 , 1, &RegSettingB , 1, 100);
    HAL_I2C_Mem_Write(&hi2c2, HMC5883l_ADDRESS, 0x02 , 1, &RegSettingMR , 1, 100);
}


void HMC5883LRead(int16_t *destination) {
    HAL_I2C_Mem_Read(&hi2c2,HMC5883l_ADDRESS,HMC5883l_ADD_DATAX_MSB_MULTI, 1, buffer, 6, 100);

    destination[0] = (((int16_t)buffer[0]) << 8) | buffer[1];
    destination[1] = (((int16_t)buffer[4]) << 8) | buffer[5];
    destination[2] = (((int16_t)buffer[2]) << 8) | buffer[3];
}

или

void HMC5883L_initialize() {
     buff[0] = HMC5883L_RA_CONFIG_A;
     buff[1] = HMC5883l_Enable_A;
     HAL_I2C_Master_Transmit(&hi2c2, (uint16_t)HMC5883l_ADDRESS, buff, 2, 100);
     HAL_Delay (100);
     buff[0] = HMC5883L_RA_CONFIG_B;
     buff[1] = HMC5883l_Enable_B;
     HAL_I2C_Master_Transmit(&hi2c2, (uint16_t)HMC5883l_ADDRESS,  buff, 2, 100);
     HAL_Delay (100);
     buff[0] = HMC5883L_RA_MODE;
     buff[1] = HMC5883l_MR;
     HAL_I2C_Master_Transmit(&hi2c2, (uint16_t)HMC5883l_ADDRESS, buff, 2, 100);
     HAL_Delay (100);
    }

void HMC5883LRead(int16_t *destination) {
     buff[0] = HMC5883L_RA_DATAX_H;
     HAL_I2C_Master_Transmit(&hi2c2,(uint16_t) HMC5883l_ADDRESS,  buff, 1, 100);

     HAL_I2C_Master_Receive(&hi2c2, (uint16_t)HMC5883l_ADDRESS, &buffer[0], 6, 100);

    destination[0] = (((int16_t)buffer[0]) << 8) | buffer[1];
    destination[1] = (((int16_t)buffer[4]) << 8) | buffer[5];
    destination[2] = (((int16_t)buffer[2]) << 8) | buffer[3];
}

короче - как бы не старался - при записи и/или чтении всё одно - “занято”, ладно, есть же умный гугель! Ога или Аго, в либах есть беда: не сбрасывается флаг аналогового фильтра на лапах, но ведь адреса то мы пробиваем??? ладно у СТ есть костыль под это дело цельных 15 шагов (как прям для буржуйских алкоголиков) - применим:

/**
    1. Disable the I2C peripheral by clearing the PE bit in I2Cx_CR1 register.
    2. Configure the SCL and SDA I/Os as General Purpose Output Open-Drain, High level
    (Write 1 to GPIOx_ODR).
    3. Check SCL and SDA High level in GPIOx_IDR.
    4. Configure the SDA I/O as General Purpose Output Open-Drain, Low level (Write 0 to
    GPIOx_ODR).
    5. Check SDA Low level in GPIOx_IDR.
    6. Configure the SCL I/O as General Purpose Output Open-Drain, Low level (Write 0 to
    GPIOx_ODR).
    7. Check SCL Low level in GPIOx_IDR.
    8. Configure the SCL I/O as General Purpose Output Open-Drain, High level (Write 1 to
    GPIOx_ODR).
    9. Check SCL High level in GPIOx_IDR.
    10. Configure the SDA I/O as General Purpose Output Open-Drain , High level (Write 1 to
    GPIOx_ODR).
    11. Check SDA High level in GPIOx_IDR.
    12. Configure the SCL and SDA I/Os as Alternate function Open-Drain.
    13. Set SWRST bit in I2Cx_CR1 register.
    14. Clear SWRST bit in I2Cx_CR1 register.
    15. Enable the I2C peripheral by setting the PE bit in I2Cx_CR1 register.
    **/
    void HAL_I2C_ClearBusyFlagErrata_2_14_7(I2C_HandleTypeDef *hi2c) {

        static uint8_t resetTried = 0;
        if (resetTried == 1) {
            return ;
        }
        GPIO_InitTypeDef GPIO_InitStruct;

        // 1
        __HAL_I2C_DISABLE(hi2c);

        // 2
        GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
        GPIO_InitStruct.Pull = GPIO_PULLUP;
        GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

        HAL_GPIO_WRITE_ODR(GPIOB, GPIO_PIN_10);
        HAL_GPIO_WRITE_ODR(GPIOB, GPIO_PIN_11);

        // 3
        GPIO_PinState pinState;
        if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10) == GPIO_PIN_RESET) {
            for(;;){}
        }
        if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11) == GPIO_PIN_RESET) {
            for(;;){}
        }

        // 4
        GPIO_InitStruct.Pin = GPIO_PIN_10;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_10);

        // 5
        if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10) == GPIO_PIN_SET) {
            for(;;){}
        }

        // 6
        GPIO_InitStruct.Pin = GPIO_PIN_11;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_11);

        // 7
        if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11) == GPIO_PIN_SET) {
            for(;;){}
        }

        // 8
        GPIO_InitStruct.Pin = GPIO_PIN_10;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

        HAL_GPIO_WRITE_ODR(GPIOB, GPIO_PIN_10);

        // 9
        if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10) == GPIO_PIN_RESET) {
            for(;;){}
        }

        // 10
        GPIO_InitStruct.Pin = GPIO_PIN_11;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

        HAL_GPIO_WRITE_ODR(GPIOB, GPIO_PIN_11);

        // 11
        if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11) == GPIO_PIN_RESET) {
            for(;;){}
        }

        // 12
        GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
        GPIO_InitStruct.Alternate = GPIO_AF4_I2C2;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

       // 13
       hi2c->Instance->CR1 |= I2C_CR1_SWRST;

       // 14
       hi2c->Instance->CR1 ^= I2C_CR1_SWRST;

       // 15
       __HAL_I2C_ENABLE(hi2c);

       resetTried = 1;
    }

    void HAL_GPIO_WRITE_ODR(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
    {
      /* Check the parameters */
      assert_param(IS_GPIO_PIN(GPIO_Pin));

      GPIOx->ODR |= GPIO_Pin;
    }

 

Фиг вам (национальное индейское жилище) - занято и всё тут, тестером тыкал - да шина висит в полуподвешеном состоянии, мысли кончились, вот решил написать…
Короче решил бросить эту идею и написать всё на
STM32 Standard Peripheral Libraries

по крайней мере все драйвера у меня (кроме усб - но это решаемо) написаны и работают, конечно это сложнее для начинающих, но мне проще - я с ними уже работал, и уже воевал с этой шиной на F4 - в тот раз я победил)))

Муки выбора ноута....

В общем о чём я? Есть у меня PC-шка на старом древнем пне 945-ом, кто не помнит, это “последний из Могикан” пентиум д - т.е. 4-й пень но уже 64-х битный. Дальше уже пошла кора дуба… так вот и есть у меня ноут - тоже можно сказать легендарный - ThinkPad T61. Служат эти машинки мне исправно по сей день, но и запросы растут и дети растут, двух компов мало, мощностей мало.
И теперь я понимаю, что если и позволю купить себе девайс, то:

  1. оставить старые, ибо задолбало - пришел с работы одна в мультиках, второй в игрушках или в ютубе…
  2. ну как уже из выше приведённого понятно, что машинку надо лет на 8-10
  3. собственный бзик… об этом немного подробней:
    ThinkPad T61 - везде и всегда меня выручал ( ось убунту), дочь на нём танцевала - живой, пережил страшную грозу когда у соседей погорело всё - я отделался заменой аккума (слетела прошивка контроллера), сломано детьми одно “ухо” - проблем не возникает. Т.Е. я согласен купить новый ThinkPad, но всё, что я могу себе позволить - с видеокартой от интел, т.е. тупо вкрученой в сам проц, но! меня интересует технология cuda - я с ней баловался и она меня очень порадовала - значит ThinkPad я уже не куплю( Ещё - последнее время народ (линуксойды) жалуются на нвидеа и берут железки от амд - что так всё серьёзно? да и смотрю у ёпелов (их не предлагать) линейки либо с амд либо с интел.

Ну и возникает извечный вопрос - что делать!

Windows - windows боже-боже принтер :)

Проблема: есть комп с Windows 7 64, нужно подключить к нему принтер HP LaserJet 1010 подключенный к компу с лохматой Windows XP 32.
Описывать стандартные попытки подключения не буду - не работает оно - это раз, драйвера на 1010 нет - это два.

Решение: создаём подключение нового принтера - говорим, что подключаем через локальный порт и задаём имя порта \\$имякомпьютера\$имяпринтера дальше предлагает установить драйвер принтера, устанавливаем драйвер виндовый, но к принтеру HP LJ 3055 PCL5 - и всё работает, потом даже можно скачать драйвер для 1010 под Windows Vista и заменить существующий, но это уже не существенно…

Как-то даже ничего? :) Не выше ста метров: правительство РБ утвердило правила пользования дронами

Совет министров РБ утвердил Правила использования авиамоделей. Теперь «летать» нельзя на высоте более 100 метров, а на авиамоделях весом более 500 граммов нужно писать имя и адрес владельца.

Согласно правилам, авиамодели не подлежат государственной регистрации. Однако их использование запрещено на высоте, превышающей 100 метров от уровня земной или водной поверхности.
Также нельзя летать «в пределах зон, запрещенных для использования авиамоделей, без согласования с государственными органами (организациями), в интересах которых установлены такие зоны; в случаях, определяемых Службой безопасности Президента Республики Беларусь». Список зон, запрещенных для полетов, установит Министерство обороны по согласованию с Министерством транспорта и коммуникаций до 28 августа.
Согласно комментарию к указу, под авиамоделью понимается летательный аппарат без человека на борту, управление полетом которого возможно только при условии визуального контакта с ним, а также неуправляемый свободнолетающий аппарат. Под это определение попадают все виды радиоуправляемых летательных аппаратов — в том числе и мультикоптеры, получившие широкую популярность среди любителей фотографии с высоты птичьего полета.

Читать полностью: 42.tut.by/508463

F4BY ArduCopter 3.3.2

Собственно F4BY rcopen.com/blogs/74247/18369

Для желающих присоединиться к тестированию бэта-версии

с функционалом arducopter 3.3.2 ссылка для загрузки (пока только под квадрокоптер)
актуальна beta 010.
состоялся облет альфа версии.
в отличии от альфы пофикшено
-поддержка работы сбас и с-порт
-включили мониторинг и логирование бортового питания контроллера для версии платы 2.1.5
-после загрузки прошивки происходит очистка параметров (поэтому если вы уже настроили пиды - сохраните или запишите их)
особенности прошивки:
полноценный ардукоптер 3.3.2 без возможности отключить EKF

В частности в многие спрашивали про протоколы
в 3.3 реализована поддержка различных протоколов телеметрии назначаемая на любой порт
термин USART1-5 - надпись на плате, наименование физического порта
термин SERIAL - параметры конфигурации программного последовательного интерфейса

Настройка USART 4
группа параметров SERIAL2
интерфейс имеет аппаратный инвертер, поэтому будут работать без дополнительного внешнего инвертера:
3Frsky D-PORT
4Frsky S-PORT

Настройка USART 3
группа параметров SERIAL4
интерфейс без аппаратного инвертера.
1 GCS Mavlink
3 Frsky D-PORT (с внешним инвертором)
4 Frsky S-PORT(с внешним инвертором)
5 GPS
7 Alexmos Gimbal Serial
8 SToRM32 Gimbal Serial
9 Lidar

Настройка USART 2
группа параметров SERIAL1

1 GCS Mavlink
3 Frsky D-PORT (с внешним инвертором)
4 Frsky S-PORT(с внешним инвертором)
5 GPS
7 Alexmos Gimbal Serial
8 SToRM32 Gimbal Serial
9 Lidar

USART1
параметры SERIAL3 не должны иметь эффекта
порт жестко привязан к GPS

USART5
на плате версии 2.1.5 (чёрной) отдан под nsh, на зелёных его нет.
nsh - это консоль операционной системы, может быть использована для просмотра хода загрузки контроллера, наличия ошибок при загрузке драйверов сенсоров в целях диагностики неполадок.
Небольшое видео по настройке ПИД-ов от Алексея

полётного видео пока нет, есть отзывы и логи:

Облетал альфу.
С этой прошивкой коптер действительно стал намного приятней управляться. В лоитере повис сразу. С порывистым ветром около 5м/с справляется на ура. Вечной проблемы с компасом как будто бы и не было, нет даже намека на воронку.
Наонец-то стал горизонтально летать с альтхольде без потери высоты! Прогулялся немножко по поляне в режиме followme, прошел под ним, он потихоньку повернулся и плавно полетел следом. Дал телефон с модемом сыну, ему понравилось бегать от коптера. Все четко и логично. Режим дрифт стал веселее - тут лучше всего видно реакцию на стики.
Проверил любимую карусельку Тимура в стабе - прикольно переваливается борясь с ветром, но летит прямо. Кстати, первый раз вижу что бы так четко отрабатывал сопротивление ветру: с земли смотришь - висит как будто в штиль, а в мониторе видно что курсовая камера скачет как бешеная (она у меня жестко закреплена) когда порывы и замирает с заваленным горизонтом в сторону откуда дует ветер когда дует более-менее равномерно.
Компас встроенный, gps модуль ublox-neo8m. Регули 3 нонейм, один Hobbywing XRotor 20A (кстати работает приятней, плавнее что-ли), моторы - перемотанные 2212-920 нонейм.
Видео, к сожалению, нет, логи только с одного предпоследнего полета сохранились.

ЛОГ

Релиз Copter 3.3.2

"Летать в городах точно будет запрещено". Разбираемся, как будут использовать дроны по новому указу - Это РБ детка )))

Что поменяется по новому указу?

Указ отвечает на самый главный вопрос — что такое авиамодель. Критерий один: может ли технически аппарат летать без визуального контроля оператора или нет. Не может — значит, авиамодель.
— Изначально думали разделять модели и беспилотники по весу, скорости, дальности полета и другим подобным параметрам. Но это неудобно, ведь техника быстро развивается и никто не может знать, какими будут эти устройства завтра. Нужен был универсальный критерий. После очень тщательной работы мы остановились на технической возможности аппарата летать без визуального контроля оператора — рассказал Герман Александров.
Полет без визуального контроля, по мнению разработчиков указа, представляет большую опасность. Камера на аппарате не дает полного обзора оператору и поэтому может произойти столкновение аппарата с воздушным судном или препятствием. Последствия такого столкновения могут быть печальными.
Популярные дроны, например марки DJI, чаще всего имеют на борту цифровую камеру и могут передавать изображение с нее на монитор оператора, а также вполне могут улететь на несколько километров. То есть они летают без визуального контроля оператора, не являются авиамоделями. Их, как и раньше, надо регистрировать и получать разрешение на взлет. Указ на них никак не повлиял. А вот дети с летающими игрушками могут вздохнуть спокойно, когда Совмин утвердит правила использования авиамоделей (по указу на это отводится полгода).
Как это будет работать?

Департамент по авиации Министерства транспорта и коммуникаций сейчас разрабатывает технический нормативно-правовой акт под названием “Авиационные правила организации и выполнения полетов гражданских беспилотных летательных аппаратов”. Сейчас они находятся в процессе согласования и будут не самыми мягкими для владельцев беспилотных летательных аппаратов.
— Обязательно нужно будет пройти обучение, зарегистрировать аппарат и получать разрешение на взлет. В городе летать беспилотным летательным аппаратам запрещено уже давно авиационным законодательством, — пояснил один из разработчиков правил, бывший начальник кафедры беспилотных авиационных комплексов и боевого управления Белорусской государственной академии авиации Сергей Костевич.
— Зарегистрировать аппарат в установленном порядке владельцу не будет очень сложно. Необходимо иметь сертификат соответствия нормам летной годности и по существующим правилам беспилотный летательный аппарат вносится в реестр гражданских воздушных судов. Помимо сертификатов, необходимо получить свидетельство оператора беспилотного летательного аппарата.

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

— Зарегистрировать аппарат в установленном порядке владельцу не будет очень сложно. Необходимо иметь сертификат соответствия нормам летной годности и по существующим правилам беспилотный летательный аппарат вносится в реестр гражданских воздушных судов. Помимо сертификатов, необходимо получить свидетельство оператора беспилотного летательного аппарата.

Поинтригуем? F4BY MINI или кто заказывал назу?

Ну что в семействе Swift-Flyer пополнение - малышка MINI Размеры ацкого контроллера можно понять из фото.

MINI младшая сестра F4BY с немного урезанным пользовательским интерфейсом.
В краце нет 8-и входов только один универсальный PPM-SUMM DSM S.BUS (переходников и внешних инвертеров не требуется), нет внешнего SPI интерфейса.
всё тот же STM 32F4
2 простых усарта, 1 с возможностью инверсии (аппаратно ), 1 FLEXI - порт, тоесть порт перевёртыш - может быть usart, может быть i2c, также имеется шина свободная i2c и CAN -шина. 8 ШИМ выходов.
Ну и полный набор входов АЦП
Как и в F4BY имеется SD - карта для логирования…
Индикация внешняя как имеется отдельный модуль со светодиодами, так и имеется возможность подключения i2c подсветки…
Ну и вкусности: в этой коробочке запрятан двойной набор датчиков!
Один “жесткий” второй “мягкий” (на виброразвязке)…
Подробностей пока не будет, уж извините…
Мы с strizhmax сейчас усиленно тестируем эту малышку и в начале июня планируем приступить к полётным испытаниям…
На счёт корпуса: пока не хочется показывать внутренности применённые новшества ещё нужно протестировать, пришлось соорудить из того, что было…

F4BY & OpenPilot Revolution или продолжение банкета

Чёт захотелось похоливарить за cortex M4 😁
Напомню, есть у меня такое штучко rcopen.com/blogs/74247/18369
жило само по себе под Wii, потом решило переехать под NuttX с ArduPilot…
И вот засвербило в одном месте, захотелось новых ощущений что-ли и завертелось:
несколько головоломок, несколько бессонных ночей и оп-ля брюки превращаются, превращаются брюки NuttX превратился в FreeRTOS ардупилот превратился в опенпилот

ну эт пока только тест на столе, но чёт меня подмывает и подлетнуть на этой штуке, но это позже…
на данный момент всё запущено, ну то что смог проверить: обработка датчиков (ну у нас они одинаковые), входы - выходы, s.bus, даже мой старенький GPS mtk3329 завёлся…
продолжение следует…
Если кто-то хочет попробовать на свой страх и риск прилагаю архив с файлами которые надо добавить/заменить в исходниках OpenPilot
сборка происходить по:
make bl_f4by - бутлоадер
make fw_f4by - сама прошивка
бутлоадер придётся заливать через swd st-link-ом
если же после заливки прошивки не будет отображения датчиков в станции, объясню как сделать прошивку revolution под f4by
Предупреждаю! всё это лишь для ознакомления с ПО!!!
p.s. для линукспилотов есть разъём SPI для подключения overo и малин там всяких))) кстати я его починил в рево он точно бы не заработал…

OpenPilot.zip

F4BY и с чем его едят...

F4BY собственно продолжение темы Создание собственной системы стабилизации
вот такая платка в итоге получилась:

На борту:
Процессор - STM32F407VGT6
Это высокопроизводительный 32-разрядный микроконтроллер на базе ядра Cortex-M4F с функцией DSP-вычислений с плавающей точкой (FPU) от компании ST Microelectronics.
тактовая частота 168 МГц

  • Корпус LQFP100 (100 ножек)
  • I/O (макс.),шт. 82
  • Напряжение питания: 1.8 - 3.6 В
  • Частота: до 168 МГц
  • Память программ (Flash): 1 МБайт
  • ОЗУ (RAM): 196 Кбайт
  • 4 Кбайт backup SRAM (аналог EEPROM)
  • Поддержка инструкций DSP и чисел с плавающей точкой
  • 16-битные таймеры: 2 базовых таймера, 8 таймеров общего назначения, 2 продвинутых таймера, 2 watchdog (Сторожевой таймер (контрольный таймер, англ. Watchdog timer) — аппаратно реализованная схема контроля за зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение некоторого интервала времени, происходит принудительная перезагрузка системы. В некоторых случаях сторожевой таймер может посылать системе сигнал на перезагрузку («мягкая» перезагрузка), в других же — перезагрузка происходит аппаратно (замыканием сигнального провода RST или подобного ему).)
  • 2 32-битных таймера общего назначения
  • USB 2.0 full-speed device/host/OTG со своим PHY на борту
  • USB 2.0 high-speed/full-speed device/host/OTG с отдельным DMA, со своим full-speed PHY на борту, есть поддержка ULPI
  • 10/100 Ethernet MAC с отдельным DMA, поддержка PHY-микросхем с интерфесами IEEE 1588v2, MII/RMII
  • 3x SPI (37.5 МБит/с), 2 из них с мультиплексированными полнодуплексными I2S для качественной передачи звука
  • 3x I2C с поддержкой SMBus/PMBus
  • 4x USART, 2x UART: 10.5 МБит/с, интерфейс ISO 7816, LIN, IrDA, modem control
  • 2x CAN (2.0B Active)
  • SDIO (для SD-карт)
  • DCMI - [от 8 до 14]-битный параллельный интерфейс камеры (до 54 МБайт/с)
  • Аналоговый генератор случайных чисел
  • Встроенный модуль расчёта CRC
  • 82x GPIO (выводы I/O)
  • RTC (Real-Time Clock)
  • 3 12-битных АЦП, 2.4 миллиона выборок в секунду, 16 каналов, 7.2 миллиона выборок в секунду в режиме тройного чередования
  • 2 12-битных ЦАП
  • Контроллер DMA с 16 каналами и поддержкой FIFO и пакетной передачи
  • Параллельный интерфейс LCD, режимы 8080/6800
  • FSMC - контроллер статической памяти с поддержкой Compact Flash, SRAM, PSRAM, NOR и NAND
  • Возможность отладки по JTAG или SWD

Датчик угловых скоростей и акселерометр MPU6000 включен по SPI

Основные параметры
Кол-во осей 3 Ускорение (макс.),±g 16 Диапазон,°/cек. 2000 Оси X,Y,Z Чувствительность,LSB/g 2.048 Разрешение,бит 16 Чувствительность,°/cек./LSB 0.06097 Нелинейность,% 0.2 Шум,°/cек. 0.05 Частота среза,Гц 1000 Интерфейс I2C SPI VCC,В от 2.375 до 3.46 ICC,мА 3.6 TA,°C от -40 до 85 Корпус QFN-24
компас HMC5883 (имеется возможность установки внешнего)

  • датчик HMC5883L
  • питание 3.3В
  • протокол связи: стандартный IIC (он же I2C, он же TWI)
  • диапазон измерений: ± 1.3-8 гаусс, точность 5 милли-гаусс
  • даташит

барометр MS5611

  • Чип: MS5611
  • Чип имеет встроенный 24-битный AD конвертер
  • Питание: 3.3В (внутренний низкий регулятор отсева)
  • Габариты: 1.8 х 1.3см
  • даташит

eeprom 24c512
flash m25p16

заменено на FRAM FM25V01
(Сегнетоэлектрическая оперативная память (Ferroelectric RAM, FeRAM или FRAM[1]) — оперативная память, по своему устройству схожая с DRAM, но использующая слой сегнетоэлектрика вместо диэлектрического слоя для обеспечения энергонезависимости. FeRAM — одна из растущего числа альтернативных технологий энергонезависимой памяти, предлагающая ту же самую функциональность, что и флеш-память.)
MicroSD слот
интерфейсы:
4 USART (один инвертирован)
1 SPI (свободный аппаратный порт)
2 I2C (внешняя i2c1 - полный доступ, внутренняя i2c2 не доступна для пользователя)
1 CAN
1+3 входа АЦП
3 свободных пина GPIO
8 выходов ШИМ
8 входов-выходов ШИМ
1 выход на пищалку (ШИМ)
1 вход подключения сонара (либо таймер либо прерывание 9-5)

На данный момент имеется порт Ardupilot

  1. небольшой ребрендинг в swift-flyer
    Исходники github.com/swift-flyer
    Актуальная документация и прошивки: hobby.msdatabase.ru/project-updates/…/f4by

Как запустить Арду:
Переделан Бутлоадер (пока в тестировании плата имеет свой собственный драйвер и определяется как F4BY)
Прошивать можно планнером - но родная px4 не запустится!!! см. ниже…
Для запуска Арду обязательна SD-карточка… у меня прекрасно живёт 2-х гиговая noname
Первый запуск - просто включить с карточкой
Далее на карточке создастся директория APM (там логи будут хранится)
Как виртуальную еепром стирать:
если надо стереть в консоли NuttX
вынимаем SD (если с пищалкой запустить будет пиликать SOS)
подключаем к 1 усарту через ftdi (или через что есть) любой терминалкой (патти, геркулес…)
скорость 57600
набираем
mtd start
mtd erase
reboot
вставляем SD запускаемся калибруемся…
Паршифки заливаются планнером так что осторожно родная от PX4 зальётся, но работать не будет и перепрошить будет с планнера невозможно! в таком случае: в папке планнера есть PX4uploader - запустить выбрать паршивку и тыкать ресет пока лодырь (он жывой остаётся) не определится…
Ну и пару кино как это запускалось:

Продолжение следует!..
Текущая прошивка и бутлоадер - пока всё обзывается PX4
Обновил прошивки - это версия тестовая 3.2-Dev так что всё на свой страх и риск…
тестил немножко 😃

Контроллеры можно заказать тут и тут, всё остальное от лукавого и без тех. поддержки…

Извраты в Линукс: многа букав...

Решил собрать всё в одну кучу, ибо забываю вечно:(
А на форуме потом фиг найдёшь…
И так: apm_planner (QT)
в файле qgroundcontrol.pro есть такая замечательная штука (короче для прошивальщика)

unix {
        DEFINES += GIT_COMMIT=$$system(git describe --dirty=-DEV --always)
        DEFINES += GIT_HASH=$$system(git log -n 1 --pretty=format:%H)
    INCLUDEPATH += C:/openssl-1.0.1e/include
    LIBS += -lssl -lcrypto
}

незнаю кто её писал, но помоему она неправильная нифига (реч идёт о линуксе под винду и макось есть готовые инсталяторы)
покопавшись надыбал вот что:
надобно openssl со всякими там lssl lcrypto, при этом ssl то есть но явно не там где написано, подставил я это дело, но не фунциклирует,короче начитался всякой лабуды, а потом попал сюда ну тут по полочкам разложено как установить это злосчастное openssl-1.0.1e и где его потом искать 😃
короче не долго думая поставил я это дело, ну и естественно изменил qgroundcontrol.pro
ну и как следствие вот что получилось:

unix {
        DEFINES += GIT_COMMIT=$$system(git describe --dirty=-DEV --always)
        DEFINES += GIT_HASH=$$system(git log -n 1 --pretty=format:%H)
        INCLUDEPATH += /usr/local/ssl/include/
        INCLUDEPATH += /etc/ssl
        INCLUDEPATH += /usr/include/openssl
        INCLUDEPATH += /usr/lib/
        INCLUDEPATH += /usr/share/doc/openssl-1.0.1e
        LIBS += -lssl -lcrypto
}

Mission Planner:

решил под бубунтой Mission Planner запустить:
И так что для этого надо?
установить mono runtime

как это сделать?
в консоли набираем:

sudo  apt-get install mono-runtime libmono-winforms2.0-cil  libmono-corlib2.0-cil libmono-system-web4.0-cil  libmono-system-management4.0-cil

после установки лезем сюда и скачиваем сам планнер в архиве!!! не msi.
распаковываем его куда-нибудь (папки без пробелов в названии и не кириллицей)
далее лезем в ту папку находим ArdupilotMegaPlanner10.exe правой клавишей ->свойства -> права ставим галочку - на разрешения запуска как приложение, открыть с помощью -> mono-runtime. Закрываем всё это дело и двойным кликом запускаем экзешник (тут есть нюанс - попросил обновится и перестал работать, так что я всё это убил и распаковал заново) и вуаля, под винду лазать больше не надо:)

Компиляция Арду PX4 и т.д.
обновляем командой git pull в каталогах ardupilot и PX4Firmvare (тут сначала придётся спрятать патчи командой git stash если у вас не px4 ) ну или если всё новое - git clone github.com/diydrones/ardupilot.git и git clone github.com/diydrones/PX4Firmware.git
ну это по инструкции dev.ardupilot.com/wiki/building-px4-with-make/
далее клонируем git clone github.com/PX4/NuttX.git в туже директорию где лежит папка ardupilot (это важно) и переименовываем папку NuttX в PX4NuttX
ну а дальше как всегда dev.ardupilot.com/wiki/building-px4-with-make/
PX4 появились двух версий как и их спутники io , по умолчанию компилится под V2…

хотя если у вас PX4 не парьтесь - планером скачиваются новые прошивки…

Небольшой ликбез:
Сборка qgroundcontrol V2 под Linux - подходит для Ardupilot, PX4, и для всех их производных.
Почему? Т.к. я балуюсь и с арду и с PX4 -

  1. сборка под линуксом намного быстрее
  2. qgroundcontrol - плохо коннектится с PX4 под виндой (проверил на двух компах и на двух версиях)
  3. qgroundcontrol V1 уже не актуальна 😦
    И так имеем инструкцию qgroundcontrol.org/dev/build_source#b_linuxgcc её пересказывать не буду, но по этой инструкции соберётся первая версия - что нам не интересно 😦
    Что же делать?
    клонируем репозиторий но не так как в инструкции:
git clone git://github.com/mavlink/qgroundcontrol.git

а чуть изменим:

git clone  -b config qgc2

ха у нас появилась папочка с исходниками которая называется qgc2
поехали дальше:

cd qgc2
git submodule init
git submodule update

замечаельно субмодули обновились 😃

далее что-то про библиотеки xbee мы всё ещё в каталоге qgc2, если же вышли то надобно зайти!

cd libs/thirdParty/libxbee/
 sudo make install

sudo обязательно иначе оно всё равно запросит пароль - но пароль root она не приме 😦
всё далее возвращаемся к инсрукции qgroundcontrol.org/dev/build_source#b_linuxgcc и завершаем наше чёрное дело, не забывая что всё делается в каталоге qgc2, а не qgroundcontrol

ну и на последок как сделать иконку на рабочий стол или в панель:
создаём новый документ
и в нём пишем следующее:

[Desktop Entry]
Version=1.0
Name=Имя приложения
Comment=Комментарий (описание программы)
Exec=Абсолютный путь до запускаемого файла, у меня /home/serg/qgroundcontrol2/release/qgroundcontrol
Terminal=false
Type=Application
Icon=Абсолютный  путь до иконки, что будет отображаться,  мой  //home/serg/qgroundcontrol2/release/files/images/icons/macx_128x128x32.png

далее сохраняем его куда вам нужно с расширением .desktop заходим в его свойсва и разрешаем запуск 😃

Станция ставится, а вот коннектится она ну никак на ubuntu 13.04 не желала, ответ оказался прост:
Все дело в правах доступа. По умолчанию к устройствам /dev/tty* имеют доступ пользовтели из группы “dialout”. В этом можно убедиться, набрав
ls -al /dev/ttyS0
В ответ появится
crw-rw---- 1 root dialout 4, 64 Mar 23 21:00 /dev/ttyS0
откуда можно увидеть, что доступ открыт для группы dialout

Теперь нужно добавить себя в эту группу:
sudo adduser <myusername> dialout
или
sudo usermod -a -G dialout <myusername>
<myusername> нужно заменить на свое имя пользователя.

После этого нужно перезагрузиться (или разлогиниться, а потом залогиниться, что более естественно)

да и ещё на 13 бубунте сначала ставим qt creator, а потом сверху накатываем qt4-default, а то эта зараза ставит qt5 а он нивкакую рабртать не хочет.
осталось разобраться как ещё st-link запустить и под виинду можно не возвращаться …

p.s. Записи не в хронологическом порядке, а как их нашел, уже может что-нибудь и отличаться…