2007年6月7日 星期四

Homework 13

Homework 13
b94611001 歐陽太閒

6/7全程上課

一、複式齒輪之設計


實際運用齒輪時,必須建立一齒列(train),才能夠發揮齒輪的加減速,以及調整扭矩的功能,而且在較複雜的機構如行星齒輪系或者是差速器等,齒列分析是不可避免的.

本次作業題目為設計一轉速比125的複式齒輪齒列.
首先我們利用課本所教導的方法,將VR=125開根號

>>sqrt(125)

ans =

  11.1803

顯然大於10,會使齒輪負荷過大且製造不便因此不適於以兩個齒輪組成的齒列,
因此我們嘗試開三次方根

>>125^(1/3)

ans =
    5

可以得到一個漂亮的整數比,因此我們可以得到

ω1/ω2=5
ω2/ω3=5
ω3/ω4=5

因此VR=ω1/ω4=125

由此也可以得到齒數比:

N2/N1=5
N3/N2=5
N4/N3=5

1.因此考慮複式齒輪組


同樣的,齒輪的徑節(Dp),周節(Pc)和壓力角必須相同才能正常旋轉

也限制最小齒數為14齒,徑節=8,壓力角=25
得到

N1=14
N2=14*5=70
N3=14
N4=14*5=70

以contact_ratio(徑節,齒數1,齒數2,[壓力角])程式來計算接觸比,其中N2,N3共軸(coaxial)

>>[c_ratio,c_length,ad,pc,pb,r2,r3,ag]=contact_ratio(8,14,70,25)

c_ratio =接觸比
   1.4565
c_length =接觸長度
   0.5184
ad =齒冠
   0.1250
pc =周節
   0.3927
pb =基周節
   0.3559
r2 =齒輪2節圓直徑
   1.7500
r3 =齒輪3節圓直徑
   8.7500
ag =
  20.1547   17.2971   37.4518齒輪2的接近角/遠退角/作用角
   4.0309   3.4594    7.4904 齒輪3的接近角/遠退角/作用角


因此我們可以得到c_ratio=1.4565大於1不會過載,且齒輪G1直徑1.7500,G2直徑8.7500,G3直徑1.7500,G4直徑8.7500
就算水平排列也可以得到

>>1.75+(8.75/2)+(1.75/2)+(8.75/2)+(1.75/2)+8.75
ans =
   21

遠小於簡單齒列的最終端齒輪節圓直徑218.75,大幅度節省空間,也可以大幅節省成本,

另外
徑節(Dp)=8
周節(Pc)=0.3927
壓力角=25
齒冠=0.1250

也都合乎標準,不至於造成損壞.
然而,複式齒輪組較特殊的是由於有共軸,因此在撰寫程式時要較為小心.


故我們可以得到如下


只顯示節圓與基圓時



所以我們可以寫出以下結果

程式結構
1.清除畫面及程式資訊
2.參數引入draw_gear.m
3.建立基本物件
a.利用bushing畫基座
b.建立齒輪
c.利用bushing畫節圓和基圓
4.利用while進行動畫繪製
a.轉角
b.畫出新位置

function geartrain2(Dpitch,nn1,nn2,nn3,nn4,nn5,nn6,phi,ww)
%13.1 歐陽太閒b94611001 本程式改寫自老師的 move2_rack.m
%本程式改寫自老師的move2_rack %Dpitch=節矩,nn1=R2齒數,nn2=R3齒數,nn3=R3齒數,phi=壓力角,ww=nn1角速度
clf;
%清除畫面
d2r=pi/180;
%角徑轉換
unit1=0.01;
%動畫單位
phir=phi*d2r; pc=pi/Dpitch;
%計算pc
title('作業13 作者:歐陽太閒b94611001');
%資訊
xlabel('x-axis cm'); ylabel('y-axis cm');
hold on;
[coord,rp,rb]=draw_gear(Dpitch,nn1,phi,360,0,0);%將參數引入draw_gear.m,畫第一齒輪
[coord2,rp2,rb2]=draw_gear(Dpitch,nn2,phi,360,0,0);
%將參數引入draw_gear.m,畫第二齒輪
[coord3,rp3,rb3]=draw_gear(Dpitch,nn3,phi,360,0,0);
%將參數引入draw_gear.m,畫第三齒輪
[coord4,rp4,rb4]=draw_gear(Dpitch,nn4,phi,360,0,0);
%將參數引入draw_gear.m,畫第四齒輪
[coord5,rp5,rb5]=draw_gear(Dpitch,nn5,phi,360,0,0);
%將參數引入draw_gear.m,畫第五齒輪
[coord6,rp6,rb6]=draw_gear(Dpitch,nn6,phi,360,0,0);
%將參數引入draw_gear.m,畫第六齒輪
del=2.5;
coord2=rotate2D([coord2(:,1),coord2(:,2)],+del,0,0);
coord3=rotate2D([coord3(:,1),coord3(:,2)],+del,0,0);
coord4=rotate2D([coord4(:,1),coord4(:,2)],+del,0,0);
coord5=rotate2D([coord5(:,1),coord5(:,2)],+del,0,0);
coord6=rotate2D([coord6(:,1),coord6(:,2)],+del,0,0);
xc1=coord(:,1);yc1=coord(:,2);%將計算結果引出
xc2=coord2(:,1);yc2=coord2(:,2);%將計算結果引出
xc3=coord3(:,1);yc3=coord3(:,2);%將計算結果引出
xc4=coord4(:,1);yc4=coord4(:,2);%將計算結果引出
xc5=coord5(:,1);yc5=coord5(:,2);%將計算結果引出
xc6=coord6(:,1);yc6=coord6(:,2);%將計算結果引出
coord=bushing(rp/6,0,0);%利用bushing畫基座
coord2=bushing(rp2/6,rp+rp2,0);
coord4=bushing(rp4/6,rp+rp2+rp3+rp4,0);
coord5=bushing(rp4/6,rp+rp2+rp3+rp4+rp5+rp6,0);
xb1=coord(:,1);yb1=coord(:,2);
xb2=coord2(:,1);yb2=coord2(:,2);
xb4=coord4(:,1);yb4=coord4(:,2);
xb5=coord5(:,1);yb5=coord5(:,2);
plot(xb1,yb1,'r-');%畫出大小齒輪基座
plot(xb2,yb2,'r-');
plot(xb4,yb4,'r-');
plot(xb5,yb5,'r-');
pini=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','r');
%建立handler
gear=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
gear2=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
gear3=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','g');
gear4=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','g');
gear5=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','r');
[coord4]=bushing(-rp2,rp+rp2,0.2);%利用bushing畫節圓和基圓
plot(coord4(:,1),coord4(:,2),'b:');
[coord5]=bushing(-rb2,rp+rp2,0.2);
plot(coord5(:,1),coord5(:,2),'k:');
[coord6]=bushing(-rp,0,0);
%利用bushing畫節圓和基圓
plot(coord6(:,1),coord6(:,2),'b:');
[coord7]=bushing(-rb,0,0);
plot(coord7(:,1),coord7(:,2),'k:');
[coord8]=bushing(-rp3,rp+rp2,0); plot(coord8(:,1),coord8(:,2),'b:');
[coord9]=bushing(-rb3,rp+rp2,0); plot(coord9(:,1),coord9(:,2),'k:');
[coord10]=bushing(-rp4,rp+rp2+rp3+rp4,0); plot(coord10(:,1),coord10(:,2),'b:');
[coord11]=bushing(-rb4,rp+rp2+rp3+rp4,0); plot(coord11(:,1),coord11(:,2),'k:');
axis equal;
ang=0;
angp=ww*unit1;
while 1%利用while進行動畫繪製
rot1=rotate2D([xc1,yc1],ang,0,0);%進行轉角,產生新座標
rot2=rotate2D([xc2,yc2],-ang*(nn1/nn2),rp+rp2,0);
rot3=rotate2D([xc3,yc3],-ang*(nn1/nn2),rp+rp2,0);
rot4=rotate2D([xc4,yc4],ang*((nn1/nn2)^2),rp+rp2+rp3+rp4,0);
rot5=rotate2D([xc5,yc5],ang*((nn1/nn2)^2),rp+rp2+rp3+rp4,0);
rot6=rotate2D([xc6,yc6],-ang*((nn1/nn2)^3),rp+rp2+rp3+rp4+rp5+rp6,0);
set(pini,'xdata',rot1(:,1),'ydata',rot1(:,2));%分別畫出大小齒輪
set(gear,'xdata',rot2(:,1),'ydata',rot2(:,2));
set(gear2,'xdata',rot3(:,1),'ydata',rot3(:,2));
set(gear3,'xdata',rot4(:,1),'ydata',rot4(:,2));
set(gear4,'xdata',rot5(:,1),'ydata',rot5(:,2));
set(gear5,'xdata',rot6(:,1),'ydata',rot6(:,2));
drawnow; %繪製
pause(1/ww);
ang=ang+angp;
end %程式結束



代入以下指令,其中驅動齒輪角速度=300rad/s
>>geartrain2(8,14,70,14,70,14,70,25,300)

可得到以下影片


影片


而角速度達到600rad/s時
>>geartrain2(8,14,70,14,70,14,70,25,600)

可以得到以下影片:



另外,齒輪有一大優勢便是可以改變動力輸出位置,因此改寫程式如下

functiongeartrain2(Dpitch,nn1,nn2,nn3,nn4,nn5,nn6,phi,ww)
%13.1 歐陽太閒b94611001 本程式改寫自老師的 move2_rack.m
%本程式改寫自老師的move2_rack %Dpitch=節矩,nn1=R2齒數,nn2=R3齒數,nn3=R3齒數,phi=壓力角,ww=nn1角速度 clf;
%清除畫面 d2r=pi/180;%角徑轉換 unit1=0.01;%動畫單位 phir=phi*d2r; pc=pi/Dpitch;
%計算pc title('作業13 作者:歐陽太閒b94611001'); %資訊 xlabel('x-axis cm'); ylabel('y-axis cm'); hold on; [coord,rp,rb]=draw_gear(Dpitch,nn1,phi,360,0,0);%將參數引入draw_gear.m,畫第一齒輪
[coord2,rp2,rb2]=draw_gear(Dpitch,nn2,phi,360,0,0);
%將參數引入draw_gear.m,畫第二齒輪
[coord3,rp3,rb3]=draw_gear(Dpitch,nn3,phi,360,0,0);
%將參數引入draw_gear.m,畫第三齒輪
[coord4,rp4,rb4]=draw_gear(Dpitch,nn4,phi,360,0,0);
%將參數引入draw_gear.m,畫第四齒輪
[coord5,rp5,rb5]=draw_gear(Dpitch,nn5,phi,360,0,0);
%將參數引入draw_gear.m,畫第五齒輪
[coord6,rp6,rb6]=draw_gear(Dpitch,nn6,phi,360,0,0);
%將參數引入draw_gear.m,畫第六齒輪
del=2.5;
coord2=rotate2D([coord2(:,1),coord2(:,2)],+del,0,0);
coord3=rotate2D([coord3(:,1),coord3(:,2)],+del,0,0);
coord4=rotate2D([coord4(:,1),coord4(:,2)],+del,0,0);
coord5=rotate2D([coord5(:,1),coord5(:,2)],+del,0,0);
coord6=rotate2D([coord6(:,1),coord6(:,2)],+del,0,0);
xc1=coord(:,1);yc1=coord(:,2);%將計算結果引出
xc2=coord2(:,1);yc2=coord2(:,2);%將計算結果引出
xc3=coord3(:,1);yc3=coord3(:,2);%將計算結果引出
xc4=coord4(:,1);yc4=coord4(:,2);%將計算結果引出
xc5=coord5(:,1);yc5=coord5(:,2);%將計算結果引出
xc6=coord6(:,1);yc6=coord6(:,2);%將計算結果引出
coord=bushing(rp/6,0,0);%利用bushing畫基座
coord2=bushing(rp2/6,rp+rp2,0);
coord4=bushing(rp4/6,rp+rp2+rp3+rp4,0);
coord5=bushing(rp4/6,rp+rp2+rp3+rp4+rp5+rp6,0);
xb1=coord(:,1);yb1=coord(:,2);
xb2=coord2(:,1);yb2=coord2(:,2);
xb4=coord4(:,1);yb4=coord4(:,2);
xb5=coord5(:,1);yb5=coord5(:,2);
plot(xb1,yb1,'r-');%畫出大小齒輪基座
plot(xb2,yb2,'r-');
plot(xb4,yb4,'r-');
plot(xb5,yb5,'r-');
pini=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','r');
%建立handler gear=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
gear2=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
gear3=line('xdata',[],'ydata'[],'erasemode','xor','linewidth',1,'color','g');
gear4=line('xdata'[],'ydata'[],'erasemode','xor','linewidth',1,'color','g');
gear5=line('xdata',[],'ydata'[],'erasemode','xor','linewidth',1,'color','r');
[coord4]=bushing(-rp2,rp+rp2,0.2);%利用bushing畫節圓和基圓
plot(coord4(:,1),coord4(:,2),'b:');
[coord5]=bushing(-rb2,rp+rp2,0.2);
plot(coord5(:,1),coord5(:,2),'k:');
[coord6]=bushing(-rp,0,0);
%利用bushing畫節圓和基圓
plot(coord6(:,1),coord6(:,2),'b:');
[coord7]=bushing(-rb,0,0);
plot(coord7(:,1),coord7(:,2),'k:');
[coord8]=bushing(-rp3,rp+rp2,0); plot(coord8(:,1),coord8(:,2),'b:');
[coord9]=bushing(-rb3,rp+rp2,0); plot(coord9(:,1),coord9(:,2),'k:');
[coord10]=bushing(-rp4,rp+rp2+rp3+rp4,0); plot(coord10(:,1),coord10(:,2),'b:');
[coord11]=bushing(-rb4,rp+rp2+rp3+rp4,0); plot(coord11(:,1),coord11(:,2),'k:');
axis equal;
ang=0;
angp=ww*unit1;
while 1%利用while進行動畫繪製
rot1=rotate2D([xc1,yc1],ang,0,0);%進行轉角,產生新座標
rot2=rotate2D([xc2,yc2],-ang*(nn1/nn2),rp+rp2,0);
rot3=rotate2D([xc3,yc3],-ang*(nn1/nn2),rp+rp2,0);
rot4=rotate2D([xc4,yc4],ang*((nn1/nn2)^2),rp+rp2+rp3+rp4,0);
rot5=rotate2D([xc5,yc5],ang*((nn1/nn2)^2),rp+rp2+rp3+rp4,0);
rot6=rotate2D([xc6,yc6],-ang*((nn1/nn2)^3),rp+rp2+rp3+rp4+rp5+rp6,0);
set(pini,'xdata',rot1(:,1),'ydata',rot1(:,2));%分別畫出大小齒輪
set(gear,'xdata',rot2(:,1),'ydata',rot2(:,2));
set(gear2,'xdata',rot3(:,1),'ydata',rot3(:,2));
set(gear3,'xdata',rot4(:,1),'ydata',rot4(:,2));
set(gear4,'xdata',rot5(:,1),'ydata',rot5(:,2));
set(gear5,'xdata',rot6(:,1),'ydata',rot6(:,2));
drawnow; %繪製
pause(1/ww);
ang=ang+angp;
end %程式結束


可以得到不同方向的動力輸出:
>> geartrain2(8,14,70,14,70,14,70,25,300)




利用此方法對動力進行轉向,不但設計方便,動力損失少,結構穩定,且節省空間,因此應用得非常普遍,而若中間的齒列進行調整,甚至可做成共軸機構,更加方便
共軸結構

function geartrain3(Dpitch,nn1,nn2,nn3,nn4,nn5,nn6,phi,ww)
%13.1 歐陽太閒b94611001 本程式改寫自老師的 move2_rack.m
%本程式改寫自老師的move2_rack %Dpitch=節矩,nn1=R2齒數,nn2=R3齒數,nn3=R3齒數,phi=壓力角,ww=nn1角速度
clf;
%清除畫面
d2r=pi/180;
%角徑轉換
unit1=0.01;
%動畫單位
phir=phi*d2r; pc=pi/Dpitch;
%計算pc
title('作業13 作者:歐陽太閒b94611001');
%資訊
xlabel('x-axis cm'); ylabel('y-axis cm');
hold on;
[coord,rp,rb]=draw_gear(Dpitch,nn1,phi,360,0,0);%將參數引入draw_gear.m,畫第一齒輪
[coord2,rp2,rb2]=draw_gear(Dpitch,nn2,phi,360,0,0);
%將參數引入draw_gear.m,畫第二齒輪
[coord3,rp3,rb3]=draw_gear(Dpitch,nn3,phi,360,0,0);
%將參數引入draw_gear.m,畫第三齒輪
[coord4,rp4,rb4]=draw_gear(Dpitch,nn4,phi,360,0,0);
%將參數引入draw_gear.m,畫第四齒輪
[coord5,rp5,rb5]=draw_gear(Dpitch,nn5,phi,360,0,0);
%將參數引入draw_gear.m,畫第五齒輪
[coord6,rp6,rb6]=draw_gear(Dpitch,nn6,phi,360,0,0);
%將參數引入draw_gear.m,畫第六齒輪
del=2.5;
coord2=rotate2D([coord2(:,1),coord2(:,2)],+del,0,0);
coord3=rotate2D([coord3(:,1),coord3(:,2)],+del,0,0);
coord4=rotate2D([coord4(:,1),coord4(:,2)],+del,0,0);
coord5=rotate2D([coord5(:,1),coord5(:,2)],+del,0,0);
coord6=rotate2D([coord6(:,1),coord6(:,2)],+del,0,0);
xc1=coord(:,1);yc1=coord(:,2);%將計算結果引出
xc2=coord2(:,1);yc2=coord2(:,2);%將計算結果引出
xc3=coord3(:,1);yc3=coord3(:,2);%將計算結果引出
xc4=coord4(:,1);yc4=coord4(:,2);%將計算結果引出
xc5=coord5(:,1);yc5=coord5(:,2);%將計算結果引出
xc6=coord6(:,1);yc6=coord6(:,2);%將計算結果引出
coord=bushing(rp/6,0,0);%利用bushing畫基座
coord2=bushing(rp2/6,rp+rp2,0);
coord4=bushing(rp4/6,rp+1.7,rp3+rp4-0.6);
xb1=coord(:,1);yb1=coord(:,2);
xb2=coord2(:,1);yb2=coord2(:,2);
xb4=coord4(:,1);yb4=coord4(:,2);
xb5=coord5(:,1);yb5=coord5(:,2);
plot(xb1,yb1,'r-');%畫出大小齒輪基座
plot(xb2,yb2,'r-');
plot(xb4,yb4,'r-');
plot(xb5,yb5,'r-');
pini=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','r');
%建立handler
gear=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
gear2=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
gear3=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','g');
gear4=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','g');
gear5=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','r');
[coord4]=bushing(-rp2,rp+rp2,0.2);%利用bushing畫節圓和基圓
plot(coord4(:,1),coord4(:,2),'b:');
[coord5]=bushing(-rb2,rp+rp2,0.2);
plot(coord5(:,1),coord5(:,2),'k:');
[coord6]=bushing(-rp,0,0);
%利用bushing畫節圓和基圓
plot(coord6(:,1),coord6(:,2),'b:');
[coord7]=bushing(-rb,0,0);
plot(coord7(:,1),coord7(:,2),'k:');
[coord8]=bushing(-rp3,rp+rp2,0); plot(coord8(:,1),coord8(:,2),'b:');
[coord9]=bushing(-rb3,rp+rp2,0); plot(coord9(:,1),coord9(:,2),'k:');

axis equal;
ang=0;
angp=ww*unit1;
while 1%利用while進行動畫繪製
rot1=rotate2D([xc1,yc1],ang,0,0);%進行轉角,產生新座標
rot2=rotate2D([xc2,yc2],-ang*(nn1/nn2),rp+rp2,0);
rot3=rotate2D([xc3,yc3],-ang*(nn1/nn2),rp+rp2,0);
rot4=rotate2D([xc4,yc4],ang*((nn1/nn2)^2),rp+1.7,rp3+rp4-0.6);
rot5=rotate2D([xc5,yc5],ang*((nn1/nn2)^2),rp+1.7,rp3+rp4-0.6);
rot6=rotate2D([xc6,yc6],-ang*((nn1/nn2)^3),0,0);
set(pini,'xdata',rot1(:,1),'ydata',rot1(:,2));%分別畫出大小齒輪
set(gear,'xdata',rot2(:,1),'ydata',rot2(:,2));
set(gear2,'xdata',rot3(:,1),'ydata',rot3(:,2));
set(gear3,'xdata',rot4(:,1),'ydata',rot4(:,2));
set(gear4,'xdata',rot5(:,1),'ydata',rot5(:,2));
set(gear5,'xdata',rot6(:,1),'ydata',rot6(:,2));
drawnow; %繪製
pause(1/ww);
ang=ang+angp;
end %程式結束

>>geartrain3(8,14,70,14,70,14,70,25,300)





2.簡單齒輪組時:


各齒輪的徑節(Dp),周節(Pc)和壓力角必須相同才能正常旋轉

若限制最小齒數為14齒(壓力角25度防止內切的最小齒數),並且限制徑節=8,壓力角=25
可以得到

N1=14
N2=14*5=70
N3=N2*5=350
N4=N3*5=1750

因此以contact_ratio(徑節,齒數1,齒數2,[壓力角])程式來計算接觸比


>>[c_ratio,c_length,ad,pc,pb,r2,r3,ag]=contact_ratio(8,14,70,25)

c_ratio =接觸比
   1.4565
c_length =接觸長度
   0.5184
ad =齒冠
   0.1250
pc =周節
   0.3927
pb =基周節
   0.3559
r2 =齒輪2節圓直徑
   1.7500
r3 =齒輪3節圓直徑
   8.7500
ag =
  20.1547  17.2971   37.4518 齒輪2的接近角/遠退角/作用角
   4.0309   3.4594    7.4904 齒輪3的接近角/遠退角/作用角

因此我們可以得知接觸比c_ratio=1.4565大於1,不會有過載危險,
且齒輪G1節圓直徑=1.75,齒輪G2節圓直徑=8.75.

>>[c_ratio,c_length,ad,pc,pb,r2,r3,ag]=contact_ratio(8,70,350,25)
以下摘錄比較重要的部份
c_ratio =接觸比
   1.6043
c_length =接觸長度
   0.5710
pc =周節
   0.3927
pb =基周節
   0.3559
r2 =齒輪2節圓直徑
   8.7500
r3 =齒輪3節圓直徑
  43.7500
因此我們可以得知接觸比c_ratio=1.6043大於1,不會有過載危險,
且齒輪G3節圓直徑=43,75.

>>[c_ratio,c_length,ad,pc,pb,r2,r3,ag]=contact_ratio(8,350,1750,25)
c_ratio =接觸比
   1.6493
r2 =齒輪2節圓直徑
  43.7500
r3 =齒輪3節圓直徑
  218.7500

因此我們可以得知接觸比c_ratio=1.6493大於1,不會有過載危險,
且齒輪G4節圓直徑=218.75.

另外本組簡單齒列中的

徑節(Dp)=8
周節(Pc)=0.3927
壓力角=25
齒冠=0.1250

皆合乎標準,可減速VR=125

然而簡單齒列算出的結果令人不甚滿意的地方在於,佔用空間極大(終端齒輪G4節圓直徑高達218.75),且製造成本相當高,另外

,課本中未提到的是,如此大直徑的齒輪在旋轉時,轉動慣量I相當的巨大,難以啟動和煞車,而且材料本身將承受極大的負荷,雖

然理論上可行,但卻難以利用.

而計算結果繪製成圖則如下圖:


單純只有節/基圓時


而此齒列之模擬,可撰寫一程式如下:

程式結構
1.清除畫面及程式資訊
2.參數引入draw_gear.m
3.建立基本物件
a.利用bushing畫基座
b.建立齒輪
c.利用bushing畫節圓和基圓
4.利用while進行動畫繪製
a.轉角
b.畫出新位置

functiongeartrain1(Dpitch,nn1,nn2,nn3,nn4,phi,ww)
%13.1 歐陽太閒b94611001 本程式改寫自老師的 move2_rack.m
%本程式改寫自老師的move2_rack
%Dpitch=節矩,nn1=R2齒數,nn2=R3齒數,nn3=R3齒數,phi=壓力角,ww=nn1角速度

clf; %清除畫面

d2r=pi/180;%角徑轉換
unit1=0.01;%動畫單位
phir=phi*d2r;
pc=pi/Dpitch; %計算pc
title('作業13 作者:歐陽太閒b94611001'); %資訊
xlabel('x-axis cm');
ylabel('y-axis cm');
hold on;
[coord,rp,rb]=draw_gear(Dpitch,nn1,phi,360,0,0);%將參數引入draw_gear.m,畫第一齒輪
[coord2,rp2,rb2]=draw_gear(Dpitch,nn2,phi,360,0,0);%將參數引入draw_gear.m,畫第二齒輪
[coord3,rp3,rb3]=draw_gear(Dpitch,nn3,phi,360,0,0);%將參數引入draw_gear.m,畫第三齒輪
[coord4,rp4,rb4]=draw_gear(Dpitch,nn4,phi,360,0,0);%將參數引入draw_gear.m,畫第四齒輪
del=2.5
coord2=rotate2D([coord2(:,1),coord2(:,2)],+del,0,0);
coord3=rotate2D([coord3(:,1),coord3(:,2)],+del,0,0);
coord4=rotate2D([coord4(:,1),coord4(:,2)],+del,0,0);
xc1=coord(:,1);yc1=coord(:,2);%將計算結果引出
xc2=coord2(:,1);yc2=coord2(:,2);%將計算結果引出
xc3=coord3(:,1);yc3=coord3(:,2);%將計算結果引出
xc4=coord4(:,1);yc4=coord4(:,2);%將計算結果引出
coord=bushing(rp/6,0,0);%利用bushing畫基座
coord2=bushing(rp2/6,rp+rp2,0);
coord3=bushing(rp3/6,rp+(2*rp2)+rp3,0);
coord4=bushing(rp4/6,rp+(2*rp2)+(rp3*2)+rp4,0);
xb1=coord(:,1);yb1=coord(:,2);
xb2=coord2(:,1);yb2=coord2(:,2);
xb3=coord3(:,1);yb3=coord3(:,2);
xb4=coord4(:,1);yb4=coord4(:,2);
plot(xb1,yb1,'r-');%畫出大小齒輪基座
plot(xb2,yb2,'r-');
plot(xb3,yb3,'r-');
plot(xb4,yb4,'r-');
pini=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','r');%建立handler
gear=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
gear2=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','G');
gear3=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
[coord4]=bushing(-rp2,rp+rp2,0.2);%利用bushing畫節圓和基圓
plot(coord4(:,1),coord4(:,2),'b:');
[coord5]=bushing(-rb2,rp+rp2,0.2);
plot(coord5(:,1),coord5(:,2),'k:');
[coord6]=bushing(-rp,0,0);%利用bushing畫節圓和基圓
plot(coord6(:,1),coord6(:,2),'b:');
[coord7]=bushing(-rb,0,0);
plot(coord7(:,1),coord7(:,2),'k:');
[coord8]=bushing(-rp3,rp+(2*rp2)+rp3,0);
plot(coord8(:,1),coord8(:,2),'b:');
[coord9]=bushing(-rb3,rp+(2*rp2)+rp3,0);
plot(coord9(:,1),coord9(:,2),'k:');
[coord10]=bushing(-rp4,rp+(2*rp2)+(2*rp3)+rp4,0);
plot(coord10(:,1),coord10(:,2),'b:');
[coord11]=bushing(-rb4,rp+(2*rp2)+(2*rp3)+rp4,0);
plot(coord11(:,1),coord11(:,2),'k:');
axis equal;
ang=0;
angp=ww*unit1;
while 1%利用while進行動畫繪製
rot1=rotate2D([xc1,yc1],ang,0,0);%進行轉角,產生新座標
rot2=rotate2D([xc2,yc2],-ang*(nn1/nn2),rp+rp2,0);
rot3=rotate2D([xc3,yc3],ang*(nn2/nn3),rp+(2*rp2)+rp3,0);
rot4=rotate2D([xc4,yc4],-ang*(nn2/nn3),rp+(2*rp2)+(2*rp3)+rp4,0);
set(pini,'xdata',rot1(:,1),'ydata',rot1(:,2));%分別畫出大小齒輪
set(gear,'xdata',rot2(:,1),'ydata',rot2(:,2));
set(gear2,'xdata',rot3(:,1),'ydata',rot3(:,2));
set(gear3,'xdata',rot4(:,1),'ydata',rot4(:,2));
drawnow; %繪製
pause(1/ww);
ang=ang+angp;
end
%程式結束

因此代入geartrain1(8,14,70,350,1750,25,400)可得影片如下

>>geartrain1(8,14,70,350,1750,25,400)

影片

令人驚訝的是,由於最後的兩個齒輪過於巨大,電腦無法承受如此巨大的運算量,因此顯示出斷斷續續的影片,並非影像擷取軟體所造成,由此可知簡單齒輪組之效益甚低,因此還是選擇複式齒輪組為優,而更複雜如行星,共軸,差速等齒輪系皆是從複式齒輪發展而來.


二、最得意的作業


在本學期中,我最感到得意的作業為第9次作業,由於在做第九次作業的過程當中,花費了大量的時間研究程式的內容,例如深刻

體會到老師在程式中的Euler化可以大幅簡化計算,節省電腦的運算資源,另外就是在解讀程式的過程中發現了sldlink有部分

程式碼問題即f=@(num,ndg),round(num*10^ndg)/10^ndg;等,也了解到就算只是微小的錯誤也會造成整個程式運作上出現嚴重

問題,另外便是在第9次作業中,滑塊分析牽涉到路徑,偏移量等等,因此做了很多不同的嘗試(例如不同驅動桿情況下的分析)
當然另外就是本次作業利用了許多介面專業的形式例如下圖


其中的第二個表格是在我們的目前的作業當中很少利用的,但是這種表示形式卻在論文等未來我們會面臨的報告形式非常常見,如果要製作必須使用其他軟體,但MATLAB卻可以讓我們直接顯示出來.也因此學習得了同時顯示多資訊的方法,在程式執行時,真有一種滿足的成就感.當然在分析的過程中,老師所教導的數學化的座標分析法,利用微分求得速度,加速度等資訊,也是整合了前幾次作業中的四連桿,端桿,動畫等等的內容,因此我對於此次作業最感得意.
另外,第5次作業中對於棒球投手手部運動學資訊的論文搜尋,也是由於突發奇想,想更進一步的探討,因此想辦法找到相關的資

訊,不過仍不如第9次作業中那麼完整.

心得:
學期快要結束,在本學期的課程中,十三次作業讓我們學到了非常多的內容,不僅僅是機動學,而MATLAB的應用也將會對未來有

極大的正面幫助(學長和其他科系的朋友也是如此認為),這種能夠親自動手做的經驗,雖然不是用機具實際製造,也已經可以初

步了解機械結構的奧秘,感謝老師這學期的指導!

3 則留言:

Martin Foon 提到...

我相信你已經學到不少東西,盼望你能利用這一點基礎,往上發展。到時應有另一片天空。

th86 提到...

感謝老師的教誨!

midiqq 提到...

您好,我是初次來到這個部落格,看到這個部落格的內容很棒,有一件事想要很冒昧的請您幫忙,不知道您是否可以幫我?

首先,我目前在某大學物理治療系擔任專任助理的工作,本身是機械系剛畢業,過去在學校曾學過c++語言,但是學得很不好。現在的工作要做一個關於分析棒球投手投球的運動分析,包括其肩膀、上下手臂、手掌的角速度,但我真的作了兩個禮拜還無法把其matlab code寫出來,目前教授正在催促我趕快把它弄出來,這對我一個新手來說,真的壓力好大。不知您是否可以幫我?如有冒犯請多原諒,請給我一個回應好嗎?我的email是midiqq@hotmail.com