Есть у меня серва HXT900, наверняка многим знакома. Понадобилось мне переделать ее под непрерывное вращение. Ну механику то я быстро переделал. Потом пришла мысль, что чем городить свой Н-мост, воспользоваться ее родным драйвером. Для этого вместо потенциометра надо впаять делитель из двух одинаковых резисторов. Я пока всего этого не сделал, поскольку у меня возникло несколько вопросов. Теоретически как работают сервы я читал, но на практике с ними не работал еще. По двум проводам подается питание, по третьему - импульсы. Если длина импульса 1,5 мс - серва в среднем положении. 0,8 - 1 мс - серва поворачивается на половину своего рабочего угла, 2 - 2,2 мс - серва поворачивается в другую сторону на половину своего рабочего угла. Поправьте, если я неправильно понял. Далее мое предположение: угловая скорость сервы постоянна. Теперь возвращаемся к описанной ранее ситуации. В теории, если делитель из абсолютно одинаковых резисторов, а длина импульса точно 1,5 мс, то серва не крутится. Если я подаю импульс длиной 1 мс - серва крутится в одну сторону, подаю импульс 2 мс - серва крутится в другую сторону. Но поскольку обратной связи больше нет, логично предположить, что к такому же эффекту приведут длины импульсов 1,4 мс и 1,6 мс? Появилось рассогласование, его надо ликвидировать, не получается, крутимся. Вроде логично. Теперь возвращаемся в реальный мир. Точного делителя пополам в природе не существует, значит я должен вместо 1,5 мс подбирать более точное значение, чтобы серва стояла? Для каждой сервы свое? Не удобно. А как поведет себя серва, если перестать подавать на нее импульсы? Здравый смысл подсказывает что просто не будет крутиться и все. Правильно? И еще вопросы: - как серва реагирует на очень длинные или очень короткие импульсы, не повредится ли она? - на что влияет период следования импульсов и обязательно ли нужно выдерживать период 20 мс? - на серве (в том числе переделанной) нельзя управлять скоростью ШИМом? - из сервы выходят три провода: коричневый, красный и оранжевый. Я на 99% уверен, что коричневый это земля, красный питание, оранжевый - импульсы. Добавьте пожалуйста последний процент к моей уверенности.
1. Если не хочется подбирать длину импульсов - ставь переменник и его настраивай, чтобы попасть ровно в 1.5мс; 2. Если перестать подавать импульсы - считай выключил движок сервы; 3. Как будет реагировать? вообще неадекватно, будет пытаться вывернуть себя в соотв. сторону скорее всего 4. Можно, надо подавать импульсы рядом с 1.5мс; 5. Держи последний %
Большое спасибо! Единственное что я не понял - управление скоростью. Есть среднее положение 1,5 мс, какие импульсы подавать чтоб скорость была половинной? По какой формуле определять? Начиная с какой ширины серва будет работать с максимальной скоростью? Значит ли это, что круговая скорость сервы зависит от ширины импульса?
В общем, я пришел к такому выводу: - если надо ехать вперед - генерим импульсы длиной 1 мс - если надо стоять - ничего не генерим - если надо ехать назад - генерим импульсы длиной 2 мс
Естественно две сервы будут иметь разную скорость, но это задача уже другого уровня. Из серии "как научить робота ездить прямо". Ведь и у человека одна нога шагает шире другой, когда леший по лесу водит кругами))).
Вот только про частоту следования импульсов вопрос остался. И еще есть ссылка интересная для общего развития, где я и прочитал как сервы работают. http://www.rcdesign.ru/articles/radio/servo_intro
Radist писал(а):про частоту следования импульсов вопрос остался.
Около 20 милиСек обычно период управляющих имульсов. Возможно вам будет полезна страничка где про это рассказано и есть примеры как написать программы для управления сервами srvo - http://proavr.narod.ru/z13.htm
За ссылку спасибо. Мне одно непонятно - разве угловая скорость сервы зависит от ширины импульса? Или срабатывают какие то эффеты, вызванные тем, что рассогласование минимальное (когда длина импульса близка к 1,5 мс). И если так, то опять же повторюсь: как управлять скоростью? Если я буду менять длину импульса с малым фиксированным шагом, то с каким шагом будет меняться скорость? Если будет, конечно. Или это нельзя рассчитать, можно только опытным путем? Но как провести такой опыт? Энкодера то у меня нет.
Radist писал(а):разве угловая скорость сервы зависит от ширины импульса? Или срабатывают какие то эффеты, вызванные тем, что рассогласование минимальное (когда длина импульса близка к 1,5 мс).
да. да.
Radist писал(а):как управлять скоростью?
Использовать ОС по скорости.
Radist писал(а):Энкодера то у меня нет.
Можно на платформе какие то датчики для ОС поставить типа акселев или гиро.
А еще можно измерять скорость якоря по импульсам в питании коллекторного мотора. Но получится ли у вас не знаю.
Думаю втулить какието световые датчики нетрудно в пару серв - нормальная ОС по скорости получится. С одного торца мотора светоизлучатель поставиь и с дрогого светоприемник - якорь при вращении будет прерывать свет. Если удвоить то квадратурный сигнал можно снимать.
В общем, ответы на все вопросы получил, всем спасибо. Я не знал, что драйвер сам шимит сигнал управления на своем мосту. И одно уточнение: все датчики скорости, связанные с валом двигателя хоть как-то, позволяют управлять только скоростью вращения вала. Если колеса на валу не идеально одинаковые - поедем все равно по дуге. И сомневаюсь, что акселерометр почувствует такое маленькое центростремительное ускорение. Может быть только гироскопом и можно будет, сверхчувствительным. Но для езды по линии это совсем не существенно, для роботов на ринге малосущественно (куда ехать им их глаза говорят), для прохождения лабиринтов тоже не страшно, радиоуправляемые - человек рулит. На мой взгляд уметь ездить прямо должен пылесос, больше ничего в голову не приходит. К шагающим роботам все это не относится.
Посмотрел я более внимательно программу управления 8 сервами, точнее ее алгоритм. Может быть я ошибаюсь, но мне показалось, что точный период 20 мс будет только у первой сервы, а у остальных он будет плавать. Мне кажется, что правильнее будет алгоритм видоизменить следующим образом: - каждая серва имеет окно временное длиной 2 мс, которое может использовать как хочет; - в конце остается всегда пауза 4 мс.
Пример: первая серва 1,5мс включено, 0,5 сек выключено, переходим к следующей вторая серва 1 мс включена, 1 мс выключена, переходим к следующей ........ восьмая серва 2 мс включено, 0 мс выключено общая пауза 4 мс повторить Такой способ даст периодический сигнал на всех сервах, а не только на первой. И считать ничего не надо, нужно только знать длину импульса и его дополнение до двух (хотя дополнение до двух можно и посчитать).