Обновить
151.6

Программирование микроконтроллеров *

Учимся программировать микроконтроллеры

Сначала показывать
Порог рейтинга
Уровень сложности

Реальный Real-time: управление ориентацией без фазовых задержек на быстрых МК

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели5.2K

В задачах стабилизации и высокоточного наведения присутствуют постоянные проблемы — классические алгоритмы (вроде PID-регуляторов) на высоких скоростях либо начинают звенеть из-за шумов дифференциальной составляющей, либо безнадежно отстают от динамики цели из-за фазового лага. С другой стороны, попытки внедрить туда тяжелые нейросети разбиваются о нехватку ресурсов микроконтроллера и неприемлемые задержки вычислений (latency).

Я разработал алгоритм управления, в основе которого лежит легковесное рекуррентное нейро-алгебраическое ядро. Оно работает напрямую с матрицами вращения в топологическом пространстве SO(3), что позволяет избежать множества проблем классической аппроксимации.

Читать далее

Новости

Незаконченный полёт

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели6.2K

Ровно полгода назад, 18 августа 2025 года, я опубликовал здесь свою первую статью о портировании прошивки AM32 на отечественный микроконтроллер К1946ВК035.

Ссылка на статью - https://yg140.servegame.com/ru/articles/938128/

Те, кто читал ту статью (а таких людей, уверен, немного), помнят: не весь функционал удалось портировать с сохранением исходной производительности из-за некоторых ограничений в работе периферийных модулей отечественного микроконтроллера.
Напомню суть проблемы: микроконтроллер слишком часто уходит в прерывания для обработки входящих сигналов DSHOT, которые мы пытались обрабатывать сугубо софтварно, без применения DMA (но с небольшими хитростями). Отсюда и проблемы со своевременной обработкой сигналов других частей программы.

Читать далее

Шестибитный процессор без единой картинки

Уровень сложностиСложный
Время на прочтение12 мин
Охват и читатели4.2K

Всем привет, всем крепких нервов, решительности, смелости, силы воли и упорства. Ощущение «что-то страшное грядёт» довлеет всем настолько, что любая креативность убивается на корню. Однако, наш рептильный мозг редко бывает прав. Давайте скажем кортизолу решительное «нет» и не будем самоубивать тот участок жизни, который у нас есть здесь и сейчас. Рептильный мозг не знает, что мы давно уже не в пустыне среди шушпанчиков и никакой потенциальной пользы «в случае чего» от тех решений, которые он навязывает, не будет — а будет один только вред.

Итак, встречайте: ядро микроконтроллера с шестибитными байтами. Глава первая: описание «на словах».

Это обычный «школьный процессор», на котором студентам показывают базовые принципы работы железа. Fetch, Sum, Jump… В принципе, это роднит его как с древнейшими процами, имевшими 8-16 команд, так и с современными, разной степени эзотеричности (вплоть до Single Instruction Set Computer, имеющий всего одну команду типа «инверсия указанного бита и затем безусловный переход на указанный адрес»). Но я решил вдруг, ХЗ с какого перепугу, придать ему практический смысл в нашем странном веке, когда даже в одноразовые вейпы лепят грошовые 32-битники, которые потом летят в помойку.

Дело в том, что проц, имеющий сложность уровня «за пригоршню КМОП-транзисторов», обладает одним свойством, которым эти девайсы обладать не могут ни с каким развитием технологий, потому что технологии уводят их всё дальше и дальше от обладания этим свойством: его можно реализовать зацело с устройством, которым он управляет. Да-да, на одном кристалле. Минус корпус, минус пайка, минус разводка и… минус питание.

Да я всё равно и на нём Doom запущу!

Программист микроконтроллеров: что спрашивают на собеседованиях

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели17K

В интернете есть много разных статей по решению задач с IT-собеседований, но на русском языке по программированию микроконтроллеров я видел только одну статью на Хабре. Недавно я менял работу: посещал много компаний и отвечал на вопросы по поводу различных аспектов моей профессии. По итогам этих и более ранних встреч решил написать о том, чем на собеседованиях могут озадачить программиста микроконтроллеров.

Дисклеймер: эта статья размещена в блоге YADRO, но список вопросов, выделенных в тексте, — это компиляция моего многолетнего опыта и десятков собеседований в разные компании. С наймом в конкретную компанию текст не связан.

Читать далее

Система функционального контроля для микросхем ADV7180BCPZ & ADV7343BSTZ

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели6.2K

В данной статье я описал, как мы разрабатываем систему для функционального контроля микросхем ADV7180BCPZ (SDTV Video Decoder) и ADV7343BSTZ (Multiformat Video Encoder). Показана архитектура системы, общий алгоритм и сценарии тестирования.

Читать далее

Распознавание речи и голосовое управление на Repka Pi 4, автономная работа, real-time, нейросеть Vosk на базе Kaldi

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели7.5K

В современном мире технологии распознавания речи используются очень широко. Например, они нашли применение в системах управления умным домом, в устройствах IoT, при управлении различным оборудованием. Наличие в одноплатных микрокомпьютерах портов вводы/вывода и промышленных интерфейсов позволяет управлять устройствами голосом.

В статье рассказано, как настроить локальное (автономно работающее) распознавание речи в реальном времени на микрокомпьютере отечественного Российского производства Repka-Pi 4 Optimal, на борту у которого есть всего 2 Гбайт оперативной памяти.

Рассмотрим такую работу на конкретных примерах и разберём подробно, как это работает. Дальше простор для фантазии и создания своих проектов открывается безграничный.

Читать далее

PID без математики: как просто понять P, I и D

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели19K

PID-регулятор — частая проблема для начинающих в робототехнике: математика отпугивает. Но саму идею понять можно без формул. В этой статье я объясню P, I и D простыми словами и с визуализацией

Читать далее

Как компании закладывают риск провала ERP-проекта на этапе выбора платформы и интегратора

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели4.5K

Когда речь заходит о выборе ERP-платформы и системного интегратора, почти всегда звучит слово «конкурс». Формально процесс выглядит структурированным: несколько поставщиков, демо, презентации, референсы, коммерческие предложения.

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

Не потому, что компании «не умеют выбирать».
А потому, что процесс выбора нередко начинается с инструмента, а не с методологии.

Иногда стартовая точка — это демо.
Иногда — список потенциальных вендоров.
Иногда — внутреннее ощущение, что «эти ребята выглядят сильнее».

Недавно я обсуждал проект с партнёром, который предложил:
«Давайте сделаем серию демо и на основе впечатления выберем».

В разговоре выяснилось, что на старте отсутствовали:

Читать далее

Обзор утилиты STM32CubeMonitor

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели9.2K

У ST есть утилита STM32CubeMonitor , которая позволяет по SWD/JTAG следить за конкретными переменными в физической памяти (REG, RAM, ROM) микроконтроллера.

Передаешь STM32CubeMonitor *.elf файл и подключаешь по SWD Target. Причем эта Tool(а) позволяет строить графики по значениями переменных в памяти. Это как утилита ArtMoney в случае с взломом компьютерных игр на PC, только для микроконтроллера.

STM32CubeMonitor удобна при отладке систем автоматического управления (ПИД регуляторы), цифровых фильтров, триггеров Шмитта и прочей DSP обработки.

Читать далее

pineTERM — минималистичный, но мощный веб-терминал для UART

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели14K

Перепробовал кучу софта для UART. Все бесит. Решил завайбить запилить свой.

pineTERM — минималистичный веб-терминал для UART, который не тормозит на длинных сессиях и не требует установки. Работает через Web Serial API: открыл браузер, подключился к порту, работаешь.

Основная боль существующих решений — они начинают фризиться, когда в логе сотни тысяч строк. pineTERM решает это батчингом DOM-обновлений и yield в main thread. Можно держать сессии часами с плотным потоком данных — интерфейс остаётся отзывчивым.

Ключевая фича — JSON-сценарии. Загружаешь файл с последовательностью команд, задаёшь задержки и повторы, выполняешь автоматом. Удобно для отладки протоколов и стресс-тестов.

Другие фичи: динамические поля ввода HEX/ASCII, автоформатирование hex-строк, тайминг пакетов с настраиваемым порогом, переключение HEX/ASCII на лету, экспорт полного лога без ограничений, тёмная/светлая тема.

Написан на чистом JS без фреймворков. Работает в Chrome, Edge, Opera.

Читать далее

STM32: Виртуальный COM порт на USB (Serial Over USB)

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели9.7K

В микроконтроллерах STM32 через USB интерфейс можно настроить последовательный COM порт. В этом тексте я расскажу как это сделать.

Реализовать USB Virtual Com Port . Наладить двусторонний обмен текстом через TeraTerm между PC и STM32 по USB. Надо сделать так, чтобы при соединении электронной платы с STM32 и PC по USB lapTop-PC увидел на своей стороне в диспетчере устройств виртуальный последовательный порт.

Читать далее

Тип данных Real и его расхождение с реальностью при определении расстояния с помощью инкрементального энкодера

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели5.5K

В этой статье описан наш опыт выявления причин ошибки в расчете положения подъемного сосуда в шахтном стволе по сигналам с инкрементальных энкодеров, который может быть полезен другим разработчикам, наладчикам и инженерам АСУТП, работающим не только с подъемным оборудованием, но и с любым другим, где малые приращения используются для расчета больших величин.

Начнем с небольшого погружения в предметную область. Наша организация специализируется на наладке шахтных подъемных установок, это, выражаясь совсем простым языком, «как лифт, только для шахты». Принцип действия подъемной установки, в целом, как у лифта — привод вращает барабан, на который наматывается канат, на который подвешен подъемный сосуд — бадья, клеть или скип, в зависимости от производственной задачи — проходка ствола или тоннеля, добыча полезных ископаемых или подъем/спуск людей. Основная часть подъемной установки — подъемная машина, это барабан с редуктором и приводом (их может быть два), тормозная система, а также системы управления, контроля и защиты.

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

Читать далее

Структуры данных на практике. Глава 4: Массивы и локальность кэша

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели7.9K

«Массив — самая важная структура данных в computer science», — Дональд Кнут (вольное изложение цитаты)

Простейшая структура данных

Массивы настолько просты, что мы иногда воспринимаем их, как нечто само собой разумеющееся. Смежная память, доступ за O(1): что тут ещё оптимизировать?

Всё.

Я работал над конвейером обработки пакетов сетевого коммутатора. Код был простым: считываем пакеты из кольцевого буфера (массива), обрабатываем их и записываем результаты в другой массив. Всё просто, правда?

Но производительность была ужасной. Мы обрабатывали 100 тысяч пакетов в секунду, хотя оборудование должно было справляться с 1 миллионом.

Профилировщик показал нечто странное:

$ perf stat -e cache-misses,instructions ./packet_processor

Performance counter stats:

450,000 cache-misses

1,000,000 instructions

450000 промахов кэша на 1000000 команд? То есть промах происходил раз в 2-3 команды. При простых операциях с массивами это не имело никакого смысла.

Проблема заключалась не в самих массивах, а в том, как мы их использовали.

Читать далее

Ближайшие события

Робот Xiaozhi: беседа двух роботов

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели10K

Дополнение к моей предыдущей мини-статье по роботу Xiaozhi. Я заказал детали и комплектующие, чтобы собрать такого робота самостоятельно. Сборка данного робота не доставляет существенных проблем.

Читать далее

Отладка STM32 программатором J-LINK по SWD

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели9.2K

В разработке на микроконтроллерах широко распространены J-link программаторы-отладчики. Также доступно клиентское ПО для них Ozone. У J-link есть 20 пиновый разъём. На нем заложены пины для шины SWD и UART. SWD это - двухпроводной полудуплексный интерфейс для программирования микроконтроллеров.

В этой заметке я расскажу как прошить микроконтроллер STM32 по SWD шине при помощи программатора J-link.

Читать далее

Как сделать простую систему первичные/вторичные часы

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели7.4K

Что бы ни делал начинающий электронщик, у него получаются либо часы, либо метеостанция

Народная мудрость

Если кто помнит, в 1970-80-е годы в советских учреждениях (на вокзалах, заводах, в школах, институтах и министерствах, а также просто на улице) висели такие круглые часы, они еще назывались «вторичными». При этом где-то размещались «первичные», подававшие раз в минуту импульс 24 вольта на все остальные, которые одновременно (с таким характерным клацанием) сдвигали стрелки ровно на одну минуту. Об этой часовой системе в подробностях рассказано вот в этой публикации.

Характерно, что в основе там нет никакой электроники, только электромеханика (известные еще со времен Фарадея шаговые двигатели) и электромеханические контакты. Система была дешева, проста и фактически не требовала обслуживания, кроме начальной установки после подключения к электрической сети и периодической коррекции хода первичных часов. Поэтому у меня вызвал искреннее изумление факт, что современные аналоги могут стоить десятки тысяч рублей и занимать место целого сервера в стандартной стойке. Для домашних применений или для установки в небольших офисах это все совершенно не годится.  Мы попробуем сделать попроще и заодно избавиться от проводных соединений, которые, конечно, повышают надежность, но резко усложняют монтаж системы.

Читать далее

Нейросети пока не заменят ни идею, ни программиста‑интегратора в сложных электромеханических проектах

Время на прочтение5 мин
Охват и читатели16K

В статье рассматривается реальная ограниченность современных больших языковых моделей (LLM) при разработке сложных электромеханических систем, включающих аналоговые и цифровые датчики, шаговые и серво‑приводы, а также различные исполнительные устройства. Показано, что хотя нейросети способны быстро генерировать черновые схемы, фрагменты кода и шаблоны технической документации, они не обладают знанием физического контекста, параметров компонентов, нормативных требований и бизнес‑целей проекта. Поэтому без участия инженера‑генератора идеи и программиста‑интегратора полученный результат остаётся непроверенным и потенциально ошибочным. Приведены практические примеры из реальных проектов (генерация драйверов для шаговых двигателей, автоматическое написание тест‑скриптов, составление ТЗ и подбор компонентов), где LLM выступали лишь ускоряющим инструментом. Описаны рекомендации по эффективному использованию нейросетей: чёткое ТЗ, разбиение задачи на небольшие блоки, обязательная верификация и сохранение контекста. Делается вывод, что нейросети сейчас являются полезными помощниками, но не заменой человеку в роли идеи и интеграции.

Читать далее

У Z-80 4-битное АЛУ. Вот как оно работает

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели12K

Когда мы пишем код под микроконтроллер, за привычными инструкциями компилятора скрывается вполне конкретная логика – регистры, ALU, прерывания, шины и тайминги, которые живут по своим правилам.

В статье разберём, как устроены базовые механизмы выполнения команд и что именно происходит на уровне микроархитектуры, когда «просто вызывается функция». Это попытка посмотреть на embedded-разработку через призму железа и понять, какие инженерные решения стоят за кажущейся простотой исходного кода.

Разобрать архитектуру

Исследование мелодий на МК Padauk

Уровень сложностиСредний
Время на прочтение42 мин
Охват и читатели8.8K

К микроконтроллерам Padauk я давно присматривался. Острой необходимости в их использовании у меня нет, но очень интересовали. В какой-то момент этот интерес взял верх, и я решил попробовать что-нибудь сделать на них. Если посмотреть репозитории с примерами Free PDK, то все делают простенькое проигрывание мелодий. Я не стал долго размышлять и тоже решил сделать проигрывание мелодий, но с одним условием — чтобы небольшая мелодия проигрывалась на самом дешевом и простеньком МК, таком как PMS150C или PMS150G.

Я постараюсь вспомнить всё, с чем столкнулся: от программатора Free PDK, обновления поддержки PlatformIO, создания отладочной платы под PFS154 и PMS150C (с адаптерами), музыкального брелока с PMS150G и платы с ATtiny13 — до разбора алгоритма для написания мелодий, которые можно ужать в 1 КБ памяти, а напоследок попробуем снимать значения c АЦП PFS122 и регулировать громкость музыки средствами PWM.

Читать далее

Чтение и Запись Параметров по UDS

Уровень сложностиПростой
Время на прочтение19 мин
Охват и читатели7.2K

В данном тексте я произвел смысловой перевод фрагментов спецификации протокола UDS. Той его части, которая поясняет механизм чтения и записи параметров.

Как многие уже знают UDS протокол позволяет читать и писать реальные физические параметры автомобильного агрегата.

UDS протокол реализует динамическую типизацию. То есть вся информация про типы данных поступает во время исполнения программы .

Вот об этом всем и поговорим.

Читать далее
1
23 ...