disp ' ******** 偏置移动从动件盘形凸轮设计 ********'
disp '已知条件:'
disp ' 凸轮作逆时针方向转动,从动件偏置在凸轮轴心的右边'
disp ' 从动件在推程作等加速/等减速运动,在回程作余弦加速度运动'
rb = 40;rt = 10;e = 15;h = 50;ft = 100;fs = 60;fh = 90;alp = 35;
fprintf (1,' 基圆半径 rb = %3.4f mm \n',rb)
fprintf (1,' 滚子半径 rt = %3.4f mm \n',rt)
fprintf (1,' 推杆偏距 e = %3.4f mm \n',e)
fprintf (1,' 推程升程 h = %3.4f mm \n',h)
fprintf (1,' 推程运动角 ft = %3.4f 度 \n',ft)
fprintf (1,' 远休止角 fs = %3.4f 度 \n',fs)
fprintf (1,' 回程运动角 fh = %3.4f 度 \n',fh)
fprintf (1,' 推程许用压力角 alp = %3.4f 度 \n',alp)
hd= pi / 180;du = 180 / pi;
se=sqrt( rb^2 - e^2 );
d1 = ft + fs;d2 = ft + fs + fh;
disp ' '
disp '计算过程和输出结果:'
disp ' 1- 计算凸轮理论轮廓的压力角和曲率半径'
disp ' 1-1 推程(等加速/等减速运动)'
s = zeros(ft);ds = zeros(ft);d2s = zeros(ft);
at = zeros(ft);atd = zeros(ft);pt = zeros(ft);
for f = 1 : ft
if f s(f)=2 * h * f ^ 2 / ft ^ 2;s = s(f);
ds(f)=4 * h * f * hd / (ft * hd) ^ 2;ds = ds(f);
d2s(f)=4 * h / (ft * hd) ^ 2;d2s = d2s(f);
else
s(f)=h - 2 * h * (ft - f) ^ 2 / ft ^ 2;s = s(f);
ds(f)=4 * h * (ft - f) * hd / (ft * hd) ^ 2;ds = ds(f);
d2s(f)=-4 * h / (ft * hd) ^ 2;d2s = d2s(f);
end
at(f)= atan(abs(ds - e) / (se + s));atd(f) = at(f) * du;
p1=((se + s ) ^ 2 + (ds - e) ^ 2) ^ 1.5;
p2= abs((se + s) * (d2s - se - s) - (ds - e) * (2 * ds - e));
pt(f)= p1 /p2;p = pt(f);
end
atm = 0;
for f = 1 : ft
if atd(f) > atm
atm = atd(f);
end
end
fprintf (1,' 最大压力角 atm = %3.4f 度\n',atm)
for f = 1 : ft
if abs(atd(f) - atm) < 0.1
ftm = f;break
end
end
fprintf (1,' 对应的位置角 ftm = %3.4f 度\n',ftm)
if atm > alp
fprintf (1,' * 凸轮推程压力角超过许用值,需要增大基圆!\n')
end
ptn = rb + h;
for f = 1 : ft
if pt(f) < ptn
ptn = pt(f);
end
end
fprintf (1,' 轮廓最小曲率半径 ptn = %3.4f mm\n',ptn)
for f = 1 : ft
if abs(pt(f) - ptn) < 0.1
ftn = f;break
end
end
fprintf (1,' 对应的位置角 ftn = %3.4f 度\n',ftn)
if ptn < rt + 5
fprintf (1,' * 凸轮推程轮廓曲率半径小于许用值,需要增大基圆或减小滚子!\n')
end
disp ' 1-2 回程(余弦加速度运动)'
s = zeros(fh);ds = zeros(fh);d2s = zeros(fh);
ah = zeros(fh);ahd = zeros(fh);ph = zeros(fh);
for f = d1 : d2
k = f - d1;
s(f) = .5 * h * (1 + cos(pi * k / fh)); s = s(f);
ds(f)=-.5 * pi * h * sin(pi * k / fh) / (fh * hd);ds = ds(f);
d2s(f)= -.5 * pi ^2 * h * cos(pi * k / fh)/(fh * hd) ^2;d2s = d2s(f);
ah(f)=atan(abs(ds + e) / (se + s));ahd(f) = ah(f) * du;
p1=((se + s ) ^ 2 + (ds - e) ^ 2) ^ 1.5;
p2= abs((se + s) * (d2s - se - s) - (ds - e) * (2 * ds - e));
ph(f)= p1 /p2;p = ph(f);
end
ahm = 0;
for f = d1 : d2
if ahd(f) > ahm;
ahm = ahd(f);
end
end
fprintf (1,' 最大压力角 ahm = %3.4f 度\n',ahm)
for f = d1 : d2
if abs(ahd(f)- ahm) < 0.1
fhm = f;break
end
end
fprintf (1,' 对应的位置角 fhm = %3.4f 度\n',fhm)
phn = rb + h;
for f = d1 : d2
if ph(f) < phn
phn = ph(f);
end
end
fprintf (1,' 轮廓最小曲率半径 phn = %3.4f mm\n',phn)
for f = d1 : d2
if abs(ph(f) - phn) < 0.1
fhn = f;break
end
end
fprintf (1,' 对应的位置角 fhn = %3.4f 度\n',fhn)
if phn < rt + 5
fprintf (1,' * 凸轮回程轮廓曲率半径小于许用值,需要增大基圆或减小滚子!\n')
end
disp ' 2- 计算凸轮理论廓线与实际廓线的直角坐标'
n = 360;
s = zeros(n);ds = zeros(n);r = zeros(n);rp = zeros(n);
x = zeros(n);y = zeros(n);dx = zeros(n);dy = zeros(n);
xx = zeros(n);yy = zeros(n);xp = zeros(n);yp = zeros(n);
xxp = zeros(n);yyp = zeros(n);
for f = 1 : n
if f s(f) = 2 * h * f ^ 2 / ft ^ 2; s = s(f);
ds(f) = 4 * h * f * hd / (ft * hd) ^ 2; ds = ds(f);
elseif f > ft/2 & f s(f) = h - 2 * h * (ft - f) ^ 2 / ft ^ 2; s = s(f);
ds(f) = 4 * h * (ft - f) * hd / (ft * hd) ^ 2; ds = ds(f);
elseif f > ft & f s = h;ds = 0;
elseif f > d1 & f k = f - d1;
s(f) = .5 * h * (1 + cos(pi * k / fh)); s = s(f);
ds(f)= -.5 * pi * h * sin(pi * k / fh) / (fh * hd); ds = ds(f);
elseif f > d2 & f s = 0;ds = 0;
end
xx(f) = (se + s) * sin(f * hd) + e * cos(f * hd); x = xx(f);
yy(f) = (se + s) * cos(f * hd) - e * sin(f * hd); y = yy(f);
dx(f) = (ds - e) * sin(f * hd) + (se + s) * cos(f * hd); dx = dx(f);
dy(f) = (ds - e) * cos(f * hd) - (se + s) * sin(f * hd); dy = dy(f);
xp(f) = x + rt * dy / sqrt(dx ^ 2 + dy ^ 2);xxp = xp(f);
yp(f) = y - rt * dx / sqrt(dx ^ 2 + dy ^ 2);yyp = yp(f);
r(f) = sqrt (x ^2 + y ^2 );
rp(f) = sqrt (xxp ^2 + yyp ^2 );
end
disp ' 2-1 推程(等加速/等减速运动)'
disp ' 凸轮转角 理论x 理论y 实际x 实际y'
for f = 10 : 10 :ft
nu = [f xx(f) yy(f) xp(f) yp(f)];
disp(nu)
end
disp ' 2-2 回程(余弦加速度运动)'
disp ' 凸轮转角 理论x 理论y 实际x 实际y'
for f = d1 : 10 : d2
nu = [f xx(f) yy(f) xp(f) yp(f)];
disp(nu)
end
disp ' 2-3 凸轮轮廓向径'
disp ' 凸轮转角 理论r 实际r'
for f = 10 : 10 : n
nu = [f r(f) rp(f)];
disp(nu)
end
disp '绘制凸轮的理论轮廓和实际轮廓:'
plot(xx,yy,'r-.') % 理论轮廓(红色,点划线)
axis ([-(rb+h-10) (rb+h+10) -(rb+h+10) (rb+rt+10)]) % 横轴和纵轴的下限和上限
axis equal % 横轴和纵轴的尺度比例相同
text(rb+h+3,0,'X') % 标注横轴
text(0,rb+rt+3,'Y') % 标注纵轴
text(-5,5,'O') % 标注直角坐标系原点
title('偏置移动从动件盘形凸轮设计') % 标注图形标题
hold on; % 保持图形
plot([-(rb+h) (rb+h)],[0 0],'k') % 横轴(黑色)
plot([0 0],[-(rb+h) (rb+rt)],'k') % 纵轴(黑色)
plot([e e],[0 (rb+rt)],'k--') % 初始偏置位置(黑色,虚线)
ct = linspace(0,2*pi); % 画圆的极角变化范围
plot(rb*cos(ct),rb*sin(ct),'g') % 基圆(绿色)
plot(e*cos(ct),e*sin(ct),'c--') % 偏距圆(蓝绿色,虚线)
plot(e + rt*cos(ct),se + rt*sin(ct),'y') % 滚子圆(黄色)
plot(xp,yp,'b') % 实际轮廓(蓝色)