Complementary PWM и Push-Pull режимы на таймере 1 контроллеров STM32

Это скорее не статья, а развернутый ответ на сомнения моего уважаемого коллеги Lifelover 'а, которые он выражал в этом обсуждении относительно возможности реализации некоторых режимов ШИМ на таймерах контроллеров серии STM32.



Читать дальше
  • +5
  • 07 января 2018, 16:13
  • _YS_

Радиоприем и радиопередача с помощью ПЛИС



7-го мая в России скромно отмечается день радио. Поскольку на easyelectronics.ru, который мне нравится читать, этот день прошел незаметно, я решил вдогонку написать вот эту статью. Здесь я расскажу о проектах, которые я делал в разное время и на разных платах с ПЛИС, но эти проекты были связаны с радио.

Проекты эти не претендуют на «профессионализм», сделаны что называется «в гараже, да на коленке», но за то они позволяют понять, как вообще вся эта радио-магия работает. Известно, что пока сам руками не пощупаешь, и своими глазами не увидишь, в технологиях не разобраться.

Всего в моей копилке уже четыре проекта: радиопередатчик АМ, ЧМ и ФМ, и простой SDR радиоприемник. Далее краткий обзор этих четырех экспериментальных проектов.

Читать дальше

SD-карта на AVR: на USI и без FS

Как видно из заглавия, будем обходиться без «железного» SPI — на тиньках его нет. Зато есть USI, его и заюзаем. Можно, конечно, и программный SPI написать, но там нужен таймер, а их вечно мало. Также хочу отметить, что вряд ли этот опус можно считать полноценной статьей по SD-картам — скорее, некоторые наброски на тему подводных камней (потому и находится в личном разделе). В общем, отмазки закончились, к делу!

Читать дальше

Окрашивание лицевой панели из дюрали и/или алюминия

В рамках данной заметки речь пойдет о том, как относительно качественно выполнить покраску панели такого типа:





Читать дальше

Сигма-точечный фильтр Калмана

Если кому-то нужен протестированный код Unscented Kalman Filter (UKF) то предлагаю попробовать мою реализацию. Проверял на нескольких задачах, и сегодня проверил на модели BLDC, для которого никак не могу отладить EKF. На двигателе фильтр показывает себя хорошо, EKF так работать заставить не могу. Хотя он должен быть не на много хуже. Проблема только в поиске ошибок.


Читать дальше

Вектора прерываний в C++ стиле

Хочу представить на суд широкой общественности (да и самому не потерять) мою реализацию таблицы векторов прерываний для arm микроконтроллеров STM32. Данная реализация генерируется из asm-файлов SPL, написана на С++ и облегчает работу поддержкой автодополнений и корректной работой с таблицей векторов в памяти.


Читать дальше
  • +6
  • 11 ноября 2014, 17:25
  • dekar

PGA своими руками

Сколько раз ни пытался применить готовые PGA (усилитель с программируемым Ку), ни разу не мог подобрать подходящий. Либо сетка коэффициентов не устраивает, либо (в основном) высокая цена, а часто особенности схемотехники. В результате пришлось изобрести свой.

Казалось бы, чего проще — операционник и коммутатор в цепи ОС, переключающий резисторы нужных номиналов.
Типа:


Как известно, Ку такого усилителя будет определяться соотношением Ку = R2..R5 / R1, выбор задается по адресным входам А0, А1. Вроде все ничего, но есть одно но. Как правило, КМОП-ключи имеют некоторое внутреннее сопротивление, и оно редко меньше 1 Ом, а может достигать и десятков. При этом однозначно нормировать его нельзя, т.к. этот параметр может изменяться как от экземпляра к экземпляру, так и от внешних условий — температуры, амплитуды сигнала и т.д.

Чем это грозит? Тем, что сопротивление ключа вносится в Rос и изменяет Ку. Если требования к точности невысокие и ключ достаточно низкоомный, можно пренебречь внутренним сопротивлением или взять типовое значение из даташита. Однако, если речь идет о прецизионных измерениях, закрывать на это глаза уже нельзя.

Что же делать? Нужно попытаться вынести добавку «за скобки». К счастью, нам повезло :) и коммутатор оказался двухсекционным. Легким движением руки…

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

Что произошло? Теперь при подключении любого из резисторов обратной связи мы берем выходное напряжение не с выхода операционника, где оно содержит добавку, обусловленную падением на ключе, а непосредственно с Rос, которое в точности определяется первоначальной формулой, ибо входной ток через R1 уравновешивается выходным через Rос, и напряжение на Rос зависит только от соотношения резисторов. Добавка, обусловленная дополнительным сопротивлением ключа коммутатора, на нем же и осталась.

Эту схему я придумал сам, некоторое время ощущая себя в определенном смысле гением :) пока не наткнулся на описание схемотехники китайского RLC-метра, который срисовали со старинного agilent. Ну и там увидел свой «велосипед». То есть, это вполне стандартный трюк, которым я с удовольствием и делюсь с уважаемым сообществом.

Дополнительный бонус обнаружился при разводке данной конкретной схемы. Кто попробует, поймет, о чем я :)

Спасибо за внимание, успехов в творчестве.

ATOMIC-макросы для ARM

Поклонникам контроллеров AVR и компилятора WinAVR хорошо знаком макрос
ATOMIC_BLOCK(SOMETHING),
с помощью которого обычно реализуется атомарный доступ. При переходе на контроллеры ARM возникает вопрос: а где мой любимый ATOMIC_BLOCK? А нету. Восполним этот пробел.


Читать дальше

CRC32: на STM32 как на компе или на компе как на STM32.

Все знают, что в STM32F1xx, STM32F2xx, STM32F4xx есть аппаратный блок CRC32 с полиномом 0x04C11DB7.
И он, в общем-то, работает. Но только контрольная сумма почему-то не совпадает с таковой, рассчитанной софтварно.
В гугле обычно 2 типа вопросов:
  1. Как хардварно посчитать на STM32 побайтовую CRC
  2. Как посчитать софтово CRC так, чтоб она совпала с хардовой на STM32
Причём, на первый вопрос ответ везде отрицательный. Так ли это? Попробуем разобраться.


Читать дальше

Быстро делим на 3

Здравствуйте.

Часто читаю WE, так как интересуюсь программированием микроконтроллеров, и решил наконец-то зарегистрироваться, а заодно и запостить статеечку в личный блог.
Статья будет мало кому интересная по причине вопроса не шибко востребованного — а именно быстрого деления числа любой разрядности на 3.


Читать дальше