Имеется: сервоприводы FS90, 5 штук Iskra Mini, 1 штука Сервы подключены к ногам 3, 5, 6, 9, 10. Питание контроллера и серв - раздельное (от разных портов USB). В контроллер залит код: Код (C++): #include <Servo.h> Servo serv1, serv2, serv3, serv4, serv5; void setup() { // put your setup code here, to run once: // инициализируем сервы serv1.attach(3); serv2.attach(5); serv3.attach(6); serv4.attach(9); serv5.attach(10); } void loop() { serv1.write(45); delay(100); serv2.write(45); delay(100); serv3.write(45); delay(100); serv4.write(45); delay(100); serv5.write(45); delay(1000); serv1.write(90); delay(100); serv2.write(90); delay(100); serv3.write(90); delay(100); serv4.write(90); delay(100); serv5.write(90); delay(1000); } Имеем: любая серва, подключенная к ногам 6 и 9 ведет себя корректно. любая серва, подключенная к ногам 3, 5, 10 разворачивается в одно из крайних положений и пытается сдвинуться дальше, из-за чего нагревается и трещит. Вопрос: как заставить все работать как положено? Что я делаю не так?
Столько серв за раз к искре мини точно не подключить напрямую. Библиотека использует аппаратные таймеры под свои задачи, и из-за них на некоторых ногах отключается ШИМ. Пишут, что 9 и 10 не должны работать, но может в искре мини что-то другое.
На Wiki написано, что пины 3, 5, 6, 9, 10, 11 могут выдавать ШИМ-сигнал. Может быть, тогда стоит управлять сервами в обход библиотеки? .... а ведь мне нужно управлять всеми сервами одинаково, то есть они все должны вращаться синхронно, что означает, что можно их все подключить к одному и тому же управляющему выводу, верно? Вот я дурак!... Спасибо, товарищи! Буду пробовать дальше.
через диодики.... но на самом деле управление сервомашинками - простая задача. Нужно сгенерить импульс определенной длительности, а с помощью всего одного таймера можно генерить сколько угодно (сколько есть ног) любых импульсов сравнимой (наш вариант) длительности. Надо только задействовать таймер, не задействованный в других библиотеках.
У ЮСБ порта недостаточно тока чтобы крутить 5 серв одновременно. Я бы обратил внимание на питание сервомоторов По хорошему им нужен запас по току, ибо при одновременном старте они вообще много возьмут
Я использую для питания USB-хаб, который имеет собственный блок питания. Не идеально, но лучшего варианта пока что нет.
Других библиотек, кроме Servo, не использую. В принципе, можно и заморочиться с генерацией импульсов по таймеру, в обход библиотеки, но, раз уж я додумался тупо повесить все на одну ногу - так и оставлю. Пока этого достаточно. Благодарю за совет!
Попробуй при инициализации сделать такой код для всех сервов Код (C++): Num_servo.attach(Num_Pin, 544, 2900); И еще купи мощный блок питания для контроллера. У меня такая ерунда была, когда у меня был маломощный блок питания (3 сервы работали, а остальные вели себя непредсказуемо) .
Спасибо, попробую! А можно ли использовать для питания сервоприводов и контроллера +5В линию в компьютере, снимая напряжения прямо с molex'а?
Питание можно откуда угодно взять но на 5 серв, по моему скромному мнению, нужно 3А. И честно говоря я бы не подключал самодельную конструкцию к питанию компьютера, по моему мнению это может быть небезопасно для компьютера. Но каждый сам себе хозяин.