Как остановить сервопривод, если он достигнет сопротивления?
Я пытаюсь сделать устройство, которое будет поворачиваться под ключ с помощью сервопривода.
Однако я хочу, чтобы он перестал поворачивать ключ, если сопротивление слишком велико (то есть он заблокирован и никогда не повернется).
Как мне это сделать? Могу ли я просто сказать ему повернуть, а затем через некоторое время вернуть его обратно (потому что, если он заблокирован или нет, это должно быть сделано в течение этого времени)?
Я не хочу повредить сервопривод, пытаясь повернуть то, чего он не может повернуть.
Я использую Arduino Uno и библиотеку «Servo.h». Используемый сервопривод — Batan S1123.
@Student-LTB, 👍6
4 ответа
Лучший способ — использовать внешнюю обратную связь. Датчик Холла например. 200–250 мс после использования сервопривода, проверка состояния датчика Холла
Вы можете:
Используйте концевой выключатель, чтобы определить, что сервопривод завершил движение. Если он не завершит работу в разумный срок, верните его в исходное положение. Или
Измерьте ток двигателя, подключив резистор низкого номинала к заземленной стороне источника питания двигателя. С помощью одного из контактов A/D измерьте напряжение на резисторе со стороны двигателя, которое увеличивается с ростом тока двигателя. Вам нужно будет выяснить, какой ток потребляет двигатель при нормальной работе. Если двигатель заглохнет, ваш контроллер может почувствовать это, увидев увеличение тока. Выберите значение (например, 150 %) перегрузки по току в качестве индикатора остановки двигателя и верните его в исходное положение.
Первый способ проще реализовать, но он может привести к остановке двигателя, пока вы ждете истечения ожидаемого времени движения. Второй способ позволяет обнаружить заминку и немедленно принять меры.
Я не думаю, что решение с концевым выключателем помешает сервоприводу отключить шестерни, если он заблокируется до того, как вы проверите переключатель. Вариант 2 был бы лучшим вариантом для изучения., @linhartr22
Вы должны понимать, что управляете сервоприводом импульсами ШИМ. Сервопривод преобразует ширину импульса в величину вращения. Стандартный сервопривод не имеет средств указания своего текущего положения. Вы можете только сказать ему, где вы хотите, чтобы он был., @linhartr22
Если бы он мог снять шестерни, значит, он недостроен; он не должен быть в состоянии повредить себя при предсказуемых обстоятельствах (остановка). Но даже в этом случае измерение тока должно дать вам достаточную возможность защитить его., @JRobert
«Если он мог снять шестерни, значит, он недостроен» - это обычно верно для игрушек и небольших приложений (так что, вероятно, это также относится и к ОП), но не верно в целом. Большинство продуктов, двигатель которых не предназначен для работы на скорости 0 об/мин (миксеры и т. д.), легко разбирают шестерни при остановке, если только в них не реализована защита в программном обеспечении., @Dmitry Grigoryev
Я предлагаю определить ток, текущий через сервопривод, или использовать потенциометр, чтобы определить, движется ли сервопривод. Вы также можете поместить сцепление между сервоприводом и ключом, но тогда вы не будете знать угол поворота ключа в любой момент времени.
Это зависит от того, какого именно провала вы ожидаете. Если вы боитесь, что двигатель может сломать ваше соединение (шестерни, шатуны, ремни и т. д.), вам придется реагировать очень быстро, и это возможно только при измерении тока. Для достижения эффективности потребуется распознавать ток и очень быстро реагировать на перегрузку по току.
Если вы точно знаете, что ваше рычажное соединение выдерживает опрокидывающий момент двигателя, вам просто нужно беспокоиться о перегреве двигателя. Такую защиту можно реализовать с помощью датчика положения или концевого выключателя, если он у вас есть. Вы могли бы даже реализовать защиту вообще без датчиков: дайте двигателю поработать ровно столько, чтобы он выполнил свою работу, а затем остановитесь: он либо повернет ключ, либо нет, но он не перегреется, если заглохнет на какое-то время. секунда или две.
- Как заставить сервопривод вращаться на угол больше 180°
- Подключение Arduino к сервоприводу с внешним источником питания
- Мой сервопривод не работает плавно
- Бесполезная проводка коробки и код
- Почему сервопривод не перемещается по углам должным образом
- Микро сервопривод не работает с Arduino UNO
- поворот позиционного серводвигателя более чем на 180 градусов
- Почему loop() останавливается?
Или датчик тока на линии питания сервопривода: измените положение, когда вы обнаружите, что ток возрастает из-за остановленного двигателя., @CrossRoads
Да, это возможно. Холл кажется проще, @Pararera
Не могли бы вы рассказать, как вы будете использовать датчик Холла для выполнения этой задачи?, @mikeY
Поместите небольшой магнит на ключ и датчик Холла рядом с конечной точкой ключа., @Pararera
Ах. Таким образом, если датчик не может обнаружить магнит через x моментов после запуска сервопривода, обнаружено сопротивление, прекратите нажатие., @mikeY