Привет AlexGyver и всем форумчанам!
Столкнулся с проблемой торможения привода на KEEP_SPEED.
Мотор крутится по кнопке. Ускорение и торможение одинаковые только если привод не успел разогнаться до SetSpeed().
Если держать кнопку, разогнать до SetSpeed и продолжать крутить мотор секунд 10-20, то торможение будет в несколько раз выше ускорения (привод ощутимо быстрее останавливается).
Нашел закономерность, что чем дольше крутить мотор, тем резче будет торможение.
В чем я накосячил?)) подскажите что читать и куда копать?
P.S. в коде много лишнего, смотреть сразу case 2.
Столкнулся с проблемой торможения привода на KEEP_SPEED.
Мотор крутится по кнопке. Ускорение и торможение одинаковые только если привод не успел разогнаться до SetSpeed().
Если держать кнопку, разогнать до SetSpeed и продолжать крутить мотор секунд 10-20, то торможение будет в несколько раз выше ускорения (привод ощутимо быстрее останавливается).
Нашел закономерность, что чем дольше крутить мотор, тем резче будет торможение.
В чем я накосячил?)) подскажите что читать и куда копать?
P.S. в коде много лишнего, смотреть сразу case 2.
C++:
#define SMOOTH_ALGORITHM
#include <GyverStepper.h>
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
GStepper<STEPPER2WIRE> stepper(1000, 14, 15);
int flag = 0;
int c = 0;
int s = 0;
//char a;
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(169, 254, 170, 10);
unsigned int localPort = 6630;
EthernetUDP Udp;
char receivingBuffer[100]; // приемный буфер Udp-пакета
float floatVar; //float градуса
void setup() {
Ethernet.begin(mac, ip);
Udp.begin(localPort);
Serial.begin(9600);
stepper.setAcceleration(50);
pinMode (4, INPUT_PULLUP); //концевик
pinMode (5, INPUT_PULLUP); //кнопка homing
pinMode (16, OUTPUT); //лампочка homing
pinMode (6, INPUT_PULLUP); //кнопка по часовой
pinMode (7, INPUT_PULLUP); //кнопка против часовой
pinMode (8, INPUT_PULLUP); //вкл/выкл
pinMode (9, OUTPUT); //лампочка ethernet
digitalWrite(16, LOW);
}
bool btnState = false;
int i1 = 0;
int i2 = 0;
int i3 = 0;
int h = 0;
void loop() {
c = 0;
if (!digitalRead(8)) { //ЕСЛИ КНОПКА ETHERNET НЕ НАЖАТА
digitalWrite(9, LOW);
for (int i = 0; i <= 10 && !digitalRead(5); i++) { //ХОУМИНГ
//Serial.println(i);
i1++;
}
if (i1 >= 10) c = 1;
i1 = 0;
for (int i = 0; i <= 10 && !digitalRead(6); i++) { //ПО ЧАСОВОЙ
//Serial.println(i);
i2++;
}
if (i2 >= 10) c = 2;
i2 = 0;
for (int i = 0; i <= 10 && !digitalRead(7); i++) { //ПРОТИВ ЧАСОВОЙ
//Serial.println(i);
i3++;
}
if (i3 >= 10) c = 3;
i3 = 0;
}
else digitalWrite(9, HIGH);
//c = 1;
//Serial.println(c);
switch (c) {
case 1:
//int h = 0;
Serial.println(222);
break;
case 2:
Serial.println("HANDTURN CW");
digitalWrite(16, LOW);
stepper.setRunMode(KEEP_SPEED);
//stepper.reset();
stepper.setSpeed(100, SMOOTH);
stepper.setAcceleration(50);
while (stepper.getSpeed() != 0 || !digitalRead(6)) {
if (!digitalRead(6) && !btnState) {
btnState = true;
}
// кнопка отпущена
if (digitalRead(6) && btnState) {
btnState = false;
stepper.stop();
}
stepper.tick();
if (!stepper.getState()) {
c = 0;
break;
}
}
case 3:
Serial.println(333);
break;
}
}