Проблема с драйвером A4988
- Войдите на сайт для отправки комментариев
Ср, 14/04/2021 - 16:27
Есть готовый скетч для управления шаговым двигателем. Драйвер подключен через макетную плату к ардуино и двигателю. Проблема в следующем: драйвер, который был у меня изначально похоже неисправен, он крутит двигатель только в одну сторону; я купил такой же новый, поставил его на макетную плату вместо старого и он не крутит двигатель вообще, слышны только щелчки и писк. Я подстраивал потенциометр на драйвере, менял питание, но двигатель так и не крутится, только сильно греется. Исполнитель, написавший код, говорит что я что-то не правильно подключил, но я вроде бы все перепроверил.
#include <TimerOne.h> #include <StepDirDriver.h> bool Enable_147394081_1; bool Direction_147394081_1; int Steps_147394081_1; bool StartSteps_147394081_1; bool Continuous_147394081_1; byte divider_147394081_1; int balanceSteps_147394081_1; StepDirDriver myMotor_147394081_1( 11 , 12 , 13 ); bool _trgrt1_147394081_1= 0; bool _trgrt1I_147394081_1= 0; bool temp_147394081_1=0; bool rTrig_147394081_1; bool _bounseInputD4S = 0; bool _bounseInputD4O = 0; unsigned long _bounseInputD4P = 0UL; bool _bounseInputD2S = 0; bool _bounseInputD2O = 0; unsigned long _bounseInputD2P = 0UL; bool _bounseInputD3S = 0; bool _bounseInputD3O = 0; unsigned long _bounseInputD3P = 0UL; void setup() { pinMode(4, INPUT_PULLUP); pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); _bounseInputD4O = digitalRead(4); _bounseInputD3O = digitalRead(3); _bounseInputD2O = digitalRead(2); Timer1.initialize( 40 ); // инициализация таймера 1, период 200 мкс Timer1.attachInterrupt(timerInterrupt_147394081_1, 40 ); // задаем обработчик прерываний myMotor_147394081_1.setMode(0, 1 ); // шаговый режим, без фиксации при остановке // делитель частоты } void loop() { bool _bounceInputTmpD4 = (digitalRead (4)); if (_bounseInputD4S) { if (millis() >= (_bounseInputD4P + 40)) {_bounseInputD4O= _bounceInputTmpD4; _bounseInputD4S=0;} } else { if (_bounceInputTmpD4 != _bounseInputD4O ) {_bounseInputD4S=1; _bounseInputD4P = millis();} } bool _bounceInputTmpD2 = (digitalRead (2)); if (_bounseInputD2S) { if (millis() >= (_bounseInputD2P + 40)) {_bounseInputD2O= _bounceInputTmpD2; _bounseInputD2S=0;} } else { if (_bounceInputTmpD2 != _bounseInputD2O ) {_bounseInputD2S=1; _bounseInputD2P = millis();} } bool _bounceInputTmpD3 = (digitalRead (3)); if (_bounseInputD3S) { if (millis() >= (_bounseInputD3P + 40)) {_bounseInputD3O= _bounceInputTmpD3; _bounseInputD3S=0;} } else { if (_bounceInputTmpD3 != _bounseInputD3O ) {_bounseInputD3S=1; _bounseInputD3P = millis();} } //Плата:1 Enable_147394081_1 = 1; Direction_147394081_1 = !(_bounseInputD3O); Steps_147394081_1 = 0; StartSteps_147394081_1 = 0; Continuous_147394081_1 = ( (_bounseInputD4O) || (!(_bounseInputD3O)) || (!(_bounseInputD2O)) ); divider_147394081_1 = 255; if (Enable_147394081_1) { rTrig_147394081_1 = false; balanceSteps_147394081_1 = myMotor_147394081_1.readSteps(); //чтение количества оставшихся шагов 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;}; //импульс на начала вращения if (Continuous_147394081_1 ) { if (balanceSteps_147394081_1<100) starting_147394081_1(30000); } else { if ( temp_147394081_1 ) myMotor_147394081_1.step( 0 );//Если в прошлом цикле было ноль, остановить if (_trgrt1_147394081_1 )starting_147394081_1(Steps_147394081_1); // } temp_147394081_1 = Continuous_147394081_1; } else { if (!rTrig_147394081_1) { rTrig_147394081_1 = true; myMotor_147394081_1.step(0); } } } void timerInterrupt_147394081_1() { myMotor_147394081_1.control(); // управление двигателем } void starting_147394081_1(int _Steps) { myMotor_147394081_1.setDivider( divider_147394081_1 ); if ( Direction_147394081_1==0 ) _Steps = -1* _Steps ; myMotor_147394081_1.step( _Steps ); }
не разобрался как прикрепить изображение схемы подключения
Только на питание драйвера подаю 16В и ставлю конденсатор 100 мкФ
это надо иметь воспаление моска, чтобы придумать такие названия переменным))))
Вот такой еще есть вариант скетча)
это
воспаление моска
называется FLProg
это надо иметь воспаление моска, чтобы придумать такие названия переменным))))
Да это явно сгенерированный код каким-нибудь flprog'ом или tinkercad'ом....
igorduino - а сюда вы зачем написали? Это отдел платынх заказов.
Хотите заказать эту работу кому-то из местных вторично?
Страна должна знать своих героев. ;)
Он местный?
Или заказать повторно или найти того, кто поможет разобраться возмездно. Один человек написал что дело в драйверах, но я уже 2 шт купил новых и они ведут себя одинаково.
Могу написать заново. wrk.sadman@gmail.com
Делителями пощелкай. Наверняка просто стоят не в том состоянии, что выставлял автор скетча
Видимо всё-таки понимаете, что не у него одного "рыльце в пушку". ;))))
Решил спаять схему, а не собирать на макетке, и все заработало