Подсчет оборотов шагового двигателя.

Sinopsys330

✩✩✩✩✩✩✩
29 Дек 2018
2
0
Добрый вам день товарищи. Прошу помощи в решении задачи которая не дает мне покоя. Есть у меня хотелка крутить шаговый двигатель и считать его обороты. Практическое назначение сего абсолютно не важно в данной теме т.к. это только вызовет ненужные споры о удачности решения, а повторять одни и те-же аргументы которые всегда остаются неоспоримыми я уже устал в попытках получить помощь в вопросе. Суть в следующем. Есть Arduino UNO, DRV8825, шаговик к нему, 3 кнопки, олед дисплей подключающийся по i2c, и датчик холла. Задача крутить двигатель до тех пор пока кол-во оборотов не будет равняться целевом значению. Вариант просто сделать нужное кол-во шагов для определенного кол-ва оборотов не подходит т.к. двигатель крутится не свободно и может пропустить шаги или часть оборота. Я пробовал использовать прерывания по срабатыванию датчика холла, но после прерывания либо прекращается счет, либо не работает дисплей, либо прекращается вращение. Вариантов скетча к сожалению нет т.к. в процессе не сохранял их как отдельные варианты. Есть ли у вас пример рабочего кода для подобных вещей?
 

VAF

✩✩✩✩✩✩✩
15 Июл 2023
50
1
Москва
Пытался решить эту задачу посредством использования двухядерной платы аналога Lolin D32 и xTaskCreatePinnedToCore. Исходный скетч с светдиодами работает. Скетч, в котором одна из задач - управление шаговым двигателем через драйвер , а другая мигание светодиода, тоже работает. Но попытка в задаче для светодиода заменить delay на if(millis()-last) выключает светодиод, хотя мотор свою задачу отрабатывает. Это не позволяет в качестве второй задачи использовать задачу для ЕнКодера, в которой много сравнений. Выхода я нее нашел.
 

VAF

✩✩✩✩✩✩✩
15 Июл 2023
50
1
Москва
По моему опыту работы мне удобнее работать с ядрами. Кроме того, как я понимаю, работа с шаговым двигателем идет все время, используемые при этом введенные задержки до 3мс. И врываться в этот поток работы для чего-либо достаточно длительного не правильно. Два ядра поностью соответствуют ситуации: один работает, другой, не мешая ему - наблюдает и подсчитывает. Хотелось бы научиться использовать все, имеющиеся ядра.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,413
978
58
Марий-Эл
@VAF, Не верный подход. Всю работу с внешними устройствами нужно свалить на периферию, а ядро должно сидеть с попкорном в углу и наблюдать за этим.
На таймерах в STM32 можно сделать.
  • Управление шаговым двигателем
  • Управление трёхфазным двигателем
  • Чтение IrDa
  • Работа с энкодером.
  • Работа с датчиками холла
  • Различные счётчики для подсчёта внешних импульсов.
  • Частотомеры
  • и т.д.
В общем устал перечислять. И всё это без задействования ядра МК или с его частичным задействованием.
Давно пора уходить от этих тупиковых веток как Ардуина и ESP
 

poty

★★★★★★✩
19 Фев 2020
3,265
950

@VAF, мигание светодиодом - явно не та процедура, которая подходит под определение "чего-либо достаточно длительного". Если на delay работает, то значит переход на millis просто сделан неверно.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,413
978
58
Марий-Эл
ESP довольно неплоха
Вполне возможно. Но после STM как то дико смотрится, что в ней есть.
Сделал на ней единственный проект, первый раз в жизни.
Всё работает, всё замечательно
Но вот как то душа не лежит.
Может ядро так написано. Не знаю.
Единственное, что понравилось, это переназначение ног периферии практически на любой вывод.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
634
45
@Эдуард Анисимов, ну стм хорош если не использовать бт/вайфай. Если нужна беспроводная связь то есп норм, хороший сдк, все дела. В новых чипах вроде как даже зигби завезли.