计算机辅助设计CAD大作业齿轮程序设计.docx
- 文档编号:11239146
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:24
- 大小:425.36KB
计算机辅助设计CAD大作业齿轮程序设计.docx
《计算机辅助设计CAD大作业齿轮程序设计.docx》由会员分享,可在线阅读,更多相关《计算机辅助设计CAD大作业齿轮程序设计.docx(24页珍藏版)》请在冰豆网上搜索。
计算机辅助设计CAD大作业齿轮程序设计
计算机辅助设计大作业齿轮设计
姓名:
张坤
学号:
2008**************
学院:
动力与机械学院
班级:
******************
设计思路1
源程序2
程序运行结果(界面截图及程序生成的文件)9
用AutoCAD调用程序生成的命令组文件14
心得体会15
设计思路
本程序要求完成齿轮设计的计算,并将计算结果写进数据文件,该数据文件作为计算部分和画图部分的接口,编写画图部分的程序时需要调用那个数据文件。
通过画图部分的程序可生成后缀为.SCR的命令组文件,用AutoCAD调用命令组文件完成齿轮的绘图。
齿轮设计的总体思路如框图所示。
本次的程序要在《机械设计》这门课的基础更加深
入。
在《机械设计》的作业中,我们的计算部分很多数
据都是通过人为查找后用scanf语句输送进去的。
但是在
《计算机辅助设计》这门课我们学习到了数据的处理,此程
序则将需要查找的数据(一些图表)存储在文件中,在需要
的地方,程序自动查找。
由于一个设计中需要大量的查找数
据,本程序不可能将所有需要的图表都存储到文件,仅仅
将教材中“齿形系数及应力校正系数”一表写进数据
文件,在计算中需要形系数和应力校正系数时则不需
要人工查找,本程序会自动查找。
如果程序中每一处的数据都能齿形系数和应力校正
系数那样自动的查找,那么本程序将一个完整的齿轮设
计程序。
本程序的其他数据还是要人工从现实的图表中查
取,这也是本程序的缺陷之一。
但是其他数据也是一样的
处理思想。
完成相关计算后,需要将计算结果保存到数据文件中。
本程序将小齿轮的模数m,齿数z1,齿轮宽度b和轴的直
径四个计算结果写进数据文件Shuju.DAT。
然后编写参数化绘图程序,用C语言写命令组文件。
程
序能实现参数化的功能,因为数据要从Shuju.DAT中读取。
不
同的设计得到不同的数据文件,也就相对于不同的命令组文件,
从而实现参数化。
命令组文件(.SCR)生成后,启动AutoCAD,使用script命令调用命令组文件,便可完成自动绘图,整个设计就基本完成。
此次程序还要求有界面,我们选择了简单的序号界面。
使用switch和case语句可以编写序号界面。
当运行程序后选择1可以进入齿轮设计,选择2进入带传动设计,选择3进入链传动设计,选择0退出。
但是选择2和3时,程序并没有真正的实现功能,这也是本程序的缺陷之处。
源程序
本次设计的源程序如下:
#include
#include
#include
#include
voidchilun();
voidmain()
{
intkey=0;
while(key==0){
printf("请选择任务:
\n");
printf("1、齿轮设计\n");
printf("2、带传动设计\n");
printf("3、链传动设计\n");
printf("0、退出\n");
intc;
scanf("%d",&c);
switch(c)
{
case1:
chilun();break;
case2:
printf("欢迎使用带传动设计\n");break;
case3:
printf("欢迎使用链传动设计\n");break;
case0:
key=1;break;
default:
printf("输入错误\n");
}
charddddd,kkkkk;/*此处要求输入字符后才清屏*/
scanf("%c%c",&ddddd,&kkkkk);
system("CLS");
}
}
voidchilun()
{/*以下程序用于创建查取齿形系数及应力校正系数所用到的表格*/
inti1;
intZ[25]={17,18,19,20,21,22,23,24,25,26,27,28,29,30,35,40,45,50,60,70,80,90,100,150,200};
floatYFa[25]={2.97,2.91,2.85,2.80,2.76,2.72,2.69,2.65,2.62,2.60,2.57,2.55,2.53,2.52,2.45,2.40,2.35,2.32,2.28,2.24,2.22,2.20,2.18,2.14,2.12};
floatYSa[25]={1.52,1.53,1.54,1.55,1.56,1.57,1.575,1.58,1.59,1.595,1.60,1.61,1.62,1.625,1.65,1.67,1.68,1.70,1.73,1.75,1.77,1.78,1.79,1.83,1.865};
FILE*fp;
fp=fopen("xishu.DAT","w");
for(i1=0;i1<25;i1++)
fprintf(fp,"%d",Z[i1]);
fprintf(fp,"\n");
for(i1=0;i1<25;i1++)
fprintf(fp,"%f",YFa[i1]);
fprintf(fp,"\n");
for(i1=0;i1<25;i1++)
fprintf(fp,"%f",YSa[i1]);
fprintf(fp,"\n");
fclose(fp);
/*题目要求*/
printf("已知输入功率P1=10kW,小齿轮转速为n1=960r/min,齿数比u=3.2,由电动机驱动,工作寿命15年,两班制,带式输送机工作平稳,转向不变。
\n");
/*以下程序解决1、选定齿轮类型、精度等级、材料及齿数*/
printf("[解]1、选定齿轮类型、精度等级、材料及齿数\n");
printf("1)按题目要求传动方案,选用直齿圆柱齿轮传动。
\n");
printf("2)运输机为一般工作机器,速度不高,故选用7级精度(GB10095-88)。
\n");
printf("3)材料选择。
选择小齿轮材料为40Cr(调质),硬度为280HBS,大齿轮材料为45钢(调质),硬度为240HBS,二者材料硬度差为40HBS。
\n");
printf("4)选小齿轮齿数z1,请输入小齿轮齿数z1:
");
intz1,z2;
floatu=3.2;
scanf("%d",&z1);
z2=(int)(u*z1);
printf("由z2=z1*u得z2=%d。
\n",z2);
/*以下程序解决2、齿面接触强度设计*/
printf("2、齿面接触强度设计\n");
printf("
(1)确定公式内各计算值\n");
floatKt=1.3,T1;
intP1=10,n1=960;
T1=9550000.0*P1/n1;
printf("1)试选载荷系数Kt=1.3\n");
printf("2)计算小齿轮传递的转矩。
由公式T1=9550000.0*P1/n1得:
");
printf("T1=%.0fN·mm\n",T1);
printf("3)由教材表10-7选取齿宽系数φd=1\n");
floatd=1.0;
printf("4)由教材表10-6查材料的弹性影响系数ZE=189.8\n");
floatZE=189.8;
printf("5)由教材图10-21d按齿面硬度查得小齿轮的接触疲劳强度极限为σHlim1=600MPa;大齿轮σHlim1=550MPa。
\n");
printf("6)由公式计算N=60n1*j*Lh计算应力循环次数。
\n");
printf("N1=60*n1*j*Lh=4147000000\n");
printf("N2=N1/u=1296000000\n");
printf("由教材图10-19取接触疲劳寿命系数KHN1=0.90;KNH2=0.95。
\n");
printf("8)计算接触疲劳许用应力。
\n");
printf("取失效概率为1%%,安全系数S=1,则由公式[σH]=KHN*σlim/S得:
\n");
floatKHN1=0.9,KHN2=0.95;
intlim1=600,lim2=550,S=1;
floatH1,H2,H;
H1=KHN1*lim1/S;H2=KHN2*lim2/S;
printf("[σH]1=%.1fMPa,[σH]2=%.1fMPa\n",H1,H2);
/*计算[σH]1与[σH]2中的较小者,将较小者赋给[σH]*/
if(H1>H2)H=H2;
elseH=H1;
printf("取较小值则[σH]=%.1fMPa\n",H);
printf("
(2)计算\n");
printf("1)试算小齿轮分度圆直径d1t,由教材公式得:
\n");
/*编写公式d1t=2.32*[(Kt*T1/φd)*(u+1)/u*(ZE/[σH])^2]^(1/3),这里要用数字函数
floata,f,c,e,g,d1t;
a=Kt*T1/d;f=(u+1)/u;c=(ZE*ZE)/(H*H);e=1.0/3;
g=a*f*c;
d1t=2.32*pow(g,e);
printf("将前面的数据代入公式得d1t≥%0.3fmm\n",d1t);
printf("2)计算圆周速度v。
\n");
floatv;
v=3.1415926*d1t*n1/60000;
printf("v=3.1415926*d1t*n1/60000=%.2fm/s\n",v);
printf("3)计算齿宽b。
\n");
floatb;
b=d*d1t;
printf("b=φd*d1t=%.3fmm\n",b);
printf("4)计算齿宽与齿高之比b/h。
\n");
floatmt,h;
mt=d1t/z1;h=2.25*mt;
printf("由公式mt=d1t/z1得模数为mt=%.3fmm\n",mt);
printf("由h=2.25*mt得齿高为h=%.2fmm\n",h);
printf("b/h=%.2f\n",b/h);
printf("5)计算载荷系数。
\n");
floatKv,KHb,KFb,KHa,KFa,KA,K;
KHa=KFa=KA=1.0;
printf("根据v=%.2fm/s,7级精度,查得动载荷系数为Kv=1.12\n",v);
Kv=1.12;
printf("由教材表10-4并用插值法可得KHβ=1.423\n");
KHb=1.423;
printf("由b/h=%.2f,KHβ=%.3f查教材图10-13得KFβ=1.35",b/h,KHb);
KFb=1.35;
printf("由以上所查数据,载荷系数为:
\n");
K=KA*Kv*KHa*KHb;
printf("K=KA*Kv*KHa*KHb=%.1f*%.2f*%.1f*%.3f=%.3f\n",KA,Kv,KHa,KHb,K);
printf("6)按实际载荷系数校正所算得分度圆直径,由式教材式10-10a得\n");
floatd1;
d1=d1t*pow(K/Kt,1.0/3);
printf("d1=d1t*(K/Kt)^(1/3)=%.3fmm\n",d1);
printf("7)计算模数m。
\n");
floatm;
m=d1/z1;
printf("m=d1/z1=%.3f/%d=%.2fmm\n",d1,z1,m);
/*以下程序完成步骤3、按齿根弯曲强度设计*/
printf("3、按齿根弯曲强度设计\n");
printf("由式10-5得弯曲强度的设计公式为:
\n");
printf("m≥{[2Kt*T1/(φd*z1*z1)]*(YFa*YSa/[σF])}^(1/3)\n");
printf("
(1)确定公式内各计算数值\n");
printf("1)由图10-20c可查得两齿轮的疲劳强度极限σFE1=500MPa和σFE2=380MPa\n");
intFE1=500,FE2=380;
printf("2)由图10-18查弯曲疲劳寿命系数KFN1=0.85,KFN2=0.88\n");
floatKFN1=0.85,KFN2=0.88;
printf("3)计算弯曲疲劳许用应力。
\n");
printf("取弯曲疲劳安全系数S0=1.4\n");
floatS0=1.4;
printf("由式[σF]=KFN*σFE/S0计算弯曲疲劳许用应力:
\n");
floatF1,F2;
F1=KFN1*FE1/S0;F2=KFN2*FE2/S0;
printf("[σF]1=%.2f*%d/%.1f=%.2fMPa\n",KFN1,FE1,S0,F1);
printf("[σF]2=%.2f*%d/%.1f=%.2fMPa\n",KFN2,FE2,S0,F2);
printf("4)计算载荷系数K0(与前文K区别,加上了个0)。
\n");
floatK0;
K0=KA*Kv*KFa*KFb;
printf("K0=KA*Kv*KFa*KFb=%.1f*%.2f*%.1f*%.2f=%.3f\n",KA,Kv,KFa,KFb,K0);
/*本程序的数据文件思想就体现在下面的程序中*/
inti2,chishu[25],xx1,xx2;
floatyy1,yy2,zz1,zz2;
floatchixingxishu[25],yinglijz[25];
FILE*fp1;
fp1=fopen("xishu.DAT","r");
for(i2=0;i2<25;i2++)
fscanf(fp1,"%d",&chishu[i2]);
for(i2=0;i2<25;i2++)
fscanf(fp1,"%f",&chixingxishu[i2]);
for(i2=0;i2<25;i2++)
fscanf(fp1,"%f",&yinglijz[i2]);
fclose(fp1);
floatYFa1,YSa1;
intkey=0;
for(i2=0;i2<25;i2++)
{if(chishu[i2]==z1){YFa1=chixingxishu[i2];YSa1=yinglijz[i2];key=1;}}
if(key==0)
{
for(i2=0;i2<25;i2++)
{if(chishu[i2]>z1){
xx1=chishu[i2-1];yy1=chixingxishu[i2-1];zz1=yinglijz[i2-1];
xx2=chishu[i2];yy2=chixingxishu[i2];zz2=yinglijz[i2];
YFa1=yy1+(yy2-yy1)*(z1-xx1)/(xx2-xx1);
YSa1=zz1+(zz2-zz1)*(z1-xx1)/(xx2-xx1);break;}
}
}
floatYFa2,YSa2,yyy1,yyy2,zzz1,zzz2;
intkey2=0,xxx1,xxx2;
for(i2=0;i2<25;i2++)
{if(chishu[i2]==z2){YFa2=chixingxishu[i2];YSa2=yinglijz[i2];key2=1;}}
if(key2==0)
{
for(i2=0;i2<25;i2++)
{if(chishu[i2]>z2){
xxx1=chishu[i2-1];yyy1=chixingxishu[i2-1];zzz1=yinglijz[i2-1];
xxx2=chishu[i2];yyy2=chixingxishu[i2];zzz2=yinglijz[i2];
YFa2=yyy1+(yyy2-yyy1)*(z2-xxx1)/(xxx2-xxx1);
YSa2=zzz1+(zzz2-zzz1)*(z2-xxx1)/(xxx2-xxx1);break;}
}
}
printf("5)查取齿形系数,由程序自动查取。
\n");
printf("由表10-5可查齿形系数,由程序自动查取\n");
/*以上程序段体现了数据文件的思想*/
printf("7)计算大小齿轮的YFa*YSa/[σF],分别赋给X1,X2,并比较大小。
\n");
floatX1,X2;
X1=YFa1*YSa1/F1;X2=YFa2*YSa2/F2;
printf("X1=YFa1*YSa1/F1=%.2f*%.2f/%.2f=%.5f\n",YFa1,YSa1,F1,X1);
printf("X2=YFa2*YSa2/F2=%.3f*%.3f/%.2f=%.5f\n",YFa2,YSa2,F2,X2);
/*比较谁的数值大,将数值大的赋给X,并代入下一步的计算。
*/
floatX;
if(X1>X2)
{X=X1;printf("比较结果,小齿轮的数值大。
\n");}
else{X=X2;printf("比较结果,大齿轮的数值大。
\n");}
printf("
(2)设计计算。
\n");
floatm1;
m1=pow(2*K0*T1/(d*z1*z1)*X,1.0/3);
printf("为了区别变量,第2步按齿面接触强度设计用了m,这里按齿根弯曲强度设计用m1\n");
printf("m1≥[2*K0*T1/(d*z1*z1)*X]^(1/3)=%.2fmm\n",m1);
printf("比较第2步按齿面接触强度设计得到的m与按齿根弯曲强度设计得到的m1\n");
printf("m=%.2f,m1=%.2f\n",m,m1);
printf("对比计算结果,请根据实际情况并进行圆整m,并根据接触强度算出的d1算出小齿轮的齿数。
\n");
printf("请将分析后圆整的m值输送进来:
");
scanf("%f",&m);
printf("圆整后取m=%.1fmm\n",m);
printf("则z1=d1/m=%.3f/%.1f=%.2f\n",d1,m,d1/m);
printf("根据上式,请为z1取一个整数,用键盘为z1输入一个整数吧z1=:
");
scanf("%d",&z1);
printf("圆整取z1=%d\n",z1);
z2=(int)(u*z1)+1;
printf("z2=u*z1=%d。
\n",z2);
printf("这样设计出的齿轮传动,既满足了齿面接触疲劳强度,又满足了齿根弯曲疲劳强度,并做到结构紧凑,避免浪费。
\n");
/*做几何尺寸的计算*/
printf("4、几何尺寸计算\n");
printf("
(1)计算分度圆直径\n");
printf("d1=m*z1=%.0fmm\n",m*z1);
floatd2;
d2=m*z2;
d1=m*z1;
printf("d2=m*z2=%.0fmm\n",d2);
printf("
(2)计算中心距\n");
printf("a=(d1+d2)/2=%.1fmm\n",(d1+d2)/2.0);
printf("(3)计算齿轮宽度b=φd*d1=%.0f*%.0f=%.0fmm\n",d,d1,d*m*z1);
printf("根据计算结果为B2,B1取整值,请用键盘输送B2,B1,用逗号隔开:
");
intB2,B1;
scanf("%d,%d",&B2,&B1);
printf("取B2=%dmm,B1=%dmm\n",B2,B1);
printf("请输入轴径:
");
floatZJ;
scanf("%f",&ZJ);
/*根据计算创建数据文件*/
FILE*fp2;
fp2=fopen("Shuju.DAT","w");
fprintf(fp2,"%f%d%d%f",m,z1,B1,ZJ);
fclose(fp2);
/*以下程序用于生成命令组文件用于画图*/
FILE*fp3,*fp4;
fp3=fopen("Shuju.DAT","r");
fscanf(fp3,"%f%d%d%f",&m,&z1,&B1,&ZJ);
fclose(fp3);
floatR,rf,r,ra;
R=ZJ/2.0;rf=(z1-2.5)*m/2.0;r=m*z1/2;ra=r+m;
fp4=fopen("drawgear.scr","w");
fprintf(fp4,"limits0,0500,400\n");
fprintf(fp4,"zooma\n");
fprintf(fp4,"base150,350\n");
fprintf(fp4,"layers1\n");
fprintf(fp4,"line150,%.3f150,%.3f%d,%.3f%d,%.3fc\n",300+R+5.0,300+rf,150+B1,300+rf,150+B1,300+R+5.0);
fprintf(fp4,"line150,%.3f150,%.3f%d,%.3f%d,%.3fc\n",300-R,300-rf,150+B1,300-rf,150+B1,300-R);
fprintf(fp4,"layers2\n");
fprintf(fp4,"hatchu453W148,%.3f%d,%.3f\n",298-rf,152+B1,307+rf);
fprintf(fp4,"layers4\n");
fprintf(fp4,"line140,300%d,300\n",160+B1);
fprintf(fp4,"line140,%.3f%d,%.3f\n",300+r,160+B1,300+r);
fprintf(fp4,"line140,%.3f%d,%.3f\n",300-r,160+B1,300-r);
fprintf(fp4,"layers1\n");
fprintf(fp4,"line150,%.3f150,%.3f\n",300-R,305+R);
fprintf(fp4,"line%d,%.3f%d,%.3f\n",150+B1,300-R,150+B1,305+R);
fprintf(fp4,"line150,%.3f%d,%.3f\n",300+R,150+B1,300+R);
fprintf(fp4,"line150,%.3f150,%.3f154,%.3f%d,%.3f%d,%.3f%d,%.3f\n",300+rf,300+rf+1.625,300+ra,146+B1,300+ra,150+B1,300+rf+1.625,150+B1,300+rf);
fpr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机辅助设计 CAD 作业 齿轮 程序设计