Comments 17
Полезная статья, может пригодится
тема полезная, странно, что мало комментариев но видимо не все дочитали до конца
меня засмущали вопросы после выводов, а где ответы?
Вопросы
1--Как в прошивке микроконтроллера прочитать мгновенное значение на выходе аппаратного PWM?
2--Можно ли на STM32 в случае схемы Master-Slave сделать регулирование фазы на Slave PWM сигнале без использования прерываний микроконтроллера и остановки счета, чтобы не затормаживать основную прошивку?
ну и результат (или выводы статьи) напомнили студенческую работу
Результат
Удалось научиться
Автор, вопрос поднят хороший, хорошо описано и понятно, но результат и странные вопросы после выводов смазывают впечатление. Ставлю +, очень надеюсь на следуюшие тех статьи от вас на основе железа доступного на озон для любителей) тот же stm32 nano
и да, не нашел исходники примера на git, без общедоступных исходников сильно снижается ценность вашей работы
не нашел исходники примера на git, без общедоступных исходников сильно снижается ценность вашей работы
Тестировочные сборки в репозитории trunk
https://github.com/aabzel/trunk/tree/main
Вот конкретная сборка Demo проекта
https://github.com/aabzel/trunk/tree/main/source/projects/jz_f407vet6_pwm_phase_demo_gcc_m
Все конфигурации для платы jz-f407vet6 лежат тут
https://github.com/aabzel/trunk/tree/main/source/boards/jz_f407vet6
Логика шатания фазы описана отдельным модулем
https://github.com/aabzel/trunk/tree/main/source/applications/pwm_phase_demo
Драйвер PWM лежит тут
https://github.com/aabzel/trunk/tree/main/source/mcal/mcal_common/pwm
https://github.com/aabzel/trunk/tree/main/source/mcal/mcal_stm32f4/pwm
Драйвер Timer лежит в source/mcal
https://github.com/aabzel/trunk/tree/main/source/mcal/mcal_common/timer
https://github.com/aabzel/trunk/tree/main/source/mcal/mcal_stm32f4/timer
тема полезная, странно, что мало комментариев
Автор, вопрос поднят хороший, хорошо описано и понятно,
Спасибо.
на основе железа доступного на озон для любителей) тот же stm32 nano
PCB JZ-F407VET6 тоже продается на OZON
Обзор учебно-тренировочной платы JZ-F407VET6 (или электронная парта)
https://habr.com/ru/articles/988494/
(K N E X) 1 компл. Совет по развитию промышленного управления STM32F407VET6 Learning 485 Dual CAN Ethernet Интернет вещей STM32

тема полезная, странно, что мало комментариев но видимо не все дочитали до конца
По факту мало кому реально надо управлять фазой PWM. Я работаю программистом MK 14 лет и замечал, что 60-80 % программистов МК даже не знают, что такое фаза сигнала. Знают только про частоту, амплитуду и скважность.
Мало комментариев как раз и доказывают, что мало кто понял "об чём речь" и "Про что пирожки?" .
да, тема узкоспециализированная, тем более выше ценность вашей статьи, понятно, что есть досада, что еë мало оценили, так как в основе здесь обитают программисты ПК и сейчас все сфокусировались и необоснованно "залайкивают" статьи про ИИ.
но буду ждать ваших статей по узким и широкопрофильным темам по МК. Там вопросов, мало известных, вагон и все они достойны, если не книги, то статьи на хабр.
и отдельное спасибо за ответ и ссылки выше
На Хабре по embedded в принципе не то чтобы много статей, и заинтересованных читателей соответственно, да и тот круг сужается, когда речь идёт не про Ардуино. Статья хорошая (ещё только пару опечаток по тексту поправить), но управление фазой pwm действительно частная задача. Может и не пригодится, но в закладки закинул, полезный трюк.
У всех STM32 есть TIM1, специально заточенный под многофазные нагрузки. 3-фазным двигателем он способен управлять полностью аппаратно, с нулевой ошибкой по фазе. А у некоторых контроллеров он ещё и тактируется повышенной частотой, что увеличивает разрядность.
1--Как в прошивке микроконтроллера прочитать мгновенное значение на выходе аппаратного PWM ведь но согласно PinMux не подключен к GPIO ?
наверняка в регистрах есть флаг - состояние выхода, в любом случае можно завести сигнал на вход, а еще лучше взять сигнал с нагрузки, для полного контроля.
Я делал аппаратно. Выходы двух каналов TIM подаем на входы микросхемы "2 исключающее или-не". На выходе будет 1 только когда на выходах каналах 0 и 1. Регулируя скважность обоих каналов можно получить импульс нужной длительности в любом месте периода PWM. Но нужна дополнительная микросхема...
Я делал аппаратно. Выходы двух каналов TIM подаем на входы микросхемы "2 исключающее или-не". На выходе будет 1 только когда на выходах каналах 0 и 1. Регулируя скважность обоих каналов можно получить импульс нужной длительности в любом месте периода PWM. Но нужна дополнительная микросхема...
Гениально! В самом деле это красивое и простое решение. Спасибо.
"исключающее или-не" это же то же что сложение по модулю два. Так?

Посмотрел на микросхемы - увы иск. или-не не существует. Нужны две микросхемы 1 типа иск. или https://www.chipdip.ru/product/sn74ac86dr-chetyre-logicheskih-elementa-texas-instruments-559310197, вторая инвертор типа https://www.chipdip.ru/product/74lvc2g04gw-125-dvoynoy-inverter-tssop-6-nexperia-9000771680.
Для четырех каналов надо 3 микросхемы.


Управление фазой аппаратного PWM сигнала на STM32 (или таймер на ошейнике)