Серва управляется потенцеометром(джойстик) через функцию map, иногда когда отпускаю джойстик серва начанает вибрировать, иногда стоит на месте как должна стоять, прочитал сигнал на серву через serial monitor и выяснил что в случае когда все нормально показания постоянны (89градусов), когда тресется гуляют (89-90 градусов) джойстик не трогаю. Джереми блум говорит в видеоуроке по этому поводу что надо сделать фильтр аппаратно или програмно, подскажите пожалуйста как решить проблему?
ссылки нет, у меня есть только видео 0502 называется моторы и транзисторы, в этом уроке он крутит серву по средствам IR дальномера
Код (Text): smoothedValue = (double) (1.0 - SMOOTHING_FACTOR) * smoothedValue + instantValue * SMOOTHING_FACTOR; где smoothedValue - сглаженное значение instantValue - значение, полученное от IR-сенсора (в вашем случае джойстика) SMOOTHING_FACTOR - коэффициент сглаживания. Он должен быть меньше единицы. И чем он меньше, тем существеннее сглаживание, но тем больше запаздывание фильтра Можете в MS Excel построить график и поэкспериментировать со значением SMOOTHING_FACTOR
Здравствуйте. Наверно у меня похожая беда.. Взял скетч с интернета. Залил на Ардуино UNO/ Ардуино UNO - Тройка шилд - потенциометр - сервопривод. Когда НЕ кручу потенциометр. на мониторе порта проскакивают небольшие скачки. Допустим : при этом серва слегка шуршит и если держать серву в руках, чувствуются какие - то колебания внутри. Скорее всего. вдобавок кушает...электричество. Никаких помех вроде быть не должно. Ардуино UNO - Тройка шилд - потенциометр - сервопривод(БЕЗ нагрузки). Больше ничего нет. Кстати да, у Джереми Блюма в серии "моторы и транзисторы. Часть вторая". На пятой минуте...5;24 видно, что качалка у сервы ходит. дергаеться Но у него, может от дальномера серва дергаеться. А при потенциометре почему она также не стоит на месте? Говорит, что это просто исправить. А как? Нет ответа. Или он не про это. И в чем может быть причина? Скажите, пожалуйста. Сервопривод брал здесь, FS5106B/ С экспоненциальным фильтром, я не понял, простите.
Существует несколько причин дрейфа сервы. Первые несколько: - механический контакт бегунка и резистора в самом потенциометре - навесной монтаж (хлипкий контакт в цепях) - погрешность АЦП - пульсации питающего напряжения - особенности реализации самой сервы - нестабильность ШИМ ардуины Как следствие, вы получаете 37, 37, 37, 38, 37 и т.д. Фильтрация входящих данных применяется для сглаживания сигнала, когда нехарактерные или случайные значения отбрасываются или нормируются. На примере: вы намеряли 5 значений: 37, 37, 37, 38, 37. Среднее значение = (37 * 4 + 38) / 5 = 37,2 Если вместо непосредственно измеренного значения при управлении сервой использовать среднее значение, то у вас получился бы такой ряд (очень грубо): 37.2, 37.2, 37.2, 37.2, 37.2 - серва не дергается. Вычислять среднее несколько более затратно, чем применить on-the-fly фильтрацию типа экспоненциальной, когда вы скармливаете фильтру измеренное значение, а он вам возвращает усредненное, которые вы потом должны использовать при управлении сервой.
Спасибо. Сейчас. опираясь на ваш ответ, ищу причину. Поменял потенциометр и на всякий случай отдельно запитал серву. Качалка визуално, перестала дергаться. Но когда берешь в руки, внутри как будто шевеления. Мне уже кажется, что я придираюсь к серве и что какие то легкие подергивания внутри должны быть. Попытался собрать код для фильтра по среднему показанию с потенциометра. Вот что получилось. однако, что то не очень помогло. Не дергается, но шуршит чего. Про фильтрацию типа экспоненциально. хотел погуглить. Но там статьи и рефераты по высшей математике что ли. испугался и убежал оттуда Поэтому я попытался вставить вашу формулу как есть в имеющийся у меня код. я по -видимому, пытаюсь угадать, методом тыка. Потому что, это тоже не прошло. На днях собираюс поставить новую серво. и еще думаю, Ардуино запитать отдельно от компа. Возможно. как вы писали у меня действительно комп не новый и иногда. когда подключаешь внешний жесткий диск, он виснет. Может от этого? Спасибо вам за ответ. Буду искать.
экспонентциальный фильтр в данном случае не понацея от данной проблемы, если данные гуляют 48,47,48, 48, 48, думаю лучше если такой мелкий разбег то написать код к серве таким образом что бы была зона не чувствительности +/-1 градус, думаю человеческим глазом и рукой на чувствительность обьекта управляемого сервой не повлияет. А вообще по моему мнению экспоненциальный фильтр который показал roggedhorse это очень хорошая вещь с большой буквы !!!! За что ему огромное спасибо!!! Дело в том что рано или поздно придется столкнутся с проблемой. Просто бывает такие ситуации когда надо читать стабильные показания с сенсора(не важно кокого типа), на который поступает сигнал в виде не стабильных колебаний, в определенном диапозоне(к примеру давление масла прыгает от 1,5кг/см3 до 2,5кг/см3, при понижении читаемого параметра оно меняется с 1,0кг/см3 до 1,3кг/см3), тут то и офигенно нужна экспонента, вещь в автоматике просто оболденная!!!