Комментарии 11
один вопрос, почему-бы вам не использовать fpga для этих целей
В смысле - "Почему бы не сделать значительно дороже чем сейчас" ?
ну если вы только из экономических соображений решили использовать эти микроконтроллеры, то вопрос снимается
Простой микроконтроллер + CPLD возможно выйдет сравнимо по цене. А там можно любой ШИМ вертеть, какой только вздумается, с любыми защитами и блэкджеком. Вплоть до аппаратной подгонки мертвого времени сигналом от внешнего компаратора.
Нет, это так не работает.
Любая внешняя микросхема вызовет неприемлемые задержки и нарушение детерминизма. Поскольку микроконтроллер будет вынужден обращаться к этой микросхеме через свою низкоприоритетную периферийную шину и так занятую кучей DMA и DCT.
А в статье как раз показываю способ как делать минимум обращений даже к нативной внутренней оптимизированой периферии. И даже эти обращения вызывают беспокойство - не нужно ли делать DSB ( Data Synchronization Barrier ) после них.
Тут каждая наносекунда дорога, особенно на высоких частотах ШИМ.
Какое CPLD, шутите?
Особенно вывывает улыбку предложение делать некий блэкджек-навороченный ШИМ на FPGA. Ну почему мне не встречаются предложения сделать на FPGA движок USB включая все классы дивайсов. Там годами приходится с аппаратными багами бороться и никто не поможет таким дельным советом.
Сейчас может уже не так актуально, а лет 15 назад я запихивал в ПЛИС управлялку 5-фазным мотором. А для того чтоб не зависеть от интерфейсов - весь контур управления был реализован внизу. Сверху только приходили уставки куда и сколько крутить, настройки тока и прочее. Но в те времена не было особо шустрых контроллеров и это было скорей от неизбежности. Сейчас я бы взял для низа какой-нить STM с мотор-контрольными таймерами, а для верха готовый HMI-модуль или одноплатник.
Не смог найти первую статью про "мёртвое время". Её название не содержит этого словосочетания?
Вот она - https://habr.com/ru/articles/768082/
Решение проблемы мертвого времени с помощью Copilot