Нужна помощь с независимым регулированием скорости на нескольких ступенях
Я-НУБ. Я признаю, что очень плохо разбираюсь в программировании. Мне просто нужно, чтобы моя машина работала.
Я не могу обойтись без независимого управления скоростью 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;
}
@robertbaker, 👍1
Обсуждение0
Смотрите также:
- Шаговый двигатель не работает с платой A4988
- Шаговый двигатель работает медленно при чтении с датчика MPU 6050
- AccelStepper.h — Как быстро увеличить скорость двигателя NEMA 17?
- Как медленно изменить направление шагового двигателя с помощью AccelStepper?
- CD rom stepper нагревается
- Перегорают ли мои шаговые двигатели? В чем здесь проблема?
- 28 Шаговый двигатель BYJ работает быстрее при использовании задержки() и немного медленнее при использовании миллис(). Почему?
- Почему мой шаговый двигатель работает, когда я открываю последовательный порт?
ваш код - " шаг кос ... пауза... степ-тон ... пауза ... вы видите в этом проблему? .... код должен быть " посмотрите на время ... при необходимости шаг косой ... если нужно, 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