Есть готовый скетч для управления шаговым двигателем. Драйвер подключен через макетную плату к ардуино и двигателю. Проблема в следующем: драйвер, который был у меня изначально похоже неисправен, он крутит двигатель только в одну сторону; я купил такой же новый, поставил его на макетную плату вместо старого и он не крутит двигатель вообще, слышны только щелчки и писк. Я подстраивал потенциометр на драйвере, менял питание, но двигатель так и не крутится, только сильно греется. Исполнитель, написавший код, говорит что я что-то не правильно подключил, но я вроде бы все перепроверил.
003 | #include <StepDirDriver.h> |
005 | bool Enable_147394081_1; |
006 | bool Direction_147394081_1; |
007 | int Steps_147394081_1; |
008 | bool StartSteps_147394081_1; |
009 | bool Continuous_147394081_1; |
010 | byte divider_147394081_1; |
011 | int balanceSteps_147394081_1; |
012 | StepDirDriver myMotor_147394081_1( 11 , 12 , 13 ); |
013 | bool _trgrt1_147394081_1= 0; |
014 | bool _trgrt1I_147394081_1= 0; |
015 | bool temp_147394081_1=0; |
016 | bool rTrig_147394081_1; |
017 | bool _bounseInputD4S = 0; |
018 | bool _bounseInputD4O = 0; |
019 | unsigned long _bounseInputD4P = 0UL; |
020 | bool _bounseInputD2S = 0; |
021 | bool _bounseInputD2O = 0; |
022 | unsigned long _bounseInputD2P = 0UL; |
023 | bool _bounseInputD3S = 0; |
024 | bool _bounseInputD3O = 0; |
025 | unsigned long _bounseInputD3P = 0UL; |
029 | pinMode(4, INPUT_PULLUP); |
030 | pinMode(2, INPUT_PULLUP); |
031 | pinMode(3, INPUT_PULLUP); |
034 | _bounseInputD4O = digitalRead(4); |
035 | _bounseInputD3O = digitalRead(3); |
036 | _bounseInputD2O = digitalRead(2); |
037 | Timer1.initialize( 40 ); |
038 | Timer1.attachInterrupt(timerInterrupt_147394081_1, 40 ); |
039 | myMotor_147394081_1.setMode(0, 1 ); |
047 | bool _bounceInputTmpD4 = (digitalRead (4)); |
051 | if (millis() >= (_bounseInputD4P + 40)) |
052 | {_bounseInputD4O= _bounceInputTmpD4; _bounseInputD4S=0;} |
056 | if (_bounceInputTmpD4 != _bounseInputD4O ) |
057 | {_bounseInputD4S=1; _bounseInputD4P = millis();} |
059 | bool _bounceInputTmpD2 = (digitalRead (2)); |
063 | if (millis() >= (_bounseInputD2P + 40)) |
064 | {_bounseInputD2O= _bounceInputTmpD2; _bounseInputD2S=0;} |
068 | if (_bounceInputTmpD2 != _bounseInputD2O ) |
069 | {_bounseInputD2S=1; _bounseInputD2P = millis();} |
071 | bool _bounceInputTmpD3 = (digitalRead (3)); |
075 | if (millis() >= (_bounseInputD3P + 40)) |
076 | {_bounseInputD3O= _bounceInputTmpD3; _bounseInputD3S=0;} |
080 | if (_bounceInputTmpD3 != _bounseInputD3O ) |
081 | {_bounseInputD3S=1; _bounseInputD3P = millis();} |
088 | Enable_147394081_1 = 1; |
089 | Direction_147394081_1 = !(_bounseInputD3O); |
090 | Steps_147394081_1 = 0; |
091 | StartSteps_147394081_1 = 0; |
092 | Continuous_147394081_1 = ( (_bounseInputD4O) || (!(_bounseInputD3O)) || (!(_bounseInputD2O)) ); |
093 | divider_147394081_1 = 255; |
094 | if (Enable_147394081_1) { |
095 | rTrig_147394081_1 = false ; |
096 | balanceSteps_147394081_1 = myMotor_147394081_1.readSteps(); |
097 | if ( StartSteps_147394081_1 ) { if (_trgrt1I_147394081_1) { _trgrt1_147394081_1 = 0;} else {_trgrt1_147394081_1 = 1; _trgrt1I_147394081_1 = 1;} } else {_trgrt1_147394081_1 = 0; _trgrt1I_147394081_1 = 0;}; |
099 | if (Continuous_147394081_1 ) |
101 | if (balanceSteps_147394081_1<100) starting_147394081_1(30000); |
105 | if ( temp_147394081_1 ) myMotor_147394081_1.step( 0 ); |
106 | if (_trgrt1_147394081_1 )starting_147394081_1(Steps_147394081_1); |
108 | temp_147394081_1 = Continuous_147394081_1; |
110 | if (!rTrig_147394081_1) { |
111 | rTrig_147394081_1 = true ; |
112 | myMotor_147394081_1.step(0); |
123 | void timerInterrupt_147394081_1() |
125 | myMotor_147394081_1.control(); |
127 | void starting_147394081_1( int _Steps) |
129 | myMotor_147394081_1.setDivider( divider_147394081_1 ); |
130 | if ( Direction_147394081_1==0 ) _Steps = -1* _Steps ; |
131 | myMotor_147394081_1.step( _Steps ); |
не разобрался как прикрепить изображение схемы подключения

Только на питание драйвера подаю 16В и ставлю конденсатор 100 мкФ
это надо иметь воспаление моска, чтобы придумать такие названия переменным))))
Вот такой еще есть вариант скетча)
01
bool
_bounseInputD2S = 0;
02
bool
_bounseInputD2O = 0;
03
unsigned
long
_bounseInputD2P = 0UL;
04
bool
_bounseInputD4S = 0;
05
bool
_bounseInputD4O = 0;
06
unsigned
long
_bounseInputD4P = 0UL;
07
bool
_bounseInputD3S = 0;
08
bool
_bounseInputD3O = 0;
09
unsigned
long
_bounseInputD3P = 0UL;
10
bool
_gen1I = 0;
11
bool
_gen1O = 0;
12
unsigned
long
_gen1P = 0UL;
13
14
void
setup
()
15
{
16
pinMode(4, INPUT_PULLUP);
//Датчик препятствие
17
pinMode(2, INPUT_PULLUP);
//кнопка право
18
pinMode(3, INPUT_PULLUP);
//кнопка лево
19
pinMode(11, OUTPUT);
//на STEP драйвера шагового двигателя
20
digitalWrite(11, 0);
21
pinMode(12, OUTPUT);
// на DIR драйвера шагового двигателя
22
digitalWrite(12, 0);
23
24
25
_bounseInputD4O = digitalRead(4);
// переменая входов пинов
26
_bounseInputD3O = digitalRead(3);
// переменая входов пинов
27
_bounseInputD2O = digitalRead(2);
// переменая входов пинов
28
29
}
30
void
loop
()
31
{
32
33
34
bool
_bounceInputTmpD2 = (digitalRead (2));
35
36
if
(_bounseInputD2S)
37
{
38
if
(millis() >= (_bounseInputD2P + 40))
39
{_bounseInputD2O= _bounceInputTmpD2; _bounseInputD2S=0;}
40
}
41
else
42
{
43
if
(_bounceInputTmpD2 != _bounseInputD2O )
44
{_bounseInputD2S=1; _bounseInputD2P = millis();}
45
}
46
bool
_bounceInputTmpD4 = (digitalRead (4));
47
48
if
(_bounseInputD4S)
49
{
50
if
(millis() >= (_bounseInputD4P + 40))
51
{_bounseInputD4O= _bounceInputTmpD4; _bounseInputD4S=0;}
52
}
53
else
54
{
55
if
(_bounceInputTmpD4 != _bounseInputD4O )
56
{_bounseInputD4S=1; _bounseInputD4P = millis();}
57
}
58
bool
_bounceInputTmpD3 = (digitalRead (3));
59
60
if
(_bounseInputD3S)
61
{
62
if
(millis() >= (_bounseInputD3P + 40))
63
{_bounseInputD3O= _bounceInputTmpD3; _bounseInputD3S=0;}
64
}
65
else
66
{
67
if
(_bounceInputTmpD3 != _bounseInputD3O )
68
{_bounseInputD3S=1; _bounseInputD3P = millis();}
69
}
70
71
72
73
74
//Плата:1
75
digitalWrite(12, !(_bounseInputD3O));
// 200 это время паузы между импульсами
76
if
(( (_bounseInputD4O) || (!(_bounseInputD3O)) || (!(_bounseInputD2O)) )) {
if
(! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = micros(); } }
else
{ _gen1I = 0 ; _gen1O= 0; }
if
(_gen1I ) {
if
(_gen1O) {
if
( _isTimerMicros( _gen1P , 200 )) { _gen1P = millis(); _gen1O = 0; } }
else
{
if
( _isTimer( _gen1P , 10 )) { _gen1P = micros(); _gen1O = 1; } } }
77
digitalWrite(11, _gen1O);
78
79
80
81
82
83
// внизу таймер
84
}
85
86
bool
_isTimer(unsigned
long
startTime, unsigned
long
period )
87
{
88
unsigned
long
currentTime;
89
currentTime = millis();
90
if
(currentTime>= startTime) {
return
(currentTime>=(startTime + period));}
else
{
return
(currentTime >=(4294967295-startTime+period));}
91
}
92
bool
_isTimerMicros(unsigned
long
startTime, unsigned
long
period )
93
{
94
unsigned
long
currentTime;
95
currentTime = micros();
96
if
(currentTime>= startTime) {
return
(currentTime>=(startTime + period));}
else
{
return
(currentTime >=(4294967295-startTime+period));}
97
}
это
воспаление моска
называется FLProg
это надо иметь воспаление моска, чтобы придумать такие названия переменным))))
Да это явно сгенерированный код каким-нибудь flprog'ом или tinkercad'ом....
igorduino - а сюда вы зачем написали? Это отдел платынх заказов.
Хотите заказать эту работу кому-то из местных вторично?
Страна должна знать своих героев. ;)
Он местный?
Или заказать повторно или найти того, кто поможет разобраться возмездно. Один человек написал что дело в драйверах, но я уже 2 шт купил новых и они ведут себя одинаково.
Могу написать заново. wrk.sadman@gmail.com
Делителями пощелкай. Наверняка просто стоят не в том состоянии, что выставлял автор скетча
Видимо всё-таки понимаете, что не у него одного "рыльце в пушку". ;))))
Решил спаять схему, а не собирать на макетке, и все заработало