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的應用也將會對未來有

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

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

機動學作業心得(流程)

b94611001 歐陽太閒

機動學這門課與其他科目有相當大的不同,主要是其學習評鑑以每週一次的作業為主,因此作業的寫作就非常重要.然而在這麼多次的作業當中,雖然每次作業的要求都不同,但仍可以歸納成以下流程,為個人的一點心得:

1.審題

仔細而小心的了解題目中所要求的目標,如此才能了解每章學習的重點,而就如考試一樣,審題要考慮條件,每章內容,以及最重要的,要求結果.如此才能正確而豐富地做出有效的結果,而不會白費工夫.

2.查詢資料

審題後便可以開始回憶當次上課所學的內容,以及參考老師的網路講義和課本資料,但通常還有利用Google或者其他搜尋器搜尋,而搜尋後有些資料雖然在作業中不一定用得到,但仍可以收納在書籤中,說不定下次就會用到.

3.規劃作業

作業的每個小題間通常有絲路的連貫性,因此可以挑選具有"絲路起點"效果的小題先開始,並且嘗試以講義中有的資料填入,並參考過去寫過的作業,站在自己所累積的資料上,可以節省許多時間.而且規劃先後順序也有利於釐清思路.

4.開始寫作

開始寫作時通常先參考老師的網路講義,以擷取老師的智慧結晶,從而進行發想,是否有某處可以改進,或者有某處可以應用於本次作業.

通常此時會遇到最大的瓶頸是數學表示以及MATLAB的邏輯和指令,通常也是經過不斷嘗試和修正,並且回到步驟2查詢,並且進行調整.

另外通常使用螢幕錄影專家和PhotoImapct來做圖形和影片的處理

5.檢查

作業完成後,進行完整的審視,通常在此時會發現許多有趣的問題和小錯誤,並可以進行修改,減少發佈後修改的時間

6.儲存

儲存時,影片常儲存於Google Video或者Youtube,而圖片則存於Flickr或者Imageshack.

而在儲存時關於>,<等符號,由於blogger在此方面的自動轉換支援不足,因此要非常小心的修正,而排版時要注意各小題的分段,標題,內文顏色等是否合於閱讀,並且趁此機會再次檢查.

7.發布

在作業繳交截止後按下發佈即可

機動學作業雖然要花費許多時間,但可以重新整理上課所學的內容,另外也增加了許多實際操作了解機構運作的機會,而不單純只是考試計算,是一種相當不同的體驗.

謝謝老師.

2007年6月1日 星期五

另一種可能及齒輪

b94611001 歐陽太閒

在我們的機動學課程中討論了各種可動機構,不過除了以Matlab-like和Pro/E等軟體進行分析以外,也有另一種可能性: Java:
此網頁以Java實做包含四連桿,快回等機構,也相當有趣.
Brock Institute for Advanced Studies
link

而關於本次的作業(齒輪),我們可以參考Gears Encyclopedia
其中有對多數齒輪名詞的解釋以及公式和計算範例,可以查詢以利本次作業

Gears Encyclopedia
link