Сделал проект один, исходник взял тут "Управление сервоприводом при помощи Arduino и приложения на java " У меня возник вопрос как одновременно управлять несколькими сервами. Не могу разобраться, помогите кто может,очень нужно(
Данные для управления передаются с компа, последовательно...Один пакет данных на один сервопривод.А мне нужно чтоб сервы работали одновременно...
Каков угол поворота серв нужен? Если меньше 127 градусов, то в однлм байте можно закодировать два угла
Через сериал можно только последовательно передавать. Как вариант увеличить скорость в два раза, посылать 2 байта и как ардуино соберет оба байта начать крутить две сервы. Или начать копать в сторону параллельного порта
стандартная аналоговая серва управляется при помощи ШИМ с частотой 50Гц импульсами от 1000 до 2000мкс. Т.е. в один такт свободно влезают импульсы для 8 серв. Если через порт передать подряд 2 пакета (по одному для каждой сервы), то будет Вам счастье. Пусть каждый пакет будет в 2 байта. 11бит пакета будут задавать угол отклонения сервы, а в остальных 5 битах передавайте номер сервы. На ардуинке разбираете его и пишете соответствующей серве заданное время импульса. Ну как-то так...
115200 бит/с = 14400 байт/с = 7200 пакетов/с. Это 144 пакета на такт сервы. Даже учитывая, что это грубый приблизительный расчет и я ошибся в 10 раз, хватит за глаза серв на 10 точно. А учитывая, что скорость поворота условно 0.1сек / 60 градусов, то и на 20 сервоприводах вы не заметите последовательного управления ими. Вот характеристики некоторых, которые я использую. Так же к примеру: протокол Futaba sBus использует последовательный порт на скорости 100000. Размер пакета 25 байт. Пакеты идут каждые 14мс. По этому протоколу управление происходит 16-ю сервоприводами.