资源描述
机械优化设计课程作业
作业题目:一级斜齿圆柱齿轮减速器的优化设计
学 院:机械工程学院
专 业:机械制造及其自动化
班 级:机研1001班
学 号:2009020799
学生姓名:李 莹
指导教师:黄 勤 教 授
2010年 7 月 15 日
一级斜齿圆柱齿轮减速器的优化设计
一、引言
一随着现代计算技术的发展和应用,在机械设计领域,已经可以用现代化的设计方法和手段,从众多的设计方案中寻找出最佳的设计方案,从而大大提高设计效率和质量。
在进行机械设计时,都希望得到一个最优方案,这个方案既能满足强度、刚度、稳定性及工艺性能等方面的要求,又使机械重量最轻、成本最低和传动性能最好。然而,由于传统的常规设计方案是凭借设计人员的经验直观判断,靠人工
进行有限次计算做出的,往往很难得到最优结果。应用最优化设计方法,使优化设计成为可能。
斜齿圆柱齿轮减速器是一种使用非常广泛的机械传动装置,它具有结构紧凑、传动平稳和在不变位的情况下可凑配中心距等优点。我国目前生产的减速器还存在着体积大,重量重、承载能力低、成本高和使用寿命短等问题,对减速器
进行优化设计,选择最佳参数,是提高承载能力、减轻重量和降低成本等完善各项指标的一种重要途径。
二、优化模型
本设计是要在满足零件的强度和刚度的条件下,求出使减速器的体积最小的各项参数。
1 、设计变量
如图1 所示,选取齿轮宽度b、小齿轮齿数 、齿轮模数 、两轴轴承之间的支撑跨距 、两齿轮的内孔直径 、为设计变量。
设计变量:[]=[b]
2、建立目标函数
由于齿轮和轴的体积是决定减速器体积的依据,因此可按它们的体积最小的原则来建立目标函数。根据齿轮几何尺寸及齿轮结构尺寸的计算公式,壳体内的齿轮和轴的体积可近似地表示为:
式中,;;;;;。
目标函数为:
3、确定约束条件
1) 齿数应大于不发生根切的最小齿数
-0
2) 齿宽应满足,和为齿宽系数的最大值和最小值,一般取=0.9,=1.4。
-0
-0
3) 传递动力的齿轮,模数应大于2mm。
2-0
4) 为了限制大齿轮的直径不致于过大,小齿轮的直径要加以限制。
5) 齿轮内孔直径的取值范围应在:。
6) 两轴承之间的支撑跨距按结构关系应满足:,为箱体内壁距齿轮端面的距离,可取。
7) 齿轮应满足强度要求
式中,接触应力和弯曲应力的计算公式分别为:
=
8) 齿轮轴的最大挠度应不大于许用值。
9) 齿轮轴的弯曲应力应不大于许用值。
这是一个有6个随机变量、16个约束条件的优化设计问题,采用惩罚函数法,用计算机编程,即可求出最优解。
三、 选择算法的特点及程序框图
惩罚函数法即序列无约束极小化方法,它的基本原理是将有约束问题化为无约束问题,亦即将原来的目标函数和约束函数,按一定方式构成一个新的函数,当这个新的函数向原目标函数逼近时,它的最优解也就是原问题的最优解。惩罚函数法又分为:
1、 内点惩罚函数法
内点惩罚函数法简称内点法,这种方法将新的目标函数定义于可行域内,序列迭代点在可行域内逐步逼近约束边界上的最优点。此方法的优点在于计算过程中每一个中间结果都是可行的,但它要求初始点为可行点,只能用来求解具
有不等式约束的优化问题。内点惩罚函数法如图1所示,其中X(0)为初始惩罚因子;C为递减系数;ε为收敛精度:
2、 外点惩罚函数法
外点惩罚函数法简称外点法,这种方法和内点法相反,新目标函数定义在可行域之外,序列迭代点从可行域之外逐渐逼近约束边界上的最优点。此方法的优点在于适用于求解不等式或等式约束问题,并对初始点无要求,但中间结果不满足约束条件。
3、 混合惩罚函数法
混合惩罚函数法简称混合法,这种方法是把内点法和外点法结合起来,用来求解同时具有等式约束和不等式约束函数的优化问题。
四、 计算实例
设计以一级斜齿圆柱齿轮减速器,已知输入功率P =58kW,输入转速n1 = 1 000r/ min ,齿数比u = 5 ,齿轮的许用接触应力= 550MPa ,许用弯曲应力 =400MPa。
以体积最小为目标进行优化设计。
将已知量代入上述各式,其数学模型可表示为:
约束条件为:
17-0
0.9-
=
=-400
式中,=2.65、=2.226,,分别为主动齿轮和从动齿轮的齿形系数;
=1.58、=1.764,,分别为主动齿轮和从动齿轮的应力校正系数;
以惩罚函数法求解,初始方案为:
[230 21 8 420 120 160],
五、C语言程序
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.1415926
#define kkg 16 /*定义约束条件个数*/
double r0=1; /*定义罚因子 */
double DealPos(double Ang1,double x[])
{
int i;
double Fai;
double o4,s4,c4,h1,h2;
o4=(x[3]+Ang1)*PI/180;
s4=sin(o4);
c4=cos(o4);
h1=atan(x[0]*s4/(1-x[0]*c4));
h2=x[0]*x[0]+1-2*x[0]*c4;
h2=(h2-x[1]*x[1]+x[2]*x[2])/(2*x[2]*sqrt(h2));
if(h2>1e-30)
h2=atan(sqrt(1-h2*h2)/h2);
else
h2=PI/2-atan(h2/sqrt(1-h2*h2));
Fai=h1+h2;
return(Fai);
}
/*输入变量:x-设计变量数组 */
double objf(double x[])
{
int i;
double b,b1,s,ff;
b=DealPos(0,x);
ff=0;
for(i=1;i<=20;i++)
{b1=b-DealPos(i*9,x);
s=b1-30*sin(i*PI/20)*PI/180;
ff=ff+s*s;}
return(ff);
}
/*约束条件优化子程序 */
/*输入变量:x-设计变量数组*/
/*输出变量:g-约束条件数组*/
void strain(double x[],double g[])
{
g[0]=17-x[1];
g[1]=0.9-x[0]/(x[1]*x[2]);
g[2]=x[0]/(x[1]*x[2])-1.4;
g[3]=2-x[2];
g[4]=x[1]*x[2]-300.;
g[5]=100-x[4];
g[6]=x[4]-150;
g[7]=130-x[5];
g[8]=x[5]-200;
g[9]=x[0]+0.5*x[5]-x[3]-40;
g[10]=1486250/(x[1]*x[2]*sqrt(x[0]))-550;
g[11]=53366522/(x[0]*x[1]*x[2]*x[2])-400;
g[12]=25214684/(x[0]*x[1]*x[2]*x[2])-400;
g[13]=(117.04*x[3]*x[3]*x[3]*x[3])/(x[1]*x[2]*x[4]*x[4])-0.003*x[3];
g[14]=sqrt((2.85*pow(10,6)*x[3])/(x[1]*x[2])+2.4*pow(10,12))/pow(x[4],3)-5.5;
g[15]=sqrt((2.85*pow(10,6)*x[3])/(x[1]*x[2])+6*pow(10,3))/pow(x[5],3)-5.5;
}
/*构造罚函数*/
double ldf(double *x)
{
int i;
double ff,sg;
double g[kkg];
sg=0.;
strain(x,g);
for(i=0;i<kkg;i++)
{if(g[i]>0)
sg=sg+r0/g[i];
else
sg=sg-g[i]*1e5;
}
ff=objf(x)+sg;
return(ff);
}
/*采用进退法进行一维搜索获得可行区间*/
/*输入变量:p-初始设计变量数组 */
/* s-搜索方向 */
/* h0-初始搜索步长 */
/* n-模型维数 */
/*输出变量:a-可行区间下限数组 */
/* b-可行区间上限数组 */
void ii(double *p,double a[],double b[],double s[],double h0,int n)
{
int i;
double *x[3],h,f1,f2,f3;
for(i=0;i<3;i++)
x[i]=(double *)malloc(n*sizeof(double));
h=h0;
for(i=0;i<n;i++)
*(x[0]+i)=*(p+i);
f1=ldf(x[0]);
for(i=0;i<n;i++)
*(x[1]+i)=*(x[0]+i)+h*s[i];
f2=ldf(x[1]);
if(f2>=f1) /*如果前进方向函数值变大,则换方向*/
{h=-h0;
for(i=0;i<n;i++)
*(x[2]+i)=*(x[0]+i);
f3=f1;
for(i=0;i<n;i++)
{*(x[0]+i)=*(x[1]+i);
*(x[1]+i)=*(x[2]+i);
}
f1=f2;
f2=f3;
}
for(;;) /*如果函数值下降,则加大步长*/
{h=2.*h;
for(i=0;i<n;i++)
*(x[2]+i)=*(x[1]+i)+h*s[i];
f3=ldf(x[2]);
if(f2<f3)
break;
else
{for(i=0;i<n;i++)
{*(x[0]+i)=*(x[1]+i);
*(x[1]+i)=*(x[2]+i);
}
f1=f2;
f2=f3;
}
}
if(h<0.) /*获取结果,返回*/
for(i=0;i<n;i++)
{a[i]=*(x[2]+i);
b[i]=*(x[0]+i);
}
else
for(i=0;i<n;i++)
{a[i]=*(x[0]+i);
b[i]=*(x[2]+i);
}
for(i=0;i<3;i++)
free(x[i]);
}
/*罚函数优化 */
/*输入变量:p-初始设计变量 */
/* c-递减系数 */
/* eps-总体迭代精度 */
/* n-模型维数 */
/*输出变量:x-最优化设计变量值*/
/* 返回值:最优点处目标函数值*/
double empf(double *p,double x[],double c,double eps,int n)
{
int i,Tm;
double fom,fxo;
fom=1e9;
Tm=0;
do{
fxo=powell(p,x,0.0001,n);
if(fabs(fom-fxo)>eps)
{fom=fxo;
r0=c*r0;
Tm=Tm+1;
printf("Now it is the %d time of iteration,current values of variables are:\n",Tm);
for(i=0;i<n;i++)
{*(p+i)=x[i];
printf("x[%d]=%f\n",i,x[i]);
}
printf("The value of objective function is:%f\n",fxo);
printf("-------------------------------------\n");
}
else
return(fxo);
}while(1);
}
/*主程序*/
void main()
{
int i;
double a[]={230,21,8,420,120,160}; /*初始可行点*/
double c,x[4];
c=empf(a,x,0.2,1e-5,4); /*调用优化程序*/
printf("\n Output the optimum results:\n"); /*输出优化结果*/
for(i=0;i<4;i++)
printf("x[%d]=%f\n",i,x[i]);
printf("The minimum objective value is %f\n",c);
}
用计算机编程,经10次迭代计算,求出最优解为:
[211.99 22.12 8.39 322.37 101.75 130.24]
由计算结果可以看出,经过优化以后,一级斜齿圆柱齿轮减速器无论从重量上还是从体积上,都减小很多,而且,采用计算机辅助设计,与手工计算相比,设计效率大大提高。
六、 基于MATLAB的优化结果
1、目标函数的M文件
2、非线性约束条件的M文件
3、线性约束的系数,给定初值,并调用优化过程
解得最优解为[210.32 22.89 8.53 341.71 108.53 137.65]
即b=210.32mm, 22.89, =8.53, =341.71mm, =108.53mm, =137.65mm.
展开阅读全文