-
Re: Управление шаговым двигателем
Все, спасибо всем. наконецто я добился чего хотел :) выкладываю скеч, может кому пригодиться
PHP код:
#include <Stepper.h>
#define STEPS 360
Stepper stepper(STEPS, 2, 3, 4, 5);
int pol = 5;
int x = 0 ;
void setup()
{
stepper.setSpeed(30);
// Serial.begin(9600);
stepper.step(-1000); // место этого возможно будет концевик, что бы не делать лишнии шаги
}
void loop()
{
digitalWrite(2, 0);
digitalWrite(3, 0);
digitalWrite(4, 0);
digitalWrite(5, 0);
// int sensorValue = analogRead(5);
// Serial.println(sensorValue, DEC);
//******************
//******************
// ПОЛОЖЕНИЕ 1
//******************
//******************
if ((261 <= analogRead(pol) ) && ( analogRead(pol) <=265) && (x != 1) )
{
if (x == 9)
{
stepper.step(-1000);
x=1;
}
if (x == 8)
{
stepper.step(-875);
x=1;
}
if (x == 7)
{
stepper.step(-750);
x=1;
}
if (x == 6)
{
stepper.step(-625);
x=1;
}
if (x == 5)
{
stepper.step(-500);
x=1;
}
if (x == 4)
{
stepper.step(-375);
x=1;
}
if (x == 3)
{
stepper.step(-250);
x=1;
}
if (x == 2)
{
stepper.step(-125);
x=1;
}
}
//******************
//******************
// ПОЛОЖЕНИЕ 2
//******************
//******************
if ((284 <= analogRead(pol) ) && ( analogRead(pol) <=288) && (x != 2) )
{
if (x == 0)
{
stepper.step(125);
x=2;
}
if (x == 1)
{
stepper.step(125);
x=2;
}
if (x == 9)
{
stepper.step(-875);
x=2;
}
if (x == 8)
{
stepper.step(-750);
x=2;
}
if (x == 7)
{
stepper.step(-625);
x=2;
}
if (x == 6)
{
stepper.step(-500);
x=2;
}
if (x == 5)
{
stepper.step(-375);
x=2;
}
if (x == 4)
{
stepper.step(-250);
x=2;
}
if (x == 3)
{
stepper.step(-125);
x=2;
}
}
//******************
//******************
// ПОЛОЖЕНИЕ 3
//******************
//******************
if ((313 <= analogRead(pol) ) && ( analogRead(pol) <=316) && (x != 3) )
{
if (x == 0)
{
stepper.step( 250 );
x=3 ;
}
if (x == 1)
{
stepper.step(250);
x=3;
}
if (x == 2)
{
stepper.step(125);
x=3;
}
if (x == 9)
{
stepper.step(-750);
x=3;
}
if (x == 8)
{
stepper.step(-625);
x=3;
}
if (x == 7)
{
stepper.step(-500);
x=3;
}
if (x == 6)
{
stepper.step(-375);
x=3;
}
if (x == 5)
{
stepper.step(-250);
x=3;
}
if (x == 4)
{
stepper.step(-125);
x=3;
}
}
//******************
//******************
// ПОЛОЖЕНИЕ 4
//******************
//******************
if ((348 <= analogRead(pol) ) && ( analogRead(pol) <=351) && (x != 4) )
{
if (x == 0)
{
stepper.step( 375 );
x= 4 ;
}
if (x == 1)
{
stepper.step(375);
x=4;
}
if (x == 2)
{
stepper.step(250);
x=4;
}
if (x == 3)
{
stepper.step(125);
x=4;
}
if (x == 9)
{
stepper.step(-625);
x=4;
}
if (x == 8)
{
stepper.step(-500);
x=4;
}
if (x == 7)
{
stepper.step(-375);
x=4;
}
if (x == 6)
{
stepper.step(-250);
x=4;
}
if (x == 5)
{
stepper.step(-125);
x=4;
}
}
//******************
//******************
// ПОЛОЖЕНИЕ 5
//******************
//******************
if ((389 <= analogRead(pol) ) && ( analogRead(pol) <=395) && (x != 5) )
{
if (x == 0)
{
stepper.step( 500 );
x=5 ;
}
if (x == 1)
{
stepper.step(500);
x=5;
}
if (x == 2)
{
stepper.step(375);
x=5;
}
if (x == 3)
{
stepper.step(250);
x=5;
}
if (x == 4)
{
stepper.step(125);
x=5;
}
if (x == 9)
{
stepper.step(-500);
x=5;
}
if (x == 8)
{
stepper.step(-375);
x=5;
}
if (x == 7)
{
stepper.step(-250);
x=5;
}
if (x == 6)
{
stepper.step(-125);
x=5;
}
}
//******************
//******************
// ПОЛОЖЕНИЕ 6
//******************
//******************
if ((445 <= analogRead(pol) ) && ( analogRead(pol) <=451) && (x != 6) )
{
if (x == 0)
{
stepper.step( 625 );
x= 6;
}
if (x == 1)
{
stepper.step(625);
x=6;
}
if (x == 2)
{
stepper.step(500);
x=6;
}
if (x == 3)
{
stepper.step(375);
x=6;
}
if (x == 4)
{
stepper.step(250);
x=6;
}
if (x == 5)
{
stepper.step(125);
x=6;
}
if (x == 9)
{
stepper.step(-375);
x=6;
}
if (x == 8)
{
stepper.step(-250);
x=6;
}
if (x == 7)
{
stepper.step(-125);
x=6;
}
}
//******************
//******************
// ПОЛОЖЕНИЕ 7
//******************
//******************
if ((518 <= analogRead(pol) ) && ( analogRead(pol) <=525) && (x != 7) )
{
if (x == 0)
{
stepper.step( 750 );
x= 7 ;
}
if (x == 1)
{
stepper.step(750);
x=7;
}
if (x == 2)
{
stepper.step(625);
x=7;
}
if (x == 3)
{
stepper.step(500);
x=7;
}
if (x == 4)
{
stepper.step(375);
x=7;
}
if (x == 5)
{
stepper.step(250);
x=7;
}
if (x == 6)
{
stepper.step(125);
x=7;
}
if (x == 9)
{
stepper.step(-250);
x=7;
}
if (x == 8)
{
stepper.step(-125);
x=7;
}
}
//******************
//******************
// ПОЛОЖЕНИЕ 8
//******************
//******************
if ((620 <= analogRead(pol) ) && ( analogRead(pol) <=630) && (x != 8) )
{
if (x == 0)
{
stepper.step( 875 );
x= 8 ;
}
if (x == 1)
{
stepper.step(875);
x=8;
}
if (x == 2)
{
stepper.step(750);
x=8;
}
if (x == 3)
{
stepper.step(625);
x=8;
}
if (x == 4)
{
stepper.step(500);
x=8;
}
if (x == 5)
{
stepper.step(375);
x=8;
}
if (x == 6)
{
stepper.step(250);
x=8;
}
if (x == 7)
{
stepper.step(125);
x=8;
}
if (x == 9)
{
stepper.step(-125);
x=8;
}
}
//******************
//******************
// ПОЛОЖЕНИЕ 9
//******************
//******************
if ((770 <= analogRead(pol) ) && ( analogRead(pol) <=780) && (x != 9) )
{
if (x == 0)
{
stepper.step(1000);
x=9; }
if (x == 1)
{
stepper.step(1000);
x=9;
}
if (x == 2)
{
stepper.step(875);
x=9;
}
if (x == 3)
{
stepper.step(750);
x=9;
}
if (x == 4)
{
stepper.step(625);
x=9;
}
if (x == 5)
{
stepper.step(500);
x=9;
}
if (x == 6)
{
stepper.step(375);
x=9;
}
if (x == 7)
{
stepper.step(250);
x=9;
}
if (x == 8)
{
stepper.step(125);
x=9;
}
}
}
-
Re: Управление шаговым двигателем
Всем привет!
Некоторое время назад приобрел себе эту чудо железку, ардуино.
Разумеется поморгал диодами, по нажимал на кнопки и тп. И захотел я повелевать шаговым двигателем! Купил драйвер l293d, шаговый мотор достал из фары ауди, вот такой (PDF). Выяснил, что в моторе на один оборот 24 шага, и 13 оборотов от края до края. Методом тыка написал скейтч, добавил в него стабилизацию кнопок, тк использовал обычные тактовые и они косячили. В итоге с помощью двух кнопок могу вертеть на 24 шага в одну сторону, или столько же в другую. Но хочется сделать это немного умнее, что бы нельзя было крутить мотор когда он упрется в крайнее положение, то есть надо как то считать пройденные шаги. Также на две не задействованные кнопки хочу повесить вращение в крайние положения, но что бы без лишних шагов.
Честно сказать не думал, что мне так тяжко дастся программирование, не могу реализовать свои мысли в коде:(
Поэтому прошу помощи у Вас.
Код:
#include <Stepper.h>
#define motorSteps 24
#define motorPin1 8
#define motorPin2 9
#define motorPin3 10
#define motorPin4 11
int switchPin1 = 2;
int switchPin2 = 3;
int switchPin3 = 4;
int switchPin4 = 5;
boolean lastButton1 = LOW;
boolean currentButton1 = LOW;
boolean lastButton2 = LOW;
boolean currentButton2 = LOW;
Stepper myStepper(motorSteps, motorPin1,motorPin2,motorPin3,motorPin4);
void setup()
{
pinMode(switchPin1, INPUT);
pinMode(switchPin2, INPUT);
pinMode(switchPin3, INPUT);
pinMode(switchPin3, INPUT);
myStepper.setSpeed(200);
}
boolean debounce1(boolean last)
{
boolean current1 = digitalRead(switchPin1);
if (last != current1)
{
delay(5);
current1 = digitalRead(switchPin1);
}
return current1;
}
boolean debounce2(boolean last)
{
boolean current2 = digitalRead(switchPin2);
if (last != current2)
{
delay(5);
current2 = digitalRead(switchPin2);
}
return current2;
}
void loop()
{
currentButton1 = debounce1(lastButton1);
if (lastButton1 == LOW && currentButton1 == HIGH)
{
myStepper.step(-24);
}
lastButton1 = currentButton1;
currentButton2 = debounce2(lastButton2);
if (lastButton2 == LOW && currentButton2 == HIGH)
{
myStepper.step(24);
}
lastButton2 = currentButton2;
}
l293d сильно греется при подключении ШД, если его отключить от микросхемы нагрев пропадает, так и должно быть? Питание для мотора берется с БП от телефона 5в. Мотор при работе тоже довольно сильно греется, несмотря на 5в при положенных ему 12в.
-
Re: Управление шаговым двигателем
На какой ток рассчитан ШД?
-
Re: Управление шаговым двигателем
Цитата:
Сообщение от
Chip
На какой ток рассчитан ШД?
Из даташита: Drive Current: 450 [mA] MAX.
-
Re: Управление шаговым двигателем
Греться при таком токе будет .
-
Re: Управление шаговым двигателем
Цитата:
Сообщение от
Chip
Греться при таком токе будет .
Просто греется даже когда двигатель не работает.
А по поводу подсчета шагов не подскажите? Как это реализовать?
-
Re: Управление шаговым двигателем
Для умной реализации есть варианты
1-использовать концевики
2-постоянно сохранять свое положение
В крайних положениях есть концевики?
-
Re: Управление шаговым двигателем
Цитата:
Сообщение от
Chip
Для умной реализации есть варианты
1-использовать концевики
2-постоянно сохранять свое положение
В крайних положениях есть концевики?
Нет. Концевиков нету. Но я думаю, что можно при каждой активации двигателя считать сколько и куда он сделал шагов, и что бы нельзя было уйти меньше 0 и 24*13(полностью выкрученный шток). Так реально?
Что значит сохранять положение?
-
Re: Управление шаговым двигателем
можно, но только до первого выключения, а потом сохранять его положение в EEPROM
-
Re: Управление шаговым двигателем
-
Re: Управление шаговым двигателем
Вот что получилось
PHP код:
#include <Stepper.h>
#include <EEPROM.h>
#define motorSteps 24
#define motorPin1 8
#define motorPin2 9
#define motorPin3 10
#define motorPin4 11
int switchPin1 = 2;
int switchPin2 = 4;
int switchPin3 = 3;
int switchPin4 = 5;
int ledPin = 13;
int x;
int z;
int y;
int addr = 0;
boolean lastButton1 = LOW;
boolean currentButton1 = LOW;
boolean lastButton2 = LOW;
boolean currentButton2 = LOW;
boolean lastButton3 = LOW;
boolean currentButton3 = LOW;
boolean lastButton4 = LOW;
boolean currentButton4 = LOW;
Stepper myStepper(motorSteps, motorPin1,motorPin2,motorPin3,motorPin4);
void setup()
{
pinMode(switchPin1, INPUT);
pinMode(switchPin2, INPUT);
pinMode(switchPin3, INPUT);
pinMode(switchPin3, INPUT);
myStepper.setSpeed(200);
}
boolean debounce1(boolean last)
{
boolean current1 = digitalRead(switchPin1);
if (last != current1)
{
delay(5);
current1 = digitalRead(switchPin1);
}
return current1;
}
boolean debounce2(boolean last)
{
boolean current2 = digitalRead(switchPin2);
if (last != current2)
{
delay(5);
current2 = digitalRead(switchPin2);
}
return current2;
}
boolean debounce3(boolean last)
{
boolean current3 = digitalRead(switchPin3);
if (last != current3)
{
delay(5);
current3 = digitalRead(switchPin3);
}
return current3;
}
boolean debounce4(boolean last)
{
boolean current4 = digitalRead(switchPin4);
if (last != current4)
{
delay(5);
current4 = digitalRead(switchPin4);
}
return current4;
}
void loop()
{
{
//EEPROM.write(0, 0);
}
{
x=EEPROM.read(0);
}
currentButton1 = debounce1(lastButton1);
if (lastButton1 == LOW && currentButton1 == HIGH && x < 13)
{
myStepper.step(-24);
x = x + 1;
}
lastButton1 = currentButton1;
currentButton2 = debounce2(lastButton2);
if (lastButton2 == LOW && currentButton2 == HIGH && x > 0)
{
myStepper.step(24);
x = x - 1;
}
lastButton2 = currentButton2;
z = 13 - x;
currentButton3 = debounce3(lastButton3);
if (lastButton3 == LOW && currentButton3 == HIGH)
{
myStepper.step(-z*24);
x = x + z;
}
lastButton3 = currentButton3;
y = x;
currentButton4 = debounce4(lastButton4);
if (lastButton4 == LOW && currentButton4 == HIGH)
{
myStepper.step(y*24);
x = y - x;
}
lastButton4 = currentButton4;
x = min(x, 13);
x = max(x, 0);
{
EEPROM.write(0, x);
delay(100);
}
}
-
Re: Управление шаговым двигателем
Китайцы предлагают контроллер шагового двигателя
http://item.taobao.com/item.htm?id=13237717196
http://img01.taobaocdn.com/imgextra/...pg_310x310.jpg
Если вот такой мотор на 12В прицепить к этому контроллеру будет ли работать?
http://item.taobao.com/item.htm?id=12640015828
http://img01.taobaocdn.com/imgextra/...pg_310x310.jpg
Сможет ли этот мотор ~4 кило сдвинуть (все таки винтовая пара - сила) и с какой силой тока примерно?
-
Re: Управление шаговым двигателем
-
Re: Управление шаговым двигателем
Chip
А что действительно такие шаговые двигатели не прожорливые?
Вроде пишут при 12В всего 0,4А или это номинальный ток
-
Re: Управление шаговым двигателем
Это я думаю указан ток без нагрузки, по китайски не понимаю :)
-
Re: Управление шаговым двигателем
Насчет контроллера может этот лучше взять (у первого что я давал на фотке видно кондер не стоит, а место под него есть, как-то стремно)
http://img03.taobaocdn.com/imgextra/...!204411104.jpg
http://item.taobao.com/item.htm?id=12466272238
Только почему-то у него входов для ардуино меньше...
Вообще-то надо два контроллера, надеюсь выходов на ардуино хватит
У меня мега, там вроде ШИМ выводы нужны
-
Вложений: 1
Re: Управление шаговым двигателем
Одно и тоже, все построено на микросхеме L298N 4 управляющих входа 4 полумостовых выхода
-
Re: Управление шаговым двигателем
-
Re: Управление шаговым двигателем
Еще вопрос возник, для начального позиционирования привода в каком-то нулевом положении, что датчик нужно цеплять к движку?
Ну то есть за ноль что принять?
-
Re: Управление шаговым двигателем
Загнать в крайнее положение и от этого положения вести отсчет
-
Re: Управление шаговым двигателем
Это Мысль!!!
А край определить когда движок сам встанет или по силе тока и отсутствии движения?
-
Re: Управление шаговым двигателем
посчитай сколько шагов от края до края и при первичном включении прокрути шаговик на это количество шагов, в итоге при любом первичном положении окажешься в начальной позиции
-
Re: Управление шаговым двигателем
Цитата:
Сообщение от
Chip
посчитай сколько шагов от края до края и при первичном включении прокрути шаговик на это количество шагов, в итоге при любом первичном положении окажешься в начальной позиции
Я недавно собирал станок CNC, в шаговых есть понятие "пропуск шага";в ЧПУ используются моторы с шагом в 1.8 градуса тоесть один оборот 200шаг. Так вот на станках корректировка проводится уходом головы в ноль.Тоесть после завершения работы шпиндель уходит в ноль по осям X и Y где стоят концевики и сбрасывают в ноль программу. У шаговиков есть приимущество перед сервами это при небольших размерах большая мощьность руками не остановить, но так же есть и минус это постоянное потребление напруги для удержания мотора в шаге.
-
Re: Управление шаговым двигателем
С концевмками понятно, что очень просто отследить
Пытаемся что то придумать без концевиков
-
Re: Управление шаговым двигателем
На предыдущей странице посмотрите. Там без концевика, программа запоминает положение двигателя. У меня тоже шаговый с резьбой, и я также по одному шагу посчитал сколько в обороте шагов, а затем сколько оборотов от края до края (24 шага в обороте и 13 оборотов).
-
Re: Управление шаговым двигателем
А если случайно кто нибудь покрутит или холостой шаг мотор сделает?
-
Re: Управление шаговым двигателем
В моем случае повернуть его не реально (шток не крутится, меняется только его вылет), а чтобы шаги не пропускал я подобрал скорость, очень много тыкал его, ни разу не пропустил.
-
Re: Управление шаговым двигателем
Я решил дополнительно датчики холла поставить как концевики и среднее положение.
Еще один вопрос:
http://img03.taobaocdn.com/imgextra/...!204411104.jpg
Этот контроллер униполярным ШД управлять может?
Мне что средние выводы ШД просто не использовать?
Тогда что я потеряю? Я надеюсь не реверс
-
Вложений: 1
Re: Управление шаговым двигателем
Униполярный шаговый двигатель
Можно обойтись без драйвера достаточно будет четырех ключей
Цитата:
Униполярный шаговый двигатель имеет пять или шесть проводов. В соответствии со схемой привода запускается разом только одна четвертая обмоток. Линии Vcc обычно соединяются с положительным питающим напряжением двигателя. Концы обмоток 1a, 1b, 2a, и 2b соединяются при коммутации через транзисторы только с землей, в связи, с чем их управляющая электроника довольно простая.
-
Re: Управление шаговым двигателем
Мне хотелось бы использовать готовое решение, в данном случае контроллер.
Что мне в таком случае делать с центральными жилами? не соединять (не использовать) или спарить с чем-то?
-
Re: Управление шаговым двигателем
-
Re: Управление шаговым двигателем
Я извиняюсь, но мне заказывать контроллер нужно...
Им можно будет без проблем управлять униполярным ШД?
-
Re: Управление шаговым двигателем
Лично я не подскажу , так как с униполярными ШД дел не имел
-
Re: Управление шаговым двигателем
Ясно.
Тогда другой вопрос
Как я понимаю, чтобы ШД держал положение на него контроллер всегда подает напряжение.
А можно ли при достижения нужного положения снимать напряжение, тогда конечно ШД потеряет положение, ну а все таки можно ли снять удержание?
-
Re: Управление шаговым двигателем
Если у тебя линейный подшипник, например ось ШД подключена к резьбе то можешь снимать и боятся потерять положение
-
Re: Управление шаговым двигателем
А как подключить ШД:
http://www.dcdq.com/Upload/UploadFil...1582139145.gif
Центральные провода я стало быть не подключаю...
А крайние все равно как?
Какой к А1, А2 и В1, В2 контроллера ШД?
-
Re: Управление шаговым двигателем
Разобрался. Оказалось ШД имел нестандартную схему шагания. Перекинул фазы и инициировал ШД по другому (пины в другом порядке).
-
Re: Управление шаговым двигателем
А нормально ли то, что ШД с номинальным напряжением 2,4В, даже при 5В не развивает особого усилия и скорости, а при 10-14В выходит на приемлемый режим?
-
Re: Управление шаговым двигателем
-
Re: Управление шаговым двигателем