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=5N3/N2=5N4/N3=51.因此考慮複式齒輪組
同樣的,齒輪的徑節(Dp),周節(Pc)和壓力角必須相同才能正常旋轉
也限制最小齒數為14齒,徑節=8,壓力角=25
得到
N1=14N2=14*5=70N3=14N4=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.4565c_length =接觸長度 0.5184ad =齒冠 0.1250pc =周節 0.3927pb =基周節 0.3559r2 =齒輪2節圓直徑 1.7500r3 =齒輪3節圓直徑 8.7500ag = 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.75ans = 21遠小於簡單齒列的最終端齒輪節圓直徑218.75,大幅度節省空間,也可以大幅節省成本,
另外
徑節(Dp)=8
周節(Pc)=0.3927
壓力角=25
齒冠=0.1250
也都合乎標準,不至於造成損壞.
然而,複式齒輪組較特殊的是由於有共軸,因此在撰寫程式時要較為小心.
故我們可以得到如下
只顯示節圓與基圓時
所以我們可以寫出以下結果
程式結構1.清除畫面及程式資訊2.參數引入draw_gear.m3.建立基本物件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)可得到以下影片
影片
3 則留言:
我相信你已經學到不少東西,盼望你能利用這一點基礎,往上發展。到時應有另一片天空。
感謝老師的教誨!
您好,我是初次來到這個部落格,看到這個部落格的內容很棒,有一件事想要很冒昧的請您幫忙,不知道您是否可以幫我?
首先,我目前在某大學物理治療系擔任專任助理的工作,本身是機械系剛畢業,過去在學校曾學過c++語言,但是學得很不好。現在的工作要做一個關於分析棒球投手投球的運動分析,包括其肩膀、上下手臂、手掌的角速度,但我真的作了兩個禮拜還無法把其matlab code寫出來,目前教授正在催促我趕快把它弄出來,這對我一個新手來說,真的壓力好大。不知您是否可以幫我?如有冒犯請多原諒,請給我一個回應好嗎?我的email是midiqq@hotmail.com
張貼留言