Проблемы с сервой tower pro sg90
- Войдите на сайт для отправки комментариев
Втр, 06/10/2015 - 09:41
Собрал китайский кит: платформа с двумя мотор редукторами, uno r3 клон, дальномер ультразвуковой. Простой скетч объезда препятствия работает. Подключил сервы, поменял алгоритм на сбор расстояний с разных сторон (серва крутит дальномер) - приходят неверные данные о расстоянии. Питание организовано раздельное - 9 в на моторы и плату, 4.5 вольта на серву, дальномер питается от платы. Земля общая.
Когда продаю питание только на серву,на плате загорается светодиод как будто серва замыкает. Почему так происходит?
вероятно серва просаживает напряжение на мк
вероятно серва просаживает напряжение на мк
каким образом? у нее свое питание ведь.
дело в цене! :)
да-да, в телефоне есть "умная" автозамена, а кнопка редактирования недоступна
Скорее мотор-редукторы просаживают питание платы. Но, ещё вероятнее - неверная оценка результата датчика. У него очень широкий лепесток направленности - плюс-минус градусов 15. И боковые отростки - очень даже нехилые. Как-бы есть три направления, с которых он активно ловит отраженный сигнал. Для улучшения наденьте на приемную часть цилиндрик из чего-то звукопоглощающего (войлок, фетр и т.д. картон, бумага - значительно хуже) удлиняющий приемник примерно на 1-1.5 см. Должно сильно помочь. Я пользовал "фетровый картон" .. нечто среднее промеж картона и фетра. Ну и измерять надо 5-7 раз "подряд" с усреднением и отбрасыванием заведомо дебильных значений и ограничением времени замера на 30мсек (5метров). Дальше он все равно не стреляет, проверено.
При отключенной серве датчик показывает правильные результаты, а при включенной 30% результатов - в 2-3 раза заниженные показатели.
Но я вот не пойму - почему на ардуине загорается светодиод питания, если я не подавал на нее питание, а подал лишь на серву. Ведь так не должно быть. Получается что серва коротит?
И есть ли какие-то выводы на ардуино, которые нельзя использовать совместно* для двигателй использую разъемы 2-7 (насколько я помню), для ультрасоника - A0, A1, а для сервы - 10 (пробовал также 9)
При отключенной серве датчик показывает правильные результаты, а при включенной 30% результатов - в 2-3 раза заниженные показатели.
Но я вот не пойму - почему на ардуине загорается светодиод питания, если я не подавал на нее питание, а подал лишь на серву. Ведь так не должно быть. Получается что серва коротит?
И есть ли какие-то выводы на ардуино, которые нельзя использовать совместно* для двигателй использую разъемы 2-7 (насколько я помню), для ультрасоника - A0, A1, а для сервы - 10 (пробовал также 9)
Из особенностей ног Ардуины, у Меги на 13-й ноге воткнут встроенный светодиод, так что использовать её "на вход" не удастся никак. Про остальное, вроде проблем нет.
Показывайте схему соединений, тип ардуино и что там за плата .. так непонятно что у вас происходит.
Плата, как я сказал в самом начале - клон UNO R3.
Motor shield (l298n) подключен к следующим пинам:
#define R_EN 9
#define R_IN1 7
#define R_IN2 6
#define L_IN2 5
#define L_IN1 4
#define L_EN 3
Первая проблема, с которой я столкнулся: подключение сервы на любой из портов (1,2,8,10,11,12) приводит к тому, что один из двигателей (помеченный префиксом R) перестает работать.
Замена R_IN1 с 7 на 8 решает проблему. (почему так?)
Питание - 9В на ардуину. Дальномер питается от платы ардуино.
Еще один истояник - 9,6В акк - на моторшилд.
Минусы обоих источников соединены и подключены к потребителям через общий выключатель.
Теперь подключаем также через выключатель еще один источник - 4.5 В - к серве.
Выключатель выключен.
И тут загораются лампочки на моторшилде и на ардуине. Это так не должно ведь быть?
При выключенном выключателе.
Код тут - http://collabedit.com/9rr4e
Могу ошибаться, но насколько помню servo.h организует программную эмуляцию ШИМ на заданной ноге, используя таймер 0. Соответственно, этой библиотеке должно быть все равно какую ногу вы используете под серву.
А вот ваш скетч с использованием аппаратного ШИМ да ещё и с его инициализацией при каждом вызове из analogWrite() вполне может конфликтовать с чем-то. Смотрите распиновку УНЫ какой счетчик конкретно рулит какми ногами и каналами .. скорее всего конфликт ног где-то тут. Заменяя ногу, вы тем самым "разводите" используемые счетчики для сервы и ШИМ через analogWrite(). К сожалению, вы пользуетесь плохо спроектированными библиотеками и помочь тут - я не знаю как. Попробуйте разобраться в Cyberlib.h и работать с регистрами и счетчиками напрямую .. да и делай - выбросите заодно.
По описанию подключений - мало что понял, рисуйте схему. Да, и проверьте снята ли перемычка с моторшилда по питаниям, раз у вас раздельное питание. Да, и не забудьте подать +5в от платы куда надо .. перемычка разъединяет питание.
В целом "так быть не должно". рисуйте схему.
Разобрался с первым вопросом: "На платах, отличных от Mega, использование библиотеки отключает возможность использования analogWrite() (PWM) на пинах 9 и 10 (вне зависимости подключены к этим пинам сервы или нет).". Источник - http://robocraft.ru/blog/arduino/245.html
Библиотека MegaServo на самом деле плохо спроектированная? Она ведь с 2009 года в составе IDE идет.
Нарисовал схему. Перемчка на моторшилде стоит "12В", т.к. 5 В я не подаю, логику питает стабилизатор который на моторшилде.
Еще на ардуине стоит Sensor Shield V.5.
То есть вы общим выключателем отрубаете всем .. землю?!? Круто. Не, может оно так и можно .. но мне кажется что в таком разе удивляться не стоит...
Да, и ещё. Снимите перемычку с мотор-шилда и подайте +5в на L298N как положено с самой ардуины. Так правильнее, (имхо).
То есть вы общим выключателем отрубаете всем .. землю?!? Круто. Не, может оно так и можно .. но мне кажется что в таком разе удивляться не стоит...
Спасибо. Действительно нельзя общим выключателем отрубать всем землю. Отказался от этой идеи - проблема исчезла.
Дальше разбираюсь с неверными показаниями дальномера.