Flix: разработка полетного контроллера с нуля
2.12K subscribers
69 photos
34 videos
3 files
70 links
По всем вопросам @okalachev
Чат обсуждения: @opensourcequadcopterchat
GitHub: https://github.com/okalachev/flix
Учебник: https://quadcopter.dev
Download Telegram
Наконец-то развел плату!

Удалось ужать ее до 36x36 мм (было 40x40). Поменял транзисторы на более компактные AON7524 в DFN-корпусе. IMU заменена на ICM-40609-D (типа версия специально для дронов).

Перепробовал много разных компоновок выходных пинов, остановился на такой. В итоге выведено I2C, SPI, 9 GPIO (правда, только 4 не задействованы камерой).

Постарался зонировать, по-крайней мере не пересекать DC-DC блок и чувствительные компоненты.

Осталось окончательно доделать и буду заказывать. А где и как вы заказываете печатные платы?
🔥46👍11🎉53🍾1
Новые сборки

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

▶️ Первый дрон авторства @goldarte из Красногорска. Он был собран довольно давно, но видео прикольное, поэтому решил выложить. Артур — мой бывший коллега по COEX. Обещал прикрутить к Flix MoCap-систему собственной разработки, но пока что-то так и не прикрутил. Так что просто хороший дрон.

▶️ Второй — еще один рабочий дрон с моей прошивкой на кастомной печатной плате! Плату разработал и собрал подписчик из Крыма.

▶️ Еще один дрон от пользователя из Жарни, Франция. Полностью кастомная рама, выложена здесь: https://cults3d.com/en/3d-model/gadget/armature-pour-flix-drone.

▶️ И еще один был сделан в Университете Квинсленда, Австралия, в качестве магистерского дипломного проекта студента под кураторством @arkymatsekh. Студенту понравилось.

Все дроны летают (хотя бы как-то). Это обязательно условие для размещения в официальном реестре сборок Flix. #user
👍26🔥74👏3
Плата Flix заказана. На JLCPCB.

Доделал некоторые изменения по мотивам ваших комментариев: добавил teardrops, поменял настройки thermal relief, местами увеличил полигоны и добавил больше via на землю. Теперь что-то еще поменять можно будет только в следующей итерации!

Доставка платы будет сложная, через форвардера, но надеюсь, что все пройдет гладко.
🔥43👍13🎉4🍾2
Про вайб-кодинг

В некоторых своих неважных проектах я уже довольно активно применяю вайб-кодинг. Но в Flix я с самого начала принципиально решил его не использовать. Разве что только в каких-то периферийных утилитах, не в ядре. Каждая строчка кода продумана и осознанна моим собственным, неэффективным, естественным интеллектом.

И я подумал, что может быть полезным ввести какой-то стандартный знак, иконку, плашку или что-то подобное для проектов, которые используют такой же принцип. Например, плашка с надписью «No vibe code» или «No vibe code is used» со ссылкой на разъяснения причин такого решения.

Как вы думаете, нужно ли такое? А может такое уже есть?
👍5011🔥6🤔2💯1
Платы Flix благополучно доехали. Получил буквально только что.

Пока еще ничего не проверял, даже не включал. Работает ли что-нибудь — полная интрига.

По времени от заказа до получения вышел ровно месяц (не быстро).

Теперь надо проверить работоспобность всех подсистем, написать драйвер для IMU, и тестировать!
👍38🔥2413🙏1
Результаты первых тестов платы

 Подсистема питания работает, плата запускается от USB, от батареи, и от обоих источников одновременно. Менял вход аккумулятора от 4.2 до 2.5В, buck-boost отрабатывает корректно. ⚠️ Обнаружил такую проблему: если плату сначала запитать от батареи, а потом подключить по USB, то она не будет видна в системе. Думаю, это скорее всего связано с прошивкой, вряд ли с разводкой.

 Заливка прошивки работает. В arduino-cli для этого нужно использовать такой FBQN: esp32:esp32:esp32s3:FlashSize=16M,PSRAM=opi. Также в Arduino и arduino-cli необходимо включать опцию USB CDC On Boot, чтобы все выводы в Serial можно было видеть по USB (аналогично тому, как это работает в платах с обычной ESP32).

 Но тут обнаружилась проблема: прошивка иногда стартует не с первого раза. То есть надо переткнуть питание 2 или 3 раза, и только тогда она запускается. Как будто есть какая-то проблема с пинами IO0 или EN. Подскажите, что это может быть?

 Прошивка Flix базово работает, Wi-Fi раздается, консоль отвечает. Я добавил в прошивку параметр RC_RX_PIN, который позволяет выбрать пин для SBUS‑интерфейса, и по умолчанию он равен -1, то есть SBUS теперь по умолчанию не запускается.

 RGB-светодиод — работает. ⚠️ Но когда управляющий пин не задействован прошивкой, то тыкая пальцем в плату, иногда можно включать его в рандомный цвет. Возможно, тут стоит что-то поменять в разводке, чтобы такого не было.

 Проверил выводы на моторы, они работают. ⚠️ В левом верхнем выводе перепутана полярность на шелкографии, но это не критично.

Работу IMU пока не проверил: ICM‑40609‑D довольно новая, и пока никто не написал для нее библиотеку для Arduino. Так что теперь займусь ее написанием.

В целом: супер-критичных косяков пока не нашел. В комментариях — несколько видео разных тестов.
👍227🔥6🙏1
Как выясняется, проектировать платы не так уж легко!

Я долго пытался поднять IMU на плате разными способами, хотя бы считать его WHO_AM_I, но он упорно отказывался подавать хоть какие-то признаки жизни. Хотя питание на нем было. В итоге обсуждения в комментариях стало понятно, что чип подключен некорректно.

Что привело к ошибке.

Сначала я поставил на плату ICM-42688-P, я планировал использовать именно этот датчик. При подготовке к заказу я понял, что этот чип отсутствует на складах LCSC, и, похоже, не собирается там появляться. Поэтому я решил заменить его на ICM-40609-D (который «designed for drones»). Этот чип был в наличии.

Чтобы поменять устройство, я изменил поле Device в его свойствах. После этого в EasyEDA открывается подробное окно предпросмотра, где показывается, как и что будет заменено в схеме и футпринте, и мне показалось, что все правильно. Но похоже, что все было абсолютно неправильно, потому что итоговый футпринт по расположению пинов получился совершенно не такой, каким он должен быть. На картинках показано реальное расположение выводов ICM-40609-D (слева) и какая разводка получилась у меня (справа). Как видно, разница значительная. Никто из ревьюверов этой ошибки не заметил, но ее было и невозможно заметить без изучения даташита.

Мораль: при замене компонента в EDA никогда не стоит редактировать его прямо in-place, лучше просто удалить и поставить новый.

Не вижу возможности исправить эту ошибку на месте, так что придется проверять все остальное и заказывать плату заново.

Ошибку нашел @sklyaroman.
👍17🙏53😢1
С IMU не срослось, но зато разъем камеры на плате работает

Хотя накосячить в нем было намного проще. В числе прочего, интерфейс камеры (DVP) требует три отдельных уровня питания (3.3, 2.8 и 1.2 В), следовательно, два отдельных линейных стабилизатора со всей обвязкой.

А работает этот интерфейс так:

🔹Пин XCLK — внешнее тактирование для сенсора. На него обычно подается 20 МГц.
🔹Пины SDA и SCL — стандартный I2C для настройки параметров сенсора. Можно включить сырой режим (просто пиксели) или режим JPEG.
🔹Пины D0-D7 — 8-битная шина данных. Каждый новый байт сопровождается импульсом на пине PCLK.
🔹Сигнал на пине VSYNC обозначает конец кадра. Сигнал на пине HREF — конец строки (в режиме JPEG не используется).
🔹Пины PWDN (отключить питание) и RST (сброс) опциональны — их я не подключал.

Я проверил с самой простой камерой на сенсоре OV2640 — работает и сырой режим, и режим JPEG. Использовал стандартный скетч CameraWebServer из примеров ESP32.

А вообще, итоговая идея — заставить дрон летать автоматически с использованием компьютерного зрения на ESP32. Увидим, получится ли это сделать!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍83🙏2👌1