как запустить 2 различных сервопривода (непрерывное вращение и обычный сервопривод) параллельно, а не один за другим?
Мне нужно управлять 2 сервоприводами параллельно, тогда как один имеет непрерывное вращение, а другой-регулярное управление позиционированием (углом) на arduino IDE. Я пытался, но это работает один за другим, а не параллельно. Как я могу это сделать, пожалуйста, предложите. Спасибо.
@Emlinux, 👍2
Обсуждение3 ответа
Ангел двух сервомоторов должен быть одинаковым ? Если да, попробуйте сделать это при 180 градусах. Servos : Вы можете подключить сигнальный вывод сервопривода ech к определенному ШИМ-выводу Arduino, например к контакту номер " 9 " в этом примере Это просто для проверки но вы можете изменить это так как хотите
Я надеюсь, что это сработает у вас, удачи
#include <Servo.h>
Servo myservo;
int PWMpin = 9; // измените это значение для вашей конфигурации схемы
int a = 0;
void setup() {
myservo.attach(9);
myservo.write(0); // установите сервопривод в среднюю точку
}
void loop() {
for (int i = 0; i < 180; i++) {
myservo.write(i);
delay(10);
If (i == 180) {
analogWrite(PWMpin, a);
}
}
}
Пожалуйста, не размещайте код в виде изображения., @Python Schlange
Спасибо @Hamid 'Smith' Салехи за ваш ответ. ну, сервоприводы, которые я использую, не одинаковы, я имею в виду, что один из них имеет непрерывное вращение, а другой-регулярный, поэтому я хочу, чтобы он был похож на сервоприводы непрерывного вращения, которые должны вращаться с помощью обычного сервопривода, который должен работать параллельно между 0~180°. и они подключены к контактам 9 и 10 соответственно., @Emlinux
Единственное отличие сервомоторов-это ограничения на их вращение? Оба они работают по стандартной ШИМ ?, @Hamid 'Smith' Salehi
Я предлагаю один ответ
https://wokwi.com/arduino/projects/297646292038844936
Здесь мы не используем функцию задержки. Мы используем millis()
Основываясь на вашем фактическом применении, вы можете управлять индивидуальным сервоприводом соответственно.
Вот моделирование Arduino: https://wokwi.com/arduino/projects/297646292038844936
/* Sweep
by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // создание объекта servo для управления сервомотором
Servo myservo2; // создать сервообъект для управления сервомотором
// двенадцать сервообъектов могут быть созданы на большинстве плат
unsigned long previousMillis = 0; // будет храниться последний раз, когда светодиод
const long interval = 15; // интервал мигания (миллисекунды)
int pos = 0; // переменная для хранения положения сервопривода
int pos2 = 0; // переменная для хранения положения сервопривода
void setup() {
myservo.attach(9); // присоединяет сервопривод на выводе 9 к сервообъекту
myservo2.attach(10); // присоединяет сервопривод на выводе 9 к сервообъекту
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
myservo.write(pos); // скажите серво перейти в позицию в переменной 'pos'
pos = pos + 1;
if (pos > 180) {
pos = 0;
} // ждет 15 мс, пока сервопривод достигнет нужного положения
myservo2.write(pos2); // скажите серво перейти в позицию в переменной 'pos'
pos2 = pos2 + 1;
if (pos2 > 90) {
pos2 = 0;
}
}
}
Как я знаю, нет никакого способа для одного arduino или любого другого микроконтроллера управлять контактами в одно и то же время, и это из-за природы микроконтроллеров. Когда вы должны командовать 2 выходами Микроконтроллер будет действовать следующим образом :
Команда 1 .... К контакту № 9 Команда 2 .... К контакту № 10
и, например, если ваш микроконтроллер, например arduino или другие, выполняет каждую команду за один полный такт, а ваша тактовая частота будет составлять 16 МГц, то период времени каждого цикла составляет 62,5 нано-секунды.
Таким образом, ваш микроконтроллер будет выполнять вашу команду в первом такте и выполнять вторую команду в следующем такте, Другими словами, команда 2 будет делать 62,5 нано-секунды после команды one (если каждая из этих команд занимает всего один такт), но в обычных платах arduino 16 МГц требуется гораздо больше времени для выполнения таких команд, и это был просто пример, чтобы понять ее принцип, и по этой причине я предлагаю вам подключить оба сервомотора к одному выходному ШИМ-контакту, если вы используете два стандартных сервомотора.; Но главная проблема заключается в различных угловых ограничениях ваших сервомоторов, и невозможно управлять ими, когда вы хотите, чтобы один из них вращался на 360 градусов. а другой должен вращаться на 180 градусов. . Если вы подключаете эти сигнальные контакты к одному и тому же выходу, у вас есть два варианта с двумя issuse. Во-первых, если вы прикажете выходному штифту повернуть на 360 град. , все будет хорошо , но когда ваша команда выходного штифта для углов больше 180 град., маленький сервопривод остановится. Во-вторых, если вы ограничите свое вращение до 180 градусов, Вы не сможете вращаться на 360 градусов. Твой большой сервомотор.
Я надеюсь, что мое описание будет полезно и столкнется с вами по вашей полной схеме того, что происходит в вопросе этого проекта
- Tower Pro MG996R сервопривод с высоким крутящим моментом 180 °, управляющий с помощью Arduino
- Как заставить сервопривод вращаться на угол больше 180°
- Пповорот сервопривода на 90 градусов
- Как синхронно управлять двумя сервоприводами?
- Ошибка "Servo" does not name a type
- Библиотека плавного сервоуправления
- Подключение Arduino к сервоприводу с внешним источником питания
- Мой сервопривод не работает плавно
Пожалуйста, опубликуйте код, который работает не так, как ожидалось, в минимальном примере. Тогда я смогу попытаться помочь., @Kerbolosh
вы можете управлять только одним за раз. Вы можете переключаться между обоими серво после, так что, похоже, это происходит параллельно, @ArduinoFan