MATLAB牛头刨刀床

发布于:2025-03-14 ⋅ 阅读:(15) ⋅ 点赞:(0)
function main1
    clear;
    clc;
    l1 =0.100;
    l3 =0.360;
    l4=0.200;
    l6=0.200;
    l61=0.336;
    w1=2*pi*60;
    alpha1=0;
    D2H=pi/180;
    H2D=180/pi;

    for i=1:3601         
        o1(i)=pi*(i-1)/1800;
        o31(i)=atan((l6+l1*sin(o1(i)))/(l1*cos(o1(i))));  
        if o31(i)>=0
            o3(i)=o31(i);
        else 
            o3(i)=pi+o31(i);
        end

        s3(i)=(l1*cos(o1(i)))/cos(o3(i));              
        o4(i)=pi-asin((l61-l3*sin(o3(i)))/l4);
        se(i)=l3*cos(o3(i))+l4*cos(o4(i));           
        if o1(i)==pi/2              
            o3(i)=pi/2;
            s3(i)=l1+l6;
        end

        if o1(i)==3*pi/2
            o3(i)=pi/2;
            s3(i)=16-l1;
        end

        A1=[cos(o3(i)),-s3(i)*sin(o3(i)),0,0;sin(o3(i)),s3(i)*cos(o3(i)),0,0;0,-l3*sin(o3(i)),-l4*sin(o4(i)),-1;0,l3*cos(o3(i)),l4*cos(o4(i)),0];
        B1=w1*[-l1*sin(o1(i));l1*cos(o1(i));0;0];
        D1=A1\B1;
        E1(:,i)=D1;
        ds(i)=D1(1);
        w3(i)=D1(2);
        w4(i)=D1(3);
        ve(i)=D1(4);

        A2=[cos(o3(i)),-s3(i)*sin(o3(i)),0,0;sin(o3(i)),s3(i)*cos(o3(i)),0,0;0,-l3*sin(o3(i)),-l4*sin(o4(i)),-1;0,l3*cos(o3(i)),l4*cos(o4(i)),0];
        B2=-[w3(i)*sin(o3(i)),(-ds(i)*sin(o3(i))-s3(i)*w3(i)*cos(o3(i))),0,0;w3(i)*cos(o3(i)),(ds(i)*cos(o3(i))-s3(i)*w3(i)*sin(o3(i))),0,0;0,-l3*w3(i)*cos(o3(i)),-l4*w4(i)*cos(o4(i)),0;0,-l3*w3(i)*sin(o3(i)),-l4*w4(i)*sin(o4(i)),0]*[ds(i);w3(i);w4(i);ve(i)];
        C2=w1*[-l1*w1*cos(o1(i));-l1*w1*sin(o1(i));0;0];
        B=B2+C2;
        D2=A2\B;
        E2(:,i)=D2;
        dds(i)=D2(1);
        a3(i)=D2(2);
        a4(i)=D2(3);
        ae(i)=D2(4);
    end

    o1D=o1.*H2D;          
    y=[o3.*H2D;o4.*H2D];
    w=[w3;w4];
    a=[a3;a4];

    % 第一个图:导杆角位移曲线和刨刀的位移曲线
    figure(1);
    yyaxis left
    plot(o1D,y);
    ylabel('\it\theta3,\theta4');
    yyaxis right
    plot(o1D,se);
    ylabel('Se')
    xlabel('\it\theta1');
    title('导杆角位移曲线和刨刀的位移曲线');
    axis auto;

    % 第二个图:导杆角速度曲线和刨刀的速度曲线
    figure(2);
    yyaxis left
    plot(o1D,w);
    ylabel('\it\omega3,\omega4');
    yyaxis right
    plot(o1D,ve);
    ylabel('Ve');
    xlabel('\it\theta1');
    title('导杆角速度曲线和刨刀的速度曲线');
    axis auto;

    % 第三个图:导杆的加速度线图和刨刀的加速度曲线
    figure(3);
    yyaxis left
    plot(o1D,a);
    ylabel('\it\alpha3,\alpha4');
    yyaxis right
    plot(o1D,ae);
    ylabel('\it\alphaE');
    xlabel('\it\theta 1');
    title('导杆的加速度线图和刨刀的加速度曲线');
    axis auto;
end

1. 函数定义与初始化部分

 

matlab

function main1
    clear;
    clc;
    l1 =0.100;
    l3 =0.360;
    l4=0.200;
    l6=0.200;
    l61=0.336;
    w1=2*pi*60;
    alpha1=0;
    D2H=pi/180;
    H2D=180/pi;

 
  • function main1:定义了一个名为 main1 的函数。
  • clear:清除工作区中的所有变量。
  • clc:清除命令窗口中的内容。
  • l1, l3, l4, l6, l61:这些是机械系统中各杆的长度参数。
  • w1:输入的角速度,这里是 2*pi*60,通常用于表示每分钟 60 转的角速度转换为弧度每秒。
  • alpha1:初始角度加速度,这里设为 0。
  • D2H 和 H2D:分别用于角度的度转弧度和弧度转度的转换因子。

2. 主循环部分

 

matlab

for i=1:3601         
    o1(i)=pi*(i-1)/1800;
    o31(i)=atan((l6+l1*sin(o1(i)))/(l1*cos(o1(i))));  
    if o31(i)>=0
        o3(i)=o31(i);
    else 
        o3(i)=pi+o31(i);
    end

    s3(i)=(l1*cos(o1(i)))/cos(o3(i));              
    o4(i)=pi-asin((l61-l3*sin(o3(i)))/l4);
    se(i)=l3*cos(o3(i))+l4*cos(o4(i));           
    if o1(i)==pi/2              
        o3(i)=pi/2;
        s3(i)=l1+l6;
    end

    if o1(i)==3*pi/2
        o3(i)=pi/2;
        s3(i)=16-l1;
    end
 
  • for i = 1:3601:循环 3601 次,将 o1 从 0 到 2*pi 以 pi/1800 的步长进行遍历。
    • o1(i)=pi*(i - 1)/1800:计算当前的输入角度 o1
    • o31(i)=atan((l6 + l1*sin(o1(i)))/(l1*cos(o1(i)))):根据几何关系计算 o31
    • 通过 if-else 语句对 o31 进行判断,得到最终的 o3 值。
    • s3(i)=(l1*cos(o1(i)))/cos(o3(i)):计算 s3 的值。
    • o4(i)=pi - asin((l61 - l3*sin(o3(i)))/l4):计算 o4 的值。
    • se(i)=l3*cos(o3(i)) + l4*cos(o4(i)):计算刨刀的位移 se
    • 两个 if 语句用于处理 o1 为 pi/2 和 3*pi/2 时的特殊情况。

3. 速度计算部分

 

matlab

    A1=[cos(o3(i)),-s3(i)*sin(o3(i)),0,0;sin(o3(i)),s3(i)*cos(o3(i)),0,0;0,-l3*sin(o3(i)),-l4*sin(o4(i)),-1;0,l3*cos(o3(i)),l4*cos(o4(i)),0];
    B1=w1*[-l1*sin(o1(i));l1*cos(o1(i));0;0];
    D1=A1\B1;
    E1(:,i)=D1;
    ds(i)=D1(1);
    w3(i)=D1(2);
    w4(i)=D1(3);
    ve(i)=D1(4);
 
  • A1:根据运动学方程构建的系数矩阵。
  • B1:方程的右侧向量。
  • D1 = A1\B1:求解线性方程组 A1 * D1 = B1,得到速度相关的解。
  • E1(:,i)=D1:将解存储在矩阵 E1 中。
  • ds(i), w3(i), w4(i), ve(i):分别提取解中的各速度分量。

4. 加速度计算部分

 

matlab

    A2=[cos(o3(i)),-s3(i)*sin(o3(i)),0,0;sin(o3(i)),s3(i)*cos(o3(i)),0,0;0,-l3*sin(o3(i)),-l4*sin(o4(i)),-1;0,l3*cos(o3(i)),l4*cos(o4(i)),0];
    B2=-[w3(i)*sin(o3(i)),(-ds(i)*sin(o3(i))-s3(i)*w3(i)*cos(o3(i))),0,0;w3(i)*cos(o3(i)),(ds(i)*cos(o3(i))-s3(i)*w3(i)*sin(o3(i))),0,0;0,-l3*w3(i)*cos(o3(i)),-l4*w4(i)*cos(o4(i)),0;0,-l3*w3(i)*sin(o3(i)),-l4*w4(i)*sin(o4(i)),0]*[ds(i);w3(i);w4(i);ve(i)];
    C2=w1*[-l1*w1*cos(o1(i));-l1*w1*sin(o1(i));0;0];
    B=B2+C2;
    D2=A2\B;
    E2(:,i)=D2;
    dds(i)=D2(1);
    a3(i)=D2(2);
    a4(i)=D2(3);
    ae(i)=D2(4);
end
 
  • A2:与 A1 相同,因为加速度计算的系数矩阵与速度计算的系数矩阵形式相同。
  • B2:包含速度相关的项,用于加速度计算。
  • C2:输入角速度相关的项。
  • B = B2 + C2:得到方程的右侧向量。
  • D2 = A2\B:求解线性方程组 A2 * D2 = B,得到加速度相关的解。
  • E2(:,i)=D2:将解存储在矩阵 E2 中。
  • dds(i), a3(i), a4(i), ae(i):分别提取解中的各加速度分量。

5. 数据处理部分

 

matlab

o1D=o1.*H2D;          
y=[o3.*H2D;o4.*H2D];
w=[w3;w4];
a=[a3;a4];
 
  • o1D = o1.*H2D:将 o1 从弧度转换为度。
  • y = [o3.*H2D;o4.*H2D]:将 o3 和 o4 从弧度转换为度,并存储在矩阵 y 中。
  • w = [w3;w4]:将 w3 和 w4 存储在矩阵 w 中。
  • a = [a3;a4]:将 a3 和 a4 存储在矩阵 a 中。

6. 图形绘制部分

 

matlab

% 第一个图:导杆角位移曲线和刨刀的位移曲线
figure(1);
yyaxis left
plot(o1D,y);
ylabel('\it\theta3,\theta4');
yyaxis right
plot(o1D,se);
ylabel('Se')
xlabel('\it\theta1');
title('导杆角位移曲线和刨刀的位移曲线');
axis auto;

% 第二个图:导杆角速度曲线和刨刀的速度曲线
figure(2);
yyaxis left
plot(o1D,w);
ylabel('\it\omega3,\omega4');
yyaxis right
plot(o1D,ve);
ylabel('Ve');
xlabel('\it\theta1');
title('导杆角速度曲线和刨刀的速度曲线');
axis auto;

% 第三个图:导杆的加速度线图和刨刀的加速度曲线
figure(3);
yyaxis left
plot(o1D,a);
ylabel('\it\alpha3,\alpha4');
yyaxis right
plot(o1D,ae);
ylabel('\it\alphaE');
xlabel('\it\theta 1');
title('导杆的加速度线图和刨刀的加速度曲线');
axis auto;
 
  • figure(1), figure(2), figure(3):分别创建三个独立的图形窗口。
  • yyaxis left 和 yyaxis right:用于在同一个图中绘制左右两个不同的 y 轴。
  • plot:绘制相应的曲线。
  • ylabel 和 xlabel:设置坐标轴标签。
  • title:设置图形的标题。
  • axis auto:自动调整坐标轴的范围。