这个项目使用步进电机高速启停并换向。需要在尽可能短时间完成相应的圈数。常用的线性加速启停的时候有很大的噪声。需要做一点运动控制。达到加速度变化连续的效果。7段加减速控制策略分t1~t7 7个阶段,Am 为速度上升段最大加速度,An为速度下降段最大加速度。
Vm = 1/2*Am*t1+Am*(t2-t1)+1/2*Am(t3-t2) = 1/2*Am*(t3+t2-t1)
另一种变通的方案是速度曲线使用升余弦。相对简单。似乎比线性加速度的控制策略效果更好。
S = 1/2*Vm*Tr + Vm*Td + 1/2*Vm*Tf
Tt = 500/intv; % TimeTottle ms
Ts = 37200/2; %tottle steps
Vm = Ts/(Td+Tr/2+Tf/2)*1000/intv;
Vlist = ones(1,length(t))*Vm;
Vlist(1:Tr) = (1-cos(pi/Tr*t(1:Tr)))/2*Vm;
Vlist(Tr+Td+1:Tr+Td+Tf)=(1+cos(pi/Tf*t(1:Tf)))/2*Vm;
title(['Vm = ' num2str(Vm) '/' num2str(Vm/16) 'pps' '/' num2str(Vm/16/200*60) 'rpm'])
Alist = Vlist - [0 Vlist(1:length(Vlist)-1)];
title(['Am = ' num2str(Am)]);
Jlist = Alist - [0 Alist(1:length(Alist)-1)];
for i=0:fix(length(Vlist)/10-1)
fprintf('%6d,',round(Vlist(i*10+1:i*10+10)));
fprintf('%6d,',round(Vlist(i*10+11:length(Vlist))))
对于步进电机,其Vm取决于所需要的输出扭矩,可以设定Vm 反推出在不同控制策略下运行指定的距离需要的时间。
实际的运动控制相当于将速度曲线定时播放出来,控制电机的运行。
下面是依据电机和驱动器参参数实际经过优化后的步进电机高速启停换向演示,因拍摄采样率的问题,实际效果远比视频中丝滑。
作者:面包板社区博主 southcreek