Управление микросервоприводом

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем alex-prog, 11 июл 2016.

  1. alex-prog

    alex-prog Гик

    Прочитал в Вики информацию про сервоприводы. Как я понял, управляющий сигнал - это практически ШИМ: в зависимости от того, какой длительности в микросекундах будет высокий уровень, то на такой угол повернется микросервопривод?

    То есть, можно в цикле loop, сделать так:
    Код (C++):
    digitalWrite(13, HIGH);
    delayMicroseconds(550);
    digitalWrite(13, LOW);
    delay(20);
    И получить перемещение сервопривода к крайнему левому положению?
     
    Последнее редактирование: 11 июл 2016
  2. Vad33

    Vad33 Капитан-оригинал

    В ардуино IDE есть встроенная библиотека Servo, где это все причесанно и приведено к удобному виду.
    Или вопрос "чиста теоретически"?
     
  3. ZAZ-965

    ZAZ-965 Гуру

    Только в вашем примере должно быть digitalWrite, а не analogWrite. Да сигнал управления - ШИМ. Поэтому подключать серву к выводам с аппаратным PWM (pin 3,5,6,9,10,11 atmega328). Библиотека серво https://github.com/arduino/Arduino/tree/master/libraries/Servo
     
  4. Vad33

    Vad33 Капитан-оригинал

    Если использовать digitalWrite и задержки, то не важно на какие пины подключать, в этом случае идет эмуляция ШИМ.
     
  5. alex-prog

    alex-prog Гик

    Да, digitalWrite. Про analogWrite - опечатка. Насчет самого ШИМа, я так понял, что тут лучше самому паузу задерживать, так как нужно подавать сигнал определенной длительности, а не частоты...
     
  6. NikitOS

    NikitOS Король шутов Администратор

    Глубокое заблуждение в библиотеке серво пин с шим не нужен
     
  7. alex-prog

    alex-prog Гик

    BAR__MEN, я под ШИМом подразумевал, что:
     
  8. При использовании серво привода надо отсылать на него сигнал каждые 0,02 (или 0,002 забыл) секунды. Библиотека Servo делает это за нас, так что я использую её.
     
  9. alex-prog

    alex-prog Гик

    Степан Чесноков, посылать команды по-моему, имеет смысл, пока сервопривод не достигнет нужного угла. Потом думаю, разумнее отключить питание и управляющий сигнал, чтобы не тратить заряд АКБ... В классе servo, думаю управляющий сигнал отправляется постоянно. Для меня это излишество.
     
  10. Вот пример простейшего кода управления сервой на С++
    Код (C++):
    #include <Servo.h>  //добавляем библиотеку Servo
    const int SERVO=9;  //обозначаем сервой пин 9
    Servo myServo;   //даём серве имя myServo

    void setup() {
      myServo.attach(SERVO);  //прикрепляем к myServo пин 9
    }

    void loop() {
      myServo.write(179);  //поворачиваем на 180 градусов
      delay(2000);  //ждём 2 сек.
      myServo.write(0):  //возвращаем вал обратно
      delay(2000);  //ждём 2 сек
    }
     
  11. Посылать сигналы постоянно нужно чтобы серва всегда стояла в нужном положении, а для некоторых проектов это очень важно
     
  12. Нет, конечно если у вас там ещё штук 10 датчиков подключено, то конечно
     
  13. alex-prog

    alex-prog Гик

    Датчиков у меня нет, просто нужно чтобы сервопривод был в крайнем положении: левом или правом. Динамической нагрузки тоже нет, заняли место, и до следующего управляющего сигнала, который происходит при выполнении условия, нужно оставаться на месте...
     
  14. А вы попробуйте с помощью библиотеки задать какое-то положение, а потом сдвинуть вал с места. У вас это не получится, он всё равно вернётся на место. А вот если без библиотеки, то можно сдвинуть.
     
  15. Vad33

    Vad33 Капитан-оригинал

    Что мешает сделать
    Код (C++):
    myServo.detach();
    ???
     
    Последнее редактирование: 12 июл 2016
  16. alex-prog

    alex-prog Гик

    Я не против библиотеки, если бы она не была нужна, её бы не сделали, как я думаю. Просто, есть задачи где она приводит к избыточности кода. Надеюсь никого не обидел :) К тому-же, если управлять сервоприводом, при помощи простой подачи сигналов, то можно использовать различные микросхемы, типа счетчика импульсов (или даже самому собрать такую схему, с определенными задержками - аналог таймера). Для некоторых задач, где на сервоприводе нет динамической нагрузки, способной изменить положение вала, это будет эффективней...
     
    Последнее редактирование: 12 июл 2016
  17. Vad33

    Vad33 Капитан-оригинал

    А в машинных кодах будет еще экономнее... :D
    ... только это увеличит время разработки и снизит удобство работы с кодом и его надежность.
     
  18. alex-prog

    alex-prog Гик

    Vad33, если код написан грамотно, пусть даже и на машинном коде, и человек в нём хорошо разбирается, то проблем с поддержкой может и не быть. Было время, когда и на этом уровне писали код.

    Я кстати, имел ввиду простые компоненты, которые надо не программировать, а рассчитывать по физическим формулам, но это, конечно, уже вне темы...
     
  19. Vad33

    Vad33 Капитан-оригинал

    Тут ключевое слово "если".
    Если бы непрофессионалы не лезли (и далее по списку):
    - программировать,
    - водить машину,
    - рисовать,
    - путешествовать,
    ...
    + 100500 позиций
    ...
    то многое чего не понадобилось бы.
    ... например этот форум. :D
     
  20. alex-prog

    alex-prog Гик

    Профессионалами не рождаются, ими становятся ;)
    Растут, набираются опыта, спрашивают на таких форумах.

    Профессионал, кстати, понятие относительное. Для кого-то человек профессионал, для кого-то, более опытного, он незнайка...