Сервопривод ESP32 работает непрерывно
У меня есть ESP32, подключенный к TZT servo SG90. Это и есть код
#include <ESP32Servo.h>
#define TURN_TIME 175
Servo myservo; // создать сервообъект для управления сервоприводом
// на ESP32 можно создать 16 сервообъектов
int pos = 0; // переменная для сохранения положения сервопривода
// Рекомендуемые контакты PWM GPIO на ESP32 включают 2,4,12-19,21-23,25-27,32-33
#define servoPin 17
#define MOTOR_1_PIN 22
void setup() {
pinMode(servoPin, OUTPUT);
Serial.begin(9600);
// Разрешить выделение всех таймеров
ESP32PWM::allocateTimer(0);
ESP32PWM::allocateTimer(1);
ESP32PWM::allocateTimer(2);
ESP32PWM::allocateTimer(3);
myservo.setPeriodHertz(50); // стандартный сервопривод 50 Гц
// использование по умолчанию минимального / максимального значения 1000us и 2000us
// для разных сервоприводов могут потребоваться разные минимальные/максимальные настройки
// для точной развертки от 0 до 180
}
void loop() {
myservo.attach(servoPin, 700, 2500); // присоединяет сервопривод на выводе 18 к объекту сервопривода
myservo.write(0);
delay(TURN_TIME);
for(int i =0; i<180; i++)
{
myservo.write(i);
delay(TURN_TIME);
}
delay(3000);
for(int i =180; i>0; i--)
{
myservo.write(i);
delay(TURN_TIME);
}
myservo.detach();
delay(3000);
}
Мой сервопривод начинает вращаться в одну сторону и поворачивается на несколько градусов, затем через 5 секунд сервопривод начинает вращаться в одну сторону навсегда..
У меня не было никаких проблем с arduino и платой nodemcu. Что я должен изменить в коде?
РЕДАКТИРОВАТЬ: я подключил сервопривод к батарее, у них есть общие точки соприкосновения. Контакт на esp32, который я использую, - это G17. "#define servoPin 17" в коде
@Simeon Simeonov, 👍0
Обсуждение1 ответ
Лучший ответ:
Я использовал другую сервобиблиотеку, и это сработало.. Затем я изменил ширину импульса с помощью этой строки кода.
Значение по умолчанию равно 1000-2000. Но он вращается только на 95 градусов. Когда он нажимается примерно на ~ 2850us, сервопривод поворачивается на 181-185 градусов.
servo1.присоединить(servoPin,CHANNEL_NOT_ATTACHED, 0,180,544,2840/);
#include <Servo_ESP32.h>
static const int servoPin = 16; //напечатанный G14 на плате
int delayTime = 20;
Servo_ESP32 servo1;
int angle =0;
int angleStep = 5;
int angleMin =0;
int angleMax = 180;
#define CHANNEL_NOT_ATTACHED -1
void setup() {
Serial.begin(115200);
servo1.attach(servoPin,CHANNEL_NOT_ATTACHED, 0,180,544,2840/);
}
void loop() {
for(int angle = 0; angle <= angleMax; angle +=angleStep) {
servo1.write(angle);
Serial.println(angle);
delay(delayTime);
}
for(int angle = 180; angle >= angleMin; angle -=angleStep) {
servo1.write(angle);
Serial.println(angle);
delay(delayTime);
}
}
- Tower Pro MG996R сервопривод с высоким крутящим моментом 180 °, управляющий с помощью Arduino
- Как заставить сервопривод вращаться на угол больше 180°
- Пповорот сервопривода на 90 градусов
- Как синхронно управлять двумя сервоприводами?
- Ошибка "Servo" does not name a type
- Библиотека плавного сервоуправления
- Подключение Arduino к сервоприводу с внешним источником питания
- Мой сервопривод не работает плавно
Нет необходимости отсоединять сервопривод в петле. Просто прикрепите его в настройках и никогда не отсоединяйте. Отсоединение остановит сигнал ШИМ, но сервоприводу нужен непрерывный сигнал ШИМ, даже когда он неподвижен., @Sim Son
Без detach() результат тот же., @Simeon Simeonov
Я не ожидал, что это будет первопричиной... *вечно вращается в одну сторону* - это на самом деле сервопривод с регулируемым углом, который вы используете, и используете ли вы точно такое же аппаратное и программное обеспечение, как и на ардуино/узелMCU?, @Sim Son
Это сервопривод, который можно вращать на 360 градусов. Но когда я управляю им другим микроконтроллером, я могу управлять им только 0-180. Здесь у меня случайные ходы и в какой-то момент вращение до бесконечности.., @Simeon Simeonov
Можете ли вы выяснить, в какой момент вашего кода сервопривод ведет себя неожиданно?, @Sim Son