Библиотека Servo.h некорректный диапазон

virf
Offline
Зарегистрирован: 16.03.2016

Начну пожалуй с начала...
Подключал авиа регулятор бесколлекторного двигателя к ардуине а он в крайних диапазонах начинал не корректно работать (мол ошибка)
Причем некоторые регуляторы адекватно воспринимают сигнал и как положено калибруются под него, а вот другие регуляторы упорно отказываются адекватно работать в крайних диапазонах.
Мне стало интересно в чем подвох, взял "сервотестер" (такая штуковина для настройки сервоприводов) и сравнил сигналы с "сервотестера" и с ардуины.
Так вот импульсы ардуина выдает как и предполагалось от 544 до 2400 в микросекунд.
А "сервотестер" работает оказывается в более узком диапазоне от 884 до 2060 микросекунд. (Это примерно, измерения не очень точные)
То есть как я понял типа стандартный диапазон 544 - 2400 микросекунд (то есть 0 - 180 градусов) это больше для ардуино проектов что бы загнать серву в крайнее положение? в моделировании (откуда собственно сервы пришли в ардуино проекты) крайние диапазоны не используются. 
Интересует собственно какой диапазон используется в моделировании? 
Должен же быть какой то стандарт?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

virf пишет:

Интересует собственно какой диапазон используется в моделировании? 

Не логичнее ли про Ардуино спрашивать на форуме Ардуино, а про моделирование спрашивать на форуме по моделированию?

Цитата:

Должен же быть какой то стандарт?

Не знаю, как принято в моделировании, но с точки зрения программирования микроконтроллеров стандарта, вероятнее всего, нет, а пользоваться принято данными из дэйташита на конкретный сервопривод.

virf
Offline
Зарегистрирован: 16.03.2016

andriano пишет:

форуме по моделированию?

Может и логичнее но вопрос ведь "как управлять esc регулятором с ардуины?" так что в роди как относиться к обеим форумам.
andriano пишет:

 из дэйташита на конкретный сервопривод.

Меня интересует не сервопривод а бк регулятор HW30A (но управление у него такое же)
Но вот боюсь даташита на него не найти,
есть только мануал но там такие нюансы не оговорены.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

virf пишет:

Меня интересует не сервопривод а бк регулятор HW30A (но управление у него такое же)

Вы всерьез считаете, что на каждый конкретный прибор разрабатывается отдельный стандарт? (Вы ведь про существование стандарта спрашивали)

Может было бы лучше, если бы Вы четко сформулировали вопрос, на который надеетесь получить ответ на форуме Ардуино? Или, если вопросов несколько, пронумеровали бы их. А то совершенно непонятно, что же Вы хотите узнать.

virf
Offline
Зарегистрирован: 16.03.2016

andriano пишет:

Вы всерьез считаете, что на каждый конкретный прибор разрабатывается отдельный стандарт?

Я же о том же, у всех сервоприводом и esc регуляторов (ну хорошо не у всех, у большинства) один стандарт управления, но какой? 

То есть диапазон 544 - 2400 неправильный (некоторые esc регуляторы с ним не работают)
Какой диапазон импульсов должен быть?
В одних источниках пишут 0.8 - 2.3 мс, в других 0.8 - 2.1мс
Не уж то нет стандарта.... но ведь те же модельные приемники заводского изготовления подключаются к любым сервоприводам и esc регуляторам.

virf
Offline
Зарегистрирован: 16.03.2016

Откопал все таки нужную информацию. (углубился в историю)
По стандарту РРМ сигнала значение от 1 до 2мс,
но по мере развития всей этой техники получилась путаница + у разных производителей есть свои причуды.
На данный момент можно считать стандартом сигнал с периодом 20 мс и с длительностью от 0,8 до 2,2 мс (этот расширенный диапазон позволяет работать с большинством производителей и охватывает также устаревшие устройства)

А вот по чему в библиотеке Servo.h по-умолчанию стоят значения 544 - 2400 непонятно...

По сути же каждый производитель творит что хочет, по этому в регуляторах моторов работающих с этим сигналом присутствует калибровка по минимальному и максимальному сигналу,
а вот с сервоприводами ситуация похуже и тут уже надо лезть искать инфу или подбирать экспериментально.

Теперь вопрос в другом, если у меня будет указано так
servo1.attach(pin, 800, 2200);
servo2.attach(pin);
в таком случае servo2 остается с значениями по умолчанию? а значения меняются только для servo1?
Получается я могу выставить для каждого свои значения а там где не выставлю останутся дефолтные? или не получается?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Тоже в свое время искал эту инфу по стандарту на сервоприводы, но так и не нашел. А поскольку первоначально управлял ими через прямое задание времени "1" ШИМ из AnalogWrite(), предварительно настроив ШИМ на 50гц, то экспериментально было выяснено что SG-90 в частности устанавливаются в свое крайнее положение при значениях 540..2480мсек, и это несколько больше чем 180 градусов.

любой 16-и битный таймер легко ставится в режим ШИМ 50гц и управляется простой записью в его регистр OCCRxn .. просто не въезжаю, зачем надо работать с библиотекой программной эмуляции ШИМ.

Logik
Offline
Зарегистрирован: 05.08.2014

virf пишет:

позволяет работать с большинством производителей и охватывает также устаревшие устройства)

А вот по чему в библиотеке Servo.h по-умолчанию стоят значения 544 - 2400 непонятно...

Обеспечивают по максимуму, а серва отрабатывает из него сколько сможет. При этом в готовом устройстве не так важен диапазон сервы, как диапазон допустимого для механизма который она двигает. Предполагается что конструктор его знает и в вызовы именно его и указывает.

А вот что меня действительно удивило, так это диапазоны в WiringPi из softServo.c

/*
 * softServoWrite:
 *	Write a Servo value to the given pin
 *********************************************************************************
 */

void softServoWrite (int servoPin, int value)
{
  int servo ;

  servoPin &= 63 ;

  /**/ if (value < -250)
    value = -250 ;
  else if (value > 1250)
    value = 1250 ;

  for (servo = 0 ; servo < MAX_SERVOS ; ++servo)
    if (pinMap [servo] == servoPin)
      pulseWidth [servo] = value + 1000 ; // uS
}

Задаются от -250 до 1250, но потом пересчитываются в 750-2250. Зачем отрицательный и несимметричный относительно 0? Похоже ктото хотел коментарий вставить, но слов ненашел )))