Имеются сервомоторы типа MG995, на них собран манипулятор типа роборука. Запрограммирован при включении на возврат в определенное положение, а потом на набор действий. Питание отдельное, по земле соединены, ампер источника питания хватает, все резво двигается и точно поворачивается, но до тех пор, пока я не выключу питание и не включу все снова. Сервоприводы не возвращаются в исходное положение и начинают работку как будто из другого положения, соотвественно манипулятор начинает работу из другого положения. Я полагал, что если сервоприводу дать команду скажем в блоке Setup установиться в положение 90 градусов и подождать, а потом в loop запускать программу движения из этого исходного положения, то такой проблемы не будет, однако после выключения питания как-то сдвигается начальная позиция и программа уже не точно выполняется. Код примерно такой: Servo myservo; создаю объект серво myservo.attach(9); подключаю к пину myservo.write(90); устанавливаю в setup в начальное положение и дальше в loop начинается программа, набор myservo.write и delay относительно этих 90 градусов, но после выключения сбивается все, вот почему, и что-то может я упустил, инициализацию какую нибудь? Могу я быть уверен что если пишу myservo.write(90); серва отработает этот угол? https://vk.com/video118736477_456239257
А может и правильно? ... А в каком месте храниться положение каждой серврмашины. Вас этот манипулятор имеет 5-6 степеней свободы? Тогда правильно, что он не отрабатывает так просто. Иначе возможна поломка. В промышленности везде манипулятор помнит в энергонезависимой памяти последнее положение всех поворотных устройств. Если вдруг не будет этого, то выдаётся ошибка и надо в режиме калибровки (ручном) выводить все плечи в исходное состояние по маркерам (рискам) и указывать "0". После чего он снова готов. Вы только представьте что такое ему вернуться в какое-то положение не зная последнего. Поломка, повреждение рядом стоящих объектов. И программа дрлжна быть завершена исходя из последнего положения.
Текущее положение хранится в переменных в программе, они устанавливаются при старте, и меняются одновременно с установкой положения сервомотора, и я даю время чтобы сервомоторы отработали эти координаты и пришли в начальные положения, ведь моторам ничего не мешает, и рано или поздно они должны в эти 90 градусов прийти, да даже если и не придут разве если идет команда скажем перейти в 100 градусов, серва должна стремиться именно к такому положению.
В данном случае абсолютно без разницы, т.к. управление сервой происходит с помощью ШИМ в абсолютных координатах.
Так где данные для шима после восстановления питания? И что выключали? Сервомашины? Плату управления? Вообще Всё? Что именно?
Питание выключаю, при включении по идее программа должна работать и выставлять последовательно углы для сервоприводов, а сервоприводы должны их отрабатывать, они и отрабатывают, но не из начального положения, я заметил, что косячит серва, которая находится под нагрузкой, самая нижняя, которая держит всю конструкцию, может быть с этим связано, не успеват или еще что-то, в общем буду дальше экспериментировать. Положение сервомоторов после выключения не сохраняю, полагаю что при включении программа их должна вернуть в начальные положения, ведь если подать скажем 90 градусов, то в каком бы положении не находился мотор, он должен повернуться именно в этот угол абсолютный.
Так и будут с текущего (не начального места). А как Вы хотели? Пусть при включении программа гонит в начало, ожидает этого начала. А потом работает по заданию