机械原理大作业凸轮机构.docx
《机械原理大作业凸轮机构.docx》由会员分享,可在线阅读,更多相关《机械原理大作业凸轮机构.docx(24页珍藏版)》请在冰点文库上搜索。
机械原理大作业凸轮机构
HarbinInstituteofTechnology
大作业设计说明书
课程名称:
机械原理
设计题目:
凸轮机构
院系:
机电工程学院
班级:
1108101
设计者:
马舜
学号:
1110810115
指导教师:
陈明丁刚
设计时间:
2013.06.12
哈尔滨工业大学
一、设计题目
图1
序号
升程mm
升程运动角()
升程运动规律
升程许用压力角()
回程运动角()
回程运动规律
回程许用压力角()
远休止角()
近休止角()
16
100
90
正弦加速度
30
80
3-4-5多项式
70
110
80
二、推杆升程,回程运动方程
1.推杆升程方程(式中
)
2.推杆回程方程(式中
)
其中
,
,
,
。
并且取
=1
三、推杆的位移、速度和加速度图像
(1)推杆位移图
图2
(2)推杆速度图
图3
(3)推杆加速度图
图4
三、确定凸轮基圆半径和偏距
(1)凸轮机构的
线图
图5
(2)确定凸轮的基圆半径r0和偏距e
①理论依据
设以从动件的位移s为纵坐标(相当于从动件运动导路),以类速度
为横坐标。
当给定一系列的凸轮转角
,则根据已知的运动规律,可以求得s和
的值,从而作出
曲线。
由于题目为左偏置凸轮机构,故推程在s轴左边,回程在s轴右边。
分别再作出升程压力角对应的极限直线和回程压力角对应的极限直线,有图像可得偏距e和s0的取值范围。
从中选取最合理的偏距,从而得到基圆半径r0。
②r0和e取值
综合考虑取偏距e=50mm,s0=100mm。
故可得到基圆半径r0=111.80mm。
用matlab进行编程时选取e=50.54mm,r0=101.09mm
四、滚子半径rr的选择
(1)理论依据
为保证凸轮正常工作,其工作轮廓线曲率半径ρa、理论轮廓线ρ和滚子rr半径三者应满足:
只有当ρ>rr时,ρa>0,这时可以作出凸轮的工作轮廓线。
综上所述,滚子半径rr不宜过大。
但因为滚子装在销轴上,故亦不宜过小。
一般推荐:
式中,
为凸轮理论轮廓外凸部分的最小曲率半径;
=3~5mm。
(2)滚子半径的取值
由
可求得在极坐标下曲线曲率半径的表达式:
用VB编程求得理论轮廓曲线上最小的曲率半径为
=78.56mm。
故综合考虑取rr=20mm。
五、绘制理论轮廓线
图6
六、绘制实际轮廓线
图7
附录1:
VB程序界面
该程序有良好的人机交互界面,可以计算表中列出的所有凸轮参数值,只需要选择运动规律并输入值即可完成运算和绘图,易于更改参数,从而观察不同参数对凸轮轮廓的影响。
对于偏距和基圆半径的确定,采用有限搜寻法,画出了偏距和基圆半径的取值区域,可根据不同环境下选择参数。
最小曲率半径的计算用到了高等代数的弧微分知识,同样用搜寻法找出最小曲率半径的位置。
根据曲率半径即所应用的场合确定棍子半径,进而可以画出凸轮实际轮廓线和滚子运动的模拟图。
附录2:
VB源程序
(1)窗体部分
PrivateSubcmdCancle_Click()
UnloadMe
EndSub
PrivateSubcmdLL_Click()
IftetR0.Text=""Then
MsgBox"请输入偏距e和s0!
"
ExitSub
EndIf
CallModule3.Lframe
EndSub
PrivateSubcmdOk_Click()
DimiAsLong
pi=3.1415936
h=Val(tetH.Text)
w=Val(tetW.Text)
a1=Val(tetA1.Text)*pi/180
a0=Val(tetA0.Text)*pi/180
b1=Val(tetB1.Text)*pi/180
b0=Val(tetB0.Text)*pi/180
s1=Val(tetS1.Text)*pi/180
s2=Val(tetS2.Text)*pi/180
Ifh<=0Orw=0Then
MsgBox"你输入的参数有误,请重新输入!
"
ExitSub
EndIf
IfVal(tetA1.Text)+Val(tetB1.Text)+Val(tetS1.Text)+Val(tetS2.Text)<>360Then
MsgBox"你输入的角度值不正确,请重新输入!
"
ExitSub
EndIf
Fori=0To3600
Module1.f=i*pi/1800
CallModule1.action
SS(i)=Module1.S
DDsf(i)=Module1.Dsf
DDDDsf(i)=Module1.DDDsf
VV(i)=Module1.V
AA(i)=Module1.A
Nexti
CallModule2.Paint
EndSub
PrivateSubcmdOk1_Click()
DimiAsLong
e=Val(tetE.Text)
s0=Val(tetS0.Text)
r0=Sqr(e^2+s0^2)
tetR0.Text=r0
Fori=0To10*(Val(Form1.tetA1.Text))
IfTan(a0)<(DDsf(i)-e)/(s0+SS(i))Then
MsgBox"您输入的偏距e和s0不满足升程压力角要求,请重新输入!
"
ExitSub
EndIf
Nexti
Fori=10*(Val(Form1.tetA1)+Val(Form1.tetS1))To10*(Val(Form1.tetA1)+Val(Form1.tetS1)+Val(Form1.tetB1))
IfTan(b0)<(DDsf(i)+e)/(s0+SS(i))Then
MsgBox"您输入的偏距e和s0不满足回程压力角要求,请重新输入!
"
ExitSub
EndIf
Nexti
EndSub
PrivateSubcmdP_Click()
CallModule4.pmin
tetPmin.Text=Module4.pm
EndSub
PrivateSubcmdSecond_Click()
tetH.Text=""
tetW.Text=""
tetA1.Text=""
tetA0.Text=""
tetB1.Text=""
tetB0.Text=""
tetS1.Text=""
tetS2.Text=""
tetE.Text=""
tetS0.Text=""
tetR0.Text=""
tetPmin.Text=""
tetRr.Text=""
picS.Cls
picV.Cls
picA.Cls
picDsf.Cls
picT.Cls
EndSub
PrivateSubcmdSecond1_Click()
tetE.Text=""
tetS0.Text=""
tetR0.Text=""
EndSub
PrivateSubcmdSJ_Click()
Rr=Val(tetRr.Text)
IfRr=0Then
MsgBox"请输入滚子半径!
"
ExitSub
EndIf
CallModule3.Lframe
IfRr>(Module4.pm-3)Then
MsgBox"您输入的滚子半径不满足要求,一般推荐rr<ρmin-Δ,Δ=3~5mm。
"
ExitSub
EndIf
CallModule5.SFrame
EndSub
PrivateSubForm_Load()
'位移图像定义
Form1.picS.Scale(-400,130)-(4000,-30)
Form1.picS.Line(0,-50)-(0,150)
Form1.picS.Line(-300,0)-(3900,0)
Form1.picS.Line(-100,120)-(0,130)
Form1.picS.Line-(100,120)
Form1.picS.Line(3800,-5)-(3900,0)
Form1.picS.Line-(3800,5)
Form1.picS.DrawStyle=2
Fori=450To3600Step450
Form1.picS.Line(i,0)-(i,100)
Form1.picS.CurrentX=i-350:
Form1.picS.CurrentY=-10:
Form1.picS.Printi/10
Nexti
Fori=20To100Step20
Form1.picS.Line(0,i)-(3600,i)
Form1.picS.CurrentX=-450:
Form1.picS.CurrentY=i:
Form1.picS.Printi
Nexti
'速度图像定义
Form1.picV.Scale(-400,180)-(4000,-180)
Form1.picV.Line(0,-170)-(0,180)
Form1.picV.Line(-300,0)-(3900,0)
Form1.picV.Line(-100,160)-(0,180)
Form1.picV.Line-(100,160)
Form1.picV.Line(3800,-10)-(3900,0)
Form1.picV.Line-(3800,10)
Form1.picV.DrawStyle=2
Fori=450To3600Step450
Form1.picV.Line(i,-140)-(i,140)
Form1.picV.CurrentX=i-450:
Form1.picV.CurrentY=-10:
Form1.picV.Printi/10
Nexti
Fori=-140To140Step40
Ifi<>-20Then
Form1.picV.Line(0,i)-(3600,i)
EndIf
Form1.picV.CurrentX=-450:
Form1.picV.CurrentY=i:
Form1.picV.Printi
Nexti
'加速度图像定义
Form1.picA.Scale(-400,400)-(4000,-400)
Form1.picA.Line(0,-390)-(0,400)
Form1.picA.Line(-300,0)-(3900,0)
Form1.picA.Line(-100,370)-(0,400)
Form1.picA.Line-(100,370)
Form1.picA.Line(3800,-20)-(3900,0)
Form1.picA.Line-(3800,20)
Form1.picA.DrawStyle=2
Fori=450To3600Step450
Form1.picA.Line(i,-320)-(i,320)
Form1.picA.CurrentX=i-450:
Form1.picA.CurrentY=-10:
Form1.picA.Printi/10
Nexti
Fori=-320To320Step80
Form1.picA.Line(0,i)-(3600,i)
Form1.picA.CurrentX=-450:
Form1.picA.CurrentY=i:
Form1.picA.Printi
Nexti
'类速度图像定义
Form1.picDsf.Scale(-200,150)-(200,-200)
Form1.picDsf.Line(0,-200)-(0,150)
Form1.picDsf.Line(-200,0)-(200,0)
Form1.picDsf.Line(-8,130)-(0,150)
Form1.picDsf.Line-(8,130)
Form1.picDsf.Line(190,-10)-(200,0)
Form1.picDsf.Line-(190,10)
Form1.picDsf.DrawStyle=2
Fori=-150To150Step50
Form1.picDsf.Line(i,-200)-(i,100)
Form1.picDsf.CurrentX=i-30:
Form1.picDsf.CurrentY=-5:
Form1.picDsf.Printi
Nexti
Fori=-200To100Step50
Ifi<>0Then
Form1.picDsf.Line(-150,i)-(150,i)
Form1.picDsf.CurrentX=-40:
Form1.picDsf.CurrentY=i:
Form1.picDsf.Printi
EndIf
Nexti
'凸轮轮廓图像定义
Form1.picT.Scale(-200,200)-(250,-250)
Form1.picT.Line(0,-240)-(0,200)
Form1.picT.Line(-200,0)-(250,0)
Form1.picT.Line(-10,190)-(0,200)
Form1.picT.Line-(10,190)
Form1.picT.Line(240,-8)-(250,0)
Form1.picT.Line-(240,8)
Form1.picT.DrawStyle=2
Fori=-180To240Step60
Form1.picT.Line(i,-240)-(i,180)
Form1.picT.CurrentX=i-20:
Form1.picT.CurrentY=-5:
Form1.picT.Printi
Nexti
Fori=-240To180Step60
Ifi<>0Then
Form1.picT.Line(-180,i)-(240,i)
Form1.picT.CurrentX=-50:
Form1.picT.CurrentY=i+20:
Form1.picT.Printi
EndIf
Nexti
EndSub
(2)运动分析模块
OptionExplicit
PublicpiAsDouble
Publica1AsDouble'升程运动角
Publica0AsDouble'升程许用压力角
PublichAsDouble'行程
Publicb1AsDouble'回程运动角
Publicb0AsDouble'回程许用压力角
Publics1AsDouble'远休止角
Publics2AsDouble'近休止角
PublicfAsDouble'转角
PublicwAsDouble'角速度
PublicSAsDouble'位移
PublicDsfAsDouble'类速度
PublicDDDsfAsDouble'类速度一阶导数
PublicVAsDouble'速度
PublicAAsDouble'加速度
PublicSS(3600)AsDouble'每点的位移
PublicDDsf(3600)AsDouble'每点的类速度
PublicDDDDsf(3600)AsDouble'每点的类速度的一阶导数
PublicVV(3600)AsDouble'每点的速度
PublicAA(3600)AsDouble'每点的加速度
PublicSubaction()
pi=3.1415926
Iff<=a1Then
SelectCaseForm1.cboS.Text
Case"等加等减速"
Iff<=a1/2Then
S=2*h*(f/a1)^2
Dsf=(4*h/a1^2)*f
DDDsf=4*h/a1^2
V=(4*h*w/a1^2)*f
A=4*h*w^2/a1^2
ElseIff>=a1/2Andf<=a1Then
S=h-(2*h/a1^2)*(a1-f)^2
Dsf=(4*h/a1^2)*(a1-f)
DDDsf=-4*h/a1^2
V=(4*h*w/a1^2)*(a1-f)
A=-4*h*w^2/a1^2
EndIf
Case"余弦加速度"
S=h*(1-Cos(pi*f/a1))/2
Dsf=(pi*h/(2*a1))*Sin(pi*f/a1)
DDDsf=(pi^2*h/(2*a1^2))*Sin(pi*f/a1)
V=(pi*h*w/(2*a1))*Sin(pi*f/a1)
A=(pi^2*h*w^2/(2*a1^2))*Cos(pi*f/a1)
Case"正弦加速度"
S=h*((f/a1)-(1/(2*pi))*Sin(2*pi*f/a1))
Dsf=h/a1-(h/a1)*Cos(2*pi*f/a1)
DDDsf=(2*pi*h/a1^2)*Sin(2*pi*f/a1)
V=(h*w/a1)*(1-Cos(2*pi*f/a1))
A=(2*pi*h*w^2/a1^2)*Sin(2*pi*f/a1)
Case"3-4-5多项式"
T=f/a1
S=h*(10*T^3-15*T^4+6*T^5)
Dsf=30*h*T^2/a1-60*h*T^3/a1+30*h*T^4/a1
DDDsf=60*h*T/(a1^2)-180*h*T^2/(a1^2)+120*h*T^3/(a1^2)
V=(30*h*w*T^2/a1)*(1-2*T+T^2)
A=(60*h*w^2*T/(a1^2))*(1-3*T+2*T^2)
EndSelect
ElseIff>=a1Andf<=a1+s1Then
S=h
Dsf=0
DDDsf=0
V=0
A=0
ElseIff>=a1+s1Andf<=a1+s1+b1Then
SelectCaseForm1.cboH.Text
Case"等加等减速"
Iff>=a1+s1Andf<=a1+s1+b1/2Then
S=h-(2*h/b1^2)*(f-(a1+s1))^2
Dsf=-(4*h/b1^2)*(f-(a1+s1))
DDDsf=-4*h/b1^2
V=-(4*h*w/b1^2)*(f-(a1+s1))
A=-4*h*w^2/b1^2
ElseIff>=a1+s1+b1/2Andf<=a1+s1+b1Then
S=(2*h/b1^2)*((a1+s1+b1)-f)^2
Dsf=-(4*h/b1^2)*((a1+s1+b1)-f)
DDDsf=4*h/b1^2
V=-(4*h*w/b1^2)*((a1+s1+b1)-f)
A=4*h*w^2/b1^2
EndIf
Case"余弦加速度"
S=h*(1+Cos(pi*(f-(a1+s1))/b1))/2
Dsf=-(pi*h/(2*b1))*Sin(pi*(f-(a1+s1))/b1)DDDsf=-(pi^2*h/(2*b1^2))*Cos(pi*(f-(a1+s1))/b1)
V=-(pi*h*w/(2*a1))*Sin(pi*(f-(a1+s1))/b1)
A=-(pi^2*h*w^2/(2*b1^2))*Cos(pi*(f-(a1+s1))/a1)
Case"正弦加速度"
S=h*(1-((f-(a1+s1))/b1)+(1/(2*pi))*Sin(2*pi*(f-(a1+s1))/b1))
Dsf=-h/