Goblin 700 RAW Nitro (Benzin)
Забыл добавить, что новый мотор, на заводских настройках карба сегодня разогревался до 105 градусов просто на висении при 15С окружающей. Мистика какая то. Хотя сенсор немного в другом месте установлен (фото)
Я два раза проверил иглы - откручены согласно мануалу. Да и выпив пол бака мотор на заводских настройках стал захлебываться, пришлось на 6 градусов закрутить иглу ХХ.
Место установки сенсора правильное! Между ребрами картера и головкой … 😉
Ну и температура соответственно более “правильная” …
Solo, но и на том первом ведь между ребрами картера и головкой было установлено, но на 2 см ниже. Мне кажется, что сама голова неравномерно охлаждается, потому что снизу и сверху ребер больше чем справа и слева.
Максим, а можете описать подробно как обкатывали двигатель.
Обкатываю по мануалу. Оставляю иглы на заводских настройках, настраиваю гувер на 12000 и аккуратно летаю круги восьмерки не перегружая мотор. Заслонка при этом открыта гувером на ~25-30%. Если на таких настройках карба я случайно и загружу ротор так, что гуверу придется открыть заслонку больше, то мотор заливает, а обороты падают. Я эту границу уже на слух определяю и не довожу до переливания.
Вот в таком режиме я и летаю 2-3 литра. Нудная это процедура. На таких оборотах верт на баке летает 40-50 минут, то есть что б пройти процедуру обкатки нужно летать ~3.5 часа.
А изначально, на земле на холостых мотор разве не должен выработать хотя-бы бак? Обкатку сразу нужно проводить в воздухе?
Слышал, что некоторые люди обкатывают на ХХ, но я не вижу в этом смысла. На ХХ продувка плохая, воспламенение смеси происходит каждые 4-6 тактов, из-за этого юбка поршня не прижата постоянно к выпускному окну, а попеременно ударяется то одной то другой стороной о цилиндр (отсюда и звук трещетки на ХХ), а если поршень в цилиндре наклоняется, то с ним наклоняется кольцо и кромка кольца получается не цилиндрическая, а с некоторым радиусом. Усугубляет это еще и низкая температура, при которой поршень имеет бочкообразную форму, а не цилиндрическую.
Но так как работая на ХХ мотор залит маслом, то на стенках цилиндра не просто толстая пленка, а скорее маслянная ванна и что то мне кажется, что даже если 5 баков на ХХ спалить, то кроме нагара признаков, что мотор был в работе попросту не будет видно.
Да и на ХХ мотор полный бак пить будет сутки. У меня нет столько времени, что б заниматься подобными экспериментами. Производитель мотора написал, что обкатывать нужно в воздухе - я обкатываю в воздухе.
На вертолёте обкатку мотора рекомендуют проводить в висении - 2 бака отвисеть (это про Нитро, на бензине и бака хватит). На ХХ не рекомендуют обкатку.
Отказала серва хвоста Nexspor BLS4012T. Слизало зубья на первой шестерне которая после мотора, а именно на ее малой звездочке.
Пока едет ремкомплект я ее заменил взяв у донора SAVOX SC-1257TG который был в наличии. Редукторы обеих серв идентичные. Разница только в материале. Бак отлетал. Редуктор сервы работает плавно и без подклиниваний.
Хоть я и не использую резиновые демпферы на сервах, но думаю не из-за вибраций это случилось, а брак попался. Понаблюдаю сколько с новым редуктором проживет.
Ну а с мотором пока все ОК. После 4х литров следов касания жаровым поясом цилиндра нет. Чистый эксперимент имеет смысл. Смесь держу на границе когда богато и переливает или нормально летит. С бедной смесью не эксперементирую.
Как писал ранее, я после 15 литров разберу мотор и поменяю стопоры пальца, а за одно и проинспектирую насколько они сточились, как разбило посадочное места.
Неправильно я карбюратор настраивал, хоть и следовал мануалу. В мануале четко сказано, что как только верт нормально отрывается от земли, то L иглу трогать уже не нужно.
Continue the same process until you can take off normally. Once the helicopter takes off, you do not have to close the Low needle any more. Excessive needle adjustment causes over-revving and raises the potential for engine damage.
Вот у меня верт отлично взлетал и висел и летал вроде бы хорошо, но мне недавал покоя тот факт, почему производитель в мануале строго запрещает закручивать H иглу больше чем на 30 градусов, а мне, на двух моторах, приходилось закручивать ее до 70-80 что б нормально летело, а температура головы не поднималась.
А все оказалось просто. “Верт взлетать должен еще лучше” чем мне это казалось, а именно L игла, закрытие которой производителем строго не лимитируется, должна была быть закручена еще больше. Вот только тогда и чувствуется тот узкий диапазон работы H иглы при полном открытии дросселя, когда обе иглы учавствуют 50/50 в смесеобразовании.
Голова при этом на висении имеет температуру 110 градусов при 11С окружающей, а мотор стал значительно приемистей на средних режимах.
Вот сегодняшнее фото поршневой после 6 литров. Как видите жаровой пояс цилиндра не касался. На юбке все еще видны следы от резца.
Если стопоры пальца за 15 литров не вылетят, а их преждевременная замена решит эту проблему, то мотор дает надежды долговечного силового агрегата при условии правильно настроенного карба и использовании качественного синтетического масла.
По мелочам. Шасси стерлись, как бы я их не пытался защитить. Даже научился авторотировать в точку без скольжения в безветрие. Очень хлипкая конструкция, но легкая.
Верт на 1650 оборотах ГР иногда ловит какой то резонанс по циклику, а выглядит это со стороны как “бабочка”. Вылечил это уменьшением гайна циклика до 80-90%. Ограничители хода межлопастного вала при этом стояли В. Сегодня постаил А. Завтра посмотрю как повлияет на поведение.
А с мотором пока все ОК. На данный момент я считаю, что в мануале те их ограничения закрытия скоростной иглы до 30 градусов от заводских настроек в реальности не работают. Что бы мотор набирал обороты на таких настройках скоростной иглы при 100% открытия дросселя, на висении, приходится беднить L иглу и очень сильно. Так сильно, что на раскрутке ротора чувствуется и видится потеря мощности (хвост бросает по часовой срелке). Температура на висении сильно растет. Потому L иглу я консервативно настраиваю на слух и чтоб хвост не дергался, а H иглу закручиваю пока не перестанет переливать на 100% открытия. Сейчас закрыта на 45 градусов от заводских настроек.
Я как то писал выше, что в инверте переливает и это факт. Разогретая до 105 градусов голова, стоит перевернуться теряет 10 градусов. Я на ХХ тоже проводил эксперимент и если ногами вниз мотор работает на 5000 оборотах, то стоит верт перевернуть обороты уже 4500. Похоже с этим придется смириться.
P.S. 8 литров вылетано. Еще 7 литров и разберу мотор для инспекции и замены стопоров пальца.
Как общие впечатления от владения Гассером ? Я вижу тебя затянуло ! 😉
Громче разговаривать не стал ? 😃
Да что тут написать. Да, затянуло. Скорее не гассер как таковой, а масса связанных с ним проблем, которые надо было решить. Боюсь, что как только все проблемы будут решены, а к этому все идет, то интерес к нему постепенно будет угасать.
Вот например сегодня с установленными #А ограничителями межлопастного верт полетел именно так как мне нравится. Очень мягкий отклик по циклику, а внезапно возникающие вибрации как рукой сняло. И гаин циклика получилось поднять выше 100%.
А еще я написал LUA скрипт - регулятор холостого хода. И теперь передатчик сам, учитывая показания сенсоров температуры и оборотов, подстраивает холостой ход. Я лишь перед запуском настраиваю начальное открытие дросселя, а как только мотор заведется холостой ход регулируется автоматически. Очень удобно, учитывая сколько раз я режимы переключаю, когда тренирую авторотации.
local input = { { "Idle", SOURCE } }
local output = { "idlv", "rpmt" }
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_ls1 = getFieldInfo( "ls1" ).id
local idle_v = 0
local eng_T = 0
local rpm = 0
local rpm_t = 0
local ls1 = 0
local function init_func()
end
local function run_func( idle_s )
eng_T = getValue( id_temp )
rpm = getValue( id_rpm )
rpm_t = getValue( id_gvar1 ) * 10
ls1 = getValue( id_ls1 )
if eng_T < 10 then
rpm_t = rpm_t + 1750
elseif eng_T < 55 then
rpm_t = rpm_t + ( 1750 / ( 55 - 10 ) * ( 55 - eng_T ) )
end
if rpm < 3000 or rpm > 8000 or ls1 < 0 then
idle_v = idle_s * .2 - ( 1024 * .8 )
else
if rpm < rpm_t then
idle_v = idle_v + getValue( id_gvar2 ) / 10
elseif rpm > rpm_t then
idle_v = idle_v - getValue( id_gvar3 ) / 10
end
end
if idle_v > ( -1024 * .6 ) then
idle_v = ( -1024 * .6 )
elseif idle_v < -1024 then
idle_v = -1024
end
return idle_v, rpm_t / 10 * 1024 * .01
end
return { input=input, output=output, run=run_func, init=init_func }
Последнюю неделю время затрачиваемое на обслуживание гассера стало меньше чем на электрику. Основная проблема с электрикой это зарядка силовых батарей на месте. Если я прихожу на аэродром с 5ю паками, то могу сделать 7 вылетов по 10 мин без перерыва на ожидание зарядки, но если больше, то надо ждать. 2x 12S 5000mAh пака от авто заряжаются до 40 минут. А в гассер бензин залил и летаешь 30 минут без перерыва.
Громче разговаривать не стал ?
Не понял, о чем ты?
Я о звуках издаваемых бензомотором …
Лично мне давит на уши конкретно!
Мне нужен пример, чтобы сравнить. Я как бы понимаю о чем говоришь, но не знаю какие моторы и на каких настройках ты слушал. Если я на своем откручу Н иглу на 20 градусов, то рев карбюратора будет заглушать выхлоп. Это очень противный звук. А настроенный мотор как по мне по звуку от нитро не отличается.
Дай какой нибудь пример где этот противный звук можно услышать и я скажу так это или нет.
На до бы мне видео сделать, но меня затянул регулятор холостого хода и я еще пару дней буду заниматься им. Сегодня на аэродроме дописал полноценный PID и настраивал его. Работает классно. Ощущения как будто стартую инжекторный автомобиль 😃 Я лишь задаю начально положение заслонки, а потом вообще не вмешиваюсь.
local input = { { "Idle", SOURCE } }
local output = { "idlv", "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 idle_v = 0
local err_p = 0
local err_p_last = 0
local err_i = 0
local err_d = 0
local rpm_ctrl_min = 3000
local rpm_ctrl_max = 8000
local rpm_ctrl_range = ( rpm_ctrl_max - rpm_ctrl_min )
local rpm_ctrl_I_range = 250
local temp_min = 10
local temp_max = 75
local temp_range = ( temp_max - temp_min )
local temp_rpm_offset = 1750
local idle_source_weight = .2
local time_ctrl_next = 0
local rpm = 0
local rpm_target = 0
--local rpm_adjust = 0
local function init_func()
time_ctrl_next = getTime()
end
local function run_func( idle_s )
if getTime() > time_ctrl_next then
time_ctrl_next = time_ctrl_next + 20
rpm = getValue( id_rpm )
--rpm = math.random( 200 ) + ( 2000 + 6000 / 2048 * ( getValue( id_s2 ) + 1024 ) ) + rpm_adjust
rpm_target = getValue( id_gvar1 ) * 10
local eng_T = getValue( id_temp )
local ls1 = getValue( id_ls1 )
if eng_T < rpm_ctrl_min then
rpm_target = rpm_target + temp_rpm_offset
elseif eng_T < rpm_ctrl_max then
rpm_target = rpm_target + ( temp_rpm_offset / ( rpm_ctrl_range ) * ( rpm_ctrl_max - eng_T ) )
end
if rpm < rpm_ctrl_min or rpm > rpm_ctrl_max or ls1 < 0 then
idle_v = idle_s * idle_source_weight - ( 1024 * ( 1. - idle_source_weight ) )
err_i = 0
else
err_p = ( rpm_target - rpm ) / ( rpm_ctrl_range / 10 )
err_i = err_i + err_p / 10
err_d = err_p - err_p_last
err_p_last = err_p
if err_i > rpm_ctrl_I_range / rpm_ctrl_range then
err_i = rpm_ctrl_I_range / rpm_ctrl_range
elseif err_i < -rpm_ctrl_I_range / rpm_ctrl_range then
err_i = -rpm_ctrl_I_range / rpm_ctrl_range
end
--rpm_adjust = ( rpm_adjust + ( err_p * ( getValue( id_gvar2 ) / 100 ) + err_i * ( getValue( id_gvar3 ) / 100 ) +
-- err_d * ( getValue( id_gvar4 ) / 100 ) ) * 50 )
idle_v = idle_v + err_p * ( getValue( id_gvar2 ) / 100 ) + err_i * ( getValue( id_gvar3 ) / 100 ) + err_d * ( getValue( id_gvar4 ) / 100 )
if idle_v > ( -1024 * ( 1. - idle_source_weight ) ) then
idle_v = ( -1024 * ( 1. - idle_source_weight ) )
elseif idle_v < -1024 then
idle_v = -1024
end
end
end
return idle_v, rpm_target / 10 * 1024 * .01, rpm / 10 * 1024 * .01, err_p * 1024 * .1, err_i * 1024 * .1, err_d * 1024 * .1
end
return { input=input, output=output, run=run_func, init=init_func }
Да, ± так же звучит, имеется ввиду спектр издаваемых звуков. Громкость по видео оценить сложно. Возможно 15 кубиков будут потише чем 20-30 кубовый Хансон.
Авторотирует RAW Nitro просто замечательно. Низкий вес и большАя площадь ротора позволяют ротировать на более низких оборотах в сравнении с Thunder плюс меньшие потери в трансмиссии позволяют это делать дольше 😃
Сегодня время в авторотации приближалось к минуте. Конечно же это субъективно.
Мне больше нравится эффект производимый на публику, а именно, когда я летал электро так никто и не замечал когда я мотор выключал в 100 метрах над землей, а сейчас “заглохший” бензиныч замечают все.
Авторотации на RAW Nitro.
Холостой ход в режиме холд установлен на 4000 оборотов. Его удержанием занимается PID регулятор, a скрипт испоняется самим передатчиком. Частота опроса сенсора оборотов 5Hz, частота коррекции 2.5Hz. Скорость реакции регулятора не большая, но я это учел при наладке и сейчас система работает без овершотов и автоколебаний. При холодном старте, когда правильная позиция дросселя неизвестна система стабилизируется за 5-7 секунд, а уже при переключении между полетным режимом и холд за 4 секунды.
Код отлаженого регулятора.
local input = { { "Idle", SOURCE } }
local output = { "idlv", "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 idle_v = 0
local err_p = 0
local err_p_last = 0
local err_i = 0
local err_d = 0
local rpm_ctrl_min = 3000
local rpm_ctrl_range = 4000
local temp_min = 10
local temp_max = 75
local temp_range = ( temp_max - temp_min )
local temp_rpm_offset = 1750
local idle_source_weight = .2
local idle_source_setpoint = 0
local time_ctrl_next = 0
local time_ctrl_ramp_down = 0
local rpm = 0
local rpm_target = 0
local rpm_deadband = 2.
local mode_Off = 0
local mode_Idle = 1
local mode_Run = 2
local mode_RampDown = 3
local mode_ctrl = mode_Off
local function init_func()
time_ctrl_next = getTime()
end
local function run_func( idle_source )
if getTime() > time_ctrl_next then
time_ctrl_next = time_ctrl_next + 40
rpm = getValue( id_rpm )
rpm_target = getValue( id_gvar1 ) * 10
local eng_T = getValue( id_temp )
local ls1 = getValue( id_ls1 )
if eng_T < temp_min then
rpm_target = rpm_target + temp_rpm_offset
elseif eng_T < temp_max then
rpm_target = rpm_target + ( temp_rpm_offset / ( temp_range ) * ( temp_max - eng_T ) )
end
if rpm < rpm_ctrl_min then
mode_ctrl = mode_Off
end
if mode_ctrl == mode_Off then
idle_source_setpoint = idle_source * idle_source_weight - ( 1024 * ( 1. - idle_source_weight ) )
idle_v = idle_source_setpoint
if rpm > rpm_ctrl_min and ls1 > 0 then
err_i = 0
mode_ctrl = mode_Idle
end
elseif mode_ctrl == mode_Idle then
err_p = ( rpm_target - rpm ) / ( rpm_ctrl_range / idle_source_weight ) * 1024
err_i = err_i + err_p
if err_p < 10.24 * rpm_deadband and err_p > -10.24 * rpm_deadband then
err_p = 0
elseif err_p > 10.24 * rpm_deadband then
err_p = err_p - 10.24 * rpm_deadband
elseif err_p < -10.24 * rpm_deadband then
err_p = err_p + 10.24 * rpm_deadband
end
err_d = err_p - err_p_last
err_p_last = err_p
if err_d < 10.24 * rpm_deadband and err_d > -10.24 * rpm_deadband then
--err_d = 0
end
idle_v = idle_source_setpoint + err_p * ( getValue( id_gvar2 ) / 100 ) +
err_i * ( getValue( id_gvar3 ) / 100 ) +
err_d * ( getValue( id_gvar4 ) / 100 )
if ls1 < 0 then
idle_v = idle_v + 10.24
idle_source_setpoint = idle_v
err_i = 0 ---err_i
err_p_last = 0
mode_ctrl = mode_Run
end
if idle_v > ( -1024 * ( 1. - idle_source_weight ) ) then
idle_v = ( -1024 * ( 1. - idle_source_weight ) )
elseif idle_v < -1024 then
idle_v = -1024
end
elseif mode_ctrl == mode_Run then
if ls1 > 0 then
time_ctrl_ramp_down = getTime() + 400
mode_ctrl = mode_RampDown
end
elseif mode_ctrl == mode_RampDown then
if ls1 > 0 then
if time_ctrl_ramp_down < getTime() then
mode_ctrl = mode_Idle
end
else
mode_ctrl = mode_Run
end
end
end
return idle_v, 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 }