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

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

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

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

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

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

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

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

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

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

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

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

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

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

Высота поршня относительно источника H=aпотому чтоθ+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=150 мм и радиус заводной рукоятки a=50 мм. Постройте поршневую высоту как функцию угла заводной рукоятки для одного оборота в интервале [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. Покажите поршневую высоту в интервале 30 мм<a<60 мм и 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-aпотому что(θ)-L2-a2sin(θ)24

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

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

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

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

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

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

Поршневой объем является самым маленьким, когда поршень в TDC, и углом заводной рукоятки является 0 или 2*pi. Поршневой объем является самым большим, когда поршень в TDC, и углом заводной рукоятки является 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

Вычислите угол заводной рукоятки путем интеграции угловой скорости с помощью функции 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=750потому что(σ1)+22500-2500sin(σ1)2 если  7<t50потому что(πt)+22500-2500sin(πt)2 если  t3t022500-2500sin(σ2)2-50потому что(σ2) если  t(3,7]где  σ1=31π3+8πt-73  σ2=π5t+9t-324

Постройте поршневую высоту как функцию времени. Заметьте, что колебание поршневой высоты становится быстрее между 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, чтобы проигрывать анимацию движущегося поршня.