аппаратный шим stm32

Пользовательские блоки ПИД регуляторов, прочих регуляторов и для работы с ШИМ выходами
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
peroAlexandr
Рядовой
Сообщения: 16
Зарегистрирован: 26 окт 2022, 08:30
Имя: Александр
Благодарил (а): 1 раз
Поблагодарили: 7 раз

аппаратный шим stm32

Сообщение peroAlexandr »

Блоки проверенны осциллографом на соответствие частоты, времени импульса, скважности. Единственное не проверял изменение времени импульса "на ходу" на всех, лишь несколько.
частота до 200кГц
У вас нет необходимых прав для просмотра вложений в этом сообщении.
lfgjikjjyj
Сержант
Сообщения: 259
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 38 раз

Re: аппаратный шим stm32

Сообщение lfgjikjjyj »

ии конечно же не задумывается о гибкости и правильности реализации
лучше бы вы почитали даташит и создали гибкие автоподнастройки
зачем вы ставите 50мгц на порт если у вас шим допустим 1гц там без проблем хватит и 2мгц режима да даже в 200кгц режим в 10мгц достаточно
на 50мгц он же выходит на максимальное потребление да ещё начинает спамить помехами от шима да ещё интересно позамерять завалы фронтов при этих режимах не думаю что на 50мгц он будет лучше

на ардуино часто такое встречал когда шимиш на пин 9 10 то на пинах соседних 8 11 тоже появляется спамерский шим неровный это имеется в виду что они соседнии не задействованы в данном коде
поэтому и рекомендуют лишнии пины ставить с подтяжкой как вход либо выход
Fm-Nafing
Сержант
Сообщения: 111
Зарегистрирован: 13 июл 2016, 13:24
Откуда: Санкт-Петербург
Имя: Владислав
Благодарил (а): 2 раза
Поблагодарили: 15 раз

Re: аппаратный шим stm32

Сообщение Fm-Nafing »

Николай. Вы меня конечно извините. Но было бы гораздо понятнее если бы Вы пользовались знаками препинания.
Я изменил бы мир. Но Бог не дал исходников.
lfgjikjjyj
Сержант
Сообщения: 259
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 38 раз

Re: аппаратный шим stm32

Сообщение lfgjikjjyj »

ладно подумаю
peroAlexandr
Рядовой
Сообщения: 16
Зарегистрирован: 26 окт 2022, 08:30
Имя: Александр
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: аппаратный шим stm32

Сообщение peroAlexandr »

lfgjikjjyj писал(а): 09 дек 2025, 07:29 ии конечно же не задумывается о гибкости и правильности реализации
лучше бы вы почитали даташит и создали гибкие автоподнастройки
зачем вы ставите 50мгц на порт если у вас шим допустим 1гц там без проблем хватит и 2мгц режима да даже в 200кгц режим в 10мгц достаточно
на 50мгц он же выходит на максимальное потребление да ещё начинает спамить помехами от шима да ещё интересно позамерять завалы фронтов при этих режимах не думаю что на 50мгц он будет лучше

на ардуино часто такое встречал когда шимиш на пин 9 10 то на пинах соседних 8 11 тоже появляется спамерский шим неровный это имеется в виду что они соседнии не задействованы в данном коде
поэтому и рекомендуют лишнии пины ставить с подтяжкой как вход либо выход
В какой строке устанавливается Шим в 50мгц?

P.S.Если этот код не работает, есть способ реализации лучше, то пожалуйста, сделайте свои блоки и выложите их на форум.
Я искал такие блоки и не нашёл. Поэтому и прибег к такому способу который на моем столе и осциллографе работает.
P.S.S. кажется я вспомнил почему ненавижу форумы и почему не так много в сети блоков....
lfgjikjjyj
Сержант
Сообщения: 259
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 38 раз

Re: аппаратный шим stm32

Сообщение lfgjikjjyj »

Что за психоз?
Работает так замечательно.
Я делал, но на нужный мне пин, такую поляну как у вас, по всем пинам не пробовал.
2025-12-09_155714.png
Тогда можно было захватить и альтернативные пины для полноты и простоты разводки.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
peroAlexandr
Рядовой
Сообщения: 16
Зарегистрирован: 26 окт 2022, 08:30
Имя: Александр
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: аппаратный шим stm32

Сообщение peroAlexandr »

lfgjikjjyj писал(а): 09 дек 2025, 12:08 Что за психоз?
Работает так замечательно.
Я делал, но на нужный мне пин, такую поляну как у вас, по всем пинам не пробовал.

2025-12-09_155714.png

Тогда можно было захватить и альтернативные пины для полноты и простоты разводки.
В том и дело. Моя личная задача была разгрузить CPU, получить код который не будет конфликтовать с другими библиотеками. Мне хватало 4 пинов. Надо крутить только 4 шаговика. Но т.к. в сети нет таких блоков решил задействовать все аппаратные таймеры и доступные пины на радость другим пользователям flprog, которые ещё не научились создавать блоки и писать код на чистом С.
Что касается потребления, то стм32с8т6 не самый лучший выбор для аккумуторных "потаскунчиков".
Задачи делать " Облизанный" код по всем заповедям не стояло. Так же как и не было задачи использовать как альтернативные так и компиментарные пины. Хотите лучше? - пожалуйста. Делайте. Программа открытая, каждый может создать тот код, тот блок котрый по его мнению лучше. Я не похвастаться выложил этот блок, не сказать, что он самый идеальный во всем и совершенный. Он просто работает. Была задача получить гарантированно рабочий шим в рамках заданных параметров.
Более того. Ни кто не говорит о том что способ написания при помощи ИИ самый верный, правильный и тд. Это просто рабочий способ создания блоков без знания С языка. И это действительно работает.
Если же Вам нужно блок который работает с альтернативными пинами, комплиментарными и тд, то пожалуйста создавайте и тоже выкладывайте. Пусть каждый будет иметь возможность использовать тот блок который именно ему нужен. Я только ЗА такое решение.
Что касается психоза, то его нет. Есть удивление от деструктивной критики. Вот если блок не работал или работал не стабильно и криво и тд и тп, то я, конечно, прислушался бы к мнению. А пока это "транжирство" Бесплатных букв. Что касается наводок, то я обязательно сегодня на работе проверю. Выберите блок и я проверю на наводки. Хотя что- то мне подсказывает, что у вас был не отмытый флюс.
P. S. Вы не ответили. Где в коде Шим устанавливается на 50Мгц? Я спрашиваю не с целью докопаться, а проверить может я что-то где то упустил?
lfgjikjjyj
Сержант
Сообщения: 259
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 38 раз

Re: аппаратный шим stm32

Сообщение lfgjikjjyj »

не шим
там есть табличка с режимами скорости переключения пинов 2 10 50 мгц
в отличие от ардуино позволяет подойти гибче к той или иной реализации
а вот по поводу моторов прекрасно подходит таймер1 с его доп функциями для этих целей
MM33
Рядовой
Сообщения: 87
Зарегистрирован: 23 июн 2021, 11:52
Имя: Михаил
Поблагодарили: 4 раза

Re: аппаратный шим stm32

Сообщение MM33 »

lfgjikjjyj писал(а): 09 дек 2025, 13:37 не шим
там есть табличка с режимами скорости переключения пинов 2 10 50 мгц
в отличие от ардуино позволяет подойти гибче к той или иной реализации
а вот по поводу моторов прекрасно подходит таймер1 с его доп функциями для этих целей
Если не сложно прошу пояснить про доп функции таймера1. Было бы здорово если все 4 шаговика можно было бы управлять используя только один таймер. Я нашел только то, что он имеет возможность формировать противофазные сигналы управления, но это хорошо для управления трехфазным двигателем. А для управления шаговыми получается нужно использовать на каждый двигатель свой таймер. Таймеров мало, а если нужно еще обрабатывать оптическую линейку, то таймеров не хватает.
peroAlexandr
Рядовой
Сообщения: 16
Зарегистрирован: 26 окт 2022, 08:30
Имя: Александр
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: аппаратный шим stm32

Сообщение peroAlexandr »

lfgjikjjyj писал(а): 09 дек 2025, 13:37 не шим
там есть табличка с режимами скорости переключения пинов 2 10 50 мгц
в отличие от ардуино позволяет подойти гибче к той или иной реализации
а вот по поводу моторов прекрасно подходит таймер1 с его доп функциями для этих целей
Да, подходит, но абсолютно нет необходимости если управляешь через драйвер.
Что касается скорости переключения. Это как то мешает работать блокам в той реализации в какой они представлены?
peroAlexandr
Рядовой
Сообщения: 16
Зарегистрирован: 26 окт 2022, 08:30
Имя: Александр
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: аппаратный шим stm32

Сообщение peroAlexandr »

MM33 писал(а): 09 дек 2025, 14:57
lfgjikjjyj писал(а): 09 дек 2025, 13:37 не шим
там есть табличка с режимами скорости переключения пинов 2 10 50 мгц
в отличие от ардуино позволяет подойти гибче к той или иной реализации
а вот по поводу моторов прекрасно подходит таймер1 с его доп функциями для этих целей
Если не сложно прошу пояснить про доп функции таймера1. Было бы здорово если все 4 шаговика можно было бы управлять используя только один таймер. Я нашел только то, что он имеет возможность формировать противофазные сигналы управления, но это хорошо для управления трехфазным двигателем. А для управления шаговыми получается нужно использовать на каждый двигатель свой таймер. Таймеров мало, а если нужно еще обрабатывать оптическую линейку, то таймеров не хватает.
Я поступил несколько проще, просто взял драйвер DM542. Ему нужен по шиму только step, направление и удержание можно без шим. Хотя.... зависит от конкретных задач.
MM33
Рядовой
Сообщения: 87
Зарегистрирован: 23 июн 2021, 11:52
Имя: Михаил
Поблагодарили: 4 раза

Re: аппаратный шим stm32

Сообщение MM33 »

Я понимаю ,что для драйвера нужен сигнал Step и что он обязательно должен формироваться от независимого от программного кода устройства , иначе на каждом прерывании будут подергивания двигателя . Я пошел таким же путем как и Вы. Насколько я понимаю Step / Dir может работать по "положению" и в этом случае мы должны четко рассчитывать количество импульсов на такт расчета . А может работать по скорости. В этом случае мы на каждый такт рассчитываем примерную частоту Step исходя из разности между целевой позицией и фактического положения. таким образом каждый такт происходит коррекция скорости ( такт например 1 ms) но для этого нужны датчики положения (или энкодер или линейка). Строить обработку энкодера на программном коде тоже плохая затея, на больших скоростях количество прерываний погасит скорость основного Loopa
peroAlexandr
Рядовой
Сообщения: 16
Зарегистрирован: 26 окт 2022, 08:30
Имя: Александр
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: аппаратный шим stm32

Сообщение peroAlexandr »

MM33 писал(а): 09 дек 2025, 15:23 Я понимаю ,что для драйвера нужен сигнал Step и что он обязательно должен формироваться от независимого от программного кода устройства , иначе на каждом прерывании будут подергивания двигателя . Я пошел таким же путем как и Вы. Насколько я понимаю Step / Dir может работать по "положению" и в этом случае мы должны четко рассчитывать количество импульсов на такт расчета . А может работать по скорости. В этом случае мы на каждый такт рассчитываем примерную частоту Step исходя из разности между целевой позицией и фактического положения. таким образом каждый такт происходит коррекция скорости ( такт например 1 ms) но для этого нужны датчики положения (или энкодер или линейка). Строить обработку энкодера на программном коде тоже плохая затея, на больших скоростях количество прерываний погасит скорость основного Loopa
Я пока не понимаю ваш механизм. Приведу свой пример, так работают станки чпу среднего и низкого ценового сегмента.
1) ставим датчик(холла, индуктивный и тд. если у вас влажность высокая неплохо подойдет датчик фаз от ваз 8 кл. реагирует на металл. по питанию за 3.3в не скажу, но питал от 5 вольт- работало. сигнал 5 вольт)
2)при запуске программы отодвигаем на установленное расстояние предмет движения механизма(рама или что у вас двигается) контроль расстояния по счетчику из стандартных блоков.
3) возвращаемся обратно до срабатывания датчика
4) вновь отодвигаемся от датчика на малой скорости и меньшее расстояние(но это расстояние должно гарантировать выход из зоны действия датчика)
5) на малой скорости приближаемся к датчику и в момент срабатывания останавливаем мотор, удерживаем его и сбрасываем счетчик. это точка "0" механизма
ну а далее в процессе работы просто делаем формулу пересчета(если требуется) где берем 1 шаг и пройденное расстояние
lfgjikjjyj
Сержант
Сообщения: 259
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 38 раз

Re: аппаратный шим stm32

Сообщение lfgjikjjyj »

MM33 писал(а): 09 дек 2025, 14:57
lfgjikjjyj писал(а): 09 дек 2025, 13:37 не шим
там есть табличка с режимами скорости переключения пинов 2 10 50 мгц
в отличие от ардуино позволяет подойти гибче к той или иной реализации
а вот по поводу моторов прекрасно подходит таймер1 с его доп функциями для этих целей
Если не сложно прошу пояснить про доп функции таймера1. Было бы здорово если все 4 шаговика можно было бы управлять используя только один таймер. Я нашел только то, что он имеет возможность формировать противофазные сигналы управления, но это хорошо для управления трехфазным двигателем. А для управления шаговыми получается нужно использовать на каждый двигатель свой таймер. Таймеров мало, а если нужно еще обрабатывать оптическую линейку, то таймеров не хватает.
Ну, там не только трёхфазники, но самое интересное — Н-мост с его деадтайм и противофазные пины исключают появление сквозных токов.
Хотя я покупал для этих дел спецдрайвера, но они маломощные очень, а тут, походу, можно напрямую ворочить мощные мосфеты.
Это у меня была проблема на Ардуино: я никак не мог пошимить мотор от жигули, его помехи мгновенно уводили МК в полное мёртвое зависание с первых секунд, а мостовых драйверов нечем было воспользоваться.
А тут, если ещё подумать, то можно накинуть токовое колечко на питание, датчик температуры на сам мотор и в случае превышения через специальный аварийный пин отключить все четыре ключа.

То есть, вы пытаетесь управлять шаговым мотором напрямую с четырёх пинов одного таймера? Ну, тут действительно проще купить драйвера, и тогда с одного таймера можно управлять четырьмя моторами.
Я таким образом покупал DM-556, что-то меньше 1000 отдавал, самый дешманский на AliExpress находил, и тупо подавал ШИМ-сигнал на степ, но мне там не нужны были конкретные шаги вперёд-назад, у меня стоял отдельный энкодер, который служил для меня спидометром и измерителем расстояния через радиус колеса.
MM33
Рядовой
Сообщения: 87
Зарегистрирован: 23 июн 2021, 11:52
Имя: Михаил
Поблагодарили: 4 раза

Re: аппаратный шим stm32

Сообщение MM33 »

С выходом в ноль все понятно. По вашей методе можно осуществлять только линейные перемещения . А чтобы описать окружность требуется работать в "контурном режиме". Разбивать движение каждой из осей на мелкие такты .( чем меньше тем точнее)
MM33
Рядовой
Сообщения: 87
Зарегистрирован: 23 июн 2021, 11:52
Имя: Михаил
Поблагодарили: 4 раза

Re: аппаратный шим stm32

Сообщение MM33 »

lfgjikjjyj писал(а): 09 дек 2025, 16:18
MM33 писал(а): 09 дек 2025, 14:57
lfgjikjjyj писал(а): 09 дек 2025, 13:37 не шим
там есть табличка с режимами скорости переключения пинов 2 10 50 мгц
в отличие от ардуино позволяет подойти гибче к той или иной реализации
а вот по поводу моторов прекрасно подходит таймер1 с его доп функциями для этих целей
Если не сложно прошу пояснить про доп функции таймера1. Было бы здорово если все 4 шаговика можно было бы управлять используя только один таймер. Я нашел только то, что он имеет возможность формировать противофазные сигналы управления, но это хорошо для управления трехфазным двигателем. А для управления шаговыми получается нужно использовать на каждый двигатель свой таймер. Таймеров мало, а если нужно еще обрабатывать оптическую линейку, то таймеров не хватает.
Ну, там не только трёхфазники, но самое интересное — Н-мост с его деадтайм и противофазные пины исключают появление сквозных токов.
Хотя я покупал для этих дел спецдрайвера, но они маломощные очень, а тут, походу, можно напрямую ворочить мощные мосфеты.
Это у меня была проблема на Ардуино: я никак не мог пошимить мотор от жигули, его помехи мгновенно уводили МК в полное мёртвое зависание с первых секунд, а мостовых драйверов нечем было воспользоваться.
А тут, если ещё подумать, то можно накинуть токовое колечко на питание, датчик температуры на сам мотор и в случае превышения через специальный аварийный пин отключить все четыре ключа.

То есть, вы пытаетесь управлять шаговым мотором напрямую с четырёх пинов одного таймера? Ну, тут действительно проще купить драйвера, и тогда с одного таймера можно управлять четырьмя моторами.
Я таким образом покупал DM-556, что-то меньше 1000 отдавал, самый дешманский на AliExpress находил, и тупо подавал ШИМ-сигнал на степ, но мне там не нужны были конкретные шаги вперёд-назад, у меня стоял отдельный энкодер, который служил для меня спидометром и измерителем расстояния через радиус колеса.
Нет. речь идет об управлении по Step/Dir 4-мя моторами , естественно на каждый устанавливается свой драйвер. Просто качество Stepa от программного и аппаратного будет совсем разным.
По поводу управления Н-мостом и трехфазным двигателем - это одна и тажа проблема - сквозные токи . Без мертвого времени не обойтись . Да действительно таймер 1 здесь рулит
lfgjikjjyj
Сержант
Сообщения: 259
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 38 раз

Re: аппаратный шим stm32

Сообщение lfgjikjjyj »

Ну, тут проблема такая, что меня уже побрили: там, в Arduino IDE, ОПМ не работает.
Что самое идеальное было бы для управления.

Надо будет почитать альтернативные пути, что там даташит пишут.

А вот по поводу энкодеров, то там, судя по доташиту, если я правильно понял, то один таймер — это один энкодер, то есть линию А и Б можно посадить только на два пина, хотя их там четыре.
Но зато работает он с энкодерами на аппаратном уровне, при том таймер один имеет самый высокий приоритет в прерываниях по сравнению с другими.
То есть он аппаратно определяет направление вращения и положения его.
Итого: четыре таймера — четыре энкодера, и это если действительно так то все эти программные библиотеки нафиг не нужны.
peroAlexandr
Рядовой
Сообщения: 16
Зарегистрирован: 26 окт 2022, 08:30
Имя: Александр
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: аппаратный шим stm32

Сообщение peroAlexandr »

Опять же если верить ИИ, то проблем с энкодерами нет. Надо его замучать вопросами и он отдаст нужный код. вот ответы ИИ
Вот несколько способов снять направление и шаги энкодера, минимально нагружая CPU.

1. Использование аппаратных прерываний (IRQ)

- Лучший компромисс между точностью и нагрузкой.
- Два канала энкодера подключаются к пинам, поддерживающим внешние прерывания.
- Прерывание вызывается только при изменении сигнала, CPU не тратит ресурсы на постоянный опрос.
- В обработчике прерывания быстро определяете направление по состоянию второго канала.
- Нагрузка CPU минимальна.

2. Аппаратный квадратичный декодер

- На STM32, ESP32, некоторых AVR есть аппаратный декодер внутри таймера.
- Аппарат сам считает импульсы и направление — CPU вообще не участвует.
- Нулевая нагрузка CPU.
- Лучший вариант, если поддерживается вашим микроконтроллером.

3. Использование аппаратного фильтра/дебаунса

- Включение цифровых фильтров в контроллере снижает количество ложных срабатываний.
- Меньше ложных IRQ → меньше загрузка CPU.

4. Опрос в таймере с фиксированной частотой

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

Итог

- Оптимально: аппаратный квадратичный декодер (если есть).
- Второй по качеству: прерывания на оба канала.
- Избегать: циклический опрос пинов.

Если скажешь модель микроконтроллера — подскажу лучший вариант и пример кода для него.
peroAlexandr
Рядовой
Сообщения: 16
Зарегистрирован: 26 окт 2022, 08:30
Имя: Александр
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: аппаратный шим stm32

Сообщение peroAlexandr »

Ниже приведён минимальный и рабочий пример для STM32F103C8T6, который использует аппаратный квадратичный декодер (Encoder Mode) в таймере TIM3.
Код написан под STM32 HAL.

Пины

По умолчанию TIM3 использует

- PA6 → TIM3_CH1
- PA7 → TIM3_CH2

Инициализация таймера в режиме Encoder


TIM_HandleTypeDef htim3;

void MX_TIM3_Init(void)
{
TIM_Encoder_InitTypeDef encoderConfig = {0};
TIM_MasterConfigTypeDef masterConfig = {0};

htim3.Instance = TIM3;
htim3.Init.Prescaler = 0;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 0xFFFF;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;

encoderConfig.EncoderMode = TIM_ENCODERMODE_TI12;

encoderConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
encoderConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
encoderConfig.IC1Prescaler = TIM_ICPSC_DIV1;
encoderConfig.IC1Filter = 10;

encoderConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
encoderConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
encoderConfig.IC2Prescaler = TIM_ICPSC_DIV1;
encoderConfig.IC2Filter = 10;

HAL_TIM_Encoder_Init(&htim3, &encoderConfig);

masterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
masterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&htim3, &masterConfig);
}

Инициализация GPIO


void MX_GPIO_Init(void)
{
__HAL_RCC_GPIOA_CLK_ENABLE();

GPIO_InitTypeDef gpio = {0};
gpio.Pin = GPIO_PIN_6 | GPIO_PIN_7;
gpio.Mode = GPIO_MODE_INPUT;
gpio.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &gpio);
}

Запуск энкодера


HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);

Чтение текущей позиции


int16_t encoder_get_position(void)
{
return (int16_t)__HAL_TIM_GET_COUNTER(&htim3);
}

Определение направления вращения


int8_t encoder_get_direction(void)
{
if ((TIM3->CR1 & TIM_CR1_DIR) == 0)
return 1; // вперед (счёт вверх)
else
return -1; // назад (счёт вниз)
}

Основной цикл


int16_t pos;
int8_t dir;

while (1)
{
pos = encoder_get_position();
dir = encoder_get_direction();

// Ваш код…
}

Что важно знать

- Аппаратный декодер полностью разгружает CPU.
- Счёт направления делает сам таймер.
- Можно выставлять фильтр ICxFilter для подавления дребезга.
- Если энкодер механический, рекомендуют фильтр 5–15.

Если нужно — могу сделать пример для CubeMX, FreeRTOS или вывести позицию по UART.
MM33
Рядовой
Сообщения: 87
Зарегистрирован: 23 июн 2021, 11:52
Имя: Михаил
Поблагодарили: 4 раза

Re: аппаратный шим stm32

Сообщение MM33 »

lfgjikjjyj писал(а): 09 дек 2025, 16:38 Ну, тут проблема такая, что меня уже побрили: там, в Arduino IDE, ОПМ не работает.
Что самое идеальное было бы для управления.

Надо будет почитать альтернативные пути, что там даташит пишут.

А вот по поводу энкодеров, то там, судя по доташиту, если я правильно понял, то один таймер — это один энкодер, то есть линию А и Б можно посадить только на два пина, хотя их там четыре.
Но зато работает он с энкодерами на аппаратном уровне, при том таймер один имеет самый высокий приоритет в прерываниях по сравнению с другими.
То есть он аппаратно определяет направление вращения и положения его.
Итого: четыре таймера — четыре энкодера, и это если действительно так то все эти программные библиотеки нафиг не нужны.
Согласен обработка энкодера на таймере самое правильное решение . Только на таймере регистр счета 16 бит - 65536 отсчетов. Энкодер выдает по двум трекам 2500 имп на оборот . каждый импульс имеет два фронта - передний и задний итого получаем 10000 отсчетов на оборот. при шаге винта 10 мм один таймер позволит обсчитать путь длиной 6,5 см . следовательно надо связывать два таймера чтобы получить 32 разряда . итого 8 таймеров на энкодеры и 4 на управление STEP.... не хватает таймеров однако
Ответить

Вернуться в «ПИД регуляторы (PID), блоки для ШИМ»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей