Search
Write a publication
Pull to refresh
0
0.1
Евгений @EvgenySbl

Программист встраиваемых систем

Send message

Метод синтеза синусоидальных колебаний, с применением цифрового колебательного контура

Level of difficultyEasy
Reading time2 min
Views2.1K

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

Недавно разрабатывал код, который рассчитывает значения sin(x), cos(x) и квадратного корня из x, на arm. По сути это была апроксимация рядом Тейлора. Но код написан на Assembler и выполнялся относительно быстро. Изначально предполагалось использовать его для своего станка. Немого позже задался вопросом одновременной генерации sin(x) и cos(x) как сигналов для свертки с исходным. Некоторые предлагали cordic, но я пошел другим путем.

Изначально, моделировал систему дифференциальных уравнений, использующих два умножения и разности для получения sin(x) / cos(x) на каждый, временной отсчет. Фактически, это отклик диффкренциального уравнения на дельта-функцию (единичный импульс) который запускает колебательный процесс. "Синусойды" получились не ортогональными при небольшом количестве отсчетов на период из-за неточности вычисления сдвига фазы. Однако, при использовании длительных последовательностей данный метод может заменить классические методы генерации sin(x)/cos(x) поскольку конечные разности становятся небольшими.

Кроме того на вход дифференциального уравнения можно подать сигнал, который будет раскачивать его как реальный контур. Например, у Вас возникнет желание свернуть сигнал с длинноволновыми последовательностями. В этом случае, можно, просчитывать каждый отсчет sin(x)/cos(x), а можно просто подать входной сигнал с АЦП на вход такого дифференциального уравнения и получить "синхронный интегратор", настроенный на определенную частоту.

Читать далее

Синус, косинус, квадратный корень FixedPoint

Reading time3 min
Views2.9K

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

Имеется фрезерный станок ЧПУ. Было принято решение, переделать его систему управления, используя ядро Cortex M3. В общем и целом, существуют программные пакеты, позволяющие сделать это. Например GRBL. Однако, у меня своя специфика. Для реализации ПО, потребовались математические операции sin(x), cos(x), sqrt(x). И я задумался над их реализацией в формате фиксированной точки.

Читать далее

От логического элемента до телефона. Введение

Level of difficultyEasy
Reading time7 min
Views3.1K

Эта статья, является первой статьей из курса по созданию телефона на элементной базе, приближенной к той, что используется производителями сотовых телефонов.Вместе с читателями, я пройду по каждому этапу проектирования, прототипирования, отладки, а если повезет, то и подготовки к производству, настоящего сотового телефона.На каждом этапе выполненной работы, я постараюсь объяснить как это было сделано, на таком уровне, чтобы это смог понять толковый студент первого курса технического ВУЗа. Или заинтересованный школьник старших классов. Не пугайтесь того, что в следующих нескольких предложениях, Вы скорее всего ничего не поймете. Их поймут те, кто давно работает в области телекома как разработчики и производители оборудования, но к концу курса, Вы будете знать все о чем я написал ниже.Вы узнаете как работает транзистор, логический элемент, как устроена цифровая схемотехника, вместе в Вами мы спроектируем процессор и не один, Вы узнаете о процессах происходящих в радиотехнических системах и таких понятиях как интерференция или феддинг в канале связи, что такое КСВ, и где применяют «балуны», как устроены рекурсивные цифровые фильтры, зачем нужен алгоритм cordic, что такое децимация и зачем она нужна, узнаем что такое BaseBand и как он связан с прямым цифровым синтезом и причем тут комплексные числа. Узнаем что такое доплеровский сдвиг, познакомимся с элементами теории вероятностей, и узнаем зачем нам знать о распределении релея‑джинса. Мы самостоятельно соберем компилятор, который собирает код всего что выполняется у Вас на компьютере, и сделаем это ни один раз, а потом при помощи такого компилятора произведем сборку операционной системы. Нам предстоит познакомиться со стандартами, за которые отвечает группа 3GPP. Вы узнаете про сложные виды модуляций, и нарезку данных применяемую в сотовых сетях, а так же как она соотноситься со служебными каналами связи. Вы спокойно будете оперировать терминами Paging, Location Area Update, или каналами RRC, LLC, узнаете что такое BCCH/BCH, для чего нужны Measurenment Report‑ы, и при каких условиях производятся измерения в каналах связи. Узнаете что такое Handover. Возможно, доберемся и до PSC, но только в теории, т.к. это уже 3G или 4G. Нам предстоит разработать или заимствовать и проверить, десятки, а может быть сотни тысяч строк кода стека GSM. И, надеюсь, мы вместе дойдем до конца проекта и выпустим ASIC. Но сначала попробуем использовать схему состоящую из CPU, FPGA, и, вероятно AD9361, или чего‑то подобного.

Читать далее

Оптимизированный доступ к GPIO и не только, часть вторая

Level of difficultyMedium
Reading time9 min
Views6.8K

Уважаемые жители Habr‑а, В данной статье, речь пойдет о доступе к GPIO, и другим регистрам, используя C++.

Несколько лет назад, я подготовил статью, о том, как можно используя constexpr‑клаcсы, серьезно оптимизировать доступ к GPIO‑порту, таким образом, чтобы команда «PA0.set()» — превращалась в одну‑три ассемблерных инструкции, в зависимости от обстоятельств. Этот класс лишь выглядел обычным, который оптимизировался компилятором. Фактически, это была высокоуровневая оптимизация низкоуровневого кода. Теоретически возможно было перегрузить оператор равенства и писать просто PA0=1 или PA0=0, фактически это вызывало inline инструкцию, позволяющую добавить еще и барьерную инструкцию.

Больше года назад, я потерял доступ к аккаунту Habr, и не мог восстановить его. Однако, спустя некоторое время, эксперименты по оптимальному доступу к полям регистров продолжились. И это привело к использованию нехитрых конструкций, построенных на шаблонах. Сегодня, я расскажу к чему привели эти эксперименты.

Итак. Задача состояла в том, чтобы максимально описать любой регистр, и получить доступ к нему, удобным способом. Я несколько раз пытался различными способами формализовать описание, и мои попытки привели меня к следующему коду.

Читать далее

Оптимизированный доступ к GPIO. Или GPIO как constexpr класс. С++

Reading time4 min
Views7.1K

Добрый день, жители Хабра. Данный пост будет посвящен программированию на C++, и использованию constexpr объектов с целью повышения уровня удобства и одновременно оптимизации кода с точки зрения размера и производительности.

В процессе работы над одним из проектов, задумался: "нельзя ли сделать удобный доступ к GPIO портам на STM32, и при этом сделать его оптимальным по размеру кода и производительности". Что я хотел получить...

Читать далее

Полноценная GDB отладка через USB на плате BluePill (STM32F103С8T)

Reading time5 min
Views14K

В данной статье речь пойдет о программировании и полноценной отладке микроконтроллера STM32F103C8T6 через USB.

Однажды, от коллег поступило предложение о участии в IoT проекте. Система предусматривала однопоточный запуск скриптов. Отладка производилась с помощью логов. И тут мне в голову пришла мысль о полноценной удаленной отладке проектов под микроконтроллеры.

Продолжение следует ...

Information

Rating
2,397-th
Location
Воронеж, Воронежская обл., Россия
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer, Software Architect
Lead
From 250,000 ₽
C++
Programming microcontrollers
System Programming
Applied math
Development of drivers
Reverse development
Code Optimization
Electronics Development
Circuitry