Нужна помощь с независимым регулированием скорости на нескольких ступенях

Я-НУБ. Я признаю, что очень плохо разбираюсь в программировании. Мне просто нужно, чтобы моя машина работала.

Я не могу обойтись без независимого управления скоростью 2-х шаговых двигателей, так как кажется, что управление скоростью зависит от регулировки длины задержки между отправкой импульсов на двигатели, однако скетчи содержат только один контур, и любая задержка в этом контуре имеет глобальный эффект.

Вот мой код на данный момент

// Мой скетч для управления шаговыми двигателями 1,8 градуса, работающими на плетеной машине Gizmoto V3
// Один горшок 10k speed-controls 2 плетеных степпера, 
// Second Pot speed-управляет 3-м шаговым двигателем, который приводит в действие приемный стержень

// Rev 1.0  March 10 2021

// Определяет номера контактов

const int braidStepPin = 3;
const int braidDirPin = 2;

const int capstanStepPin = 5;
const int capstanDirPin = 4;

//Определите переменные здесь

int braidDelay; // Управляет скоростью оплеточного привода в соответствии с функцией
int capstanDelay; // Управляет скоростью оплеточного привода в соответствии с функцией capstanSpeed
 
void setup() {
  // Sets the pins as Outputs
  pinMode(braidStepPin,OUTPUT);
  pinMode(braidDirPin,OUTPUT);
  pinMode(capstanStepPin,OUTPUT);
  pinMode(capstanDirPin,OUTPUT);

 
  digitalWrite(braidDirPin,HIGH); // Устанавливает направление двигателей оплетки
  digitalWrite(capstanDirPin,HIGH); // Устанавливает направление двигателей оплетки
}
void loop() {
  
  digitalWrite(braidStepPin, HIGH); // Посылает двигателям оплетки один импульс
  digitalWrite(braidStepPin, LOW);
  delayMicroseconds(braidSpeed);

  digitalWrite(capstanStepPin, HIGH); //Посылает двигателю шатуна один импульс
  digitalWrite(capstanStepPin, LOW);
  delayMicroseconds(capstanSpeed);
}
Функция считывания потенциометра плетения
int braidSpeed() {
  int braidDelay = analogRead(A0); // Считывает потенциометр
  int newBraidDelay = map(braidDelay, 0, 1020, 200, 700); // Преобразует считанные значения потенциометра от 0 до 1023 в заданные значения задержки
  return newBraidDelay; 
}
// Функция считывания потенциометра
int capstanSpeed() {
  int capstanDelay = analogRead(A1); // Считывает потенциометр
  int newCapstanDelay = map(capstanDelay, 0, 1020, 200, 700); // Преобразует считываемые значения потенциометра от 0 до 1023 в желаемые значения задержки
  return newCapstanDelay; 
}

, 👍1

Обсуждение

ваш код - " шаг кос ... пауза... степ-тон ... пауза ... вы видите в этом проблему? .... код должен быть " посмотрите на время ... при необходимости шаг косой ... если нужно, step capstan.... или это ... уменьшите счетчик кос ... если ноль, сбросьте счетчик оплетки и шаг оплетки ... счетчик декрементных цапф ... если ноль равен нулю, сбросьте счетчик капстана и шаговый капстан`, @jsotola

Спасибо, что нашли время предложить свою помощь. Как я уже сказал, я очень неопытен в кодировании. Я знаю о накопительных эффектах многократных пауз в цикле.. Знаете ли вы пример кода, который вы описали: использование счетчиков, декрементов и сбросов.. как только я увижу это, возможно, я смогу справиться с этим. Извините за беспокойство., @robertbaker

есть много примеров кода, включенных в Arduino IDE ... много больше кода в Интернете ... вот пример счетчика https://mechatrofice.com/arduino/arduino-counter-code-circuit-working .... посмотрите на строки, которые имеют дело с count_value ... удалите весь код, который имеет дело с кнопкой ... оставьте задержку только для проверки ... у вас будет increment count_value ... выведите значение count_value ... задержка 100, @jsotola

затем измените инкремент на декремент ... затем добавьте код, который устанавливает значение count_value, если count_value == 0 ... это все детские шаги ... медленно расширяйте свой код, @jsotola