Все ж надо проверить - рабочий ли вывод для ДИР и меняется ли там уровень. Тестером или светодиодом через пару килоом.
Добавлено спустя 1 минуту 10 секунд:
В даташите описан подстроечник для регулировки.
roboforum.ruТехнический форум по робототехнике. |
|
|
|
Реклама | ||||
|
|
|||
kabephe писал(а):Вал при щелчках действительно подёргивается, но провода подключал по паспортным данным двигателя и драйвера. Ни фазы ни +/- не перепутаны
kabephe писал(а): К тому же шаговик очень сильно греется. Мне кажется сильнее, чем должен.
Реклама | ||||
|
|
|||
телепаты в отпуске, что ты написал никто понятия не имеет.kabephe писал(а):Сократил количество степов в программе до 5. И оставил только один вызов к программе, т.е. двигатель должен был совершить 5 шагов и остановится
int Motor1EN = 7;
int Motor1dir = 9;
int Motor1step = 11;
void setup ()
{
pinMode(Motor1EN, OUTPUT);
pinMode(Motor1dir, OUTPUT);
pinMode(Motor1step, OUTPUT);
digitalWrite(Motor1EN, LOW);
digitalWrite(Motor1dir, LOW);
digitalWrite(Motor1step, HIGH);
}
void loop ()
{
stepMotor1(1, 5);
delay (10);
}
void stepMotor1(int dir, int step)
{
//Сначала включим драйвер
digitalWrite(Motor1EN, HIGH);
//потоми проверим - какое направление выбрано?
if (dir)
{
//если направление "1" - ставим единицу на выводе Motor1dir
digitalWrite(Motor1dir, HIGH);}
else
//иначе - ставим ноль на выводе Motor1dir
{ digitalWrite(Motor1dir, LOW);}
for (int i=0;i<step; i++)
{
delay(30);
//Поставили ноль на выводе Motor1step (начало импульса),
digitalWrite(Motor1step, LOW);
//Пауза (длительность импульса
delay(10);
//Поставили единицу на выводе Motor1step (конец импульса)
digitalWrite(Motor1step, HIGH);
}
delay(70); //Пауза чтобы успел шагнуть до выключения питания.
digitalWrite(Motor1EN, HIGH);
}
int Motor1EN = 7;
int Motor1dir = 9;
int Motor1step = 11;
void setup ()
{
pinMode(Motor1EN, OUTPUT);
pinMode(Motor1dir, OUTPUT);
pinMode(Motor1step, OUTPUT);
digitalWrite(Motor1EN, LOW);
digitalWrite(Motor1dir, LOW); //при смене на HIGH ничего не изменилось
digitalWrite(Motor1step, HIGH);
}
void loop ()
{
stepMotor1(1, 10); // при смене 1 на 0 ничего не изменилось, при смене 10 на 1 - вместо 10 шагов совершает по 1 до отключения питания.
delay (10);
}
void stepMotor1(int dir, int step)
{
digitalWrite(Motor1EN, HIGH); // при LOW не запускается
if (dir)
{
digitalWrite(Motor1dir, HIGH);} //при LOW никаких изменений
else
{ digitalWrite(Motor1dir, LOW);} // при HIGH никаких изменений
for (int i=0;i<step; i++)
{
delay(30);
digitalWrite(Motor1step, LOW);
delay(10); //при одинаковый уровнях Motor1step выше и ниже не запускается
digitalWrite(Motor1step, HIGH);
}
delay(70);
digitalWrite(Motor1EN, HIGH); //наличие этой строчки в программе ни на что не влияет
}
int Motor1EN = 7; //6 вывод колодки (en)
int Motor1dir = 13; //4 колодка (dir)
int Motor1step = 11; // 5 колодка (step)
void setup ()
{
pinMode(Motor1EN, OUTPUT);
pinMode(Motor1dir, OUTPUT);
pinMode(Motor1step, OUTPUT);
digitalWrite(Motor1EN, HIGH);
digitalWrite(Motor1dir, LOW); //при смене на HIGH ничего не изменилось А и не должно, ибо тут задаются НАЧАЛЬНЫЕ значения. Этих трех строк вообще может не быть. Просто хороший тон.
digitalWrite(Motor1step, LOW);
}
void loop ()
{
stepMotor1(1, 100); // Светодиод на 13 ноге должен светиться секунд 8. (и светится - проверил)
delay (1000);
stepMotor1(0, 100); // // Светодиод на 13 ноге НЕ должен светиться секунд 8.
delay (1000);
}
void stepMotor1(int dir, int step)
{
digitalWrite(Motor1EN, HIGH); // при LOW не запускается
if (dir)
{
digitalWrite(Motor1dir, HIGH);} //при LOW никаких изменений
else
{ digitalWrite(Motor1dir, LOW);} // при HIGH никаких изменений
for (int i=0;i<step; i++)
{
delay(50);//задержка в 1/20 секунды
digitalWrite(Motor1step, LOW);
delay(50); //Это - не уровни, это задержка в одну двадцатую секунды.
//То есть двигатель делает 10 шагов в секунду.
digitalWrite(Motor1step, HIGH);
}
delay(100);
digitalWrite(Motor1EN, HIGH); //наличие этой строчки в программе ни на что не влияет Она, строчка эта, выключает драйвер после использования
}
RootAdmin писал(а):Да, если светодиод моргает - алгоритм нормально завершается. Только что проверил на реальном железе.
int Motor1EN = 7;
int Motor1dir = 5;
int Motor1step = 6;
int ENUP = 1;
void setup ()
{
pinMode(Motor1EN, OUTPUT);
pinMode(Motor1dir, OUTPUT);
pinMode(Motor1step, OUTPUT);
digitalWrite(Motor1EN, LOW);
digitalWrite(Motor1dir, LOW);
digitalWrite(Motor1step, HIGH);
}
void loop ()
{
if (ENUP == 1) {stepMotor1(1, 300);}
ENUP = 0;
}
void stepMotor1(int dir, int step)
{
//Сначала включим драйвер
digitalWrite(Motor1EN, HIGH);
//потоми проверим - какое направление выбрано?
if (dir)
{
//если направление "1" - ставим единицу на выводе Motor1dir
digitalWrite(Motor1dir, HIGH);}
else
//иначе - ставим ноль на выводе Motor1dir
{ digitalWrite(Motor1dir, LOW);}
for (int i=0;i<step; i++)
{
delay(30);
//Поставили ноль на выводе Motor1step (начало импульса),
digitalWrite(Motor1step, LOW);
//Пауза (длительность импульса
delay(1);
//Поставили единицу на выводе Motor1step (конец импульса)
digitalWrite(Motor1step, HIGH);
}
delay(70); //Пауза чтобы успел шагнуть до выключения питания.
digitalWrite(Motor1EN, LOW);
}
Вернуться в Arduino и другие Xduino
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8