Как погасить вибрации nema17

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

Привет!

Стоит задача избавиться от вибраций шагового мотора nema17. Когда держишь в руках, его почти не слышно, кладёшь на стол - трындец :) Пробовал ставить количество микрошагов на 800, помогает немного, но всё равно гремит. Мотор будет крепиться на каркасе из фанеры, вибрация передаётся как в камертоне.

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

Может кто поможет советом? :)

Клапауций 001
Offline
Зарегистрирован: 05.09.2015

я где-то видел видео с демонстрацией оптимизированной библиотеки - была демонстрация гудящего двигателя на столе и практически бесшумного.

щаз не помню, по каким словам это искать.

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

Пока не нахожу такого видео :(

Вот случайно наткнулся на резиновые прокладки http://www.ebay.com/itm/1x-NEMA-16-17-Stepper-motor-damper-vibration-mount-gasket-noise-resonance-/171907076110?hash=item280675d00e

Клапауций 001
Offline
Зарегистрирован: 05.09.2015

dmawzx пишет:
Вот случайно наткнулся на резиновые прокладки

тупиковый путь с этими прокладками - там токи оптимизировать нужно программным образом.

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

Согласен, такие прокладки врядли помогут, хотя на ютубе нашел пару роликов, покупатели довольны.

Через программу решить проблему похоже не судьба, использую драйвер a4988, а у него либо HIGH, либо LOW. ШИМ не поддерживает.Да и знаний у меня на программу не хватит, самоучка-любитель :)

Сейчас переделал свою конструкцию. Вместо полиэтилена поставил резинки, эффект поразил! Вибрации исчезли, работает также тихо, как в руках на весу. Из минусов: резинки обычно быстро приходят в негодность и мотор висит в воздухе на резинках, поэтому при нагрузке на вал будет смещение, придётся как-то оптимизировать конструкцию и учитывать этот момент при натяжении зубчатого ремня.

 

nevkon
Offline
Зарегистрирован: 20.01.2015

Дурью маетесь. На полном серьезе. Выйдите из резонансного режима и будет работать относительно тихо. Если вы делаете какой-либо станок/плоттер/принтер, то шума не избежать - точность важнее тишины.

При конструкции с резинками двигатель будет вращаться вокруг оси и вы не сможете получить позицию. Увеличение жесткости (добавление резинок) неизбежно вернет вибрацию.

Лучше подбирать скорость вращения для меньшей вибрации. Вибрация характерна всем шаговикам, не только nema17. Хотите тихо - берите сервы, насколько я слышал они лишены недостатка резонанса.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

dmawzx пишет:

Согласен, такие прокладки врядли помогут, хотя на ютубе нашел пару роликов, покупатели довольны.

Настройте ток, который выдает драйвер. Нестабильная работа может быть, как от избытка, так и от недостатка тока. Мотор греется?

В вашем драйвере на сигнальном пине вроде напряжение от 0 до 1 изменяется с вращением потенциометра. на Изидрайвере - 0-5 вольт. Почитайте даташит.

Недостаток напряжения тоже звуков добавляет.

 

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

С токами всё ок.

Вообще погрешность из-за резинок будет конечно, но для моей конструкции это не критично, супер нагрузок там не будет и миллиметр погрешности допустим.

Зачем я вообще этим занялся? Когда один мотор гудит ещё ничего, радио погромче и гуд. Но их будет минимум 10 штук и тут уже от гула сойти с ума не долго. Пока наверное остановлюсь на резинках и буду подбирать механику под самую тихую скорость мотора, когда вибраций минимум. Тут ещё такая штука, резинки вибрацию глушат, а вот зубчатый ремень эту вибрацию передаёт на колесо и на всю станину.... брррр.

Joiner
Offline
Зарегистрирован: 04.09.2014

А через такие втулочки крепить не пробовали?

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

Хочу попробовать, есть в гараже целая банка таких, ноги ещё не дошли :)

maksim
Offline
Зарегистрирован: 12.02.2012

Ваш драйвер поддерживает микрошаг, выводами М1,М2 и М3 ставите микрошаг 1/32 и вибрации исчезнут.

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

maksim, но ведь скорость падает, в 16 раз.

maksim
Offline
Зарегистрирован: 12.02.2012

​Естественно, только не в 16, а в 32 раза. А что мешает увеличить частоту импульсов?

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

Я не силён в программной части :)

Запускаю мотор так:

    delay(2); 
    digitalWrite(motor, HIGH);  
    delay(2);  
    digitalWrite(motor, LOW);

Т.е. каждые две милисекунды происходит шаг, если уменьшить до одной милисекунды, то мотор просто свистит, вал не вращается. Если поставлю 1/32, то скорость будет ни какая. Или как-то это можно ускорить?

maksim
Offline
Зарегистрирован: 12.02.2012

Можно попробовать так:

  for(int i = 0; i < 30000; i+=100)
  {
    tone(motor, i); 
    delay(10);  
  }
  delay(10000);

С циферками только поиграйтесь.

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

maksim, спасибо! Работает :)

Буду теперь разбираться как это грамотно использовать.

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

А как это с tone() считать количество совершенных мотором шагов?

Если 1000 герц в секунду, то если даю мотору работать 3 сек, то он совершил 3000 шагов?

maksim
Offline
Зарегистрирован: 12.02.2012

Попробуйте библиотеку AccelStepper, если устроит по скорости.

5 фев 2013 ... Этот вывод инвертирован, то есть когда на нем земля драйвер работает, когда +5 вольт драйвер отключен. Так же он подтянут ...
arduino.ru/forum/.../biblioteka-accelstepper
 
25 июл 2015 ... Скачиваю библиотеки AccelStepper и AFMotor, извлекаю в папку libraries. Далее запускаю любой пример из из этих библиотек.
arduino.ru/forum/.../pomogite-s-bibliotekoi-accelstepper
 
9 апр 2015 ... Сейчас использую для этого AccelStepper, который не понимает отрицательного значения ускорения. Приходится делать через ...
arduino.ru/.../otritsatelnoe-uskorenie-ili-problema-s-accelstepper
 
5 авг 2012 ... Задача: Используя библиотеку AccelStepper повернуть ротор моего ШД на 360 градусов за X шагов (в моем случае за 4-е шага), затем ...
arduino.ru/.../strannye-veshchi-s-bibliotekoi-accelstepper
 
2 сен 2015 ... Управляю щаговым двигателем через Step/Dir драйвер с помощью библиотеки AccelStepper с ускорением/торможением. Необходимо ...
arduino.ru/.../upravlenie-shagovym-dvigatelem-accelstepper
 
1 сен 2012 ... Используя библиотеку AccelStepper, ардуина поворачивает ротор моего ШД на 360 градусов за X шагов (в моем случае за 4-е шага), ...
arduino.ru/.../proshu-pomoch-so-menoi-napravleniya-na-accelstepper
 
18 фев 2013 ... Код на основе ProportionalControl из библиотеки AccelStepper. Кнопка 1 сохраняет положени. Кнопка 2 возвращает в сохранённое ...
arduino.ru/forum/.../biblioteka-accelstepper-0
 
23 сен 2014 ... Подскажите, реально ли с помощью AccelStepper в реальном времени управлять скоростью и количеством шагов (углом поворота оси), ...
arduino.ru/forum/programmirovanie/accelstepper
 
18 окт 2013 ... Ну всё попробовал. Помогите плз. Даубл, интерлэйтив, сингл - работают. разные режимы, библиотеки пробовал... не работает ...
arduino.ru/.../ne-mogu-nastroit-mikroshag-megashildafmotoraccelstepper
 
 

 

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

Я правильно понимаю, что AccelStepper во время работы остановить нельзя? Т.е. если мотор поехал, то тормоза для него нет?

Пробовал stepper.stop(); - не срабатывает.

vvadim
Offline
Зарегистрирован: 23.05.2012

если в программе пропишите остановку по нажатию кнопки - мотор и остановится при нажатии кнопки

stepper.stop();  работает.

только не забываем прописать stepper.run(); 

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

Работает без stepper.run();  а stepper.stop(); не срабатывает.

#include <AccelStepper.h>

byte but_start = 7;
byte but_stop = 10;

int pos = 3000;

#define STEPPER_DIR_PIN 8
#define STEPPER_STEP_PIN 9

AccelStepper stepper(AccelStepper::DRIVER, STEPPER_STEP_PIN, STEPPER_DIR_PIN);

void setup()
{   
    stepper.setMaxSpeed(1500.0);
    stepper.setAcceleration(10000.0);
    stepper.runToNewPosition(1000);
   
   pinMode(but_start, INPUT);
   pinMode(but_stop, INPUT);
}

void loop()
{   
  if(digitalRead(but_start) == HIGH)
  {  
    stepper.runToNewPosition(pos);    
    pos = pos + pos;   
    delay(100);
  }
  
  if(digitalRead(but_stop) == HIGH)
  {  
    stepper.stop();   
    delay(100);
  }
}
vvadim
Offline
Зарегистрирован: 23.05.2012

дык и не должно работать.

поиграйтесь с примерами и разберитесь с работой библиотеки.

а кнопки с дребезгом - нужно его побороть.

делей использовать нельзя.

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

Нереально. Хоть убейте, не могу я понять как с этим работать, мне проще написать свои пошаговые движения, чем разобраться в библиотеке. Как ни крутил, не работает у меня stepper.stop(); 

Если это просто, покажите, пожалуйста, какие-нибудь примеры с кнопкой пуск и стоп.

Joiner
Offline
Зарегистрирован: 04.09.2014

dmawzx пишет:

Нереально. Хоть убейте, не могу я понять как с этим работать, мне проще написать свои пошаговые движения, чем разобраться в библиотеке. Как ни крутил, не работает у меня stepper.stop(); 

Если это просто, покажите, пожалуйста, какие-нибудь примеры с кнопкой пуск и стоп.

А что Вы Вашими движками делаете? Какая задача для них стоит? Я крутил движки GRBL контроллером. Подчиняются изумительно, выполняют любую команду. Но там только 3 движка.

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

GRBL требует компьютер, мне важно чтобы работало без компа. 

У моего прибора будет два движка + proMini + пару кнопок. 
Одна кнопка должна запускать вращение моторов, другая должна их тормозить.
-------

Про stepper.stop(); в мануале всего одна строка описания и один пример из которого я нифига не понимаю :) В сети ничё не нашел.

Sets a new target position that causes the stepper to stop as quickly as possible, using the current speed and acceleration parameters.

Examples:
Quickstop.pde.
Клапауций 001
Offline
Зарегистрирован: 05.09.2015

dmawzx пишет:

Про stepper.stop(); в мануале всего одна строка описания и один пример из которого я нифига не понимаю

ну, попробуй этот пример, затем прикрути к этому примеру кнопку, что бы по условию логического состояния кнопки стоп срабатывал.

Joiner
Offline
Зарегистрирован: 04.09.2014

dmawzx пишет:

GRBL требует компьютер, мне важно чтобы работало без компа. 

У моего прибора будет два движка + proMini + пару кнопок. 
Одна кнопка должна запускать вращение моторов, другая должна их тормозить.
-------

Свое знакомство с шаговыми движками начал здесь http://ecnc.ru/

Там есть скетчи (управление с компьютера) и для униполярных, и для биполярных движков. Скетчи очень понятные. Можно самостоятельно переделать на управление и кнопками и пр. Почитай этот сайт...может поможет

nevkon
Offline
Зарегистрирован: 20.01.2015

Вам ведь сказали убрать delay() и заменить на анализ времени. У вас стоп срабатывает, но после того как двигатель уже остановился.

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

https://www.youtube.com/watch?v=gyZBxImQxf8

С AccelStepper так и не разобрался, пока мотор работает невозможно не только его остановить, но и даже не работают другие элементы как кнопки, светодиоды и д.р. Как буд-то сама библиотека работает на delay(). Сейчас склоняюсь к тому, чтобы написать свой код для управления мотором.

 

Joiner
Offline
Зарегистрирован: 04.09.2014

dmawzx пишет:

https://www.youtube.com/watch?v=gyZBxImQxf8

С AccelStepper так и не разобрался, пока мотор работает невозможно не только его остановить, но и даже не работают другие элементы как кнопки, светодиоды и д.р. Как буд-то сама библиотека работает на delay(). Сейчас склоняюсь к тому, чтобы написать свой код для управления мотором.

 

Интересное видео. Чем фанеру обрабатывали? Что за станочек. Самоделка или заводской? Понравилось как он пластик кроит.

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

Станок-самоделка, как говорят "из говна и палок" :) Фанеру тоже на нём кроил, очень удобно. Жалею что в детстве у меня не было такого станка, только ломаные ножовочные полотка и старые обрезки фанеры. В детстве руки чесались что-то творить, но нифига не было, сейчас есть всё и руки чешутся, а времени нет.

Joiner
Offline
Зарегистрирован: 04.09.2014

Дык покажите его нам в теме http://arduino.ru/forum/proekty/trudnyi-put-k-chpu

Я думаю, будет интересно его посмотреть тем кто свои станочки мастерит.

maksim
Offline
Зарегистрирован: 12.02.2012

dmawzx пишет:

С AccelStepper так и не разобрался, пока мотор работает невозможно не только его остановить, но и даже не работают другие элементы как кнопки, светодиоды и д.р. Как буд-то сама библиотека работает на delay(). Сейчас склоняюсь к тому, чтобы написать свой код для управления мотором.

Все от того, что вы либо вообще не увидили примеры билиотеки, либо взяли за основу пример Blocking (что означает слово blocking думаю догадались). Есть пример MultiStepper, вот на основе него и пишите свой код.

maksim
Offline
Зарегистрирован: 12.02.2012

Что бы остановить мотор достаточно присвоить текущее положение заданому

#include <AccelStepper.h>

AccelStepper stepper(2, 3, 4);

void setup()
{  
  stepper.setMaxSpeed(200.0);
  stepper.setAcceleration(100.0);
  stepper.moveTo(1000);
}

void loop()
{
  if (digitalRead(3) == HIGH)
    stepper.moveTo(stepper.currentPosition());
    
  stepper.run();
}

 

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

Я брал код из примера Quickstop.ino, как он работает не понял, пробовал там что-то менять, принципа работы вообще не понял :)

maksim, спасибо за пример, попробую его позже, сейчас пишу код с tone(), вполне что-то получается. Сейчас мне нужно написать хотябы простую программу, позже буду оптимизировать, если сам не разберусь с AccelStepper, то буду кого-нибудь просить помощь за вознаграждение :)

Joiner, фото и видео своего станка опубликую попозже.

 

Joiner
Offline
Зарегистрирован: 04.09.2014

dmawzx пишет:

Joiner, фото и видео своего станка опубликую попозже.

ОК.