1、 1 / 23VC+凸轮机构运动仿真编程示例一. 机构运动原理1. 推杆从动件的运动规律(仅列出常用的四种运动规律)表 1-1 从动件的运动方程式行程运动类型推 程 回 程等速运动sh0va sh00va前半程sh202v4a20 sh202v4a20等加速等减速运动后半程sh020v4a20 sh020v4a20余弦加速度运动shvah212000cosincos shvah212000cosincos正弦加速度运动shva002021sincosi shva12220002sincosi2. 偏置直动尖顶推杆盘形凸轮机构如图所示,凸轮逆时针方向转动,导路偏置于凸轮转动中心 A,导路距转轴
2、A 的垂直距离为偏距 e。以偏距 e 为半径作的圆为偏距圆。当凸轮转动时,凸轮上的偏距圆也随之转动,但其始终与导路轴线相切。凸轮转动时不便求解其上的廓线方程,故采用反转法。反转法是建立在推杆与凸轮的相对运动与参考系无关这一原理上的。所谓反转法,即给整个机构一个与凸轮转向相反的角速度 ,则凸轮静止不动,而从动件随机架反转且沿凸 1轮廓线相对运动,导路的反转角 即凸轮的转角。如图所示,此时导路由 转到 。BK0由于 , 所以 ,此时导路 BK 与基圆和凸轮廓线的交点AKB0K,A0间的长度,即从动件的位移 。由几何关系知 ,所以 sB BKA0s2 / 23。选取坐标系 xAy,B 0点为凸轮廓线
3、起始点。当凸轮转过 角,由反转法BKreb21知此时从动件位于 BK。则 B 点的坐标为(1-1)XseY0incosi式(1-1)即为尖顶推杆凸轮廓线的方程式,也称为理论廓线方程。 2 3 y x e K B B B0 rb s K0 s0 1 e A 3. 偏置直动滚子推杆盘形凸轮机构大多数推杆在尖顶 B 处装有滚子,以提高推杆的使用寿命。显然,只要使滚子中心 B沿理论廓线曲线上运动,即可保证推杆预期的运动规律。如图所示,此时凸轮的轮廓曲线不是理论廓线,而是处处与滚子相切的另一条曲线,这条曲线称为凸轮的实际廓线。因为实际廓线与理论廓线在法线方向的距离处处相等,且等于滚子半径 rr,故当已知
4、廓线上任一点 B 时,只要沿理论廓线在该点法线方向取距离为 rr,即得实际廓线上的相应点xy,。由此可见,理论廓线上作一系列滚子圆的包络线即实际廓线。因此实际廓线是,理论廓线的等距曲线。该等距曲线有两条,即内等距曲线和外等距曲线。盘状槽形凸轮的廓线即该两条等距曲线。由高等数学知识可求得理论廓线 B 点处法线n-n 的斜率(与切线斜率互为负倒数)应为(1-2)tandxy式(1-2)中的 dx/dy 与 dy/dx 可根据式(1-1 )求出,代入式(12)后有(1-3)tansincosddee00式(8-10)中的角可在 变化,其值要根据分子、分母的正负号所决定的36所在象限来计算。求出 角后
5、,可计算 的坐标值:tanBxy,3 / 23(1-4)xrycosin式中“”号为内等距曲线,“”号为外等距曲线。式(8-11)即为凸轮的实际廓线方程式。此时实际廓线的基圆半径 等于理论廓线的基圆半径 与滚子半径 之差:r0 rbrr0br r0 A 实实 实实 B0 B(x,y) n B(x,y) n r K K0 rb x y 4. 机构运动的基本原理前面计算出了凸轮机构的坐标点,当凸轮转动时,其相对于原点的坐标值要改变。此处可参考机械原理教材第六章“平面连杆机构”第三节“机构综合的位移矩阵法”所讲述的内容。设凸轮上一点原来的坐标为: ,当凸轮转动 角以后,其坐标变为:),(yx,则有以
6、下关系:),(yx cossiniyxy在做机构动画时,让 角从 0 度到 360 度等量增加,则可以画出一系列凸轮的位置,形成连续的动画。4 / 23二. 编程步骤1. 项目类型选择 MFC AppWizard(exe),项目名取为“TuLun ”。 2. 在程序向导的第 1 步选择建立一个单文档的应用程序,点击“Finish”结束向导。3. 点击菜单项“Insert Resource” ,选择在弹出的对话框中选择 Dialog,5 / 23以此来插入一个对话框资源,这个对话框将来作为凸轮机构的参数输入窗口。4. 在参数输入对话框上右键点击,弹出属性对话框,设定其 ID 号为 IDD_PAR
7、AMETER,设定其标题 Caption 为“参数输入对话框” 。然后在对话框上添加控件如下图所示,为每一个控件指定 ID 号。推程运动规律 一组单选钮:IDC_TUI_1;IDC_TUI_2 ;IDC_TUI_3;IDC_TUI_4回程运动规律 一组单选钮:IDC_HUI_1;IDC_HUI_2 ;IDC_HUI_3;IDC_HUI_4推程角:IDC_TUI_ANGLE;回程角: IDC_HUI_ANGLE; 远停角:IDC_FAR_REST_ANGLE6 / 23基圆半径:IDC_BASE_CIRCLE; 行 程:IDC_COURSE;偏 距:IDC_SETOVER推杆滚子半径:IDC_R
8、OLLER_RADIUS;凸轮转动速度:IDC_CAM_VELOCITY注意:要将推程运动规律的“等加速运动”和回程运动规律的“等加速运动”单选钮属性中的 Group 复选框勾选上,如下图所示5. 为对话框添加一个类:在对话框的空白区域处双击鼠标,弹出 ClassWizard 窗口,在添加一个新类对话框中点击 OK 按钮,将新类命名为 CParameterDlg,其余选择默认值,点击OK 按钮确定。7 / 236. 为对话框中的控件添加相应的成员变量:点击菜单“View ClassWizard” ,点击“Member Variables”标签项,为对话框中的控件添加对应的成员变量如下图和表所示
9、。NO. Control IDs Type Member Show1 IDC_BASE_CIRCLE double m_Base_Radius 基圆半径2 IDC_CAM_VELOCITY double m_Cam_Velocity 凸轮转动速度3 IDC_COURSE double m_Course 行程4 IDC_FAR_REST_ANGLE double m_FarRest_Angle 远停角5 IDC_HUI_1 int m_Hui_Rule 推程运动规律6 IDC_HUI_ANGLE int m_Hui_Angle 回程角7 IDC_ROLLER_RADIUS double m_Ro
10、ller_Radius 推杆滚子半径8 / 238 IDC_SETOVER double m_Setover 偏距9 IDC_TUI_1 int m_Tui_Rule 回程运动规律10 IDC_FAR_REST_ANGLE int m_FarRest_Angle 远停角11 IDC_TUI_ANGLE int m_Tui_Angle 推程角7. 在资源视图(ResourceView)中打开主菜单资源 IDR_MAINFRAME,添加顶层菜单项“输入” ,弹出菜单项“凸轮机构参数” ,并如图设置 ID 号及标题等。8. 点击菜单 “View ClassWizard” 为菜单项命令添加消息映射函数
11、。在 Class name 中选择“CTuLunView ”类,目标 ID 号中选择“ID_INPUT_SIZE” ,在“Messages”中选择“Command”,双击,弹出“添加成员函数”对话框,点击“OK” ,确认函数名为“OnInputSize”。9 / 239. 在类视图(ClassView )中双击 ,在 TuLunView.h 中按如下方式定义凸轮相关的成员变量(具体添加地方为:的后面):/与盘形凸轮相关的数据与变量int m_Hui_Rule;int m_Tui_Rule;double m_Base_Radius;double m_Course;double m_Setover
12、;int m_Tui_Angle;int m_Hui_Angle;int m_FarRest_Angle;int m_NearRest_Angle;double m_Roller_Radius;double m_Cam_Velocity;10. 初始化凸轮机构的参数:在 CTuLunView 类的构造函数 CTuLunView()中添加初始化代码:CTuLunView:CTuLunView()/ TODO: add construction code herem_Hui_Rule=3;m_Tui_Rule=2;m_Base_Radius=200;m_Course=150;m_Setover=8
13、0;m_Tui_Angle=100;m_Hui_Angle=150;m_FarRest_Angle=60;m_Roller_Radius=80;m_Cam_Velocity=4;10 / 2311. 在 OnInputSize()函数中输入下面的代码:/从凸轮机构输入对话框中得到凸轮机构各参数值void CTuLunView:OnInputSize() / TODO: Add your command handler code here/显示盘形凸轮输入对话框CParameterDlg CamDlg; /定义 CParameterDlg 类的一个对象/初始化盘形凸轮参数输入对话框CamDlg.
14、m_Tui_Rule=2; / 初始化推程运动规律为正弦运动规律CamDlg.m_Hui_Rule=0; / 初始化回程运动规律为等速运动规律CamDlg.m_Base_Radius=200;CamDlg.m_Course=150;CamDlg.m_Setover=80;CamDlg.m_Hui_Angle=90;CamDlg.m_Tui_Angle=150;CamDlg.m_FarRest_Angle=60;CamDlg.m_Roller_Radius=80;/从盘形凸轮输入对话框中得到用户输入的凸轮数据if(CamDlg.DoModal()=IDOK)m_Tui_Rule=CamDlg.m
15、_Tui_Rule;m_Hui_Rule=CamDlg.m_Hui_Rule;m_Base_Radius=CamDlg.m_Base_Radius;m_Course=CamDlg.m_Course;m_Setover=CamDlg.m_Setover;m_Hui_Angle=CamDlg.m_Hui_Angle;m_Tui_Angle=CamDlg.m_Tui_Angle;m_FarRest_Angle=CamDlg.m_FarRest_Angle;m_Roller_Radius=CamDlg.m_Roller_Radius;m_Cam_Velocity=CamDlg.m_Cam_Velocity;/调用 OnDraw 函数按照输入的参数重新绘制凸轮Invalidate(TRUE);12. 在 TuLunView.cpp 前面加上 CParameterDlg 类的头文件及科学计算的头文件:#include “TuLunDoc.h“#include “TuLunView.h“#include “ParameterDlg.h“#include “math.h“此时编译运行,可以从菜单项中调出凸轮参数输入对话框,并把用户输入的数据保存在