MATLAb 机械源码文件好东西啊

源代码在线查看: 06-凸轮轮廓的设计计算与绘图.m

软件大小: 40 K
上传用户: guigong
关键词: MATLAb 机械 源码
下载地址: 免注册下载 普通下载 VIP

相关代码

				    disp '    ******** 偏置移动从动件盘形凸轮设计 ********'
				    disp '已知条件:'
				    disp '      凸轮作逆时针方向转动,从动件偏置在凸轮轴心的右边'
				    disp '      从动件在推程作等加速/等减速运动,在回程作余弦加速度运动'
				    rb = 40;rt = 10;e = 15;h = 50;ft = 100;fs = 60;fh = 90;alp = 35;
				    fprintf (1,'  基圆半径          rb = %3.4f mm \n',rb)
				    fprintf (1,'  滚子半径          rt = %3.4f mm \n',rt)
				    fprintf (1,'  推杆偏距           e = %3.4f mm \n',e)
				    fprintf (1,'  推程升程           h = %3.4f mm \n',h)
				    fprintf (1,'  推程运动角        ft = %3.4f 度 \n',ft)
				    fprintf (1,'  远休止角          fs = %3.4f 度 \n',fs)
				    fprintf (1,'  回程运动角        fh = %3.4f 度 \n',fh)
				    fprintf (1,'  推程许用压力角   alp = %3.4f 度 \n',alp)
				    hd= pi / 180;du = 180 / pi;
				    se=sqrt( rb^2 - e^2 );
				    d1 = ft + fs;d2 = ft + fs + fh;
				    disp '  '
				    disp '计算过程和输出结果:'
				    disp '  1-  计算凸轮理论轮廓的压力角和曲率半径'
				    disp '    1-1 推程(等加速/等减速运动)'
				    s = zeros(ft);ds = zeros(ft);d2s = zeros(ft);
				    at = zeros(ft);atd = zeros(ft);pt = zeros(ft);
				    for f = 1 : ft
				       if f 				          s(f)=2 * h * f ^ 2 / ft ^ 2;s = s(f);
				          ds(f)=4 * h * f * hd / (ft * hd) ^ 2;ds = ds(f);
				          d2s(f)=4 * h / (ft * hd) ^ 2;d2s = d2s(f);
				       else
				          s(f)=h - 2 * h * (ft - f) ^ 2 / ft ^ 2;s = s(f);
				          ds(f)=4 * h * (ft - f) * hd / (ft * hd) ^ 2;ds = ds(f);
				          d2s(f)=-4 * h / (ft * hd) ^ 2;d2s = d2s(f);
				       end
				       at(f)= atan(abs(ds - e) / (se + s));atd(f) = at(f) * du;
				       p1=((se + s ) ^ 2 + (ds - e) ^ 2) ^ 1.5;
				       p2= abs((se + s) * (d2s - se - s) - (ds - e) * (2 * ds - e));
				       pt(f)= p1 /p2;p = pt(f); 
				    end
				    atm = 0;
				    for f = 1 : ft
				       if atd(f) > atm  
				          atm = atd(f);
				       end
				    end
				    fprintf (1,'          最大压力角            atm = %3.4f 度\n',atm)
				    for f = 1 : ft
				       if abs(atd(f) - atm) < 0.1 
				          ftm = f;break
				       end
				    end
				    fprintf (1,'              对应的位置角      ftm = %3.4f 度\n',ftm)
				    if atm > alp 
				       fprintf (1,'            * 凸轮推程压力角超过许用值,需要增大基圆!\n')
				    end
				    ptn = rb + h;
				    for f = 1 : ft
				       if pt(f) < ptn  
				          ptn = pt(f);
				       end
				    end
				    fprintf (1,'          轮廓最小曲率半径      ptn = %3.4f mm\n',ptn)
				    for f = 1 : ft
				       if abs(pt(f) - ptn) < 0.1  
				          ftn = f;break
				       end
				    end
				    fprintf (1,'              对应的位置角      ftn = %3.4f 度\n',ftn)
				    if ptn < rt + 5 
				       fprintf (1,'      * 凸轮推程轮廓曲率半径小于许用值,需要增大基圆或减小滚子!\n')
				    end 
				    disp '    1-2 回程(余弦加速度运动)'
				    s = zeros(fh);ds = zeros(fh);d2s = zeros(fh);
				    ah = zeros(fh);ahd = zeros(fh);ph = zeros(fh);
				    for f = d1 : d2
				       k = f - d1;
				       s(f) = .5 * h * (1 + cos(pi * k / fh)); s = s(f);
				       ds(f)=-.5 * pi * h * sin(pi * k / fh) / (fh * hd);ds = ds(f);
				       d2s(f)= -.5 * pi ^2 * h * cos(pi * k / fh)/(fh * hd) ^2;d2s = d2s(f);
				       ah(f)=atan(abs(ds + e) / (se + s));ahd(f) = ah(f) * du;
				       p1=((se + s ) ^ 2 + (ds - e) ^ 2) ^ 1.5;
				       p2= abs((se + s) * (d2s - se - s) - (ds - e) * (2 * ds - e));
				       ph(f)= p1 /p2;p = ph(f);
				    end
				    ahm = 0;
				    for f = d1 : d2
				       if ahd(f) > ahm;
				          ahm = ahd(f);
				       end
				    end
				    fprintf (1,'          最大压力角            ahm = %3.4f 度\n',ahm)
				    for f = d1 : d2
				       if abs(ahd(f)- ahm) < 0.1 
				          fhm = f;break
				       end
				    end
				    fprintf (1,'              对应的位置角      fhm = %3.4f 度\n',fhm)
				    phn = rb + h;
				    for f = d1 : d2
				       if ph(f) < phn  
				          phn = ph(f);
				       end
				    end
				    fprintf (1,'          轮廓最小曲率半径      phn = %3.4f mm\n',phn)
				    for f = d1 : d2
				       if abs(ph(f) - phn) < 0.1  
				          fhn = f;break
				       end
				    end
				    fprintf (1,'              对应的位置角      fhn = %3.4f 度\n',fhn)
				    if phn < rt + 5 
				       fprintf (1,'      * 凸轮回程轮廓曲率半径小于许用值,需要增大基圆或减小滚子!\n')
				    end
				    disp '  2- 计算凸轮理论廓线与实际廓线的直角坐标'
				    n = 360;
				    s = zeros(n);ds = zeros(n);r = zeros(n);rp = zeros(n);
				    x = zeros(n);y = zeros(n);dx = zeros(n);dy = zeros(n);
				    xx = zeros(n);yy = zeros(n);xp = zeros(n);yp = zeros(n);
				    xxp = zeros(n);yyp = zeros(n);
				    for f = 1 : n
				       if f 				          s(f) = 2 * h * f ^ 2 / ft ^ 2; s = s(f);
				          ds(f) = 4 * h * f * hd / (ft * hd) ^ 2; ds = ds(f);
				       elseif f > ft/2 & f 				          s(f) = h - 2 * h * (ft - f) ^ 2 / ft ^ 2; s = s(f);
				          ds(f) = 4 * h * (ft - f) * hd / (ft * hd) ^ 2; ds = ds(f);
				       elseif f > ft & f 				          s = h;ds = 0;  
				       elseif f > d1 & f 				          k = f - d1;         
				          s(f) = .5 * h * (1 + cos(pi * k / fh)); s = s(f);
				          ds(f)= -.5 * pi * h * sin(pi * k / fh) / (fh * hd); ds = ds(f);
				       elseif f > d2 & f 				          s = 0;ds = 0;
				       end     
				       xx(f) = (se + s) * sin(f * hd) + e * cos(f * hd); x = xx(f);
				       yy(f) = (se + s) * cos(f * hd) - e * sin(f * hd); y = yy(f);
				       dx(f) = (ds - e) * sin(f * hd) + (se + s) * cos(f * hd); dx = dx(f);
				       dy(f) = (ds - e) * cos(f * hd) - (se + s) * sin(f * hd); dy = dy(f);
				       xp(f) = x + rt * dy / sqrt(dx ^ 2 + dy ^ 2);xxp = xp(f);
				       yp(f) = y - rt * dx / sqrt(dx ^ 2 + dy ^ 2);yyp = yp(f);
				       r(f) = sqrt (x ^2 + y ^2 );
				       rp(f) = sqrt (xxp ^2 + yyp ^2 );     
				    end
				    disp '    2-1 推程(等加速/等减速运动)'
				    disp '  凸轮转角    理论x     理论y     实际x     实际y'
				    for f = 10 : 10 :ft
				       nu = [f xx(f) yy(f) xp(f) yp(f)];
				       disp(nu)
				    end
				    disp '    2-2 回程(余弦加速度运动)'
				    disp '  凸轮转角    理论x     理论y     实际x     实际y'
				    for f = d1 : 10 : d2
				       nu = [f xx(f) yy(f) xp(f) yp(f)];
				       disp(nu)
				    end
				    disp '    2-3 凸轮轮廓向径'
				    disp '  凸轮转角    理论r    实际r'
				    for f = 10 : 10 : n
				       nu = [f r(f) rp(f)];
				       disp(nu)
				    end
				    disp '绘制凸轮的理论轮廓和实际轮廓:'
				    plot(xx,yy,'r-.')                                   % 理论轮廓(红色,点划线)
				    axis ([-(rb+h-10) (rb+h+10) -(rb+h+10) (rb+rt+10)]) % 横轴和纵轴的下限和上限
				    axis equal                                          % 横轴和纵轴的尺度比例相同
				    text(rb+h+3,0,'X')                                  % 标注横轴
				    text(0,rb+rt+3,'Y')                                 % 标注纵轴
				    text(-5,5,'O')                                      % 标注直角坐标系原点
				    title('偏置移动从动件盘形凸轮设计')                 % 标注图形标题
				    hold on;                                            % 保持图形
				    plot([-(rb+h) (rb+h)],[0 0],'k')                    % 横轴(黑色)
				    plot([0 0],[-(rb+h) (rb+rt)],'k')                   % 纵轴(黑色)
				    plot([e e],[0 (rb+rt)],'k--')                       % 初始偏置位置(黑色,虚线)
				    ct = linspace(0,2*pi);                              % 画圆的极角变化范围
				    plot(rb*cos(ct),rb*sin(ct),'g')                     % 基圆(绿色)
				    plot(e*cos(ct),e*sin(ct),'c--')                     % 偏距圆(蓝绿色,虚线)   
				    plot(e + rt*cos(ct),se + rt*sin(ct),'y')            % 滚子圆(黄色)   
				    plot(xp,yp,'b')                                     % 实际轮廓(蓝色)
				    			

相关资源