Goblin 700 RAW Nitro (Benzin)
Из практики: стопорные кольца пальца вылетают - неисправные подшипники коленвала (передний или коренной без разницы), в добавок разбивает нижнюю головку шатуна.
Поршень при этом долбит дном головку? Еще учтите возможность детонации, тоже замечательная штука.
Я немного ошибся с определением температуры по цвету побежалости. Синий это ~300 градусов, а не 500, что вполне ожидаемо учитывая сколько времени мотор работал на максимальной мощности. Такая температура хоть и кажется высокой, но не критична для поршневой.
Палец стремно выглядит … почему такой темный в местах контакта с поршнем?
Получается что это тоже цвет побежалости - фиолетово/коричневый, а это ~270 градусов
В общем, посадочные я поправил и поставил новые стопоры. 2 бака успел отлетать. Решение именно менять стопоры принял потому, что старые уменьшились в диаметре на 0.5мм в свободном состоянии в сравнении с новыми и я подумал, что может в этом причина их вылета. Так же один старый слегка изменил свою форму.
Потом, на одном из стопоров я все таки обнаружил следы трения о палец, так что мое первое предположение, что стопоры истираются о палец, имеет место быть и его надо будет так же проверить при следующей разборке мотора.
А для чего нужны отверстия (те что мелкие 😃) в бобышках поршня ?
Палец смазывается?
Где палец тогда “фиксируется”: в поршне или в шатуне? Или и там, и там гуляет?
Получается, что нужны именно для смазки. Палец свободно проворачивается как в шатуне так и в поршне.
Получается, что за такт работы он при поворачивается в поршне и “пилит” торцом “ушки” стопоров … 😦
Единственный простой вариант - полирнуть торцы пальца 😃
я полировал, чё потом стало не знаю) продал
раньше были другие стопра, плоские
Упал при выполнении авторотации. Немного не рассчитал точку приземления. На трех метрах щелкнул отмену, но было уже поздно. Обороты были слишком малы и мотор неуспел раскрутиться. Упал в траву на ноги. При дальнейшей попытке взлететь верт начал заваливаться на правый бок и на циклик почему то не реагировал. Холд и верт уже на боку.
И снова технический отказ. Вот в таком положении была серва элеватора после падения.
Я поначалу думал, что это при падении срезало винт, но присмотревшись обнаружил вот такие потертости как на суппорте так и на кронштейне серво.
По следам видно, что кронштейн был приподнят и в таком состоянии находился достаточно долго. Тоесть винт срезало не сегодня и не вчера. Однако, почему циклик был неуправляем по элеронам, а не по элеватору для меня загадка.
Остатки винта я высверлил и установил винт на 2мм длиннее, потому что покоцал начало резьбы, а когда начал монтировать суппорт на редуктор, то внем сорвало одну из двух М3 резьб, блин. Вроде бы и тянул без фанатизма. Короче, и там я поставил винт на 2мм длиннее (отверстие там сквозное, можно упереться болтом в зубчатое колесо!) и залил фиксатором.
Думаю или купить новый корпус редуктора или перенарежу под М4 резьбу. Пока буду так летать.
P.S. На редукторе, под суппортом, с той стороны где сорвало резьбу тоже было видно следы потертости от вибрации, но я не придал этому значение. Возможно вибрациями резьбу ослабило, но в том месте фиксатора было налито щедро. Винты очень туго откручивались.
Единственный простой вариант - полирнуть торцы пальца
я полировал, чё потом стало не знаю)
Думал об этом, но не полировал, так как потертости обнаружил уже после сборки мотора.
Еще момент, истирание ушек свидетельствует о не симметричности стопорного в плоскости. Я это проверил на новых комплектах и таки да. Ушки слегка загнуты в сторону. При сборке я интуитивно устанавливал стопоры так, что бы ушки смотрели наружу, что бы контакт стопора с пальцем происходил по всему периметру. Хотя это врятли решает проблему развальцовки посадочного места стопора.
Увидим какое состояние посадочных будет после следующих 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 }
Кронштейн элеватора достаточно долго доставлял мне проблемы в виде внезапно появляющейся и так же быстро исчезающей вибрации по циклику. Со стороны казалось, что у ротора “бабочка” и верт начинал гудеть. Я выше как то писал, что установив самые мягкие демпферы проблема более менее решилась, это так, но полностью вибрации не исчезли. При гайне циклика >110% вибрации возвращались.
С отремонтированым суппортом и кронштейном прикрученным на все болты сегодня летало хорошо. Гаин циклика открутил до максимума 150% и никаких бабочек не наблюдалось. Но прислушавшись я время от времени начал все же замечать какой то посторонний гул, который точно так же внезапно появлялся и через 3-4 секунды исчезал.
Потом я пересмотрел свое первое видео в этой теме и вот. Ровно на 1 минуте 04 сек, серва элеватора входит в сильный резонанс и ее изображение размывается.
Получается, что конструкция крепления сервы элеватора мягко говоря - не очень для ДВС вертолета. Для электро вопросов нет, но при том уровне вибраций создаваемых ДВС, крепить серво на таком большом вылете и без дополнительных ребер жесткости это ошибка. Удивляюсь как вообще тот кронштейн целым остался при таких амплитудах.
Попробую сервы поставить на демпферы. Пусть резинки часть энергии гасят, но для этого надо закупиться болтами подлиннее. Ну или вырежу более жесткое крепление сервы, возможно даже из цельного куска материала, хотя сомневаюсь, что это поможет так как суппорт держится на редукторе всего на двух близко к себе рассположенных болтах М3.
При наборе высоты для выполнения авторотации вылетел коннектор сервы элеватора из стабилизации. Верт сделал резкий клевок по элеватору. Холд. Авторотация со 100м с полным управлением. Уже на земле обнаружил, что коннектор элеватора на ~4-5мм высунут из стабилизации и при малейших прикосновениях к нему серва отключалась.
Как бы мне не хотелось, но прийдется все коннекторы лепить на герметик или на горячие сопли 😐
P.S. Хотя вылетел именно элеватор, а остальные держались на месте. А именно элеватор я чинил пару дней назад. Возможно свободная длинна провода элеватора получилась аккурат такая, что в резонансе выдергивает со временем коннектор. Можно и с этой величиной поиграться.
Вместо герметика рекомендую каптоновый скотч: сначала соединяю скотчем в группу из двух разъёмов, потом из них делаю группу в три-четыре разъёма - в этом случае вероятность случайно вылететь стремится к нулю, сидит очень хорошо. За скилл спасенеия респект :)
Где-то были сообщения, о проблемах с шасси после ротации.
Вариант решения
Крутой тюнинг, но тяжелый наверное 😐
Некоторые детали по управлению заслонкой на гассере о которых я не знал.
Мне было известно, что простой карбюратор с заслонкой - нелинейное устройство и что половина от максимального расхода смеси приходится на 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 стал работать подругому. Например, при резкой разгрузке ротора после длительного подъема мотор не затыкается гувером как раньше, а снижает обороты без провалов. Да и при резкой загрузке ротора я стал реже слышать звук полностью открытой заслонки, хотя приемистость осталась прежней.
Нужно еще пару баков отлетать, чтоб объективно судить об изменениях в поведении гувера.
Таки да. Гувер стал адекватно работать. Перекрут на моторе при резкой снятии нагрузки <1000rpm, а при загрузке ротора мощность увеличивается плавно и более линейно (на слух) и аж на максимальных шагах ±12 слышно полностью открытый дроссель.
Для эксперимента я так же откручивал винты карба в такое положение, когда без экспоненты регулятор гувера входил в режим насыщения и держал заслонку открытой вне зависимости от оборотов мотора. С экспонентой этого не происходит.
Интересто бы знать, на какую модель регулирования настроен гувер, тогда можно было бы подобрать экспоненту более точно.
Ну и новый отказ в копилку. Разболтало линк на качалке элерона и разбило резьбу на винте. Обнаружил когда верт стоял на столе.
Что ж, 26+ литров мотор выпил. Из них крайние 10 это поле замены стопоров. Силовая пока работает штатно, без задиров в цилиндре. Компрессия как у нового. Еще 5 литров и разберу снова для контроля либо замены стопоров.
Надежда на этот мотор все еще есть. Видео с более агрессивным управлением будет, но нескоро 😃
Лишь поднимаю тему. Мотор 28 литров выпил, остается еще 2 литра до следующей дефектовки, но погода обещает, что это случится очень не скоро 😐 Следующую неделю прогноз прогнозирует температуру ниже нуля, а для меня +4 градуса уже дискомфорт. Как только будут комфортные для меня условия полетов тогда продолжу.
Прошло более чем полтора месяца с тех пор как я отправил свой первый мотор на гарантийный ремонт продавцу и сегодня продавец написал, что посылка с моим мотором пришла к ним от О.S. Больше никакой информации он мне не сообщил. Но я надеюсь, что в посылке приехал не тот металлолом что я им отправил 😃, а как минимум отремонтированный, а в идеале новый мотор.
На следующей неделе увидим как О.S. исправляет свои косяки.
Упал сегодня при выполнении авторотации. Моя ошибка. Дул сильный ветер 8-10м/с, а я, самоуверенный, никогда при таком ветре не выполняв авторотации, на высоте ~70метров щелкнул холд. И началась борьба за аэродинамическое качество, что бы долететь поближе к себе и не упасть в ангарах.
Из-за своей парусности и сильного ветра верт немог набрать нужную мне скорость относительно земли (против ветра), а я его все больше и больше наклонял к себе по тангажу и одновременно уменьшал шаг. Верт при этом очень быстро терял высоту, а ротор не раскручивался из-за чего я и начал паниковать. Обычно я ротирую с положительным шагом и 2-4м/с поступательной скоростью, а в этот раз нештатная ситуация, отрицательный шаг, большая вертикальная скорость и на высоте ~2-3 метра, видя что обороты очень малы я дал максимум позитивного шага. Верт как камень свалился вниз абсолютно не погасив вертикальную скорость.
Повреждения минимальны. Есть след от удара лопасти по хвостовой балке. Один рычаг цапфы разболтался и как следствие сбились настройки углов. Правый полоз слегка согнуло.
Все выше перечисленные повреждения я пофиксил наместе и долетал бак выполнив еще ~20 авторотаций, а уже дома довожу аппарат до идеального состояния.
Гарантийный ремонт О.S. - дерьмо собачье. Хотя чего я ожидал если о гарантии у них вообще нигде не сказано ни слова.
Что они сделали: напильником обработали старый поршень, поставили на него старое побитое кольцо и собрали все вместе используя старый задранный лейнер. Стопор пальца поставили новый 😃
Их гарантийный ремонт (если это можно назвать ремонтом) абсолютно не выгодное мероприятие. Продавец и я потратили больше оплатив пересылку, чем они на “ремонт”.
Буду ремонтировать сам. Все нужные запчасти у меня есть в наличии.
Разобрал мотор для инспекции после успешно вылетаных 30 литров. Все фото залил на GDrive. Мотор не мыл. …google.com/…/1fb_kL7ZXU5vD7Mi-LYRJl_Fm3KiN69Tn?us…
Здесь выложу лишь фото фрикциона который я делал из прокладки тут rcopen.com/forum/f140/topic567926/166
И сцепление
Фрикцион не особо то и изношен в сравнении с тем насколько был изношен стоковый с гораздо меньшим количеством раскруток. В день (не каждый) при тренировках авторотации я ротор раскручиваю по 30-50 раз. По грубым расчетам фрикцион пережил минимум 500 раскруток.
По мотору особо комментировать нечего, потому что его состояние не изменилось с момента первой инспекции rcopen.com/forum/f140/topic567926/196. Все так же видна сетка от резца на юбке поршня, жаровой пояс стенок цилиндра не касается, след после хонинговки по всей поверхности цилиндра присутствует. Сажи в картере заметно меньше, но это толи из-за того, что кольцо лучше притёрлось или потому, что крайние 10 литров я заправлял Е10 бензин (до этого всегда лил Е5). На поршневом пальце при его вынимании износ чувствуется, но пока не критичен. Люфт не чувствуется, а микрометра нет под рукой что б померять.
Переходим к самому главному. А что со стопорами? В этот раз я развальцовку посадочного места не наблюдал вообще. Стопоры в обеих канавках прокручивались без заедания. Наплыв материала поршня между ушками стопора отсутствовал. Оба стопора в разжатом состоянии на 0.3мм меньше в сравнении с новыми. Небольшие следы трения о палец присутствуют, но лишь слегка.
Пользуясь полученной информацией я могу сделать вывод (не точный конечно же), что происходит следующее:
- О.S. делают канавку стопора без радиуса и это факт
- стопор с радиусом эту канавку со временем развальцовывает создавая наплыв материала как между ушками стопора так и по бокам от него
- если не предпринимать никаких действий, то может случиться так, что ушко наедет на наплыв и окажется на уровне отверстия пальца, а дальше особых усилий, что бы вытолкнуть стопор в цилиндр ненужно
- если же мотор после некоторого пробега разобрать. Отверстие под палец в поршне развернуть. Наплыв между ушками стопора убрать и желательно заменить сами стопоры, и установить их провернув на 180 градусов от положения как они до этого стояли, то канавка стопора которая приняла его форму и имеющая к тому же наклеп уже не развальцовывается дальше, а стопор не вылетает.
Для собственного спокойства я все же поставлю новые стопоры и разберу мотор уже после следующих 20 литров. Надеюсь, а к этому идет, что поршневая переживет подшипники.
P.S. 30 литров это ~27 часов в воздухе.