Сервопривод
- Войдите на сайт для отправки комментариев
Пт, 29/07/2016 - 18:52
Добрый день, подскажите пожалуйста как решить проблему:
Имеется UNO к ней подключен дисплей Nextion, датчик DS18B20, компьтерный вентилятор и сервопривод FS90.
Так вот проблема: Сервопривод дрожит градусов на 5-10 при посылки данных на Nextion через UART, то есть у меня данные на дисплее обновляются кажные N секунд, так вот и сервопривод через каждые N секунд колеблется, после полебаний встает на заданный угол.
Что пробовал: Питание сервопривода подключал и напрямую и через отдельный блок питания, землю обьединял, пробовал через конденсаторы.
На другой пин тоже пробовал.
Вариант делать detach() перед обновлением экрана не подходит.
Если у кого была такая проблема, посоветуйте решение.
Прежде, чем найти решение, следует понять, в чем состоит проблема.
Дело в том, что управление сервой требует точно выдерживать длительность импульса. Подозреваю, что и для обмена с дисплеем точность временнЫх интервалов также должна выдерживатья достаточно строго.
Значит, что-то чему-то мешает.
Кстатит, как подключаете UART, если в Uno он уже занят USB?
И самое интересное, а почему Вы решили, что "делать detach() перед обновлением экрана не подходит"?
про UART не правильно указал, nextion подключен через 2 и 3 пин, серва на 6 пине.
detach() не подходит, потому что, на экране есть кнопки управления углом сервы, если в этот момент нажать кнопку серва не реагирует.
Правильно ли я понимаю, что используется SoftwareSerial?
Неочевидно, что он дружит с Servo.
Так что, вероятно, какую-то из библиотек придется переписывать.
Или заменить Uno на Mini с подключением Nextion через аппаратный Serial.
Или все-таки делать detach. Вряд ли обмен с дисплеем жрет заметный процент времени.
PS. Да, я не понял, почему "серва не реагирует"? Вы ведь опрашиваете состояние сенсорного экрана? Значит, можете обеспечить, чтобы сигнал на перемещение сервы проходил только тогода, когда серва подключена.
Собственно, подозрение, что проблема не в библиотеках (хотя могла бы быть), а во внутренней логике Вашей программы.
Код бы ещё глянуть, вдруг там куча всяких delay? ;)
Uno для эксперементов что было, купил еще Due но как выснил у него нет EEPROM, пока на Uno потом переведу на мегу, код ниже....
В итоге я решил проблему. Решение: Не обрабатывать событие кнопки, а читать значение (через N секунд), и если оно изменилось выставлять угол.