Анимация и модель автомобильного поршня

В этом примере показано, как смоделировать движение автомобильного поршня при помощи MATLAB® и Symbolic Math Toolbox™.

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

Шаг 1: опишите поршневую модель

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

Опишите свойства поршня путем определения параметров:

  • цилиндрическая длина хода S

  • поршневой внутренний диаметр B

  • длина шатуна L

  • радиус заводной рукоятки a

  • угол заводной рукоятки θ

Задайте источник O системы координат в местоположении коленчатого вала. Пометьте самое близкое расстояние между поршневой головой и местоположением коленчатого вала как нижняя мертвая точка (BDC). Высота BDC L-a. Пометьте самое дальнее расстояние между поршневой головой и местоположением коленчатого вала как верхняя мертвая точка (TDC). Высота TDC L+a.

Шаг 2: вычислите и постройте поршневую высоту

Следующая фигура является схематическим из чудака и шатуна.

Высота поршня относительно источника H=acosθ+L2-a2sin(θ)2. Задайте поршневую высоту как символьную функцию при помощи syms функция.

syms pistHeight(L,a,theta)
pistHeight(L,a,theta) = a*cos(theta) + sqrt(L^2-a^2*sin(theta)^2);

Примите, что длина шатуна L=150mm и радиус заводной рукоятки a=50mm. Постройте поршневую высоту как функцию угла заводной рукоятки для одного оборота в интервале [0 2*pi].

fplot(pistHeight(150,50,theta),[0 2*pi])
xlabel('Crank angle (rad)')
ylabel('Height (mm)')

Поршневая голова является самой высокой, когда поршень в TDC, и углом заводной рукоятки является 0 или 2*pi. Поршневая голова является самой низкой, когда поршень в BDC, и углом заводной рукоятки является pi.

Можно также построить поршневую высоту для различных значений a и θ. Создайте объемную поверхностную диаграмму поршневой высоты при помощи fsurf функция. Покажите поршневую высоту в интервале 30mm<a<60mm и 0<θ<2π.

fsurf(pistHeight(150,a,theta),[30 60 0 2*pi])
xlabel('Crank radius (mm)')
ylabel('Crank angle (rad)')
zlabel('Height (mm)')

Шаг 3: вычислите и постройте объем поршневого цилиндра

Длина камеры сгорания равна различию между местоположением TDC и поршневой высотой. Объем поршневого цилиндра может быть выражен как V=π(B2)2(L+a-H).

Задайте поршневой объем как символьную функцию и замените выражением H с pistHeight.

syms pistVol(L,a,theta,B)
pistVol(L,a,theta,B) = pi*(B/2)^2*(L+a-pistHeight)
pistVol(L, a, theta, B) = 

πB2L+a-acos(θ)-L2-a2sin(θ)24(sym (пи) *B^2* (L + - a*cos (тета) - sqrt (L^2 - a^2*sin (тета) ^sym (2))))/4

Затем задайте значения для следующих параметров:

  • длина шатуна L=150mm

  • радиус заводной рукоятки a=50mm

  • внутренний диаметр B=86mm

Постройте поршневой объем как функцию угла заводной рукоятки для одного оборота в интервале [0 2*pi].

fplot(pistVol(150,50,theta,86),[0 2*pi])
xlabel('Crank angle (rad)')
ylabel('Volume (mm^3)')

Поршневой объем является самым маленьким, когда поршень в TDC, и углом заводной рукоятки является 0 или 2*pi. Поршневой объем является самым большим, когда поршень в BDC, и углом заводной рукоятки является pi.

Шаг 4: оцените перемещение поршня для изменения угловой скорости

Примите, что заводная рукоятка вращается на уровне 30 об/мин в течение первых 3 секунд, затем постоянно увеличивается с 30 до 80 об/мин в течение следующих 4 секунд, и затем остается на уровне 80 об/мин.

Задайте угловую скорость как функцию времени при помощи piecewise функция. Умножьте угловую скорость на 2π/60 преобразовывать скорость вращения от об/мин до рад/секунда.

syms t0 t
rpmConv = 2*pi/60;
angVel(t0) = piecewise(t0<=3, 30, t0>3 & t0<=7, 30 + 50/4*(t0-3), t0>7, 80)*rpmConv
angVel(t0) = 

{π если  t03π25t02-15230 если  t0(3,7]8π3 если  7<t0кусочный (t0 <= 3, sym (пи), 3 <t0 & t0 <= 7, (sym (пи) * ((25*t0)/2 - sym (15/2)))/30, 7 <t0, (8*sym (пи))/3)

Вычислите угол заводной рукоятки путем интеграции угловой скорости с помощью int функция. Примите начальный угол заводной рукоятки θ=0. Вычислите интеграл угловой скорости от 0 к t.

angPos(t) = int(angVel,t0,0,t);

Найдите поршневую высоту как функцию времени путем замены выражением angPos для угла заводной рукоятки.

H(t) = pistHeight(150,50,angPos)
H(t) = 

{200 если  t=0100 если  t=320625+25 если  t=750cos(σ1)+22500-2500sin(σ1)2 если  7<t50cos(πt)+22500-2500sin(πt)2 если  t3t022500-2500sin(σ2)2-50cos(σ2) если  t(3,7]where  σ1=31π3+8πt-73  σ2=π5t+9t-324кусочный (t == 0, 200, t == 3, 100, t == 7, sqrt (sym (20625)) + 25, 7 <t, 50*cos ((31*sym (пи))/3 + (8*sym (пи) * (t - 7))/3) + sqrt (22500 - 2500*sin ((31*sym (пи))/3 + (8*sym (пи) * (t - 7))/3) ^2), t <= 3&t ~ = 0, 50*cos (sym (пи) *t) + sqrt (22500 - 2500*sin (sym (пи) *t) ^2), 3 <t & t <= 7, sqrt (22500 - 2500*sin ((sym (пи) * (5*t + 9) * (t - 3))/24) ^2) - 50*cos ((sym (пи) * (5*t + 9) * (t - 3))/24))

Постройте поршневую высоту как функцию времени. Заметьте, что колебание поршневой высоты становится быстрее между 3 и 7 секундами.

fplot(H(t),[0 10])
xlabel('Time (sec)')
ylabel('Height (mm)')

Шаг 5: создайте анимацию движущегося поршня

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

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

figure;
plot([-43 -43],[50 210],'k','LineWidth',3)
hold on;
plot([43 43],[50 210],'k','LineWidth',3)
plot([-43 43],[210 210],'k','LineWidth',3)
axis equal;

Затем создайте объект Animation движения остановки поршневой головы при помощи fanimator функция. По умолчанию, fanimator создает объект Animation путем генерации 10 систем координат в единицу времени в области значений t от 0 до 10. Смоделируйте поршневую голову как прямоугольник с толщиной 10 мм и переменной высотой H(t). Постройте поршневую голову при помощи rectangle функция.

fanimator(@rectangle,'Position',[-43 H(t) 86 10],'FaceColor',[0.8 0.8 0.8])

Добавьте объекты Animation шатуна и поршневой заводной рукоятки. Добавьте часть текста, чтобы считать прошедшее время.

fanimator(@(t) plot([0 50*sin(angPos(t))],[H(t) 50*cos(angPos(t))],'r-','LineWidth',3))
fanimator(@(t) plot([0 50*sin(angPos(t))],[0 50*cos(angPos(t))],'g-','LineWidth',3))
fanimator(@(t) text(-25,225,"Timer: "+num2str(t,2)));
hold off;

Используйте команду playAnimation проигрывать анимацию движущегося поршня.