Серва теряет ориентацию.

vdm
vdm аватар
Offline
Зарегистрирован: 29.08.2016

Добрый день.

Есть серва, стоит на управлении рулевыми колесами машины. В скече приемника залил ограничения угла поворота 



#define WHEEL_MIN  0 // крайнее левое положение джойстика
#define WHEEL_MID  127 // среднее положение джойстика
#define WHEEL_MAX  255 // крайнее правое положение джойстика

#define ANGLE_MIN 60 // крайне левое поворот колес
#define ANGLE_MID 90 // руль прямо
#define ANGLE_MAX 150 // крайнее правое положение колес

кручу сервой вот так:

frontWheel.write(map(steering, WHEEL_MIN, WHEEL_MID-GAPE, ANGLE_MIN, ANGLE_MID));

проблема в следующем. После определенного пробега (менее минуты), серва "теряет" ориентацию и "забывает" пределы. т.е. при положении джойстика "прямо" серва может смотреть куда угодно, и углы поворота колес становтся произвольными. В одну сторону могут вообще не поворачиваться, в другую - чуть-чуть.

Помогает перестановка качалки сервы и перезагрузка приемника.

Даже и не знаю, что еще придумать, чтобы победить проблему.

 

З.Ы. Тему про сервы в шапке читал, но не нашел ответ...

b707
Offline
Зарегистрирован: 26.05.2017

Во-первых, дефайны ANGLE заданы несимметрично, влево поворот на 30 градусов, а вправо на 60

Во-вторых, map я бы задавал от мин до макс так:

frontWheel.write(map(steering, WHEEL_MIN, WHEEL_MAX, ANGLE_MIN, ANGLE_MAX)

 

vdm
vdm аватар
Offline
Зарегистрирован: 29.08.2016

b707 пишет:

Во-первых, дефайны ANGLE заданы несимметрично, влево поворот на 30 градусов, а вправо на 60

Уже исправил

b707 пишет:

Во-вторых, map я бы задавал от мин до макс так:

frontWheel.write(map(steering, WHEEL_MIN, WHEEL_MAX, ANGLE_MIN, ANGLE_MAX)

 

Спасибо, попробую.