Вибрация сервопривода.
- Войдите на сайт для отправки комментариев
Пнд, 03/04/2017 - 15:38
Написал скетч для манипулятора, все работает, сервы крутятся. Однако после запуска серво двигатели начинают вибрировать и вся конструкция шатается. Как можно стабилизировать программно? Питание от 2х банок 18600 соединеных последовательно.
Скетчик:
#include <Servo.h>; const int pinX = A4; const int pinY = A5; Servo Osnova; Servo Val1; Servo Val2; int Val1Data; int Val2Data; const int OsnovaData = A3; void setup() { Val1.attach(14); Val2.attach(15); Osnova.attach(16); pinMode(pinX, INPUT); pinMode(pinY, INPUT); pinMode(OsnovaData, INPUT); Serial.begin(9600); Osnova.write(90); Val1Data = 90; Val2Data = 90; } void loop() { int Z = analogRead(OsnovaData); int X = analogRead(pinX); int Y = analogRead(pinY); X = X / 400; Y = Y / 500; Z = Z * 10 / 56; Serial.print(Val2Data); Serial.print("\t"); Serial.print(Z); Serial.print("\t"); Serial.println(Val1Data); if (X == 0 & Val1Data < 160) { Val1Data++; } else if (X == 2 & Val1Data > 0) { Val1Data--; } if (Y == 0 & Val2Data < 180) { Val2Data++; } else if (Y == 2 & Val2Data > 0) { Val2Data--; } Osnova.write(Z); Val1.write(Val1Data); Val2.write(Val2Data); delay(20); }
а так? delay(1488);
По моему это проблема программно не решается. Это старинная грабля моделистов. Не знаю какие у вас сервы, скорее всего аналогвые. Переходить на цифровые и желательно приличных производителей.
Сервы самые дешевые, SG90
Хотите избавиться от вибрации - избавляйтесь от библиотеки servo.h.
Не соглашусь, что причиной вибрации "дрожжания" серво является библиотека. sg90 самые китайские аналоговые сервомашинки. Они в принципе имеют люфты плохо совместимые со внутренним энкодером.
Плюс к этому, судя по вашему скетчу, вы читаете аналоговые входы для установки положения серво. Выведите себе в консоль значение получаемые с аналоговых входов и посмотрите на сколько "пляшут" исходные данные. Начинаю склонятся, что у вас изначальные данные не стабильны.
Колебаний значений нет, проверил. Пляшет только основа (ось Z), остольные только вибрируют. Если зафиксировать манипулятор в одном положении, то все затихает, но стоит только подергать стик и покрутить потенциометр - все начинает трясти.
Не соглашусь, что причиной вибрации "дрожжания" серво является библиотека.
Ну, соглашаться или нет - это личное дело каждого.
Реальное же состояние дел заключается в том, что даличие двух обстоятельств:
- пограшность позиционирования сервы,
- принцип работы библиотеки servo,
приводят к вибрации.
Достаточно устранить хотя бы одно из двух указанных обстоятельств, чтобы дрожание прекратилось.
Фактически из двух способов устранения дрожания один является программным, а другой - аппаратным.
Т.е. программно устранить вибрацию можни лишь, отказавшись от библиотеки.
Колебаний значений нет, проверил. Пляшет только основа (ось Z), остольные только вибрируют. Если зафиксировать манипулятор в одном положении, то все затихает, но стоит только подергать стик и покрутить потенциометр - все начинает трясти.
В статике может не быть колебани значений, вопрос в динамике. Если построить график по изменению входных данных, то он может плавно нарастать/уменьшаться либо с "зубцами" на графике. Они скорее всего есть. В коде ни каких сглаживаний входных параметров нет. По этому напрашивается предположение о нестабильности входных значений, которые можно подавить каким либо программным алгоритмом.
При вычислении угла поворота вы оперируете углом поворота, т.е. 180 значениями, если использовать ширину импульса примерно от 1000 до 2000, то точность управления будет выше примерно раз в 5 соответсвенно рывки/погрешности при установке угла будут болле точно соответствовать входным данным. Возможно для аналоговой сервы это не актуально, но для цифровой будет в самый раз.
Как можно избавиться от дрожжания серв отказом от использовании штатной библиотеки я не знаю.
Возвращаясь к самой серве. В разных источника данные по крутящему моменту отличаются от 1.3 до 2 кгсм. Я проверял несколько серв кулпенных в разное время у разных поставщиков, максимум, что удалось получить 1кг при 6 вольтах и токе 0.7А с последующим выбрасыванием серв, т.к. пластиковые шестерни заминались на этих нагрузках и появлялись большые люфты в редукторе. Реально сервы работали при нагрузке до 0.5 кг, при нагрузках выше начиналась "вибрация", т.к. серве не хватало момента для передачи усилия.
Нагрузка маленькая, около 100г. Убрать рывки получилось отключением сервы во время бездействия.
Но вот как решить проблему с другими... Там все сложнее. Отключать нельзя, держать ничего не будет, а с дребежанием мириться не хочется.
дребезжание это потому что нагрузка поворачивает серву, а серва пытается ее удержать