Горящие сервоприводы как сумасшедшие, что я делаю не так?

По какой-то причине мои сервоприводы продолжают гореть.

Мой код прост, если условие, поверните на 0 градусов, иначе поверните на 180.

Однако это приводит к тому, что двигатель постоянно борется за то, чтобы оставаться во вращении 0 или 180, когда между ними нет никакого движения. Конечно же, оставьте его работать на 1 час, мотор перегорит.

if (!strcmp("1",output)){
    myservo.write(0);
}
else {
    myservo.write(180);
}

Есть ли что-то вроде myservo.release или что-то в этом роде? Я предполагаю, что мне нужно привести сервопривод в нужное положение, а затем отпустить его, чтобы он не пытался оставаться на месте.

Пожалуйста, помогите, я уже прожег 4-5 из них, это не весело :(

, 👍1

Обсуждение

Сервоприводы предназначены для того, чтобы сохранять свое положение; если бы вы могли "отпустить" крутящий момент, у вас не было бы "фиксированного" положения, так как при выключении двигатель не генерирует крутящий момент, чтобы держать его неподвижным. Вы можете попытаться уменьшить скорость сервопривода, но если проблема возникает, когда вы оставляете его неподвижным, то, вероятно, вам просто нужно подумать о смене марки сервопривода.., @frarugi87

Вы уверены, что эти сервоприводы могут работать до 0 и 180 градусов? (Если они работают против своих конечных остановок, это может вызвать проблемы.) Кроме того, на какое напряжение они рассчитаны и какую мощность вы используете?, @Andy

Что делают или пытаются сделать ваши сервоприводы? Если они ничего не приводят в движение, они должны удерживать положение с очень небольшим током. Если они удерживаются против нагрузки, они принимают ток для поддержания положения; больше нагрузки = больше тока. Поиск недостижимой позиции (за пределами их остановок или остановок механической системы)-наихудший вариант., @JRobert

Первые шаги: сгоревшие двигатели чаще всего являются результатом двух вещей: неправильной проводки или использования неправильного напряжения, подаваемого на двигатель для питания. Убедитесь, что ваш источник напряжения соответствует спецификациям сервоприводов и что ваша проводка правильна., @dinotom


3 ответа


Лучший ответ:

5

Некоторые сервоприводы на самом деле не способны сделать полный оборот 0..180 - или, чтобы перефразировать его лучше, стандартный импульс 0,5 мс и 1,5 мс заставит их занять положение, которое не может быть достигнуто. Поэтому двигатель продолжает вращаться в постоянной борьбе.

  • измените 0 на что-то вроде 20, а 180-на что-то вроде 150
  • убедитесь, что двигатель остановился после достижения 20 или 150, то есть он не издает никакого звука, и если вы прикасаетесь к корпусу двигателя, он не производит никакой вибрации (так что никакого постоянного стука).
,

Большинство сервоприводов имеют диапазон 90deg, поэтому безопасный диапазон составляет от 45 до 135 (что соответствует импульсу от 1000 до 2000 мс)., @Lesto

На самом деле я обнаружил, что она не выгравирована на камне. У меня есть пара микро-сервоприводов, которые принимают импульсы 0..180 градусов (0,5/1,5 мс), но все равно делают поворот только на 90 градусов из-за разницы в передачах. Я бы сказал, что мы контролируем ширину импульса - и сервопривод каким-то образом реагирует :) Я согласен, что это немного упрощение, ожидая, что myservo.write(35) переместится на 35.000 градусов., @Gee Bee

Да, есть исключения, но большинство использует "стандартный" импульс, потому что это то, что выходит из большинства радиоконтроллеров, @Lesto

Я могу полностью согласиться, @lesto! Однако, как я обнаружил, многие китайские производители довольно либерально соблюдают стандарты, особенно с сервоприводами TowerPro. (Это отличное соотношение цены и стоимости, но у _do_ те же проблемы, что и у OP.), @Gee Bee


2

Убедитесь, что ваш источник напряжения соответствует спецификациям двигателей и что ваша проводка к arduino или экрану драйвера правильна, и попробуйте код, который я опубликовал, который работал для меня, чтобы проверить сервоприводы.

#include <Servo.h>  // библиотека сервоприводов
// Вы можете управлять максимум двенадцатью сервоприводами на Uno 
// использование этой библиотеки. (Другие библиотеки сервоприводов могут позволить вам
// контроль больше). Обратите внимание, что эта библиотека отключает ШИМ на
// контакты 9 и 10!

Servo servo1;  // объект сервоуправления


void setup()
{
  // Присоедините объект servo1 к цифровому контакту 4.
  servo1.attach(4);
}

void loop()
{
  int position;
  // Изменение положения на полной скорости:

  servo1.write(90);    // Скажите servo перейти на 90 градусов
  delay(1000);         // Пауза, чтобы получить время для перемещения
  servo1.write(180);   // Скажите servo перейти на 180 градусов
  delay(1000);         // Пауза, чтобы получить время для перемещения
  servo1.write(0);     // Скажите servo перейти на 0 градусов
  delay(1000);         // Пауза, чтобы получить время для перемещения

  // Изменение положения на более низкой скорости:
  // Скажите сервоприводу, чтобы он повернулся на 180 градусов, сделав шаг на два градуса

  for(position = 0; position < 180; position += 2)
  {
    servo1.write(position);  // Move to next position
    delay(20);               // Short pause to allow it to move
  }

  // Скажите сервоприводу перейти на 0 градусов, шагнув на один градус

  for(position = 180; position >= 0; position -= 1)
  {                                
    servo1.write(position);  // Задержка перехода в следующую позицию
    delay(20);               // Short pause to allow it to move
  }
}
,

1

Я хотел сам ответить на свой вопрос: Я купил несколько действительно дешевых сервоприводов с AliExpress. Это нехорошо. Они очень быстро сгорают, что было подтверждено некоторыми моими друзьями, купившими такие же сервоприводы. Напряжение было правильным, оно было 5В. При использовании более качественных сервоприводов стоимостью 15 долларов я не видел ни одной из этих проблем. Сделай себе одолжение. Не покупайте сервоприводы с AliExpress. Получите их с DFRobot или с какого-нибудь другого более авторитетного сайта.

,