齿轮作为一种重要的机械传动形式,广泛应用于汽车制造、工业变速器、工业专用机床等众多工业领域的制造业中。在齿轮转动过程中,齿轮之间会传递载荷。
当转动速度较快,载荷较大时,轻则齿轮上留下印痕,重则发生齿轮磨损甚至齿轮断裂。为了尽量减少齿轮受损现象,需要对齿轮进行仿真分析,齿轮网格划分是必不可少的一步。
本次技术分享,由齿轮设计者提供了可以根据齿轮参数,计算出齿轮齿廓线的算法代码。
关键技术
1、利用QT搭建齿轮网格划分软件界面,实现齿轮参数数据、网格参数数据的输入和齿廓线、网格的可视化。
2、C++程序通过动态链接库调用MATLAB程序,实现数据在两者之间的传递。
3、根据齿轮受力特点的不同,实现齿轮分区,在轮齿根处,需要进行网格加密设置。
4、参考VTK文件格式,利用生成的节点编号及坐标,编写网格连接关系,实现网格可视化。
技术路线
一、界面设计
利用QT搭建的软件界面如下图所示:
图1为齿轮设计界面,左侧为齿轮参数输入,右侧为生成齿廓线的示意图。图2为网格划分界面,左侧为网格参数输入,右侧为生成网格的示意图。
图1 齿轮设计界面
图2 网格划分界面
二、C++程序通过动态链接库调用MATLAB程序
在齿轮设计阶段,需要输入齿数、螺旋角、法向模数、齿顶高系数、顶隙系数等网格参数,进行计算,最终得到目标齿廓线。但是计算过程中涉及复杂方程,C++不易实现,所以此处使用MATLAB求解齿廓线,之后再使用C++程序调用MATLAB程序,过程如下:
01
打开需要调用的MATLAB程序.m文件,在MATLAB命令行中输入mex –setup,然后选择C++编译器为VS2017(选择自己安装的Visual Studio版本即可,没有提示选择版本就不需要选择,有时会自动识别出已有的编译器),语言为C++,最终会显示“MEX 配置为使用‘Microsoft Visual C++ 2017’以进行 C++ 语言编译。”
在MATLAB命令行中输入mbuild –setup,再次选择已有的编译器和C++语言,最终会显示“MBUILD 配置为使用‘Microsoft Visual C++ 2017’以进行 C++ 语言编译。”
02
然后输入mcc –W cpplib:libname file.m –T link:lib,其中libname指的是之后编译完成的库的名字,自定义命名即可,file.m是.m函数的名字。
完成以上操作后,会在.m文件目录下获得以下文件。
将生成的后缀为.dll、.h、.lib的文件拷贝到C++工程目录下,并将.h文件加入项目。
03
在Visual Studio中配置包含目录、库目录、链接器
包含目录:
库目录:
链接器中的附加依赖项添加以下两项:
mclmcrrt.lib
Involutepoints.lib (之前生成的.lib文件)
04
使用C++程序完成C++和MATLAB之间的数据处理和传递。
包含头文件 #include"Involutepoints.h"。将软件界面中输入的齿轮参数读入到程序中,再将其作为调用matlab的函数Involutepoints(1, mwpoints, mwmn, mwz, mwx, mwalpha_n, mwbeta, mwhac,mwcc, mwrco, mwjn, mwinvolute_section, mwtransition_section)中的参数,最终将求得一组点的坐标值,并输出.txt文件。连接这一组点就组成了一条齿廓线。
05
生成齿廓线后,软件界面显示如图3所示
图3 齿廓线示意图(螺旋角参数参数为0和非0)
三、齿轮分区,并在特殊区域加密取点
在齿轮的应用过程中,齿根处受到的载荷最大,最容易被破坏,如图4圈中的位置所示。
图4 齿轮受载荷最大处
所以将一个轮齿分为上中下三个部分,如图5所示,在中部区域进行局部加密。
图5 轮齿分区示意图
中部是一块不规则区域,如图6(左)所示,本案例首先选定需要连接的对应点,如中部区域的左侧圆点与右侧曲线上的三角形点一一对应,为了使网格大小适当,再利用二次贝塞尔曲线原理将对应点之间用曲线连接,在曲线上取点。
如图6(右),选取P0,坐标为(x0,y0),,为贝塞尔曲线的起始点。再选取与P0对应的一个三角形点,坐标为(x2,y2),记为P2,为贝塞尔曲线的终点。分别做P0、P2在其所在线段的法线(图中细虚线),可以计算出交点坐标(x1,y1),记为控制点点P1。
根据二次贝塞尔曲线方程,求出每组对应点之间的二次贝塞尔曲线。在曲线上,根据网格参数,再选取网格节点即可。
图6 利用二次贝塞尔曲线取点
四、参考VTK文件格式,完成节点编号排序,实现网格数据可视化
01
第一部分是文件表头,如图所示
02
第二部分是网格节点坐标信息,如图所示,POINTS表示是节点信息,54740表示共有54740个节点,double表示支持的数据类型为double,之后的数据每一行都代表一个节点的三维坐标。
03
第三部分为节点之间的连接关系,如图所示,CELLS表示是单元信息,44800表示共有44800个单元,403200表示下方有403200个数据。每一行数据都表示一个单元,第一个数字“8”表示这个单元一共有8个节点,后面8个数字是组成这个单元的8个节点的编号(节点是从0开始编号)。8个节点的编号是按照一定的顺序排列。
04
第四部分为单元类型,如图所示,CELL_TYPES表示是单元类型信息,44800表示以下包含44800个单元的类型。之后的每一行都表示一个单元的单元类型。“12”是VTK里定义的线性的单元类型,如图所示,表示任意六面体。上一节中的节点按顺序排列,即按照图中顺序排列。
05
实现网格可视化
如图7所示,输入网格参数,点击生成网格,即可得到齿轮网格模型。
图7 齿轮网格示意图(直齿轮和斜齿轮)
本文所述方法是团队实习学生开发圆柱齿轮网格划分程序的技术要点,希望能够帮助您了解网格划分领域相关内容。
对此方法感兴趣的可联系FastCAE客服获取资料和源代码!