资源描述
各专业全套优秀毕业设计图纸
汽车设计课程设计说明书
题 目: 曲柄连杆机构受力分析
设计者:
学 号:
指导教师: 吴参
2015 年 1 月 02 日
一、 课程设计要求
根据转速、缸内压力、曲柄连杆机构结构参数,计算发动机运转过程中曲柄连杆机构受力,完成计算报告,绘制曲柄连杆机构零件图。
1.1 计算要求
掌握连杆往复惯性质量与旋转离心质量折算方法;
掌握曲轴旋转离心质量折算方法;
掌握活塞运动速度一阶、二阶分量计算方法;
分析活塞侧向受力与往复惯性力及相应设计方案;
分析连杆力及相应设计方案;
采用C语言编写曲柄连杆机构受力分析计算程序;
完成曲柄连杆机构受力计算说明书。
1.2 画图要求
活塞侧向力随曲轴转角变化
连杆对曲轴推力随曲轴转角变化
连杆轴承受力随曲轴转角变化
主轴承受力随曲轴转角变化
活塞、连杆、曲轴零件图(任选其中一个)
二、 计算参数
2.1 曲轴转角及缸内压力参数
曲轴转速为7000 r/min,缸内压力曲线如图1所示。
图1 缸内压力曲线
2.2发动机参数
本计算过程中,发动机结构及运动参数如表1所示。
参数
指标
发动机类型
汽油机
缸数
1
缸径D mm
91
冲程S mm
63
曲柄半径r mm
31.5
连杆长l mm
117
偏心距e mm
0
排量 mL
400
活塞组质量 kg
0.425
连杆质量 kg
0.46
曲轴旋转离心质量 kg
0.231
标定功率及相应转速 kw/(r/min)
17/7500
最高爆发压力 MPa
5.24MPa
表1 发动机主要参数
三、 计算内容和分析图
3.1 运动分析
3.1.1曲轴运动
近似认为曲轴作匀速转动,其转角
3.1.2活塞运动规律
图2 中心曲轴连杆机构简图
1)活塞位移 ,其中
2) 活塞速度
令,
有,
最大活塞速度
平均活塞速度
3) 活塞加速度
令,有
,
由,即或时,得正、负最大加速度:
个负最大加速度,即
3.1.3连杆运动规律
1)连杆摆动角
由,得
2)连杆摆动角速度
3)连杆摆动角加速度
3.2活塞气体力
活塞气体力 N
其中:缸内气体压力 bar (1bar=pa);大气压力 一般取=1bar; cm2
3.3 往复惯性力
往复运动质量 ,
kg
往复惯性力
3.4 曲轴连杆机构旋转离心力
旋转运动质量 ,—曲轴质量
kg
旋转离心力 N
两个分量: ;
3.5 连杆受力合成
气体压力与往复惯性力作用在气缸中心线上,将往复惯性力用单位活塞面积的力计量,则合成的单位活塞面积的力为:
对曲轴连杆机构的作用如右图所示。
设合成力p作用于活塞销中心A,它可分解为两个力:
垂直气缸中心线将活塞压向缸壁的侧压力
活塞侧向力曲线如图3所示
图3 活塞侧向力曲线
沿连杆轴线作用的连杆力
连杆力曲线如图4所示
图4 连杆力曲线
将沿作用线移至作用点B,可进一步分解为:
对曲轴销切向力
对曲轴销径向力
3.6 曲轴受力合成
根据连杆对曲轴推力和旋转离心力,计算曲轴连杆轴颈力。以单位活塞面积计算。
1)连杆大头的旋转离心力
2)曲轴销负荷 ,其中 为连杆力,将在x,y方向投影
,
在x、y方向的力的曲线如图5(a)(b)所示
图5-(a)
图5-(b)
3) 连杆轴承负荷
连杆轴承负荷是曲轴销对轴承的反作用力。大小相等,方向相反,即
。
的方向角为:
4)主轴颈负荷
的大小为
5) 主轴承负荷
主轴承负荷与主轴颈负荷互为反作用,在任何时刻大小相等,方向相反。即
因参考坐标系互相转动角,所以的方位角
四、 C++程序:(见附录1)
五、 总结
通过本次汽车设计的课程设计,在老师的指导下,我对曲柄连杆机构的结构设计有了进一步的理解。
1)活塞结构:为了减轻活塞质量,减少其往复惯性力,其选用材料为铝;在裙部设计方面,削掉不承受侧向力部分,而在受力部位则延长加厚;活塞销与活塞装配方面,在冷态下,为间隙配合,在工作状态,由于铝的膨胀系数较大,它们的装配为过盈配合。
2)连杆结构:采用工字型设计,既减轻连杆的质量,减小往复惯性力和离心力,同时也增强了抗弯性能。
3)螺栓预紧力:应选择适当值。若预紧力过小,连杆大头盖与轴承会出现缝隙,影响发动机稳定工作;若预紧力过大,则会造成连杆被拉断。
学习汽车设计,进一步加深了我对汽车的了解和印象。在毕业设计中我选择了曲柄连杆机构受力分析设计,是理论与实际相结合,使我能够更好的掌握专业知识。
六、参考资料
内燃机设计 杨连生 中国农业机械出版社,1981
汽车发动机现代设计 徐兀 人民交通出版社,1995
附录1:
C++程序:
// CrankShaftDlg.cpp : implementation file
//
#include "stdafx.h"
#include "CrankShaft.h"
#include "CrankShaftDlg.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCrankShaftDlg dialog
CCrankShaftDlg::CCrankShaftDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCrankShaftDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCrankShaftDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CCrankShaftDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCrankShaftDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCrankShaftDlg, CDialog)
//{{AFX_MSG_MAP(CCrankShaftDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_COMPUT, OnComput)
ON_BN_CLICKED(IDEXIT, OnExit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCrankShaftDlg message handlers
BOOL CCrankShaftDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CCrankShaftDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CCrankShaftDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CCrankShaftDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CCrankShaftDlg::OnComput()
{
// TODO: Add your control notification handler code here
/****************************************
400汽油机曲轴连杆活塞组运动学计算程序
作者: 学号:
////////////////////////////////////////////
发动机主要参数
参数 指标
发动机类型 汽油机
缸数 1
缸径D mm 91
冲程S mm 63
曲柄半径r mm 31.5
连杆长l mm 117
偏心距e mm 0
排量 mL 400
活塞组质量 kg 0.425
连杆质量 kg 0.46
曲轴旋转离心质量 kg 0.231
标定功率及相应转速 kw/(r/min) 17/7500
最高爆发压力 MPa MPa
缸内气体压力 CylinderPressure.txt
/////////////////////////////////////////////
*****************************************/
int iDataNum = 0; //数据点数
//结构参数
double dEngineSpeed = 7000; //发动机转速r/min
double dOmiga = 733.04; //发动机转速rad/s
double dAlpha = 0; //曲轴转角 rad
double dSinBeta = 0; //连杆摆角 sin
double dCosBeta = 0; //连杆摆角 cos
double dLinker = 0.117; //连杆长 m
double dStroke = 0.063; //冲程 m
double dPistonD = 0.091; //缸径 m
double dLambda = 0.27; //连杆比
double dPiston_m = 0.425; //活塞质量 kg
double dLinker_m = 0.46; //连杆质量 kg
double dCrankShaft_m = 0.231;//曲轴旋转离心质量
//计算结果
double dPiston_F_P = 0; //活塞压力 N
double dPiston_X = 0; //活塞位移 m
double dPiston_V = 0; //活塞速度 m/s
double dPiston_A = 0; //活塞加速度m/s2
double dPiston_F_C = 0; //活塞侧向力 N
double dPiston_F_G = 0; //往复惯性力 N
double dLinker_F = 0; //连杆力 N
double dCrankShaft_F_R = 0; //曲轴旋转离心力 N
double dCrankShaft_F_x = 0; //曲轴力x N
double dCrankShaft_F_y = 0; //曲轴力y N
//
FILE* pFileRead = NULL; //源数据文件指针
FILE* pFileWrite = NULL; //结果数据文件指针
double dPAI = 3.14159;
float fTmp[10] = {0}; //临时数据
///////////////////////
dEngineSpeed = 7000.0;
dOmiga = dEngineSpeed * 2.0 * dPAI / 60.0;
dLambda = dStroke / (dLinker * 2);
//
if ((pFileRead = fopen("CylinderPressure.txt" , "r")) == NULL)
{
AfxMessageBox("源数据文件错误");
return;
}
if ((pFileWrite = fopen("Result.txt" , "w")) == NULL)
{
AfxMessageBox("结果数据文件错误");
return;
}
fprintf(pFileWrite ,
"序号 曲轴转角rad 活塞位移m 活塞速度m/s 活塞加速度m/s2 活塞气压力N 往复惯性力N 活塞侧向力N 连杆力N 旋转离心力N 曲轴连杆轴颈力x/N 曲轴连杆轴颈力y/N\n"
);
//计算
while (fscanf(pFileRead , "%f %f" , &fTmp[0] , &fTmp[1]) != EOF)
{
dAlpha = fTmp[0] * dPAI / 180.0;
dSinBeta = dLambda * sin(dAlpha);
dCosBeta = sqrt(1.0 - dSinBeta * dSinBeta);
//
dPiston_X = 0.5 * dStroke * (1.0 - cos(dAlpha) + (1.0 / dLambda) * (1 - dCosBeta));
//
dPiston_V = 0.5 * dStroke * dOmiga * (sin(dAlpha) + cos(dAlpha) * dSinBeta / dCosBeta);
//
dPiston_A = 0.5 * dStroke * dOmiga * dOmiga * ( cos(dAlpha) - sin(dAlpha) * dSinBeta / dCosBeta +
dLambda * cos(dAlpha) * cos(dAlpha) / pow(dCosBeta , 3)
);
//
dPiston_F_P = fTmp[1] * 1000000.0 * dPAI * dPistonD * dPistonD / 4.0;
//根据以上结果计算往复惯性力、活塞侧向力、连杆力、旋转离心力、曲轴连杆轴颈力
//往复惯性力 = (活塞 + 1/3连杆质量)×活塞加速度
dPiston_F_G = (dPiston_m + dLinker_m / 3.0) * dPiston_A;
//活塞侧向力 = (活塞气体力 + 往复惯性力)/ tg(beta)
dPiston_F_C = (dPiston_F_P + dPiston_F_G) * dSinBeta / dCosBeta;
//连杆力 = (活塞气体力 + 往复惯性力)/ cos(beta)
dLinker_F = (dPiston_F_P + dPiston_F_G) / dCosBeta;
//旋转离心力 = (2/3连杆质量 + 曲轴质量)× r×omiga^2
dCrankShaft_F_R = (dCrankShaft_m + 2.0 * dLinker_m / 3.0) * (0.5 * dStroke) * dOmiga * dOmiga;
//曲轴连杆轴颈力x = 曲轴旋转离心力*sin(alpha)+连杆力*sin(beta)
dCrankShaft_F_x = dCrankShaft_F_R * cos(dAlpha) + dLinker_F * dSinBeta;
//曲轴连杆轴颈力y = 曲轴旋转离心力*cos(alpha)+连杆力*cos(beta)
dCrankShaft_F_y = dCrankShaft_F_R * sin(dAlpha) + dLinker_F * dCosBeta;
////////////////////////////////////
fprintf(pFileWrite , "%d %f %f %f %f %f %f %f %f %f %f %f\n" ,
iDataNum ,
dAlpha ,
dPiston_X ,
dPiston_V ,
dPiston_A,
dPiston_F_P,
dPiston_F_G,
dPiston_F_C,
dLinker_F,
dCrankShaft_F_R ,
dCrankShaft_F_x,
dCrankShaft_F_y);
iDataNum++;
}
//结束
fclose(pFileRead);
fclose(pFileWrite);
AfxMessageBox("400汽油机曲轴连杆活塞组运动学计算完成");
}
void CCrankShaftDlg::OnExit()
{
// TODO: Add your control notification handler code here
CDialog::OnOK();
}
16
展开阅读全文