ESC + Мотор: срыв синхры. Причины и алгоритм тестирования

dROb

Наверняка это уже где-то обсуждалось, но как то не нашлось.

Никогда ранее с данной проблемой не встречался, но на днях пришлось познакомиться. Собран коптер на базе MT3506-25 и регулей Rctimer SimonK 30A (пробовал так же ESC32). Батарея 4S, пропы 10x4.5. Происходит срыв синхронизации, и останов одного из моторов при выполнении резких маневров.

Провел испытания на стенде - да, действительно, при резком увеличении газа из некоторых положений, проблема имеет место быть. Попробовал другую случайную комбинацию - 3S, пропы 12x4.5, на первый взгляд показалось что всё в порядке, но потом, экспериментируя с газом из разных положений, всё равно добился остановки мотора.
Интересует следующее:

  • Какова группа риска (т.е. какие условия наиболее не нравятся моторам+регулям, и чреваты аварийным остановом). Например, как показывает моя практика - Мощный мотор + высоковольтная батарея + маленький пропеллер?
  • Каков алгоритм проверки Моторно+Регуляторной группы на склонность к потере синхронизации? Написал простенькую прогу для Arduino, которая раз в секунду меняет случайный сигнал на регуль. Можно оставить на полчасика поработать, но видится мне это не очень оптимально. Быть может, как это сделано в алгоритме самодиагностики ESC32 (постепенное повышение частоты вращения, с периодическим резким газованием на 20, 40, 60, и 80 %) Кто-нибудь пробовал что-то подобное?
djdron

у esc32 точно также происходит срыв синхры?

ctakah

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

dROb
djdron:

у esc32 точно также происходит срыв синхры?

Увы, проверял в совершенно разное время с разницой в пару недель. Показалось что ESC32 срывает значительно быстрее и охотнее. Но скажу сразу они у меня вообще не настроенные, выставлен ток в 20А (в инструкции к ESC32 написано что надо ток по возможности выставлять как можно меньше. Для этих моторов быть может в 10-12А).
Кстати именно этот мотор указан в ESC32 как “потенциально проблемный”, но с которым “ESC32 при правильной настройке работает без проблем”. На днях попытаюсь наконец сесть и понастраивать. Беда в том, что при всей проработанности ESC32, инструкция по их настройке крайне бедна (кто знает как настраивать - просьба подсобить)

ctakah:

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

Гм, боюсь представить, что будет при установке ещё больших пропов. Ибо у меня срыв идёт как раз при самых мелких пропах (эти моторы явно для пропов больше 10ок)

В общем на днях проведу больше тестов, и попытаюсь сообщить больше данных

ssilk
dROb:

Гм, боюсь представить, что будет при установке ещё больших пропов.

Сергей, давайте я намекну на Вашу ошибку(на этом форуме, кстати, эта ошибка очень распространена…), а Вы на досуге погуглите подумаете, не в этом ли дело…)
Ваш тайгер, это высокомоментный мотор рассчитаный на работу в определенном диапазоне оборотов и нагрузок, а Вы заставляете его работать с пониженной нагрузкой и повышенными оборотами… Смотрите что происходит, проп маленький, легкий, инерция никакая, мотор скачком переходит на большие обороты, регуль(особенно такое дерьмо, как рцтаймер на 30 ампер) не успевает обработать обратную связь по неактивной фазе, и некоторое время продолжает синхрить мотор, как будто тот еще разгоняется. В результате, наступает момент, когда магнит уже пролетел отталкивающий полюс и нарывается на притягивающий… Понимаете? Чтобы этого не происходило, нужно использовать подходящий проп и адекватное пропу напряжение питания, про регуль от нормального производителя я уже не напоминаю…)
Конкретно для Вашего 3506 имеющего 650 оборотов в минуту на вольт, подойдут пропеллеры 12" на напряжение 14.8 вольта или 13-14" на напряжение 11.1 вольта…
Кстати, при описаном процессе, когда мотор крутится быстрее чем надо, еще и мощность падает(вместе с КПД), а нагрев увеличивается…

dROb
ssilk:

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

Именно такое и было мое первоначальное предположение! Спасибо, будем изучать вопрос, в т.ч. и на практике!!

Кстати, попутно, кому приходилось иметь дело с регулями ESC32 - не хотелось бы долго и нудно наступать на грабли самому. Увы, из-за скудноты документации - есть вопросы.

Да, и кстати, подскажите по алгоритму тестирования. Хочу закончить простейший тестер на Ардуине
Как видите, мой случай был не так прост в обнаружении, - простым серво тестером его можно и не заметить.

5yoda5

А я для тяжелых коптеров беру высоковольтные на 40A - проблем не знаю.

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

dROb
GrafSher:

“Все уже сделано до нас”(с)

У автора вообще немало интересных статей.

Да, автор интересен как своего рода эксперт по ESC.
Но методика его, как мне показалась, излишне упрощена. В тесте самодиагностики ESC32 проделывается значительно большее количество тестов. Совмещу эти две методики в одной 😃

5yoda5:

А я для тяжелых коптеров беру высоковольтные на 40A - проблем не знаю.

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

Вот мой случай как раз показывает обратное - мотор либо вообще без пропеллера, либо с очень мелким. Срывает только в путь!! 😃
Касательно запасов по мощности - дело это небесполезное (слегка увеличивает КПД регуля за счёт того что рассчитанные на больший ток регули имеют ниже внутреннее сопротивлени), но и не сильно нужное…

Arseni
GrafSher:

“Все уже сделано до нас”(с)

У автора вообще немало интересных статей.

Полезная штука. Я так тестировал разные прошивки на Afro. Даже немного допилил, чтобы генерировать еще более резкие скачки газа.
Удобно не только с точки зрения синхры, но и просто оценить отзывчивость ВМГ на колебния газа.

Кстати, с довольно капризными моторами ( 4220 ) лучше всего справилась прошивка BlHeli. Приемлимо показала себя на стенде и в полете никаких проблем. тьфу три раза.
А SimonK вот так:

Я не большой спец, но кажется группа риска - это сочетание моторов с большим количеством полюсов и “быстрых” регуляторов.

djdron
dROb:

Вот мой случай как раз показывает обратное - мотор либо вообще без пропеллера, либо с очень мелким. Срывает только в путь!!

это похоже не подобран тайминг, либо в прошивке какие-то фильтры, т.к. мотор без нагрузки быстро набирает обороты

  • у многополюсных с низким kv большая индуктивность и больше “переходной процес” при коммутации, сложнее определять положение ротора
dROb
Arseni:

Полезная штука. Я так тестировал разные прошивки на Afro. Даже немного допилил, чтобы генерировать еще более резкие скачки газа.
Удобно не только с точки зрения синхры, но и просто оценить отзывчивость ВМГ на колебния газа.

Кстати, с довольно капризными моторами ( 4220 ) лучше всего справилась прошивка BlHeli. Приемлимо показала себя на стенде и в полете никаких проблем. тьфу три раза.
А SimonK вот так:

Sync issues. Afro ESC 30a and 4220 650kV

Я не большой спец, но кажется группа риска - это сочетание моторов с большим количеством полюсов и “быстрых” регуляторов.

Арсений, если вдруг сохранилась ваша методика проверки - просьба поделиться! Хотя бы алгоритмом.

Мне видится такой алгоритм:


for (start_uS=1100; start_uS<1900; start_uS+=100){
    output(start_uS);
    delay;
    for (end_uS=start_uS+100; end_uS<1900; end_uS+=100){
        output(end_uS);
        delay;
        output(start_uS);
        delay;
   }
}

Что даст мотору попрыгать до разных оборотов с разных оборотов. (вроде такой же примерно алгоритм у ESC32)

Вечерком постараюсь попробовать.

Arseni

Кода под рукой не осталось, но Ваш вариант даже лучше - перебирает всевозможные пары. У меня было начало, как у Owen, а после его кода просто добавил резкие скачки псевдослучайной величины и длительности.

GrafSher

Мне видится, что правильным будет алгоритм, имитирующий условия реального полета.

dROb

В общем было немного времени - сформировалась такая программка. Чуток потестил - всё работает, как ожидалось. Из странностей - почему то с помощью программки ESC32 не входит в рассинхру без пропеллера. Буду тестить дальше.

/*************************************************************************************
  Sergey dROb, Oct 2014, 

  This program will test ESC+motor (or servo), sending range of valid PPM signals to the output pin at "servoPin"
  Primarily, this is used to detect sync issues, happening when Motor is quickly accelerating from low to high speed.

  If LCD display is connected - it displays number of test and Start-End microseconds of PPM signal (you can then record, which scenario is problem for your motor)

  Connection: Plug the LCD Keypad to the Arduino. Output PPM will be on servoPin. Conect GND and servoPin to ESC.
  Discussion: 
**************************************************************************************/

#include <LiquidCrystal.h>
#include <Servo.h>

Servo myservo;  // create servo object to control a servo

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);           // select the pins used on the LCD panel

int servoPin = 22;

int lcd_key     = 0;
int adc_key_in  = 0;

#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5


void setup(){
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("Starting motor");

  lcd.setCursor(0,1);
  lcd.print("In 3 seconds..");
  myservo.attach(servoPin);

  myservo.writeMicroseconds(950);  // Init ESC

  delay(3000); // Waiting 3 seconds to avoid chopping of user hands

  myservo.writeMicroseconds(1250); // Start motor on low speed
}


void loop(){

  int test_no=1;
  int start_uS;
  int end_uS;
  int tact_delay=1000;

  lcd.clear();
  lcd.print("No: Start: End:");


  // Main cycle - start series of cycles, when motor jumps from set of speeds to higher set of speeds.
  for (start_uS=1100; start_uS<=1900; start_uS+=100){  // Start PPM from which motor will jump to End PPM
    servoOutput(start_uS);
    delay(tact_delay);
      for (end_uS=start_uS+100; end_uS<=1900; end_uS+=100){ // End PPM of the current cycle
        displayData(test_no, start_uS, end_uS);

        servoOutput(end_uS);
        tact_delay=end_uS - start_uS; if (tact_delay<400) tact_delay=400;// Intellectual delay. Pause will be bigger if motor have to change the speed a lot. But not less 0.4 sec
        delay(tact_delay);
        servoOutput(start_uS);
        delay(tact_delay);
        test_no++;
     }
  }

  lcd.setCursor(0,1);

  lcd_key = read_LCD_buttons();
  dispatch_keys(lcd_key);
}


void servoOutput(int uS){
  myservo.writeMicroseconds(uS);
}

void displayData(int test_no, int s_uS, int e_uS){
  lcd.setCursor(1,1);
  lcd.print(test_no);
  lcd.setCursor(5,1);
  lcd.print(s_uS);
  lcd.setCursor(11,1);
  lcd.print(e_uS);
  lcd.print("     ");
}

//////////////////////////////////////////////////////////////////////////////
// This is actually not really used. Added to be able to get Keypad presses //
//////////////////////////////////////////////////////////////////////////////

int read_LCD_buttons(){               // read the buttons
    adc_key_in = analogRead(0);       // read the value from the sensor

    if (adc_key_in > 1000) return btnNONE;

    if (adc_key_in < 50)   return btnRIGHT;
    if (adc_key_in < 250)  return btnUP;
    if (adc_key_in < 450)  return btnDOWN;
    if (adc_key_in < 650)  return btnLEFT;
    if (adc_key_in < 850)  return btnSELECT;

    return btnNONE;                // when all others fail, return this.
}




void dispatch_keys(int key){
     switch (key){

       case btnRIGHT:{
            break;
       }
       case btnLEFT:{
            break;
       }
       case btnUP:{
             lcd.print("UP    ");
             break;
       }
       case btnDOWN:{
             lcd.print("DOWN  ");
             break;
       }
       case btnSELECT:{
             lcd.print("SELECT");
             break;
             setup();
       }
       case btnNONE:{
             ("NONE  ");
             break;
       }
   }

}
GrafSher
dROb:

почему то с помощью программки ESC32 не входит в рассинхру

а что это значит? Что за программка?

ssilk
dROb:

не входит в рассинхру без пропеллера

Так на холостом ходу и не должно… Вы токи то посмотрите, там колебания 0.2 ампера…

dROb
GrafSher:

а что это значит? Что за программка?

Неверно выразился, сори. Я имел в виду что при тестировании регулей ESC32, моя программка на Ардуино почему то не вызывает срывов синхры, которые в то же время вызывает встроенный алгоритм тестирования/калибровки ESC32 (выполняется на этих регулях с помощью QGroundControl)

ssilk:

Так на холостом ходу и не должно… Вы токи то посмотрите, там колебания 0.2 ампера…

Хотел сослать Вас на сообщение ssilk выше, а потом смотрю - а это Вы !! 😃
Вы же как раз сами всё объяснили ранее - слишком облегченный мотор делает слишком быстрые ускорения, и контроллер не в силах за ним уследить 😃
Ну и повторюсь - на практике, мотор без пропеллера, подсоединенный к ESC32 - теряет синхру при определенных условиях, при процедуре самодиагностики ESC32 (алгоритм аналогичный моей программе)

ssilk
dROb:

Вы же как раз сами всё объяснили ранее - слишком облегченный мотор делает слишком быстрые ускорения

Это относится к слишком маленьким пропам, на ХХ работают совсем другие принципы из за сверхмалых токов, ЭДС наводимая в неактивной фазе может быть ниже порога чувствительности, пренебрежительно малые магнитные силы и так далее…

dROb:

при процедуре самодиагностики ESC32

Так может проблема в самой процедуре? Я как то слабо понимаю, в чем практический смысл этих упражнений, ну, цель какая?))

kreef
dROb:

Собран коптер на базе MT3506-25 и регулей Rctimer SimonK 30A . Батарея 4S, пропы 10x4.5.

Те же моторы, регули Afro SimonK 30A, и батарея 4S (но пропы 12х4.5) Стабильный срыв синхры с неизбежным падением квадрика, несколько раз подряд.
Замена регулей на ZTW Spider Series 20A OPTO (остальная конфигурация без изменений) - проблема полностью ушла, сорвать синхронизацию и уронить квадрик не получается ни при каких условиях. Почему хваленные Afro не заработали в данной конфигурации разбираться не стал.

GrafSher
dROb:

Я имел в виду что при тестировании регулей ESC32, моя программка на Ардуино почему то не вызывает срывов синхры, которые в то же время вызывает встроенный алгоритм тестирования/калибровки ESC32 (выполняется на этих регулях с помощью QGroundControl)

Можно попробовать записать алгоритм изменения сигнала, который в этом случае применяется. Или… он зашит в самом регуляторе? Тогда хрен его выцарапаешь оттуда. 8(

dROb
kreef:

Те же моторы, регули Afro SimonK 30A, и батарея 4S (но пропы 12х4.5) Стабильный срыв синхры с неизбежным падением квадрика, несколько раз подряд.
Замена регулей на ZTW Spider Series 20A OPTO (остальная конфигурация без изменений) - проблема полностью ушла, сорвать синхронизацию и уронить квадрик не получается ни при каких условиях. Почему хваленные Afro не заработали в данной конфигурации разбираться не стал.

Вообще эти моторы считаются проблемными… Но проблемы, в общем решаемые. Ваш успех с ZTW относительно Afro, боюсь, мог обеспечиться за счёт того, что ZTW - не SimonK. СимонК прошивка крутая, быстрая, но, увы, за счёт этого и потенциально опасная для наших моторов. Подтвердите, ZTW ваши - не SimonK ?

ssilk:

Это относится к слишком маленьким пропам, на ХХ работают совсем другие принципы из за сверхмалых токов, ЭДС наводимая в неактивной фазе может быть ниже порога чувствительности, пренебрежительно малые магнитные силы и так далее…

Так может проблема в самой процедуре? Я как то слабо понимаю, в чем практический смысл этих упражнений, ну, цель какая?))

Да, собсно мы уже далековато ушли от цели 😃 А цель была собсно простая - у меня, как и у kreef, было пару падений из -за того что в небе моторы теряли синхронизацию, и останавливались. Я хотел придумать способ как можно протестировать комбинации Мотор+Регуль+Проп, чтобы видеть проблемы на столе, а не в воздухе.
Мои последние тесты без винтов, конечно, вызывают недоумение)))) Увы, по причине нехватки времени последнее время, - приходилось тестировать программу ночью, и чтобы не будить семью приходилось не одевать пропеллер.
Сегодня завтра наконец проведу Live тесты, на разных регулях, моторах, батареях.

GrafSher:

Можно попробовать записать алгоритм изменения сигнала, который в этом случае применяется. Или… он зашит в самом регуляторе? Тогда хрен его выцарапаешь оттуда. 8(

Мне показалось, я его правильно подслушал и перенял…

В общем пока немного странно, что на единственном тесте который я смог сделать, (мотор без пропеллера), моя программка, и режим калибровки/тестирования ESC32, при похожести своей, привели к разным результатам (Моя программа не вызывает проблем синхронизации, а режим калибровки - ESC32 - вызывает.). У меня только одно объяснение - возможно что регулятор находится в разных режимах. Когда тестирую его я с помощью Ардуины+Программы, он находится в обычном, рабочем режиме. А когда самокалибровка - специальный, Жёсткий режим, который приводит к срыву синхры.

Тем не менее - гораздо интереснее будет, когда я наконец смогу погонять реальный Мотор+Проп+3s-4s батарейку! Надеюсь, будет это сегодня! Stay tuned =)

ssilk
dROb:

Подтвердите, ZTW ваши - не SimonK ?

По моим данным, таки Саймон… Может дело в версии прошивки? Почитайте там описание, может что натолкнет на идею…

dROb
ssilk:

По моим данным, таки Саймон… Может дело в версии прошивки? Почитайте там описание, может что натолкнет на идею…

Да, действительно, относительно свежий СимонК ! Возможно, в других Ваших регулях стоял СимонК до 2012года (в интернете много упоминаний, что эти версии крайне плохо работали с блинчиковыми моторами. В то же время, у прошивки, насколько я знаю, есть еще и настройки, которые кто-то редко когда трогает. Быть может они тоже разные в регулях.

Наконец, первые тесты и первые результаты. Из-за ограниченности времени удалось провести тесты только на двух регулях (RCTIMER 20A SIMONK, и ESC32), а ещё в наличии был T-MOTOR T40A, но его мы потестил сегодня.
Тесты проводились с помощью Ардуино Мега+Программка Моя + Мотор T-Motor MT3506-25 + батарея 3S +винт 12x4.5
Результаты тестов:

    • ESC32 ненастроенный (не выполнена калибровка тока, и максимум тока выставлен в 20А) ловит срыв синхры уже на 7тесте (прыжок оборотов с 1100 до 1700мкС), при измеренном максимуме тока всего в 6-7 Ампер (измеритель, правда, довольно инертен, и, думаю, не фиксирует резкие пики тока, которые скорее всего в разы сильнее)
    • RCTimer 20A SimonK в комбинации с этим мотором, вообще не подвержен срыву синхронизации, все тесты проходит на ура

Вывод: использованная программа вполне может применяться для тестирования ВинтоРегулеМоторной группы на склонность к потере синхронизации.

ssilk
dROb:

Возможно, в других Ваших регулях стоял СимонК до 2012года (в интернете много упоминаний, что эти версии крайне плохо работали с блинчиковыми моторами.

Во первых, не в моих…) У меня за пару лет ни одного срыва не было, а если и были, то я их не заметил…) А во вторых, 3506 вовсе не блинчик…) Блинчиками называют многополюсные моторы, 20 и более полюсов…)