Кто-нибудь шаговыми моторами управлял аппаратным драйверочком easydriver ver4 ?
На странице автора что-то мутон с кодом.
Ссылка на adfuit заставляет терять время на кривой код.
Понятно, что народ свои пишет подпрограммки.

должен сразу предупредить AccelSteper.h полное ..ауно. от ADfruit https://github.com/adafruit/AccelStepper
даже с одним мотором сампроизвольно меняет направление
схама типовая

я для своих целей написал свои подпрограммки
02 | void step1(boolean dir1, int steps1, int msec1){ |
03 | digitalWrite(dir_Pin1,dir1); |
04 | for ( int i=0;i<steps1;i++){ |
05 | digitalWrite(stepPin1,HIGH); delayMicroseconds(msec1); |
06 | digitalWrite(stepPin1, LOW); delayMicroseconds(msec1); |
10 | void step2(boolean dir2, int steps2, int msec2){ |
11 | digitalWrite(dir_Pin2,dir2); |
12 | for ( int i=0;i<steps2;i++){ |
13 | digitalWrite(stepPin2,HIGH); delayMicroseconds(msec2); |
14 | digitalWrite(stepPin2, LOW); delayMicroseconds(msec2); |
18 | void scan(boolean scan1){ |
19 | digitalWrite(lasepin,HIGH); |
20 | step2( true , steplaser,speelaser); |
21 | digitalWrite(lasepin, LOW); |
22 | step2( false ,steplaser,retulaser); |
23 | digitalWrite(lasepin,HIGH); |
24 | step1( true , steptable,speetable); |
но это чисто одно локальное решение
Я например 2 дня убил на кривые https://github.com/adafruit/AccelStepper
Вопрос:
подпрограмками никто не поделиться на
одна нога направление
вторая нога шаги
для шаговых двигателей
по типовой схеме вы получаете 1/8 микрошага по умолчанию сразу без заморочек
чипы греются конечно но не больше 50 градусов крутя моторы типоразмера NEMA17
на странице автора код попроще на ура
но вот его производные это что-то зя дрянь написана.
ХМ. тема скорей ближе к программированию
xm от spurkfun что-то универсальное нашел
01
//////////////////////////////////////////////////////////////////
02
//©2011 bildr
03
//Released under the MIT License - Please reuse change and share
04
//Using the easy stepper with your arduino
05
//use rotate and/or rotateDeg to controll stepper motor
06
//speed is any number from .01 -> 1 with 1 being fastest -
07
//Slower Speed == Stronger movement
08
/////////////////////////////////////////////////////////////////
09
//#define DIR_PIN 2
10
//#define STEP_PIN 3
11
//#define DIR_PIN 4
12
//#define STEP_PIN 5
13
#define DIR_PIN 6
14
#define STEP_PIN 7
15
void
setup
() {
16
pinMode(DIR_PIN, OUTPUT);
17
pinMode(STEP_PIN, OUTPUT);
18
}
19
//------------------------------------
20
void
rotate(
int
steps,
float
speed){
21
//rotate a specific number of microsteps (8 microsteps per step) - (negitive for reverse movement)
22
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
23
int
dir = (steps > 0)? HIGH:LOW;
24
steps = abs(steps);
25
26
digitalWrite(DIR_PIN,dir);
27
28
float
usDelay = (1/speed) * 70;
29
30
for
(
int
i=0; i < steps; i++){
31
digitalWrite(STEP_PIN, HIGH);
32
delayMicroseconds(usDelay);
33
digitalWrite(STEP_PIN, LOW);
34
delayMicroseconds(usDelay);
35
}
36
}
37
//------------------------------------
38
void
rotateDeg(
float
deg,
float
speed){
39
//rotate a specific number of degrees (negitive for reverse movement)
40
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
41
int
dir = (deg > 0)? HIGH:LOW;
42
digitalWrite(DIR_PIN,dir);
43
44
int
steps = abs(deg)*(1/0.225);
45
float
usDelay = (1/speed) * 70;
46
47
for
(
int
i=0; i < steps; i++){
48
digitalWrite(STEP_PIN, HIGH);
49
delayMicroseconds(usDelay);
50
digitalWrite(STEP_PIN, LOW);
51
delayMicroseconds(usDelay);
52
}
53
}
54
//------------------------------------
55
56
void
loop
(){
57
//rotate a specific number of degrees
58
rotateDeg(360, 1);
59
delay(1000);
60
rotateDeg(-360, .1);
//reverse
61
delay(1000);
62
63
//rotate a specific number of microsteps (8 microsteps per step)
64
//a 200 step stepper would take 1600 micro steps for one full revolution
65
rotate(1600, .5);
66
delay(1000);
67
rotate(-1600, .25);
//reverse
68
delay(1000);
69
}
70
//====================================
такой код поуниверсалней будет
пары обьявлений смотрю поудобнее через пару подпрограммок проскальзывают
и в логике код покороче получается
надо будет на нескольких моторах поднапряч шаговыми импульсами ардуинку
Еще кто что видел поподпрограмместее? :)
должен сразу предупредить AccelSteper.h полное ..ауно.
А меня очень даже устраивает
я рад за тебя
смотри чтоб не два мотора и не пришлось менять направления регулярно
а какой исходник?
http://www.airspayce.com/mikem/arduino/AccelStepper/
что вы хотите сказать?
обратитесь и выскажите автору правду матку в лицо по поводу оставшегося косяка который якобы устранен
1.24 Fixed a problem introduced in 1.23: with runToPosition, which did never returned
именно в его терминологии toPosition от бапды выбирает направление до сих пор
короче
рабочий код управления моторами сколько угодно пока ноги свободные по 2 штуки есть
ПодПрограмма 8 строчек с комментариями
"просто жутко большой и не читаемый и спрятанный от анализа код"
Особенность НЕ снимает ток в состоянии покоя то есть Удерживает руку в позиции
1 нога направление
1 нога шаг
для того чтобы расслаблять 3-ую ногу SLEEP надо опускать в LOW
мне лень две строчки дописывать и потом комментировать
1
// art100 20140426 write stepper motor 1 table for A3987 easydriver 2 pins-----------------
2
void
step1(boolean dir1,
int
steps1,
int
msec1){
3
digitalWrite(dir_Pin1,dir1);
// direction
4
for
(
int
i=0;i<steps1;i++){
5
digitalWrite(stepPin1,HIGH); delayMicroseconds(msec1);
6
digitalWrite(stepPin1, LOW); delayMicroseconds(msec1);
7
}
8
}
//--------------------------------------------------------------
применяется в составе
пара моторов
пара лазерков
джойстик аналоговый загрублен до крайних положений 0 7 (спасибо за быстрый регистровый сдвиг >> от медленная Dimax функция map(,,,,) не нужна в данном случае)
001
//art100 20140426 for joystick/usb - arduinouno - A3967 easydriver ver 4.4 2pins - two Stepper Motor(1.8 gradus=1 step)
002
// <a href="http://www.aliexpress.com/item/Dual-axis-XY-Joystick-Module-for-Arduino-Free-Shipping/620290295.html" rel="nofollow">http://www.aliexpress.com/item/Dual-axis-XY-Joystick-Module-for-Arduino-Free-Shipping/620290295.html</a>
003
// <a href="http://www.aliexpress.com/item/5pcs-4-lead-Nema17-Stepper-Motor-42-motor-Nema-17-motor-42BYGH-1-7A-17HS4401-motor/1500927219.html" rel="nofollow">http://www.aliexpress.com/item/5pcs-4-lead-Nema17-Stepper-Motor-42-motor-Nema-17-motor-42BYGH-1-7A-17HS4401-motor/1500927219.html</a>
004
// <a href="http://www.aliexpress.com/item/5pcs-lot-EasyDriver-Stepper-Motor-Driver-V44-A3967-Free-Shipping/1470167262.html" rel="nofollow">http://www.aliexpress.com/item/5pcs-lot-EasyDriver-Stepper-Motor-Driver-V44-A3967-Free-Shipping/1470167262.html</a>
005
//
006
// pins---------------------------------------
007
// joystick --------------------------
008
int
joypinx = A0;
//joystick pin
009
int
joypiny = A1;
//joystick pin
010
int
joypinf = 10;
//joystick pin
011
// lasers leds ----------------
012
int
led3 = 3;
//laser red work
013
// stepper motors ------------
014
int
dir_Pin1 = 4;
// table
015
int
stepPin1 = 5;
//
016
int
dir_Pin2 = 6;
// laser
017
int
stepPin2 = 7;
//
018
int
stepxcor =10;
// for correction >0<
019
int
stepycor =10;
// for correction >0<
020
// constants for scan-------------------------------------
021
int
steptable =400;
// 3200/8 gear 160/18=8,88 3200 steps full return
022
int
speetable =100;
//very speed follow
023
int
steplaser =1000;
// gear 5.22 2000 steps full return
024
int
speelaser =20000;
//very slow to work
025
int
retulaser =100;
//very speed return
026
// constants for joystick -------------------------------------------
027
int
sp1table =1000;
//slow
028
int
sp2table = 100;
//speed
029
int
sp1laser =1000;
//slow
030
int
sp2laser = 100;
//speed
031
int
joyx = 0;
//joystick
032
int
joyy = 0;
//joystick
033
int
joyf = 0;
//joystick
034
// usb------------------------------
035
int
commandusb = 0;
//
036
//---------------------------
037
void
setup
() {
038
pinMode(joypinx, INPUT);
//joystick X
039
pinMode(joypiny, INPUT);
//joystick Y
040
pinMode(joypinf, INPUT_PULLUP);
//joystick fire pin
041
042
pinMode(led3,OUTPUT);
//laser
043
// pinMode(led8, OUTPUT);//on shield
044
// pinMode(led9, OUTPUT);//on shield
045
// pinMode(but5,INPUT_PULLUP);//joystickfire
046
047
digitalWrite(led3, HIGH);
//laser to work befor start
048
// digitalWrite(led8, HIGH); //laser to work befor start
049
// digitalWrite(led9, HIGH); //laser to work befor start
050
051
pinMode(dir_Pin1, OUTPUT);
//table
052
pinMode(stepPin1, OUTPUT);
//table
053
pinMode(dir_Pin2, OUTPUT);
//laser
054
pinMode(stepPin2, OUTPUT);
//table
055
056
Serial
.begin(9600);
057
}
058
// stepper motor 1 table for A3987 easydriver 2 pins------------------------------------
059
void
step1(boolean dir1,
int
steps1,
int
msec1){
060
digitalWrite(dir_Pin1,dir1);
// direction
061
for
(
int
i=0;i<steps1;i++){
062
digitalWrite(stepPin1,HIGH); delayMicroseconds(msec1);
063
digitalWrite(stepPin1, LOW); delayMicroseconds(msec1);
064
}
065
}
066
// stepper motor 2 laser for A3987 easydriver 2 pins------------------------------------
067
void
step2(boolean dir2,
int
steps2,
int
msec2){
068
digitalWrite(dir_Pin2,dir2);
// direction
069
for
(
int
i=0;i<steps2;i++){
070
digitalWrite(stepPin2,HIGH); delayMicroseconds(msec2);
071
digitalWrite(stepPin2, LOW); delayMicroseconds(msec2);
072
}
073
}
074
075
//========================================================================
076
void
loop
(){
077
078
// joystick ----------------------------------------------------------
079
joyx = analogRead(joypinx)>>7;
// shift 7 0.1.2.3.4.5.6.7 sanks for speed registry shift Dimax
080
joyy = analogRead(joypiny)>>7;
// shift 7 0.1.2.3.4.5.6.7 sanks for speed registry shift Dimax
081
// Serial.print('X');Serial.print(joyx);Serial.print(';'); Serial.print('Y');Serial.print(joyy);Serial.println(';'); //test
082
if
(joyx==0){step1(
false
,stepxcor,sp1table);}
//speed
083
if
(joyx==7){step1(
true
,stepxcor,sp1table);}
//speed
084
if
(joyy==0){step2(
false
,stepycor,sp2laser);}
//speed
085
if
(joyy==7){step2(
true
,stepycor,sp1laser);}
//speed !!! sp1laser !!! slow down
086
// laser and led --------------------------------------------------------
087
if
(digitalRead(joypinf)==LOW) { digitalWrite(led3, LOW); }
// laser to work
088
else
{ digitalWrite(led3,HIGH); }
// laser to work
089
// if(digitalRead(joypinf)==LOW) { digitalWrite(led9, LOW); } // led control for test
090
// else { digitalWrite(led9,HIGH); } // led control for test
091
// joystick ----------------------------------------------------------
092
093
// usb ----------------------------------------------------------------
094
if
(
Serial
.available() > 0) {
095
commandusb =
Serial
.read();
096
if
(commandusb==76 ) {digitalWrite(led3, HIGH);}
//digitalWrite(led9, HIGH);} // Laser on L
097
if
(commandusb==108) {digitalWrite(led3, LOW);}
//digitalWrite(led9, LOW);} // laser off l
098
if
(commandusb==47 ) {step2(
true
, stepxcor,sp2table);}
// table /
099
if
(commandusb==42 ) {step2(
false
,stepxcor,sp2table);}
// table *
100
if
(commandusb==45 ) {step1(
true
, stepycor,sp2laser);}
// laser down+
101
if
(commandusb==43 ) {step1(
false
,stepycor,sp2laser);}
// laser up -
102
//Serial.print("commanda usb received: "); Serial.println(commandusb);
103
}
104
// usb ----------------------------------------------------------------
105
106
//....
107
108
}
109
110
//========================================================================
111
// for L298 4 pins--------------------------
112
//// for (o=0; o<stepsmotor1; o++) { // 360 gradus table
113
// for (m=0; m<step1Laser/8; m++) { // 200step/8=25step 25step*1.8gradus/step = 45 gradus scanning low
114
// digitalWrite(led3, HIGH); //laser on and down
115
// //myStepper2.step(+1);
116
// step2(true, steptable,speetable);
117
//// delay(100); //for computer tormoz 0,01 sek
118
// delay(500); //for computer tormoz 0,01 sek
119
//// delay(1000); //for computer tormoz 1 sek
120
// }
121
// //return on start
122
// for (m=0; m<step1Laser/8; m++) { // 200step/8=25step 25step*1.8gradus/step = 45 gradus return
123
// digitalWrite(led3, LOW);
124
// //myStepper2.step(-1); // laser up
125
// //myStepper1.step(+1); // table 45 gradus
126
// step2(false,steptable,speetable);
127
// step1(true, steptable,speetable);
128
// }
129
// delay(1000); //for computer tormoz 1 5 sek
130
131
//------------------------------------------
132
//DEC Char D Ch D Ch D Ch
133
//0 null 32 sp 64 @ 96 `
134
//1 33 ! 65 A 97 a
135
//2 34 " 66 B 98 b
136
//3 35 # 67 C 99 c
137
//4 36 $ 68 D 100 d
138
//5 37 % 69 E 101 e
139
//6 38 & 70 F 102 f
140
//7 39 ' 71 G 103 g
141
//8 40 ( 72 H 104 h
142
//9 tab 41 ) 73 I 105 i
143
//10 line 42 * 74 J 106 j
144
//11 43 + 75 K 107 k
145
//12 44 , 76 L 108 l
146
//13 retur 45 - 77 M 109 m
147
//14 46 . 78 N 110 n
148
//15 47 / 79 O 111 o
149
//16 48 0 80 P 112 p
150
//17 49 1 81 Q 113 q
151
//18 50 2 82 R 114 r
152
//19 51 3 83 S 115 s
153
//20 52 4 84 T 116 t
154
//21 53 5 85 U 117 u
155
//22 54 6 86 V 118 v
156
//23 55 7 87 W 119 w
157
//24 56 8 88 X 120 x
158
//25 57 9 89 Y 121 y
159
//26 58 : 90 Z 122 z
160
//27 59 ; 91 [ 123 {
161
//28 60 < 92 \ 124 |
162
//29 61 = 93 ] 125 }
163
//30 62 > 94 ^ 126 ~
164
//31 63 ? 95 _ 127
165
//----------------------------------------
от некой ADFruit AccelStepper .ауно оно и в африке .ауно
автор самой платки вменяемее код показывает