
Комментарии 21
Для столь амбициозной задачи не хватает результатов исследований: а какой же итоговый джиттер получился.
Для столь амбициозной задачи не хватает результатов исследований
Да что тут амбициозного?
Просто аппаратная мигалка светодиодом.
а какой же итоговый джиттер получился.
Как это можно измерить?
Ну тут, видимо, два метода:
1) Для небольших частот рабоче-крестьянский с помощью осциллографа: вывести на выход меандр максимальной частоты (010101) и смотреть на сколько скачут фронты. Примерную оценку можно получить глазами.
2) Поставить полосовой фильтр на заданную частоту, чтобы убрать высшие гармоники, вывести тот же меандр и смотреть на сколько разваливается спектр сигнала (характерное расширение гармоники снизу). Дальше есть методики пересчета-расчета. У TI (или AD?) были хорошие простые методички на этот счет.
Добавлю к предложениям @nerudo:
1) У осциллографов обычно есть режим послесвечения (persist обычно по-ихнему). Будет отлично видно пиковый джиттер периода.
2) Если есть анализатор спектра - естественно воспользоваться им. Можно будет пересчитать ширину полосы в среднеквадратичный джиттер фазы.
Если разрешения не хватает, можно уменьшить тактовую частоту мк. И логично было бы измерять на мк, загруженном другими полезными задачами, и а не while(1); .
Для чистоты эксперимента хорошо бы сравнить результаты с таким-же меандром, сформированным аппаратным таймером.
Была мысль управлять кучей шаговиков для ЧПУ таким способом. Джиттер в несколько (десятков) тактов тут не страшен. А вот с фазированными решетками в гидроакустике это уже будет проблемой
Была мысль управлять кучей шаговиков для ЧПУ таким способом. Джиттер в несколько (десятков) тактов тут не страшен.
Есть у меня отдельная методичка про то как управлять шаговым двигателем.
Теория управления шаговым двигателем (или как вертеть PTZ камеру)
https://habr.com/ru/articles/709500/
+ Про это есть публикация
Asynchronous Control System for Stepper Motor With an Incremental Encoder Feedback.
А вот с фазированными решетками в гидроакустике это уже будет проблемой
Что если поставить приоритет канала DMA на максимум?
Это должно уменьшить джиттер.
Приоритет срабатывает, когда запросы на DMA приходят одновременно. Если DMA уже начало обслуживать один запрос, следующие будут ждать независимо от приоритета.
Ядро мк тоже и в память, и на шину AHB любит совать свои грязные запросы. В вашем целевом мк, например, из мастеров есть ещё Ethernet и USB. Так что надеяться, что как на SPI, будет всё с точностью в наносекунды - не стоит.
Спасибо за уточнение.
В вашем целевом мк, например, из мастеров есть ещё Ethernet и USB.
Но я на Ethernet и USB еще даже тактирование не подавал.
Так что надеяться, что как на SPI, будет всё с точностью в наносекунды - не стоит.
На SPI нельзя настолько точно задавать битовые частоты на проводе CLK. Управлять частотой SPI можно только при помощи пред делителей самого SPI и варьировать остается только частоты ядра.
Таймером же можно задать практически любую частоту.
А почему назвали ЦАПом? Это же по сути формирователь цифрового паттерна.
ЦАП преобразует код в напряжение.
При этом код может быть и двоичным.
Вот и получается, что напряжение на выходе такого ЦАПа тоже становится двоичным.
У вас код хранится в RAM и Flash уже в виде напряжения. Так что тут никакого цифро-аналогового преобразования не происходит.
Как тогда мне в репозитории назвать папку с исходниками в которой лежит данный программный компонент?
Как вы яхту назовёте, так она и поплывёт (с)
По идее можно назвать и soft serial , но с аппаратным ускорением!
Ну почему? В памяти хранятся 0 и 1, а на выходе вольты. Чем не однобитный ЦАП? ;)
SoftSerial: Двоичный ЦАП на STM32 (или формирователь цифрового паттерна)