Проблемы несоответствия с шаговым двигателем

Я пытаюсь заставить свой шаговый двигатель повернуться на 90 градусов, остановиться на секунду и повторить эти шаги.

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

Таким образом, я настраиваю это с помощью raspberry pi, подключенного к драйверу шагового двигателя a4988 Pololu, который выдает 2 ампера при оптимальном охлаждении и 12 В, с биполярным шаговым двигателем, который рассчитан на 2 ампера на фазу и получает 12 В. . Моторы питаются от источника питания 30 ампер, 12 вольт.

Все подключено по приложенной схеме, проверено много раз. Было использовано много различных сценариев, и в настоящее время мы используем сценарий Python из RPI, который выполняет 50 шагов (90 градусов), а затем ждет одну секунду. Этот код работает и является правильным, потому что иногда он работает. При работе двигатель греется, но не горячий на ощупь. Кроме того, когда питание включено, но код не запущен, он иногда гудит и щелкает, не двигаясь. Источники в сети говорят, что это нормально.

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

Другие предпринятые действия: - Использование arduino uno вместо Pi, те же проблемы - Запуск кода с использованием разных способов, разных библиотек и т. Д. - Переключение на другой двигатель и драйвер. -все переделывал несколько раз -регулировал винт регулировки напряжения на драйвере. -обеспечено адекватное охлаждение блока питания и драйвера (2 компьютерных вентилятора по 120 мил)

https://i.imgur.com/Ku2UgAxl.jpg

- схема проводки

https://i.imgur.com/undefined.jpeg -- изображение установки

https://i.imgur.com/Fx7ErH1.jpg

-- используется код

любая помощь или предложения будут очень признательны, слишком много часов ушло на это. LMK, если нужна дополнительная информация.

Я вставил два изображения для вас. Можете ли вы загрузить свой второй файл в формате jpg, а не в формате jpeg, и встроить его самостоятельно? Код действительно должен быть вставлен с использованием тега кода, чтобы его можно было копировать и редактировать в ответах. На этот раз все достаточно просто.
Почему бы вам не вставить задержку между двумя выходными линиями GPIO в цикле for? Я не знаю, нужно ли это вашему драйверу, но, возможно, может помочь рабочий цикл «ближе к 50%»? Вы уже пробовали это? Или есть веская причина не попробовать?
Согласованный. Вы включаете 21 и тут же выключаете его. Драйвер шагового двигателя может не регистрировать импульс.
«случайные работы / не_работы» предполагают проблему с контуром заземления ... эти микросхемы «все в одном» имеют общую логическую землю с землей питания шагового двигателя. Очень большие переходные ступенчатые импульсные токи могут повредить входы логического управления. И переходные процессы также могут мешать плавающим входам соседнего микроконтроллера.
Извините за плохое форматирование, и, как сказано в другом месте, задержки между циклами и полномочиями были опробованы с тем же эффектом. @glen_geek у вас есть идеи, как решить проблему, которую вы описали? Спасибо всем.
@JakeChunn И логическая земля, и земля источника питания шагового двигателя подходят только к одной точке - на плате драйвера, которую вы показали на схеме. Добавьте большой блокирующий конденсатор питания прямо на плате драйвера. Скрутите вместе провода шагового двигателя.
@JakeChunn Было бы здорово, если бы вы могли отредактировать свой вопрос и вставить код, использовать «кнопку кода» для форматирования кода. Напишите четкий конкретный вопрос, чтобы вы могли получить хорошие ответы
Подключите контакт ENABLE к GND - на схеме он плавающий, поэтому может привести к случайной работе. Дополнительно подключите SLEEP и RESET к Vdd.

Ответы (2)

Несколько возможностей:

Вы можете попробовать добавить задержки, чтобы получить рабочий цикл 50%, как это было предложено Джонком.
...
GPIO.output(21,true)
time.sleep(0,01)
GPIO.output(21,false)
time.sleep(0,01)
...

Вы также можете попробовать добавить в свой код рампы ускорения и замедления и использовать библиотеку Arduino, которая их поддерживает (например, AccelStepper).

Кроме того, переключение контекста на Raspberry Pi вызовет неравномерность синхронизации последовательности шаговых импульсов, что приводит к очень быстрому ускорению и замедлению двигателя, что может превысить возможности двигателя по крутящему моменту. Крутящий момент шагового двигателя обычно падает со скоростью вращения, но обычно имеет резонансную полосу, в которой крутящий момент падает почти до нуля в определенном диапазоне скоростей. Установка на вал маховика (или другой нагрузки с небольшой угловой инерцией) может минимизировать эффект резонанса.

Биты в пользовательском пространстве не являются надежным способом управления шаговым двигателем, по крайней мере, не выше скорости дискретного шага. Но похоже, что еще до этого что-то не так.
Мы приложили инерцию к валу, похоже, это не имеет никакого эффекта, и ваш рекомендуемый код является одним из многих вариантов, которые мы пробовали, любые задержки не влияют на хаотично. Я думаю, что Крис прав.

Это повторяет несколько наблюдений / предложений от других, а также то, что я выполнял шаговое управление с использованием A4988 не раз, когда мой список белья (по порядку) был бы;

  • Подключите плавающие контакты на драйвере (читайте даташит)
  • Проверьте свое заземление, убедитесь, что два ваших основания правильно стыкуются и не дерутся друг с другом/истязают чип/пытаются уплыть друг от друга.
  • Посмотрите на развязывающие/сглаживающие конденсаторы и ферриты с логической стороны, драйверы шаговых двигателей электрически очень шумные, особенно при микрошаге.
  • Убедитесь, что A4988 не перегревается, они могут выдерживать абсолютный максимум 2 А на хорошо спроектированной печатной плате с хорошим охлаждением, но при установке на стандартную небольшую плату в стиле StepStick у них почти нет надежды избежать теплового отключения, даже с популярными людьми с маленькими радиаторами. наклейте на них.
  • Не используйте код, не относящийся к реальному времени/пользовательскому пространству, для управления критичным по времени устройством, таким как шаговый двигатель, в конечном итоге он вас укусит, даже если он «в основном работает».
  • Если вы не понимаете, почему управление в реальном времени важно для управления физическими устройствами, такими как двигатели, изучите эту тему.
  • Добавление микроконтроллера между Pi и драйвером с точным кодом в реальном времени / с использованием аппаратных таймеров для генерации точно синхронизированных сигналов с разумными рабочими циклами и ускорением / замедлением — лучший способ добиться того, что вам нужно. Существует множество примеров этого с открытым исходным кодом на 3D-принтерах, фрезерных/фрезерных станках с ЧПУ и т. д. и т. д. и т. д.
  • Предложения о более равномерном распределении времени в вашем коде хороши, даже если они не решают вашу основную проблему, вы должны понимать, почему они хороши.
  • Если у вас есть доступ к осциллографу, поищите зашумленные линии и сигналы неправильной формы.
  • Если у вас нет доступа к осциллографу, приобретите его.