Наконец отгрузил одному из своих заказчиков эти платы.
Он заказал по 1000 шт каждого вида.
Большая плата, это контроллер аккумулятора, с индикацией процента заряда, режима работы, а ещё он показывает логотип, что немаловажно для его продукта.
Маленькие платы это специальные драйвера светодиодов на 300 и 500 мА с регулировкой яркости нажатием кнопки. Один для работы напрямую от li-ion аккумулятора, а другая от этой платы аккумулятора.
Особое внимание уделено потреблению. Пришлось заморочиться, чтобы плата аккумулятора детектировала работу светодиодного драйвера и включала повышающий DC-DC преобразователь.
Они разработаны и изготовлены специально для налобных осветителей
https://nomlamp.ru/
Раньше он ставил туда ШИМ контроллер с LC фильтром, который управлял ими напряжением и у светильников плавали характеристики во время работы. Сейчас работают как надо)
Где-то год назад показывал первые версии на этом канале. Это третья итерация, насколько я помню
Он заказал по 1000 шт каждого вида.
Большая плата, это контроллер аккумулятора, с индикацией процента заряда, режима работы, а ещё он показывает логотип, что немаловажно для его продукта.
Маленькие платы это специальные драйвера светодиодов на 300 и 500 мА с регулировкой яркости нажатием кнопки. Один для работы напрямую от li-ion аккумулятора, а другая от этой платы аккумулятора.
Особое внимание уделено потреблению. Пришлось заморочиться, чтобы плата аккумулятора детектировала работу светодиодного драйвера и включала повышающий DC-DC преобразователь.
Они разработаны и изготовлены специально для налобных осветителей
https://nomlamp.ru/
Раньше он ставил туда ШИМ контроллер с LC фильтром, который управлял ими напряжением и у светильников плавали характеристики во время работы. Сейчас работают как надо)
Где-то год назад показывал первые версии на этом канале. Это третья итерация, насколько я помню
👍6🔥4❤3
Одна из самых больших проблем, когда сам проектируешь электронику, это ошибка "замыленного глаза", когда ты тупо что-то забыл.
В крупных компаниях дизайн перед отправкой в производство обычно перепроверяют коллеги. Каждая итерация отнимает время и деньги, поэтому правило "семь раз отмерь, один раз отрежь" здесь очень актуальное.
Но когда ты один, тебе показать это все просто некому.
Вот уж не думал, что GPT может быть тут помощником. Для интереса скинул ему схему интерфейса 1,8В - 3,3В для SD карты на перепроверку и он действительно нашел мою (глупую) ошибку, где я забыл соединение SDMMC_DET_L на линии хоста с SD_DET карточки.
Правда он нашел еще одну ошибку, которая ошибкой не является, но и на том спасибо!
В крупных компаниях дизайн перед отправкой в производство обычно перепроверяют коллеги. Каждая итерация отнимает время и деньги, поэтому правило "семь раз отмерь, один раз отрежь" здесь очень актуальное.
Но когда ты один, тебе показать это все просто некому.
Вот уж не думал, что GPT может быть тут помощником. Для интереса скинул ему схему интерфейса 1,8В - 3,3В для SD карты на перепроверку и он действительно нашел мою (глупую) ошибку, где я забыл соединение SDMMC_DET_L на линии хоста с SD_DET карточки.
Правда он нашел еще одну ошибку, которая ошибкой не является, но и на том спасибо!
👍4🔥2✍1❤1😱1
Сделал плату под OrangePi CM5 для небольшого стартапа. Взялся за этот проект в порядке исключения - все-таки это не совсем мой обычный профиль. Но задача была интересная, а ребятам это было действительно нужно.
К плате подключаются тач AMOLED-дисплей высокого разрешения, почти как у небольшого планшета, SD-карта, 3.5 мм аудиоджек для вывода звука, разные кнопки, контроллер заряда аккумулятора, схема питания, RTC-модуль и еще всякое по мелочи.
Работать с OrangePi - удовольствие сомнительное, конечно. Поддержка слабая, документация местами очень сырая и даже с явными ошибками (в смысле не просто опечатка, а прям ошибка и непонятно, что там в итоге должно быть), коммьюнити почти нет. В целом с ними, наверное, можно работать, если ты уже в теме и понимаешь, как устроены SoC от Rockchip. В противном случае, как было у меня, приходится собирать по кускам всю доступную документацию, читать даташиты и сопоставлять их между собой. И даже после этого нет полной уверенности, что все будет работать как надо.
P.S. Модельки в новой версии KiCad выглядят как-то странно и блекло. Пока не разобрался, почему так
К плате подключаются тач AMOLED-дисплей высокого разрешения, почти как у небольшого планшета, SD-карта, 3.5 мм аудиоджек для вывода звука, разные кнопки, контроллер заряда аккумулятора, схема питания, RTC-модуль и еще всякое по мелочи.
Работать с OrangePi - удовольствие сомнительное, конечно. Поддержка слабая, документация местами очень сырая и даже с явными ошибками (в смысле не просто опечатка, а прям ошибка и непонятно, что там в итоге должно быть), коммьюнити почти нет. В целом с ними, наверное, можно работать, если ты уже в теме и понимаешь, как устроены SoC от Rockchip. В противном случае, как было у меня, приходится собирать по кускам всю доступную документацию, читать даташиты и сопоставлять их между собой. И даже после этого нет полной уверенности, что все будет работать как надо.
P.S. Модельки в новой версии KiCad выглядят как-то странно и блекло. Пока не разобрался, почему так
👍6❤2🔥1
Несколько постов назад я писал про тестовый стенд. Собственно вот и он.
Чтобы сэкономить время, я тут срезал углы как мог. Не стал его интегрировать в корпус, по максимуму использовал готовую электронику.
Ну и навайбкодил все что можно было навайбкодить. Получилось дешево и быстро.
Стенд тестирует две разные половинки одного устройства.
Одна половинка вставляется и прижимается к иголкам (pogo pins) в этом оранжевом блоке, а они шлейфом подключаются к моей собранной плате. Вторая половинка зажимается прищепкой и к ней подключается разъем.
Для тестируемых плат формируются питающие напряжения, управляющие сигналы, происходит прошивка и снимаются сигналы с помощью этой синей платы, которую я собрал.
Ну и всем этим процессом руководит комп. На скриншоте можно увидеть измеряемые напряжения, интерфейс управления. Тут у меня нет полной автоматизации, но есть сценарии, которые подают разные комбинации сигналов. Например сценарий "зарядка аккумулятора", в этом варианте подается 5В на USB вход и можно увидеть токи зарядки и соответствующие напряжения. Или сценарий "кручу мотор" при котором подается питание от аккумулятора (на самом деле от лабораторника), контроллер этой синей платы имитирует переключение датчиков Холла при вращении двигателя и контроллер на тестируемой плате думает, что он на самом деле им управляет (а на самом деле он нагружает мощные резисторы), а я в это время вижу, что контроллер действительно ведет себя как должен, что он формирует сигнал вращения двигателя (FQ на графике), вижу соответствующие напряжения питания на графиках и потребление у лабораторного блока питания.
Все это позволяет мне не собирать изделие из дефектных плат и в большинстве случаев сразу понимать, что с платой не так и экономить тучу времени на последующей диагностике, разборке/сборке. Учитывая, насколько проблемными были платы от некоторых поставщиков, потраченное на него время окупилось многократно
Чтобы сэкономить время, я тут срезал углы как мог. Не стал его интегрировать в корпус, по максимуму использовал готовую электронику.
Ну и навайбкодил все что можно было навайбкодить. Получилось дешево и быстро.
Стенд тестирует две разные половинки одного устройства.
Одна половинка вставляется и прижимается к иголкам (pogo pins) в этом оранжевом блоке, а они шлейфом подключаются к моей собранной плате. Вторая половинка зажимается прищепкой и к ней подключается разъем.
Для тестируемых плат формируются питающие напряжения, управляющие сигналы, происходит прошивка и снимаются сигналы с помощью этой синей платы, которую я собрал.
Ну и всем этим процессом руководит комп. На скриншоте можно увидеть измеряемые напряжения, интерфейс управления. Тут у меня нет полной автоматизации, но есть сценарии, которые подают разные комбинации сигналов. Например сценарий "зарядка аккумулятора", в этом варианте подается 5В на USB вход и можно увидеть токи зарядки и соответствующие напряжения. Или сценарий "кручу мотор" при котором подается питание от аккумулятора (на самом деле от лабораторника), контроллер этой синей платы имитирует переключение датчиков Холла при вращении двигателя и контроллер на тестируемой плате думает, что он на самом деле им управляет (а на самом деле он нагружает мощные резисторы), а я в это время вижу, что контроллер действительно ведет себя как должен, что он формирует сигнал вращения двигателя (FQ на графике), вижу соответствующие напряжения питания на графиках и потребление у лабораторного блока питания.
Все это позволяет мне не собирать изделие из дефектных плат и в большинстве случаев сразу понимать, что с платой не так и экономить тучу времени на последующей диагностике, разборке/сборке. Учитывая, насколько проблемными были платы от некоторых поставщиков, потраченное на него время окупилось многократно
👍3🔥3❤🔥1
Я помню, как еще студентом смотрел вакансии по интересующим меня специальностям. Там часто, помимо разработки электроники, был пункт про разработку софта для компьютера.
В целом это логично: железка часто подключается к компьютеру или вообще должна работать вместе с ним. Поэтому важно уметь писать софт, чтобы с ней общаться.
Но писать код для компьютера, как по мне, всегда было очень скучно. Всё какое-то слишком отполированное, слишком понятное и простое. Нет вот этого: «блин, мне не хватает 100 байт, чтобы сделать эту анимацию» или «какой прикольный регистр специального назначения, смотри, как интересно он обрабатывает данные от датчика».
Я всеми силами старался использовать готовые инструменты, иногда даже не очень подходящие, и писал своё только тогда, когда уже совсем без этого было никак.
И вот тут вайбкодинг, конечно, стал для меня настоящей революцией. Для меня самый большой кайф от него в том, что теперь можно быстро сделать для себя простой инструмент: построить графики именно так, как тебе нужно, написать за пару часов генератор шрифта под конкретную задачу, собрать данные с устройства, сделать прошивальщик — и еще 100500 разных вариантов.
Вот, например, скрин «прошивальщика» для производства nomlamp.ru.
Этот софт обращается к утилитам STMicroelectronics, чтобы стереть, настроить и запрограммировать контроллер нужной прошивкой под конкретное устройство. Интерфейс специально сделан максимально простым, чтобы не очень квалифицированный персонал ничего не перепутал.
Я сделал это в 3–4 итерации, суммарно за 3–4 часа. Причем большая часть времени ушла не на код, а на работу с обратной связью, понимание того, как всё должно выглядеть, и создание вот этих картинок для интерфейса.
Раньше я бы потратил на такую задачу пару дней и вообще не получил бы от этой работы удовольствия. А я привык кайфовать от работы — и для меня это, честно говоря, важный критерий
P.S. Электроника на картинках на скрине моей разработки
В целом это логично: железка часто подключается к компьютеру или вообще должна работать вместе с ним. Поэтому важно уметь писать софт, чтобы с ней общаться.
Но писать код для компьютера, как по мне, всегда было очень скучно. Всё какое-то слишком отполированное, слишком понятное и простое. Нет вот этого: «блин, мне не хватает 100 байт, чтобы сделать эту анимацию» или «какой прикольный регистр специального назначения, смотри, как интересно он обрабатывает данные от датчика».
Я всеми силами старался использовать готовые инструменты, иногда даже не очень подходящие, и писал своё только тогда, когда уже совсем без этого было никак.
И вот тут вайбкодинг, конечно, стал для меня настоящей революцией. Для меня самый большой кайф от него в том, что теперь можно быстро сделать для себя простой инструмент: построить графики именно так, как тебе нужно, написать за пару часов генератор шрифта под конкретную задачу, собрать данные с устройства, сделать прошивальщик — и еще 100500 разных вариантов.
Вот, например, скрин «прошивальщика» для производства nomlamp.ru.
Этот софт обращается к утилитам STMicroelectronics, чтобы стереть, настроить и запрограммировать контроллер нужной прошивкой под конкретное устройство. Интерфейс специально сделан максимально простым, чтобы не очень квалифицированный персонал ничего не перепутал.
Я сделал это в 3–4 итерации, суммарно за 3–4 часа. Причем большая часть времени ушла не на код, а на работу с обратной связью, понимание того, как всё должно выглядеть, и создание вот этих картинок для интерфейса.
Раньше я бы потратил на такую задачу пару дней и вообще не получил бы от этой работы удовольствия. А я привык кайфовать от работы — и для меня это, честно говоря, важный критерий
P.S. Электроника на картинках на скрине моей разработки
👍4🔥2👏1
byte_shifter
Сделал плату под OrangePi CM5 для небольшого стартапа. Взялся за этот проект в порядке исключения - все-таки это не совсем мой обычный профиль. Но задача была интересная, а ребятам это было действительно нужно. К плате подключаются тач AMOLED-дисплей высокого…
Эта плата, модельку которой прикладывал выше, уже на стадии завершения производства.
Прикольно рассматривать ее рентген снимок. Если есть BGA на плате, то такой снимок делают обязательно
Прикольно рассматривать ее рентген снимок. Если есть BGA на плате, то такой снимок делают обязательно
❤5
Моя плата выше готова и уже у заказчика)
Так выглядит обвес для работы CM5 модуля Orange Pi
Так выглядит обвес для работы CM5 модуля Orange Pi
🔥7👍4❤1👏1
Сегодня впервые посмотрел на свое устройство вживую)
Это ячейка выдачи заказов Дринкит. До этого я видел работу только совсем ранних прототипов.
И если что, сама идея не моя. Ко мне пришли с рабочим, но отчаянно глючавшим прототипом, чтобы я сделал из него серийное изделие.
Работает он так - делаешь заказ, загорается вот такая ячейка с твоим именем, подсветка жёлтого цвета. Когда заказ готов - он на этой ячейке и она горит уже синим цветом. Просто идёшь и забираешь свой заказ.
Когда заказов мало, наверно, практической пользы от нее не много. Но могу себе представить, что при большом потоке такая выдача поможет со скоростью обслуживания.
Да и смотрится красиво и ощущается более персонифицировано.
Вспомнил одну историю, как мы поменяли на плате один разъем при переводе производства этих ячеек в Китай и у нас тут же начались проблемы с надёжностью. Расскажу про нее в следующем посте.
Это ячейка выдачи заказов Дринкит. До этого я видел работу только совсем ранних прототипов.
И если что, сама идея не моя. Ко мне пришли с рабочим, но отчаянно глючавшим прототипом, чтобы я сделал из него серийное изделие.
Работает он так - делаешь заказ, загорается вот такая ячейка с твоим именем, подсветка жёлтого цвета. Когда заказ готов - он на этой ячейке и она горит уже синим цветом. Просто идёшь и забираешь свой заказ.
Когда заказов мало, наверно, практической пользы от нее не много. Но могу себе представить, что при большом потоке такая выдача поможет со скоростью обслуживания.
Да и смотрится красиво и ощущается более персонифицировано.
Вспомнил одну историю, как мы поменяли на плате один разъем при переводе производства этих ячеек в Китай и у нас тут же начались проблемы с надёжностью. Расскажу про нее в следующем посте.
👍5🔥3❤1
Прикольное видео про одну особенность оперативной памяти DDR:
https://www.youtube.com/watch?v=KKbgulTp3FE
Я начал смотреть его с изрядной долей скепсиса: ну да, DDR хранит каждый бит буквально в заряженном или разряженном конденсаторе. А поскольку у любого конденсатора есть саморазряд, контроллеру приходится периодически «обновлять» эти ячейки. Знаю, читал ещё студентом, всем известно — ничего нового.
С этого ролик и начинается. Но потом постепенно появляются всё более интересные детали, и незаметно уровень погружения становится гораздо глубже.
Например, оказывается, что время, которое уходит на обновление заряда в ячейках памяти, можно фактически измерить, записывая и считывая данные из одной и той же ячейки памяти. И эта задержка может быть существенной проблемой для некоторых задач - например, для высокочастотного трейдинга, где важны даже очень малые задержки.
Или вот ещё. Любой программист знает, что операционная система выделяет процессу оперативную память на своё усмотрение и скрывает от программы реальные физические адреса. Но далеко не каждый знает, что даже сама операционная система на самом деле понятия не имеет, где именно физически расположена адресуемая ячейка, потому что контроллер памяти намеренно перемешивает адресацию, чтобы лучше использовать параллелизм внутри памяти.
Или ещё интереснее: существует техника Rowhammer, которая позволяет влиять на биты в соседних ячейках памяти, если достаточно агрессивно обращаться к соседним ячейкам памяти. Потенциально это можно использовать для атак.
И все это она демонстрирует с помощью кода на С++ и с ассемблерными вставками, шаг за шагом показывает как это работает и что мешает написать код, который бы не подвергался задержкам обновления DDR. В итоге с этим справляется и прикладывает исходники с результатами бенчмарков.
Формат повествования такой, что можно детям показывать - все увлекательно и просто
https://www.youtube.com/watch?v=KKbgulTp3FE
Я начал смотреть его с изрядной долей скепсиса: ну да, DDR хранит каждый бит буквально в заряженном или разряженном конденсаторе. А поскольку у любого конденсатора есть саморазряд, контроллеру приходится периодически «обновлять» эти ячейки. Знаю, читал ещё студентом, всем известно — ничего нового.
С этого ролик и начинается. Но потом постепенно появляются всё более интересные детали, и незаметно уровень погружения становится гораздо глубже.
Например, оказывается, что время, которое уходит на обновление заряда в ячейках памяти, можно фактически измерить, записывая и считывая данные из одной и той же ячейки памяти. И эта задержка может быть существенной проблемой для некоторых задач - например, для высокочастотного трейдинга, где важны даже очень малые задержки.
Или вот ещё. Любой программист знает, что операционная система выделяет процессу оперативную память на своё усмотрение и скрывает от программы реальные физические адреса. Но далеко не каждый знает, что даже сама операционная система на самом деле понятия не имеет, где именно физически расположена адресуемая ячейка, потому что контроллер памяти намеренно перемешивает адресацию, чтобы лучше использовать параллелизм внутри памяти.
Или ещё интереснее: существует техника Rowhammer, которая позволяет влиять на биты в соседних ячейках памяти, если достаточно агрессивно обращаться к соседним ячейкам памяти. Потенциально это можно использовать для атак.
И все это она демонстрирует с помощью кода на С++ и с ассемблерными вставками, шаг за шагом показывает как это работает и что мешает написать код, который бы не подвергался задержкам обновления DDR. В итоге с этим справляется и прикладывает исходники с результатами бенчмарков.
Формат повествования такой, что можно детям показывать - все увлекательно и просто
YouTube
Your RAM Has a 60 Year Old Design Flaw. I Bypassed It.
Modern DRAM is based on a brilliant design from IBM.
But, we're still paying for a latency penalty that's existed since the 60s!
In this video, I'm introducing my personal research project (Tailslayer) that immensely reduces p99.99 latency on traditional…
But, we're still paying for a latency penalty that's existed since the 60s!
In this video, I'm introducing my personal research project (Tailslayer) that immensely reduces p99.99 latency on traditional…
❤3👍3