То ли лыжи, то ли я. В целом, проблема такая - дойдя до 180° сервопривод не прекращает попытки повернуть вал - раздаётся равномерное гудение, как будто он пытается продолжить движение. На других положениях молчит, то есть - всё в норме. Это в порядке вещей, или нет?)
Зачем вы так делаете??? Это все равно что гайки кувалдой затягивать - пока резьба не сорвется. В серве нет концевых выключаталей. Сервопривод прибор аналоговый как по обратной связи так и по управлению. Для правильной работы требуется калибровка.
Очень просто. В примерах - в примерах, Карл! - указан параметр 180. Я его применяю - железо рычит. Я железо люблю, но с сервоприводами не работал. Погасил и более не трогал в 180°. Пошел на форум уточнить - что я делаю не так. Про концевики понятно, но если он сам знает, до какого угла дошел - почему не перестаёт идти? Больше похоже на заводской брак, если честно.
Откуда ему знать то? У контроллера сервы на входе отрицательной обратной связи только напряжение с потенциометра, а ни какие не градусы. Прибор аналоговый. Погрешность в 10% в порядке вещей. Надо заметить что 0 и 180 градусов, это предельные значения. Как правило приборы не эксплуатируют на пределе. 10 - 170 градусов это нормально.
Если не секрет, какая модель сервы? Если дешевые sg90 то 170 в лучшем случае. В любом случае легко проверяются предельные значения прямо из консоли IDE. нулевое значение в модуле/библиотеке задано минимальным импульсом и как правило вписывается нормально ... а вот максимальное значение импульса может и не поддерживаться сервой.
ну я его использую с амперковской библиотекой с максимальным значением 160 при желании можно поэкспериментировать с эспруиновской библиотекой/модулем http://www.espruino.com/Servo+Motors http://www.espruino.com/modules/servo.js там по по другому реализовано
Ну может лочический ноль в программе это, физически +10 градусов на серве. Тогда логические 170 градусов, это физические 180 - предел. И не факт, что логические и физические градусы 1:1 идут. Если использовать серву, например, для руления машинкой не выкручивая до упора, то это не суть важно. Обратную связь обеспечивает сам пилот, а серва только выставляет и удерживает указанное положение.
ноль не ноль. градусы - это корм для библиотеки которая переваривает их и подает на пин импульс с определенной частотой. минимальные и максимальные значения импульса и являются критериями поворотливости... P.S. Вот подробнее про сервы http://wiki.amperka.ru/робототехника:сервоприводы
http://wiki.amperka.ru/js:servo http://js.amperka.ru/modules/@amperka/servo.js Поиграйтесь с значениями. По дефолту в библиотеке вот так Код (Javascript): this._pulseMin = 0.675; this._pulseMax = 2.325; может 0 и 180 в вашей серве вовсе не 0 и 180 (в длинах импульсов, я имею ввиду), а поменьше, Можно попробовать подключить серву вот так: Код (Javascript): var myServo = require('@amperka/servo').connect(P13, {pulseMin: 0.650, pulseMax: 2.300});
Как говорили выше.. в примерах такое значение) Подскажите, вы подразумеваете некую механическую калибровку или программную (по аналогии в посте выше)?
Программную. Тут написано Сервопривод и 180° Мне не попадались сервоприводы с какой либо собственной калибровкой крайних положений вала.
у этих сервоприводов бывают кривые крайние положения, например если ему передавать команду 180 градусов, то он может упереться в край, и продолжать пытаться повернуться, соответственно непрерывно работая и нагреваясь. надо в программе ограничить ему пределы например от 10 до 170 градусов и т.п. где у него край выясняется экспериментально - когда привод занимает какое-то положение, он должен остановиться и затихнуть, а если продолжает жужжать или дергается - значит либо слишком большая нагрузка либо уперся в край.