基於C語言的材料力學模型計算實現(扭轉變形篇)

本章節分爲傳動輪軸模型與無傳動輪軸模型,兩種模型的程序均可計算扭轉角、切應力並檢驗軸是否滿足條件,而傳動輪軸模型會提供多一個功能:根據輪的轉速與功率計算扭矩。

扭轉變形程序算法流程圖如下:

Part 1.傳動輪軸模型

例題1.如圖2-1所示的機牀傳動軸有三個齒輪,主動輪Ⅱ輸入功率爲1.52kw,從動輪Ⅰ、Ⅲ輸出功率均爲0.76kw,軸轉速n=184r/min,軸的直徑D=50mm,軸切變模量G=80GPa.

2-1 例題1圖

①.[φ’]=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所示)

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)。下一篇博客研究的是拉壓變形,歡迎繼續閱讀~

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章