Re: Управление шаговым двигателем
Я вставлю свои 5 копеек:
Не понятно зачем тут ШД, там хватит серво. При чем сервопривод можно сделать из обыкновенного электродвигателя и резистора.
Управление, когда не через библиотеку, осуществляю следующим образом, в цикле кручу двигатель например 100мс потом останавливаю и проверяю угол(аналоговый сигнал с резистора), потом кручу дальше и т.д. Чем дольше крутишь двигатель в каждой итерации цикла, тем быстрее происходит движение механизма, но тем менее точно устанавливается угол.
Так же на скорость двигателя влияет Вывод через ком порт(Serial). Если нет вывода крутится гораздо быстрее.
Так вот, есть вариант(а по закону Мура значит проскочишь однозначно) проскочить данный угол, если в цикле условие на четкое равенство. Нужно делать, больше-или-равно или меньше-или-равно.
Re: Управление шаговым двигателем
Во первых, тема о ШД а не о серво.
во вторых серво у меня управляет температурой,заслонку больше меньше
в третих мне нужен Шд пото му что он червячный(ходит вперед назад) чтобы дергать планку, а там именно это и надо делать..
Except, можеш плз показать на примере как сделать интервал?
Re: Управление шаговым двигателем
Цитата:
Сообщение от
Ant1Player
Except, можеш плз показать на примере как сделать интервал?
Код:
float j_val = analogRead(JOYSTIK_PIN);
if (j_val < 1000)
{
delay(5);
if(j_val == analogRead(JOYSTIK_PIN))
{
if ( ( 20 <= j_val) and (j_val <= 90) ) { Serial.print("J=off;"); delay(300); }
if ( (460 <= j_val) and (j_val <= 470) ) { Serial.print("J=center;"); delay(300); }
if ( (640 <= j_val) and (j_val <= 670) ) { Serial.print("J=mute;"); delay(300); }
if ( (730 <= j_val) and (j_val <= 750) ) { Serial.print("J=file;"); delay(300); }
if ( (785 <= j_val) and (j_val <= 839) ) { Serial.print("J=forward;"); delay(100); }
if ( (841 <= j_val) and (j_val <= 882) ) { Serial.print("J=backward;"); delay(100); }
if ( (886 <= j_val) and (j_val <= 891) ) { Serial.print("J=next;"); delay(100); }
if ( (921 <= j_val) and (j_val <= 940) ) { Serial.print("J=prev;"); delay(100); }
if ( (945 <= j_val) and (j_val <= 960) ) { Serial.print("J=sel;"); delay(300); }
if ( (970 <= j_val) and (j_val <= 980) ) { Serial.print("J=mode;"); delay(300); }
}
}
вот так я делал для джойстика, цифры это сопротивлене с кнопки.
Re: Управление шаговым двигателем
Re: Управление шаговым двигателем
Ant1Player, просто хотел тебе облегчить и удешевить задачу. Серво-самопал, как я описал выше, у меня переключает передачи на коробке. Мотора и послабее хватит чтоб "дергать планку". Но, хозяин-барин)
Вложений: 1
Re: Управление шаговым двигателем
Шаговый уже есть, я нехочу изобретать некакие рычаги и т.п. а шаговый как раз подходит под это
http://www.compcar.ru/forum/attachme...1&d=1272284448
Re: Управление шаговым двигателем
Помогите советом, уже не знаю на что думать, короче крутит ШД только в одну сторону незовисимо
Код:
mystepper.step(-30);
или
Но, если он крутит и рукой сделать нагрузку(давить в него в другую сторону) то он начинает работать в другую сторону, и теперь он крутит в другую независимо от mystepper.step
с чем это может быть связанно? думал питание, подключил к акомулятору, тож самое, вот щас подумываю насчет нерабочей L293D или может быть что то другое?
P.s. ШД на фото сверху
Re: Управление шаговым двигателем
Похоже неправильно подключил.
Обмотки прозвонил?
Какой драйвер используешь?
Re: Управление шаговым двигателем
L293D ,обмотка правильно, щас начал вспоминать вспомнил одну вещь, я нечайно 12В (вход питания ШД) подал на какойто контакт (другой) драйвера, результат: дырка в микроконтроллере, пока ждал новую атмегу забыл про это, видать еще повлияло на драйвер, щас перепаю отпишусь.
Re: Управление шаговым двигателем
все стало норм :) теперь осталось додуматься по какому принципу управление реализованно в стандартном блоке управление отопителем, этим ШД, ведь датчика положения нет, остается узнать:
1. а что если при выкл зажигании покрутить ручки ведь положение изменится а шд останеться в том положение: ну это можно в setup до самого начала выкручивать ШД. либо ставить концевик чтоб не делать лишних шагов
2. Что делать с перескоками, если резко повернуть ручку, ведь почти все положения проскочут и ШД встанет не в то положение, как быть тут?
код примерно такой:
Код:
if ((261 <= analogRead(pol) ) && ( analogRead(pol) <=265) && (x != 1) )
{
stepper.step(200);
x=1;
}
if ((284 <= analogRead(pol) ) && ( analogRead(pol) <=288) && (x != 2) )
{
stepper.step(200);
x=2;
}
и так 9 положений, может куда нибудь delay вставить?..