本章節分爲傳動輪軸模型與無傳動輪軸模型,兩種模型的程序均可計算扭轉角、切應力並檢驗軸是否滿足條件,而傳動輪軸模型會提供多一個功能:根據輪的轉速與功率計算扭矩。
扭轉變形程序算法流程圖如下:
Part 1.傳動輪軸模型
例題1.如圖2-1所示的機牀傳動軸有三個齒輪,主動輪Ⅱ輸入功率爲1.52kw,從動輪Ⅰ、Ⅲ輸出功率均爲0.76kw,軸轉速n=184r/min,軸的直徑D=50mm,軸切變模量G=80GPa.
①.[φ’]=1°/m,請檢驗該軸是否滿足條件.
②.許用切應力=2×10^6Pa,請檢驗軸是否滿足條件.
解題思想與算法:
A.頭文件與宏定義、全局變量聲明部分:
#include<stdio.h>
#include<math.h>
#include<stdbool.h>//布爾型態值,true=1或非0整數,false=0
#define N 5//
#define Pi acos(-1.0)//圓周率
double M[N];//外力偶矩
double T[N];//疊加扭矩
double P[N];//齒輪功率
double l[N];//各段長度
double Angle[N];//扭轉角
double F[N];//切應力
B.主函數與外部函數部分:
(1).按照提示輸入對應數據.
運行界面:
代碼片段:
int main(){
bool Choice,Answer;
int Number,type;
double n,G,Angle_MAX,F_MAX;
char Letter[N+1]={'O','A','B','C','D','E'};
printf("是否有齒輪?是,請輸入1;否,請輸入0:");
scanf("%d",&Choice);
if(Choice==true){
printf("請輸入齒輪數目(≤5):");
scanf("%d",&Number);
printf("請輸入轉速(r/min):");
scanf("%lf",&n);
printf("是否輸入功率?是,請輸入1;否,請輸入0:");
scanf("%d",&Choice);
(2). 重新標記各位置字母,以左邊第一個齒輪爲原點O,往右數的齒輪依次標爲A與B,由於要兼容多種計算,程序中的分段數默認爲齒輪數,即除了OA、AB段之外,還要增加一段BC,BC的距離長短可任意輸入(一般輸入0),不影響結果.(標記方式圖如2-2所示)
程序會根據用戶輸入的功率與轉速調用TorsionCouple(已在代碼段標紅) 函數得到O、A、B三點扭矩,並將各點外力偶矩存入數組M中,將各點扭矩累加,並分別存入扭矩數組T中;
運行界面:
代碼片段:
if(Choice==true){
printf("請從起始端至末端依次輸入齒輪功率(以從右往左看,順時針記功率爲正)、各段距離/m\n");
for(int i=0;i<Number;i++){
printf("齒輪%d功率/kw:",i+1);
scanf("%lf",&P[i]);
printf("%c%c距離/m:",Letter[i],Letter[i+1]);
scanf("%lf",&l[i]);
M[i]=TorsionCouple(P[i],n);
}
printf("各段軸的外力偶矩:\n");
for(int i=0;i<Number;i++){
printf("%c%c段外力偶矩:%lf\n",Letter[i],Letter[i+1],M[i]);
T[i]=M[i];
if(i>0)T[i]=T[i]+T[i-1];//疊加各處外力偶矩
}
}
TorsionCouple函數:
double TorsionCouple(double p,double n){//外力偶矩
double m;
m=(9549*p)/n;// 公式M=9549*P/n
return m;
}
(3).根據用戶需要選擇是否計算扭轉角,如果需要計算扭轉角,則程序執行如下操作:調用W_Ip函數,給W_Ip函數的形參choice傳值爲true,根據輸入的軸的截面形狀、參數,計算極慣性矩Ip值。接着,基於用戶輸入的軸切變模量與(2)中輸入的各段軸長短(相鄰兩點距離)以及(2)中已求出的各處外力偶矩M(相鄰兩點外力偶矩求差值,得到∆M,即下式中的T),結合計算得到的Ip值,套用公式φ’=T/(GIp)計算各段軸單位長度扭轉角,如果用戶選擇了輸出扭轉角的功能,則通過公式∆φ= φ'l計算出各段軸扭轉角。最後,用戶輸入許用扭轉角大小,程序對已知的各段扭轉角取絕對值進行比較,若全部單位長度扭轉角均小於許用單位長度扭轉角大小,則輸出“剛度滿足條件”;否則輸出“剛度不滿足條件”;
運行界面:(BC段在此題中是多餘段,其計算結果無實際意義)
代碼片段:
printf("是否計算剛度?是,請輸入1;否,請輸入0:");
scanf("%d",&Choice);
if(Choice==true){
printf("請輸入軸切變模量G/GPa:");
scanf("%lf",&G);
printf("是否計算扭轉角?是,請輸入1;否,請輸入0:");
scanf("%d",&Choice);
for(int i=0;i<Number;i++){
printf("%c%c段截面形狀:a.實心圓,輸入0;b.空心圓,輸入1;c.薄壁筒,輸入2:",Letter[i],Letter[i+1]);
scanf("%d",&type);
if(i>0)AngleDerivative[i]=T[i]*180/(G*pow(10.0,9)*W_Ip(type,true)*Pi);
else AngleDerivative[i]=M[i]*180/(G*pow(10.0,9)*W_Ip(type,true)*Pi);
printf("%c%c段單位長度扭轉角°/m:%lf\n",Letter[i],Letter[i+1],AngleDerivative[i]);
if(Choice==true){
Angle[i]=AngleDerivative[i]*l[i];
printf("%c%c段扭轉角(°):%lf\n",Letter[i],Letter[i+1],Angle[i]);
}
}
printf("請輸入許用單位長度扭轉角°/m:");
scanf("%lf",&Angle_MAX);
Answer=true;//初始化
for(int i=0;i<Number;i++){
if(Angle_MAX<fabs(AngleDerivative[i]))Answer=false;
}
if(Answer==true)printf("剛度滿足條件\n");
else printf("剛度不滿足條件\n");
}
W_Ip函數:形參type傳值爲用戶選擇的截面形狀代號,當type=0時,函數計算實心圓截面;當type=1時,函數計算空心圓截面;當type=2時,函數計算薄壁筒截面.當形參choice的布爾值爲真時,函數計算Ip值;當choice的布爾值爲假或者0時,函數計算Wp值。
double W_Ip(int type,bool choice){//扭轉截面係數/m^3
double Wp,Ip,D,d,R,t;//D爲大徑或直徑,d爲小徑,R爲薄壁筒半徑,t爲厚度
if(!type){
printf("請輸入實心圓直徑D/m:");
scanf("%lf",&D);
Ip=(Pi*pow(D,4))/32;
Wp=(Pi*pow(D,3))/16;}
else if(type==1){
printf("請輸入空心圓大徑D/m:");
scanf("%lf",&D);
printf("請輸入空心圓小徑d/m:");
scanf("%lf",&d);
Ip=(Pi*(pow(D,4)-pow(d,4)))/32;
Wp=(Pi*pow(D,3))*(1-pow((d/D),4))/16;
}
else{
printf("請輸入薄壁筒直半徑R/m:");
scanf("%lf",&D);
printf("請輸入薄壁筒厚度t/m:");
scanf("%lf",&t);
Wp=2*Pi*pow(R,2)*t;
}
if(choice==true)return Ip;
else return Wp;
}
(4).根據用戶需要選擇是否計算切應力,如果需要計算切應力,則程序執行如下操作:仍調用(3)中的W_Ip函數,但給W_Ip函數的形參choice傳值爲false,根據輸入的軸的截面形狀、參數,計算扭轉截面係數Wp值。接着,基於已在(2)中求出的各段扭矩T(各段M的總疊加值),根據公式=T/Wp得到各段切應力。最後,用戶輸入許用切應力大小,程序對已知的各段切應力取絕對值進行比較,若全部切應力均小於許用切應力大小,則輸出“切應力滿足條件”;否則輸出“切應力不滿足條件”,程序結束。
運行界面:(BC段在此題中是多餘段,其計算結果無實際意義)
代碼片段:
printf("是否計算切應力?是,請輸入1;否,請輸入0:");
scanf("%d",&Choice);
if(Choice==true){
for(int i=0;i<Number;i++){
printf("%c%c段截面形狀:a.實心圓,輸入0;b.空心圓,輸入1;c.薄壁筒,輸入2:",Letter[i],Letter[i+1]);
scanf("%d",&type);
F[i]=T[i]/W_Ip(type,false);
printf("%c%c段切應力/Pa:%lf\n",Letter[i],Letter[i+1],F[i]);
}
printf("請輸入許用切應力/Pa:");
scanf("%lf",&F_MAX);
Answer=true;
for(int i=0;i<Number;i++){
if(F_MAX<fabs(F[i]))Answer=false;
}
if(Answer==true)printf("切應力滿足條件\n");
else printf("切應力不滿足條件\n");
}
return 0;
}
Part 2.無傳動輪軸模型
無傳動輪軸模型的大致內容與傳動輪軸模型相同,區別在於沒有齒輪,不通過輸入功率、轉速的參數求解外力偶矩大小,而是直接輸入各點處的外力偶矩,其餘流程均一致。
運行界面:
代碼片段:(else語句內爲無傳動輪軸模型的代碼內容)
int main(){
bool Choice,Answer;
int Number,type;
double n,G,Angle_MAX,F_MAX;
char Letter[N+1]={'O','A','B','C','D','E'};
printf("是否有齒輪?是,請輸入1;否,請輸入0:");
scanf("%d",&Choice);
if(Choice==true){
//2.1中齒輪參數輸入與函數調用、計算的內容
}
//非傳動輪軸模型特有的代碼片段:
else{printf("請輸入外力偶矩數目(≤5):");
scanf("%d",&Number);
printf("請從左至右輸入各外力偶矩:\n");
for(int i=0;i<Number;i++){
printf("位置%d外力偶矩/Nm:",i+1);
scanf("%lf",&M[i]);
printf("%c%c距離/m:",Letter[i],Letter[i+1]);
scanf("%lf",&l[i]);
T[i]=M[i];
if(i>0)T[i]=T[i]+T[i-1];
}
}
Part 3.扭轉變形程序的應用
變式1.某小型水電站水輪機容量爲50kw,轉速爲300r/min,鋼軸直徑爲75mm。若在正常運轉下且只考慮扭矩作用,其許用切應力=20MPa。試校覈軸的強度。
解題思路:此題屬於傳動輪模型,只計算1個齒輪,運行界面會默認要求輸入對應段軸長,而軸強度計算無需軸長距離的參數,可輸入任意數值(一般輸入1)。其他參數根據界面提示輸入(注意:直徑75mm要按照界面要求換成m的單位,即0.075m),即可得到該軸最大切應力與強度是否符合許用標準的結果。
結論:該軸最大切應力約爲19.21MPa,滿足強度條件.
變式2.如左圖所示階梯型圓杆,AE段爲空心,外直徑D=140mm,內直徑d=100mm;BC段爲實心,直徑d=100mm。外力偶矩MA=18kN·m,MB=32kN·m,MC=14kN·m。已知:=80MPa,[φ']=1.2°/m,G=80GPa。試校覈該軸的強度和剛度。
解題思路:此題屬於無傳動輪軸模型,由於程序默認的點標號從起始段開始數分別爲O、A、B、C…因此,將A、E、B、C四點分別視爲O、A、B、C(如右圖所示),MA即爲Mo。由於各點均要求輸入外力偶矩,而點E(對應界面的A)無外力偶矩,因此直接輸入0即可。題目並未給出AE、EB、BC實際距離,可輸入任意數值(本題輸入1),不會對結果產生影響;而對於多出來CD段(對應題目C點往右任意距離的虛擬軸段),輸入距離參數(本題輸入0)與輸出結果無實際意義,通過輸入界面要求的參數,即可求解。
運行界面:
結論:該軸最大單位長度扭轉角約爲1.02°,滿足剛度條件;該軸最大切應力約爲71.30MPa,滿足強度條件.
變式3.已知鑽探機鑽桿(如左圖所示)的外徑D=60mm,內徑d=50mm,功率P=7.355kW,轉速180r/min,鑽探入土深l=40m,鑽探材料的G=80GPa,許用切應力=40Mpa,[φ']=1.0°/m。假設土壤對鑽桿的阻力是沿長度均勻分佈的,試校覈其強度並求出兩端截面的相對扭轉角。
解題思路:如圖2-5所示,以剛進入土層的截面O爲原點,鑽桿底端爲A點,將鑽桿逆時針旋轉90°橫置,作扭矩圖得:
由扭矩圖與相對扭轉角積分結果可知,本題的相對扭轉角不是∆φ=,而是∆φ=。由於危險截面O上的外力偶矩Me與GIp是通過用戶輸入參數、計算機計算得到的,不方便進行修改。因此要想得到本題的相對扭轉角,直接將OA之間的距離輸入值改爲,即輸入20,即可得到兩端截面的相對扭轉角,不會影響其他計算結果。正常輸入界面要求的其他參數,即可藉助Me計算出鑽桿內最大切應力,並進行強度校覈。
結論:鑽桿內最大切應力約爲17.78MPa,滿足強度條件;兩端截面的相對扭轉角約爲8.48°.
扭轉變形部分的內容到此告一段落了,如有錯漏,歡迎指正本渣(本人物理真的菜QAQ)。下一篇博客研究的是拉壓變形,歡迎繼續閱讀~