Arduino + Servo SG90

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем omadonex, 12 мар 2014.

  1. omadonex

    omadonex Нерд

    Простите за совсем нубский вопрос.
    Я когда подключаю SG90 к Arduino, она (серво) "урчит" (такое ощущение, что моторчик пытается крутить, но что-то ему мешает) пока подается питание, и на Servo.write(Angle) вообще не откликается.
    Подскажите, пожалуйста, "урчание" сервы это нормальное поведение или нет?
     
    Последнее редактирование: 12 мар 2014
  2. acos

    acos Официальный гик Администратор

    Ну если не откликается на Servo.write то нет. Возможно моторчик прокручивается. Посмотрите эту статью, может удастся починить
     
  3. omadonex

    omadonex Нерд

    Читал! отличная статья. Только я заметил в поведении моей сервы еще одну особенность.
    Если я ее подсоединяю напрямую к батарейкам (без сигнального провода, только питание-земля), то она ведет себя корректно (отсоединяя и присоединяя провод питания серво проворачивается).
    Но если я ее втыкаю в макетку, питание - к батарейкам, земля - общая с Arduino, а сигнальный кабель в 9 pin, то происходит, то что я описал выше.

    Я еще читал, что при подключении сервы будут недоступны для analogWrite 10 и 11 пины. Существенно ли это? У меня к ним подключены 2 входа микросхемы sn754410 (драйвер управления моторами, 1 и 9 пины)
     
  4. acos

    acos Официальный гик Администратор

    А, так всё-таки она проворачивается?! Тогда дело в нестандартных длинах управляющих импульсов. Нужно взять вот эту версию функции servo.attach(pin, min, max), и поэкспериментировать со значениями min и max.
    Чтобы не конфликтовать с analogWrite вы можете использовать либо библиотеку softwareservo, либо перенести микросхему на 5 и 6 порт.
     
  5. omadonex

    omadonex Нерд

    Спасибо, буду пробовать.
     
  6. omadonex

    omadonex Нерд

    Попробовал поиграться со значениями min и max, переставил в 5 pin, стало чуть лучше, но все равно иногда "урчит".
    Решил вообще отдельно серво поставить и запустить, все заработало, даже min и max не пришлось настраивать. А вот когда серво включаю в более сложную конструкцию ( у меня стоит HLK-RM04, SN754410, 2 редуктора от модельки) - вот тут начинаются чудеса, серво начинает себя странно ввести.
    Может ли это быть от того, что ей не хватает тока?
     
  7. acos

    acos Официальный гик Администратор

    на 5 и 6 порт надо перенести SN754410, я это имел ввиду.
    Запитайте серву от отдельного источника питания на 6 В - например 4 батарейки полуторавольтовых. Землю батарейки и ардуины объедините.
     
  8. omadonex

    omadonex Нерд

    Выкладываю все что есть:
    Я делаю модель танка т-34-85 в 35 масштабе (это довольно маленький масштаб). У меня есть место в ванне танка только для 4х аккумуляторов ААА. От них я планирую запитать все, что у меня есть - Arduino (выбор пал на Arduino Pro Mini из-за размеров), две серво для поворота башни и подъема/опускания дула, два редуктора, WiFi модуль HLK-RM04. (планирую также вставить динамик и мини-камеру, но это позже и про них отдельный разговор)

    Arduino Pro Mini питаю через Raw от 4х аккумуляторов, на SN754410 подам 5V от VCC Arduino (как теперь выяснилось благодаря Вам в другой теме :) ) и 5 - 6V от аккумуляторов как питание для моторов. Две серво и HLK-RM04 также от аккумуляторов.

    Вы предлагаете перенести на 5 и 6 порт те контакты, которые идут на 1,2EN и 3,4EN (1 и 9 пины микросхемы соответственно)?

    0 и 1 выход Ардуино заняты под Rx/Tx , 5 (pwm) и 6 (pwm) под микросхему, еще четыре выхода от Ардуино надо пустить также на эту микросхему. Подскажите, пожалуйста, куда в таком случае лучше воткнуть две серво?
     
  9. acos

    acos Официальный гик Администратор

    Да. Эти пины используют другой таймер для PWM. 10,11 пины используют тот же таймер, что и библиотека Servo, поэтому PWM на них и Servo -конфликтуют. Servo обычно выигрывает)
    Серву в итоге не важно куда подключать. Земли у вас автоматом получается объединены будут, раз источник один.
     
  10. omadonex

    omadonex Нерд

    То есть все сводить к земле от аккумуляторов?

    Приеду домой, попробую и отпишусь. Спасибо за помощь.
     
  11. omadonex

    omadonex Нерд

    Я добился определенного результата, но все равно как то не так. Что в итоге у меня получилось. Оказывается серво как-то не так была собрана и действительно на 544мс, если по умолчанию, заходила в дальнее положение (хотя по даташиту диапазон 500 - 2400мс). Я поставил Servo.attach(pin, 760, 2400). Стало хорошо работать. Но заметил одну проблему, что если я пишу Servo.write(90) угол между положением 0 и 90 БОЛЬШЕ, чем угол между 90 и 180.

    Подскажите плиз, как исправить это.
     
  12. acos

    acos Официальный гик Администратор

    проще всего экспериментально определить, где у вас 90 градусов и пользоваться полученными значениями
     
  13. omadonex

    omadonex Нерд

    То есть забыть про Servo.write(90) и писать Servo.writemiliseconds(x)? Хмм, а как точно определить 'x'. Ведь эскпериментальное значение будет приблизительным.
     
  14. acos

    acos Официальный гик Администратор

    1. Можно и так.
    2. Транспортиром
     
  15. omadonex

    omadonex Нерд

    хех ) не думал, что все так жестко.
    спасибо.
     
  16. Maksym

    Maksym Нуб

    Доброго времени суток. Тоже есть проблема с микросервой SG90. Пробывал все что описано выше но она все равно поворачивается в одно крайнее положение и стопорится. Видно что она пытается вращаться дальше но не может. Пробывал 2 сервы - одно и тоже.
     
  17. vvr

    vvr Инженерище

    SG90 дешёвая и довольно низкого качества серва и ждать от неё хорошей работы не совсем логично.
    ПРАВИЛЬНОЕ подключение любой сервы - раздельное питание с ардуиной и общая земля.
     
  18. Sergun

    Sergun Нуб

    Согласен, что у SG90 не очень высокое качество комплектующих (хотя не такая она и дешевая, по крайней мере в России ))).
    Теперь ближе к теме. У моей SG90 изначально была такая же проблема, как у ТС (см. 1-ый пост в этой ветке Форума) -
    Анализ работы сервомашинки (спасибо acos за наводку):
    и дальнейшая ее разборка, выявили проблему плохого подвижного контакта у встроенного в сервомашинку потенциометра. Визуально была видна процарапанная некачественным подвижным контактом дорожка на подковке (и это практически на новой сервомашинке!).
    Что сделал: деревянной зубочисткой собрал с внутренней поверхности корпуса немного белой смазки и аккуратно нанес ее тонким слоем на контактную поверхность подковки потенциометра (желательно повращать ось потенциометра вручную пинцетом для лучшего распределения смазки). В результате проблема практически исчезла.
    Советы: 1. В процессе разборки серву, особенно местоположение шестеренок, желательно сфотографировать.
    2.При сборке ось потенциометра и шестеренку с выходным валом (верхнюю) - повернуть до упоров, например - по часовой стрелке (иначе серво может поворачиваться на угол, меньший 180 градусов). Кстати, в этом м.б. еще одна причина неработоспособности новых SG90 (собирают их наверняка девушки из китайских деревень :^) ).
    3.Окончательную стяжку корпуса винтами осуществлять равномерно/попарно по диагонали и без особых усилий.
    Возможно. Но SG90 вполне сносно работает при питании от Arduino UNO с подключением параллельно контактам "+" и "-" сервомашинки электролитического конденсатора емкостью от 200 мкФ (у меня нашелся 1000 мкФ на 25 Вольт).
     
    Последнее редактирование: 5 апр 2015
  19. Мимино

    Мимино Нуб

    Когда мы подключаем данный серво к 9 пину, используя питание для сервы от ардуино нано и даём 5В на запуск платы, то серво делает движение градусов на 15, далее в зависимости от кода в программе, серво привод корректирует своё положение. Полагаю при питании на серво подаётся какой-то управляющий импульс?
    Интересует, возможно ли каким-то образом избежать срабатывания серво при подаче напряжения на arduino nano. Чем его сгладить, конденсатором? Если да, то каким, на сколько, есть у кого опыт?
     
  20. vvr

    vvr Инженерище

    это происходит из-за разницы по времени между получением питания и управляющего сигнала.
    нужно сделать задержку по времени на подачу питания