«

圆柱直齿轮相关(1)

时间:2012-5-15 20:38     作者:中原     分类: 机械


悲剧的外企,不大好意思问人,简单东西要搞n久。。。

---------

1.proe绘制齿轮(注,根据两个月来的工作经验,这个没什么用,因为出的cad图都是靠写参数的,所以proe的齿子画的不标准也问题不大,不过,用参数化的方式可以免去以后记不住参数的麻烦)

a.画分度圆,齿顶圆,齿根圆

b.画渐开线,方程为:

r=db/2
theta=t*45
x=r*cos(theta)+r*sin(theta)*theta*pi/180
y=r*sin(theta)-r*cos(theta)*theta*pi/180

c.对称渐近线

很多教程上面这里有个错误,认为分度圆齿厚和齿槽宽是相等的,所以得出对称平面与原平面(通过齿轮中心直线和渐开线与分度圆交点的平面)夹角为360/(4*Z)。关键是他们还在齿顶圆之类的公式里面加上变位,显得自己的方法是通用的。。。

对于变位齿轮,这个夹角应该是360/(4*Z)+2*X*TAN(ALPHA)*180/pi/z

d.各种拉伸

 

2.渐开线函数inva,反渐开线函数ainva

因为我是自己在excel里面做公式,所以找的vb版

Public Function Inv(a As Double) As Double
Inv = Tan(a) - a
End Function

Public Function aInv(num As Double) As Double
Dim lowangle As Double
Dim highangle As Double
Dim midangle As Double
lowangle = 0
highangle = Atn(1) * 2
Do While highangle - lowangle > 10 ^ -12
midangle = (lowangle + highangle) / 2
If Inv(midangle) > num Then
highangle = midangle
Else
lowangle = midangle
End If
Loop
aInv = (lowangle + highangle) / 2 / Atn(1) * 45
End Function
据说C版如下,未验证:
#include<iostream.h>
#include<math.h>
#include<conio.h>
double AInv(double y, double e);
void main()
{
     double x, y;
     cout<<"Input y (>0): ";
     cin>>y;
     x = AInv(y, 0.000001);
     if (x<0)  cout<<"Failed after 100 iterations!"<<endl;
     else      cout<<"ainv("<<y<<") = "<<x<<endl;
     getch();
}
double AInv(double y, double e)
{
double x, maxX, minX;
const double pi = 3.14159265358979;
maxX = pi/2;
minX = 0;
for (int i=1;i<=100;i++)
{   x =  (maxX + minX) / 2;
     if (maxX-x<e) return(x);        
     if (y>tan(x) - x)  minX = x;
     else                     maxX = x;
     cout<<minX<<", "<<maxX<<endl;
}
return(-1);
}

3.cad画齿轮(注:这个也没什么用,画示意图的时候用吧,或许有线切割的齿轮…)

导入附件用gear命令就可以了

 

评论:
avatar
李若蟾 2014-08-26 22:06
代码看不懂的飘过