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: Управление шаговым двигателем