Goblin 700 RAW Nitro (Benzin)

Slava911

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

Палец в месте контакта с поршнем и не должен двигаться. Синий цвет это означает перегрев (бедная смесь, недостаточное охлаждение и т.п.).

Из практики: стопорные кольца пальца вылетают - неисправные подшипники коленвала (передний или коренной без разницы), в добавок разбивает нижнюю головку шатуна.

L2-Max

С кольцом момент я учел. Его не пришлось помечать, потому что нижняя сторона притерта к поршню и блестит, а верхняя черная и матовая.

Zigzag
Slava911:

Из практики: стопорные кольца пальца вылетают - неисправные подшипники коленвала (передний или коренной без разницы), в добавок разбивает нижнюю головку шатуна.

Поршень при этом долбит дном головку? Еще учтите возможность детонации, тоже замечательная штука.

L2-Max

Я немного ошибся с определением температуры по цвету побежалости. Синий это ~300 градусов, а не 500, что вполне ожидаемо учитывая сколько времени мотор работал на максимальной мощности. Такая температура хоть и кажется высокой, но не критична для поршневой.

Solo:

Палец стремно выглядит … почему такой темный в местах контакта с поршнем?

Получается что это тоже цвет побежалости - фиолетово/коричневый, а это ~270 градусов

В общем, посадочные я поправил и поставил новые стопоры. 2 бака успел отлетать. Решение именно менять стопоры принял потому, что старые уменьшились в диаметре на 0.5мм в свободном состоянии в сравнении с новыми и я подумал, что может в этом причина их вылета. Так же один старый слегка изменил свою форму.

Новый 7.1mm.

Старый 6.6mm.

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

L2-Max

Получается, что нужны именно для смазки. Палец свободно проворачивается как в шатуне так и в поршне.

Solo

Получается, что за такт работы он при поворачивается в поршне и “пилит” торцом “ушки” стопоров … 😦
Единственный простой вариант - полирнуть торцы пальца 😃

scgorodok

я полировал, чё потом стало не знаю) продал
раньше были другие стопра, плоские

L2-Max

Упал при выполнении авторотации. Немного не рассчитал точку приземления. На трех метрах щелкнул отмену, но было уже поздно. Обороты были слишком малы и мотор неуспел раскрутиться. Упал в траву на ноги. При дальнейшей попытке взлететь верт начал заваливаться на правый бок и на циклик почему то не реагировал. Холд и верт уже на боку.

И снова технический отказ. Вот в таком положении была серва элеватора после падения.

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

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

Остатки винта я высверлил и установил винт на 2мм длиннее, потому что покоцал начало резьбы, а когда начал монтировать суппорт на редуктор, то внем сорвало одну из двух М3 резьб, блин. Вроде бы и тянул без фанатизма. Короче, и там я поставил винт на 2мм длиннее (отверстие там сквозное, можно упереться болтом в зубчатое колесо!) и залил фиксатором.

Думаю или купить новый корпус редуктора или перенарежу под М4 резьбу. Пока буду так летать.

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

L2-Max
Solo:

Единственный простой вариант - полирнуть торцы пальца

scgorodok:

я полировал, чё потом стало не знаю)

Думал об этом, но не полировал, так как потертости обнаружил уже после сборки мотора.

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

Увидим какое состояние посадочных будет после следующих 10-15 литров.

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

local input = { { "thri", SOURCE } }

local output = { "thro", "rpmt", "rpm", "errp", "erri", "errd" }

local id_temp = getFieldInfo( "engT" ).id
local id_rpm = getFieldInfo( "RPM" ).id
local id_gvar1 = getFieldInfo( "gvar1" ).id
local id_gvar2 = getFieldInfo( "gvar2" ).id
local id_gvar3 = getFieldInfo( "gvar3" ).id
local id_gvar4 = getFieldInfo( "gvar4" ).id
local id_ls1 = getFieldInfo( "ls1" ).id
local id_s2 = getFieldInfo( "s2" ).id
local id_sa = getFieldInfo( "sa" ).id
local id_sf = getFieldInfo( "sf" ).id

-------- PID State ----------
local throttle_out = 0

local err_last_input = 0
local err_last_error = 0

local err_p = 0
local err_i = 0
local err_d = 0
local err_d_tau = 0.6

local err_i_max = 20 * 10.24

-----------------------------
local err_input_max = 2000

local rpm_ctrl_min = 3000
local rpm_ctrl_range = 2000

local temp_min = 10
local temp_max = 75
local temp_range = ( temp_max - temp_min )

local temp_rpm_offset = 2000

local thr_source_weight = 0
local thr_source_setpoint = 0
local thr_source_setpoint_ref = 0
local thr_source_min = -1024 + 10.24 * 0

local time_ctrl_next = 0
local time_ctrl_ramp_down = 0

local time_ctrl_sim_next = 0

local rpm = 0
local rpm_target = 0

local rpm_deadband = 300

local rpm_ctrl_setpoint_ref = 6000

local mode_Off = 0
local mode_Idle = 1
local mode_Run = 2
local mode_RampDown = 3

local mode_ctrl = mode_Off

local pid_sample_time_S = .25

local sim_sample_time_S = .1

local sim_rpm_store_filtered = rpm_ctrl_min
local sim_rpm_store_not_filtered = 0
local sim_rpm_store = rpm_ctrl_min
local sim_rpm_accel_max = 1000

local is_sim_enabled = 0

local elapsedTime = 0

local function sim_rpm( set_point )
   local ls1 = getValue( id_ls1 )

   if mode_ctrl == mode_Run then
      sim_rpm_store = 14000
   elseif mode_ctrl == mode_Idle and thr_source_weight > 0 then
      sim_rpm_store = sim_rpm_store + ( sim_rpm_accel_max * sim_sample_time_S ) * ( ( ( -0.5 - 0.32 * ( 1 - ( rpm_ctrl_setpoint_ref - rpm_target ) / 2000 )  ) + set_point / thr_source_weight ) )
   end

   local rpm_a = .1
   sim_rpm_store_not_filtered = sim_rpm_store + 2000 * ( getValue( id_s2 ) / 1024 ) + -200 + math.random( 400 )

   sim_rpm_store_filtered = sim_rpm_store_not_filtered * rpm_a + ( 1 - rpm_a ) * sim_rpm_store_filtered

   return sim_rpm_store_filtered
end

local function recalc_with_deadband( anError, aDeadBand )
   local ret = anError

   if ret <= aDeadBand and ret >= -aDeadBand then
      ret = 0
   elseif ret > aDeadBand then
      ret = ret - aDeadBand
   elseif ret < -aDeadBand then
      ret = ret + aDeadBand
   end

   return ret
end

local function recalc_with_limits( aValue, aMin, aMax )
   local ret = aValue

   if ret < aMin then
      ret = aMin
   elseif ret > aMax then
      ret = aMax
   end

   return ret
end

local function recalc_with_expo( aValue, anExpo )
   return anExpo * ( aValue ^ 3 ) + ( 1 - anExpo ) * aValue
end

local function rpm_ctrl_loop()
   local err_input = recalc_with_limits( ( rpm_target - rpm ), -err_input_max, err_input_max )

   if err_input >= -rpm_deadband and err_input < 0 then
      err_input = 0
   elseif err_input < -rpm_deadband then
     err_input = err_input + rpm_deadband
   end

   --err_input = recalc_with_deadband( err_input, rpm_deadband )

   err_p = err_input * ( getValue( id_gvar2 ) / 100 ) * thr_source_weight

   if throttle_out > thr_source_min and throttle_out < thr_source_setpoint then
      err_i = err_i + ( ( err_input + err_last_error ) * ( getValue( id_gvar3 ) / 100 * pid_sample_time_S ) * 0.5 * thr_source_weight )
      err_i = recalc_with_limits( err_i, -err_i_max, err_i_max )
   end

   err_last_error = err_input

   err_d = ( ( ( err_last_input - rpm )  * ( getValue( id_gvar4 ) / 100 ) * 2. ) + ( 2. * err_d_tau - pid_sample_time_S ) * err_d ) /
                                                                                   ( 2. * err_d_tau + pid_sample_time_S ) * thr_source_weight

   err_last_input = rpm

   return thr_source_setpoint_ref + err_p + err_i + err_d
end

local function set_setpoint_ref( aRef )
   thr_source_setpoint_ref = aRef
   thr_source_weight = ( ( 1024 + thr_source_setpoint ) / 2 ) / rpm_ctrl_range

   err_i = 0
end

local function set_rpm_target( aRpm )
   --err_last_input = err_last_input + ( aRpm - rpm_target )

   rpm_target = aRpm
end

local g_log_file = nil

local function init_func()
   time_ctrl_next = getTime()
   time_ctrl_sim_next = getTime()
end

local function run_func( thr_source )
   local theNow = getTime()

   if theNow > time_ctrl_next then
      time_ctrl_next = time_ctrl_next + 100 * pid_sample_time_S

      elapsedTime = elapsedTime + 1000 * pid_sample_time_S

      if is_sim_enabled == 0 then
         rpm = getValue( id_rpm )
      end

      local ls1 = getValue( id_ls1 )

      if rpm < rpm_ctrl_min or getValue( id_sa ) > -512 or getValue( id_sf ) > 0 then
         err_p = 0
         err_i = 0
         err_d = 0

         mode_ctrl = mode_Off
      end

      if mode_ctrl == mode_Off then
         thr_source_setpoint = thr_source

         set_setpoint_ref( thr_source )
         set_rpm_target( rpm_ctrl_setpoint_ref )

         throttle_out = thr_source_setpoint

         if rpm > rpm_ctrl_min and ls1 > 0 then
            err_i = 0
            err_last_input = rpm

            mode_ctrl = mode_Idle
         end

      elseif mode_ctrl == mode_Idle then
         if ls1 < 0 then
            throttle_out = throttle_out + 10.24 * 1
            err_i = err_i + 10.24 * 1

            mode_ctrl = mode_Run
         else
            local theTargetRpm = getValue( id_gvar1 ) * 10

            local eng_T = 0

            if is_sim_enabled == 0 then
               eng_T = getValue( id_temp )
            else
               eng_T = 30
            end

            if eng_T < temp_min then
               theTargetRpm = theTargetRpm + temp_rpm_offset
            elseif eng_T < temp_max then
               theTargetRpm = theTargetRpm + ( temp_rpm_offset / ( temp_range ) * ( temp_max - eng_T ) )
            end

            if theTargetRpm < rpm_target - 200 * pid_sample_time_S then
               set_rpm_target( rpm_target - 200 * pid_sample_time_S )
            else
               set_rpm_target( theTargetRpm )
            end

            throttle_out = rpm_ctrl_loop()
            throttle_out = recalc_with_limits( throttle_out, thr_source_min, thr_source_setpoint )
         end

      elseif mode_ctrl == mode_Run then

         if ls1 > 0 then
            time_ctrl_ramp_down = theNow + 300
            mode_ctrl = mode_RampDown
         end

      elseif mode_ctrl == mode_RampDown then
         if ls1 > 0 then
            if time_ctrl_ramp_down < theNow then
               err_last_input = rpm

               if rpm > rpm_ctrl_setpoint_ref then
                  set_rpm_target( rpm )
               else
                  set_rpm_target( rpm_ctrl_setpoint_ref )
               end

               mode_ctrl = mode_Idle
            end
         else
            mode_ctrl = mode_Run
         end
      end

      ----------------------------------- Logging ---------------------------------------

      if g_log_file ~= nil then
         local datenow = getDateTime()

         io.write( g_log_file, datenow.year.."-"..string.format("%02d",datenow.mon).."-"..string.format("%02d",datenow.day)..","
                               ..string.format("%02d", ( elapsedTime / ( 60000 * 24 ) ) % 24 )..":"..string.format("%02d", ( elapsedTime / 60000 ) % 60 )..":"..string.format("%02d", ( elapsedTime / 1000 ) % 60 ).."."
                               ..string.format("%03d",( elapsedTime % 1000 ) )..",",
                               string.format("%.1f", ( 1024 + throttle_out ) / 10.24 ), ",", string.format("%.2f", rpm_target ), ",", string.format("%.2f", rpm ), ",",
                               string.format("%.2f", sim_rpm_store_filtered ), ",", string.format("%.2f", sim_rpm_store_not_filtered ), ",",
                               string.format("%.1f", err_p / 10.24 ), ",", string.format("%.1f", err_i / 10.24 ), ",", string.format("%.1f", err_d / 10.24 ), "\n" )
      end

      ------------------------------------------------------------------------------------

   end

   -------------------------------------- Simulation -------------------------------------

   if is_sim_enabled == 1 and getTime() > time_ctrl_sim_next then
      time_ctrl_sim_next = time_ctrl_sim_next + 100 * sim_sample_time_S

      if getValue( id_sf ) < 0 then
         if g_log_file == nil then
            g_log_file = assert( io.open( "/LOGS/_debug.csv", "wb" ), "Cannot open file" )
            io.write( g_log_file, "Date,Time,throttle_out,rpm_target,rpm,rpm_filtered,rpm_not_filtered,err_p,err_i,err_d\n" )
         end

         rpm = sim_rpm( ( 1024 + throttle_out ) / 10.24 / 200 )
      else
         if g_log_file ~= nil then
            io.close( g_log_file )
            g_log_file = nil
         end

         rpm = 0
      end
   end

   ----------------------------------------------------------------------------------------

   return throttle_out, rpm_target / 10 * 1024 * .01, rpm / 10 * 1024 * .01, err_p, err_i, err_d
end

return { input=input, output=output, run=run_func, init=init_func }
L2-Max

Кронштейн элеватора достаточно долго доставлял мне проблемы в виде внезапно появляющейся и так же быстро исчезающей вибрации по циклику. Со стороны казалось, что у ротора “бабочка” и верт начинал гудеть. Я выше как то писал, что установив самые мягкие демпферы проблема более менее решилась, это так, но полностью вибрации не исчезли. При гайне циклика >110% вибрации возвращались.

С отремонтированым суппортом и кронштейном прикрученным на все болты сегодня летало хорошо. Гаин циклика открутил до максимума 150% и никаких бабочек не наблюдалось. Но прислушавшись я время от времени начал все же замечать какой то посторонний гул, который точно так же внезапно появлялся и через 3-4 секунды исчезал.

Потом я пересмотрел свое первое видео в этой теме и вот. Ровно на 1 минуте 04 сек, серва элеватора входит в сильный резонанс и ее изображение размывается.

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

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

L2-Max

При наборе высоты для выполнения авторотации вылетел коннектор сервы элеватора из стабилизации. Верт сделал резкий клевок по элеватору. Холд. Авторотация со 100м с полным управлением. Уже на земле обнаружил, что коннектор элеватора на ~4-5мм высунут из стабилизации и при малейших прикосновениях к нему серва отключалась.

Как бы мне не хотелось, но прийдется все коннекторы лепить на герметик или на горячие сопли 😐

P.S. Хотя вылетел именно элеватор, а остальные держались на месте. А именно элеватор я чинил пару дней назад. Возможно свободная длинна провода элеватора получилась аккурат такая, что в резонансе выдергивает со временем коннектор. Можно и с этой величиной поиграться.

signx

Вместо герметика рекомендую каптоновый скотч: сначала соединяю скотчем в группу из двух разъёмов, потом из них делаю группу в три-четыре разъёма - в этом случае вероятность случайно вылететь стремится к нулю, сидит очень хорошо. За скилл спасенеия респект :)

L2-Max

Крутой тюнинг, но тяжелый наверное 😐

L2-Max

Некоторые детали по управлению заслонкой на гассере о которых я не знал.

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

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

Это уже потом я начал копаться в интернетах и нашел хоть и мало инфы, но так делают уже давно. Да и в мануале к мотору написанно:

When using the PowerBoost Pipe GT15HZ, set the
linkage with differential so that the throttle opening at
hovering may become approx. 20% of the total
movement.

но о каком дифференциале идет речь мне не было понятно.

Регулятор ХХ стал работать быстрее. Получилось в два раза поднять гайны без последующих осциляций. Но главное, что и гувер microbeast стал работать подругому. Например, при резкой разгрузке ротора после длительного подъема мотор не затыкается гувером как раньше, а снижает обороты без провалов. Да и при резкой загрузке ротора я стал реже слышать звук полностью открытой заслонки, хотя приемистость осталась прежней.

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

L2-Max

Таки да. Гувер стал адекватно работать. Перекрут на моторе при резкой снятии нагрузки <1000rpm, а при загрузке ротора мощность увеличивается плавно и более линейно (на слух) и аж на максимальных шагах ±12 слышно полностью открытый дроссель.

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

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

Ну и новый отказ в копилку. Разболтало линк на качалке элерона и разбило резьбу на винте. Обнаружил когда верт стоял на столе.

L2-Max

Что ж, 26+ литров мотор выпил. Из них крайние 10 это поле замены стопоров. Силовая пока работает штатно, без задиров в цилиндре. Компрессия как у нового. Еще 5 литров и разберу снова для контроля либо замены стопоров.

Надежда на этот мотор все еще есть. Видео с более агрессивным управлением будет, но нескоро 😃

10 days later
L2-Max

Лишь поднимаю тему. Мотор 28 литров выпил, остается еще 2 литра до следующей дефектовки, но погода обещает, что это случится очень не скоро 😐 Следующую неделю прогноз прогнозирует температуру ниже нуля, а для меня +4 градуса уже дискомфорт. Как только будут комфортные для меня условия полетов тогда продолжу.

L2-Max

Прошло более чем полтора месяца с тех пор как я отправил свой первый мотор на гарантийный ремонт продавцу и сегодня продавец написал, что посылка с моим мотором пришла к ним от О.S. Больше никакой информации он мне не сообщил. Но я надеюсь, что в посылке приехал не тот металлолом что я им отправил 😃, а как минимум отремонтированный, а в идеале новый мотор.

На следующей неделе увидим как О.S. исправляет свои косяки.

L2-Max

Упал сегодня при выполнении авторотации. Моя ошибка. Дул сильный ветер 8-10м/с, а я, самоуверенный, никогда при таком ветре не выполняв авторотации, на высоте ~70метров щелкнул холд. И началась борьба за аэродинамическое качество, что бы долететь поближе к себе и не упасть в ангарах.

Из-за своей парусности и сильного ветра верт немог набрать нужную мне скорость относительно земли (против ветра), а я его все больше и больше наклонял к себе по тангажу и одновременно уменьшал шаг. Верт при этом очень быстро терял высоту, а ротор не раскручивался из-за чего я и начал паниковать. Обычно я ротирую с положительным шагом и 2-4м/с поступательной скоростью, а в этот раз нештатная ситуация, отрицательный шаг, большая вертикальная скорость и на высоте ~2-3 метра, видя что обороты очень малы я дал максимум позитивного шага. Верт как камень свалился вниз абсолютно не погасив вертикальную скорость.

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

Все выше перечисленные повреждения я пофиксил наместе и долетал бак выполнив еще ~20 авторотаций, а уже дома довожу аппарат до идеального состояния.