Степмотор, задачка для пытливых

kmk
Offline
Зарегистрирован: 22.09.2015

Помогите со степмотором

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

Вот скэтч:

void loop()  {   

   if (digitalRead(btn1) == HIGH)
   {
    digitalWrite(11, HIGH);    
    stepper.step(10); 
    stepper.setSpeed(50);       
    digitalWrite(led1, HIGH);          
   }         else {digitalWrite(btn1, LOW);}   
   
   if (digitalRead(btn2) == HIGH)
   {
    stepper.step(-1);
    stepper.setSpeed(20);    
    digitalWrite(11, HIGH);    
    digitalWrite(led2, HIGH);              
   }         else {digitalWrite(btn2, LOW);}  
   
   if (digitalRead(btn3) == HIGH)
   {
    stepper.step(1);
    stepper.setSpeed(20);  
    digitalWrite(11, HIGH);    
    digitalWrite(led3, HIGH);           
   }         else {digitalWrite(btn3, LOW);} 

if (digitalRead(btn1) == LOW && digitalRead(btn2) == LOW && digitalRead(btn3) == LOW)
  
  { 
    digitalWrite(11, LOW);        
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
  }    
 }

проблема в 27 строке, если убираю эту строку мотор работает ровно.

Эта строка отключает мотор в драйвере DVR8825 motor NEMA14, обесточивает RTS+SLP

Отключаю для того чтобы мотор  не грелся.

Вопрос: почему сначала бросок назад, а потом идёт вперёд?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Схема включения секретна? Могу предположить, что мотор незашунтирован диодом, но это лишь предположение. Точнее спрашивайте у того, кто схему видел.

kmk
Offline
Зарегистрирован: 22.09.2015

схема простая, драйвер, на выходе 4 пина на две обмотки, мотор биполярник, на входе, два пина DIR  и STEP, подклюаются к ардуино NANO, Пин 8 и 9, а с 11 пина снимается напряжение и подаётся на пины RTS + SLP на драйвере, чтобы мотор крутился нужно чтобы на эти два пина подавалось низкое положительное напряжение. Когда на выходе НАНО  пин 11 - 0 вольт,  драйвер отключает мотор , когда на 11 пине 5 вольт, мотор включается. Питание для мотора подаётся отдельно на пин V , там 9 вольт. Вот и вся схема. Спасибо за участие.

 

vladimir62
vladimir62 аватар
Offline
Зарегистрирован: 10.11.2015

И скетч частично секретный? А зачем вы его (ШД) выключаете?

kmk
Offline
Зарегистрирован: 22.09.2015

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

Вот полный скэтч:

#include <Stepper.h>
int steps = 800;
Stepper stepper(steps, 8, 9);
int led1 = 5;
int led2 = 6;
int led3 = 7;
int btn1 = 2;
int btn2 = 3;
int btn3 = 4;
int drv = 11;

void setup() {
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode (led1, OUTPUT);
  pinMode (led2, OUTPUT);
  pinMode (led3, OUTPUT);
  pinMode(btn1, INPUT);
  pinMode(btn2, INPUT);
  pinMode(btn3, INPUT);
  digitalWrite(btn1, HIGH);
  digitalWrite(btn2, LOW);
  digitalWrite(btn3, LOW);
  pinMode(11, OUTPUT);
  digitalWrite(11, LOW);
}

void loop()  {   

   if (digitalRead(btn1) == HIGH)
   {
    digitalWrite(11, HIGH);    
    stepper.step(10); 
    stepper.setSpeed(50);       
    digitalWrite(led1, HIGH);          
   }         else {digitalWrite(btn1, LOW);}   
   
   if (digitalRead(btn2) == HIGH)
   {
    digitalWrite(11, HIGH);
    stepper.step(-1);
    stepper.setSpeed(20); 
    digitalWrite(led2, HIGH);              
   }         else {digitalWrite(btn2, LOW);}  
   
   if (digitalRead(btn3) == HIGH)
   {
    stepper.step(1);
    stepper.setSpeed(20);  
    digitalWrite(11, HIGH);    
    digitalWrite(led3, HIGH);           
   }         else {digitalWrite(btn3, LOW);} 

if (digitalRead(btn1) == LOW && digitalRead(btn2) == LOW && digitalRead(btn3) == LOW)
  
  { 
    digitalWrite(11, LOW);        
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
  }    
 }

Если выключаю 54 и 57 строку всё работает прекрасно, но мотор начинает греться.

vladimir62
vladimir62 аватар
Offline
Зарегистрирован: 10.11.2015

Рабочая температура ШД до 80 по Цельсию (это горячо), разумеется в удержании поменьше, так как ток удержания можно регулировать. При штатной работе никто и никогда не отключает ШД, потому что вы теряете отсчет (если вам он важен). На хорошем драйвере есть регулировка тока удержания, обычно перемычки на несколько дискретов.  

 

kmk
Offline
Зарегистрирован: 22.09.2015

да, так и есть, на драйвере резистор, он ограниивает ток удержания и за одно убивает мощность двигателя, вот тут и компромис. Возвращаясь к программе, почему идёт бросок назад, выявил точнее, это делает 57 строка, 54 непричём.

Спасибо за участие.

vladimir62
vladimir62 аватар
Offline
Зарегистрирован: 10.11.2015

На 11 пине - drv, что это? Скорее dir? Вы уже несколько раз упомянули о моменте и мощности двигателя, а вы считали моменты выбирая типоразмер ШД? Может перейти на NEMA 23  и не "париться"! 

vladimir62
vladimir62 аватар
Offline
Зарегистрирован: 10.11.2015

Нашел в тексте (комментарии пишите) это Enable. Включение ШД всегда сопровождается небольшим толчком, мотор занимает место у одного из полюсов, при нагрузке это сопровождается изредка звуком и рывком. 

kmk
Offline
Зарегистрирован: 22.09.2015

drv пин это 11 пин который включает и выключает RTS+SLP на драйвере, я пользуюсь номером пина , int drv можно убрать.
Тут толчок приличный  и при реверсе получается как бы программой искуственно созданный люфт. Не могу придумать локальный таймер - задержку на выключение 11 пина, перевода в 0 вольт.

vladimir62
vladimir62 аватар
Offline
Зарегистрирован: 10.11.2015

Толчки и моменты уже процентов на 90 механика а не Ардуино, а я понятия не имею, что у вас крутится, толкает и т.п.  у вас тоже сериал X-files стали показывать?

kmk
Offline
Зарегистрирован: 22.09.2015

. Когда убираю те две строки всё нормально, это не механика.  Я смотрю Kartina TV интернет ТВ, начали показывать, одгим словом ГОЛИВУД, не смотрю. 

vladimir62
vladimir62 аватар
Offline
Зарегистрирован: 10.11.2015

;) Я в смысле ваше устройство что делает? Мотор там крутит, а само устройство секрет? (X-file).

vladimir62
vladimir62 аватар
Offline
Зарегистрирован: 10.11.2015

Ладно загляну в библиотеку Stepper я ей не пользуюсь, тогда и с кодом станет ясно. btn это кнопки?

kmk
Offline
Зарегистрирован: 22.09.2015

устройство крутит конденсатор насторойки в антенне, всё очень просто.

Я разобрался в чём дело, нельзя запитывать RTS+SLP через выхода ардуино, все дёрганья идут от туда. Спасибо за участие.