Серводвигатель HSR-1425R не работает непрерывно

Я пытаюсь запрограммировать серводвигатель на достижение определенных положений. У меня есть серводвигатель на 360 градусов, поэтому я не могу использовать библиотеку сервоприводов и могу только контролировать скорость. Поэтому я хочу регулировать время пульса. Настройка проста, 5 В, GND и вывод 9 от Arduino к двигателю.

int servo1 = 9;

void setup{
    Serial.begin(9600);
    pinMode(servo1, OUTPUT);
}
void loop{
    digitalWrite(servo1, HIGH);
    delay(5000);
    Serial.println(digitalRead(servo1));
    digitalWrite(servo1, LOW);
    delay(5000);
    Serial.println(digitalRead(servo1));
}

Ожидаемо: Я ожидаю, что код запустит серводвигатель на полной скорости в течение 5 секунд.

Актуально: Двигатель работает при первом импульсе и останавливается на 10 секунд.

Как я могу улучшить код, чтобы делать то, что я ожидаю?

, 👍2

Обсуждение

каковы ваши аппаратные соединения и почему вы считываете выходной вывод?, @Vaibhav

Мои аппаратные соединения - это три провода от сервопривода непосредственно к Arduino. Я хотел посмотреть, какие сигналы были посланы., @Ate8

Как вы думаете, почему вы не можете использовать библиотеку Servo? С сервоприводами непрерывного вращения он обычно работает там, где 0 вращается в одну сторону, 180 вращается в другую и что-то близкое к 90 останавливает его., @Delta_G

Кроме того, чтобы управлять этим сервоприводом, вы не просто устанавливаете штифт ВЫСОКО. Вы должны послать определенную длину импульса, которая сообщает сервоприводу, как быстро и в каком направлении вращаться. Это тот же самый сигнал, который говорит обычному сервоприводу, под каким углом двигаться. Вот почему для управления ими обычно используется библиотека сервоприводов., @Delta_G


2 ответа


0

Посмотрите, как обычно управляются серводвигатели. Насколько я знаю, нет сервоприводов, которые можно было бы просто "включить для вращения", как вы, кажется, ожидаете. Обычно положение сервопривода устанавливается путем подачи импульса определенной длины. Это означает, что вы можете подать ШИМ-сигнал с нужной частотой. Тогда рабочий цикл должен быть пропорционален положению сервоприводов. По моему опыту, время довольно важно при управлении сервоприводом, поэтому идти так, как вы делаете (синхронизировать выходное состояние gpio с delay()s), будет не очень хорошо. Вы должны использовать аппаратные модули atmega (что уже имеет место при использовании цифровой записи ардуино), чтобы добиться адекватного синхронизации.

,

1

Примените какой-нибудь импульс, на котором вам нужно, чтобы ваш сервопривод работал

,