栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

使用matlab进行凸轮设计

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用matlab进行凸轮设计

function [i,d,v,a]=fun1(x,y)
%% FUN1函数介绍
%   输入初末位置和推程/回程,用三四五次运动多项式计算这一段凸轮的各个点升距,
%   输出各点对应升/降距向量。
%-------------------------------------------------------------------------%

%   输入参数:
%   x为1*2的向量,用来储存初末位置的推程(回程)角位置。
%   y为1*2的向量,用来储存初末位置的总升距(降距)。

%   输出参数:
%   i为分段数。
%   d对应分段上的升距。

%% 参数初始化
if y(1)     m=1;
else
    m=0;
end

f=abs(x(1)-x(2));  %推(回)程角
h=abs(y(1)-y(2));  %升(降)距离
derta=x(1);        %x移动系数,左加右减
d=[];              %从动件位移向量
v=[];              %从动件速度向量
a=[];              %从动件加速度向量
%% 计算
for i=x(1):0.001:x(2)
    
    if m==1        %推程的位移,速度,加速度
       d=[d h*(10*((i-derta)/f).^3-15*((i-derta)/f).^4+6*((i-derta)/f).^5)+y(1)];
       v=[v h/f*((30*((i-derta)/f).^2-60*((i-derta)/f).^3+30*((i-derta)/f).^4))];
       a=[a h/(f.^2)*((60*((i-derta)/f)-180*((i-derta)/f).^2)+120*((i-derta)/f).^3)];
    else           %回程的位移,速度,加速度
       d=[d h*(1-10*((i-derta)/f).^3+15*((i-derta)/f).^4-6*((i-derta)/f).^5)+y(2)];
       v=[v -h/f*((30*((i-derta)/f).^2-60*((i-derta)/f).^3+30*((i-derta)/f).^4))];
       a=[a -h/(f.^2)*((60*((i-derta)/f)-180*((i-derta)/f).^2)+120*((i-derta)/f).^3)];
    end

end

i=x(1):0.001:x(2);                 %去掉最后一个点
[~ ,l]=size(i); 
i(l)=[];
d(l)=[];
v(l)=[];
a(l)=[];
%% 绘图与输出
hold on;                           %保持命令
subplot(2,2,1);plot(i,d);          %绘图
hold on;
subplot(2,2,2);plot(i,v); 
hold on;
subplot(2,2,3);plot(i,a); 
end

============================分界线======================================

function [i,d,v,a]=fun2(x,y)
%% FUN2函数介绍
%   输入一组x时序坐标,以及对应的y升/降距,
%   输出其对应的三四五次多项式位置坐标并绘图。
%-------------------------------------------------------------------------%

%   输入参数:
%   x为输入各个分段位置的角度分界。
%   y为对应各个分段的升/降距。
%% 参数初始化
[~,l]=size(x);       %段位数
x=x./x(l)*2*pi;      %更新x向量,化为角度型
i=[];                %储存的角度向量
d=[];                %储存的升/降距向量
v=[];                %储存的速度向量
a=[];                %储存的加速度向量
%% 分割图形区
hold on,subplot(2,2,1),axis normal,grid on,title('从动件位移曲线图'),xlabel('角度/rad'),ylabel('位移/mm');
hold on,subplot(2,2,2),axis normal,grid on,title('从动件速度曲线图(纵坐标乘以ω即得速度)'),xlabel('角度/rad'),ylabel('速度');
hold on,subplot(2,2,3),axis normal,grid on,title('从动件加速度曲线图(纵坐标乘以ω的平方即得加速度)'),xlabel('角度/rad'),ylabel('加速度');
%% 计算
for num=1:l-1
    [i0,d0,v0,a0]=fun1([x(num) x(num+1)],[y(num) y(num+1)]);%计算临时向量i0,d0
    i=[i i0];%储存角度向量
    d=[d d0];%储存升/降距向量
    v=[v v0];%储存速度向量
    a=[a a0];%储存加速度向量
end
 

=========================================================================

%% FUN3函数介绍
%   输入基圆半径,偏心距,角度分界,对应分界的升/降距,
%   输出理论轮廓线坐标矩阵,基圆坐标矩阵,偏距圆坐标矩阵,并绘图。
%-------------------------------------------------------------------------%
%   输入参数:

%   rb为基圆半径。
%   e为偏距。
%   x为输入时序分界。
%   y为对应分界的升/降距。

%% 坐标导入
[i,s,~,~]=fun2(x,y);%i代表每个计算点的角度,s为各角度对应升距
%% 参数初始化
x0=[];%存储理论轮廓线的x坐标
y0=[];%存储理论轮廓线的y坐标
z0=[];%存储理论轮廓线的z坐标
x1=[];%储存基圆x坐标
y1=[];%储存基圆y坐标
x2=[];%储存偏距圆x坐标
y2=[];%储存偏距圆y坐标
z=[]; %储存基圆,偏距圆z坐标
s0=(rb^2-e^2)^0.5;%初始距离
[~,l]=size(i);%向量长度
%% 计算
%理论轮廓线坐标计算:
for k=1:l
    x0=[x0 (s0+s(k))*sin(i(k))+e*cos(i(k))];
    y0=[y0 (s0+s(k))*cos(i(k))-e*sin(i(k))];
    z0=[z0 0];
end
%基圆坐标及偏距圆坐标计算:
for t=0:2*pi/360:2*pi
x1=[x1 rb*cos(t)];
y1=[y1 rb*sin(t)];
x2=[x2 e*cos(t)];
y2=[y2 e*sin(t)];
z=[z 0];
end
G0=[x0',y0',z0'];%理论轮廓线坐标矩阵
G1=[x1',y1',z'];%基圆坐标矩阵
G2=[x2',y2',z'];%偏距圆坐标矩阵
%% 绘图
hold on;
subplot(2,2,4),axis equal;
plot(x0,y0,'r');
hold on;
plot(x1,y1,'b');
hold on;
plot(x2,y2,'g');
title('滚子移动从动件盘型凸轮曲线图');
grid on;
legend('理论轮廓线','基圆','偏距圆');
text(0,rb,'ω↷');

======================================================================

function [G0,G1]=fun4(rb,x,y)
%% 坐标导入
[i,s,v,~]=fun2(x,y);%i代表每个计算点的角度,s为各角度对应升距,v为速度
%% 参数初始化
x0=[];%存储实际轮廓线的x坐标
y0=[];%存储实际轮廓线的y坐标
z0=[];%存储实际轮廓线的z坐标
x1=[];%储存基圆的x坐标
y1=[];%储存基圆的y坐标
z1=[];%储存基圆的z坐标
[~,l]=size(i);%向量长度
%% 计算
%实际轮廓线坐标计算:
for k=1:l
    x0=[x0 (rb+s(k))*sin(i(k))+v(k)*cos(i(k))];
    y0=[y0 (rb+s(k))*cos(i(k))-v(k)*sin(i(k))];
    z0=[z0 0];
end
%基圆坐标计算:
for t=0:2*pi/360:2*pi
x1=[x1 rb*cos(t)];
y1=[y1 rb*sin(t)];
z1=[z1 0];
end
G0=[x0',y0',z0'];%实际轮廓线坐标矩阵
G1=[x1',y1',z1'];%基圆坐标矩阵

%% 绘图
hold on;
subplot(2,2,4),axis equal;
plot(x0,y0,'r');
hold on;
plot(x1,y1,'b');
title('平底移动从动件盘型凸轮曲线图');
grid on;
legend('实际轮廓线','基圆');
text(0,110,'ω↷');

end

=========================================================================

fun3,fun4调用了fun1,fun2,fun3用于设计滚子移动从动件盘形凸轮机构,fun4用于设计平底移动从动件盘型凸轮机构。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/990035.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号