专栏名称: 面包板社区
面包板社区——中国第一电子人社交平台 面包板社区是Aspencore旗下媒体,整合了电子工程专辑、电子技术设计、国际电子商情丰富资源。社区包括论坛、博客、问答,拥有超过250万注册用户,加入面包板社区,从菜鸟变大神,打造您的电子人脉社交圈!
目录
相关文章推荐
高校人才网V  ·  南方科技大学2025年招聘启事 ·  昨天  
高校人才网V  ·  哈尔滨工程大学诚邀全球英才加盟! ·  3 天前  
51好读  ›  专栏  ›  面包板社区

步进电机高速启停换向的实现,丝滑~

面包板社区  · 公众号  ·  · 2024-04-23 20:00

正文


这个项目使用步进电机高速启停并换向。需要在尽可能短时间完成相应的圈数。常用的线性加速启停的时候有很大的噪声。需要做一点运动控制。达到加速度变化连续的效果。7段加减速控制策略分t1~t7 7个阶段,Am 为速度上升段最大加速度,An为速度下降段最大加速度。
可以得到如下加速度表达式


对应的速度可以用加速度对t积分求不定积分得到


显然Vm 为 t3时刻的速度,即

Vm = 1/2*Am*t1+Am*(t2-t1)+1/2*Am(t3-t2) = 1/2*Am*(t3+t2-t1)

由速度在t6

修改下降沿数据,可以发现急动度有所增加。
可以将t2-t1设置为0,得到5段变速控制。
另一种变通的方案是速度曲线使用升余弦。相对简单。似乎比线性加速度的控制策略效果更好。


依据前面分析的速度对称性,可得总距离 S

S = 1/2*Vm*Tr + Vm*Td + 1/2*Vm*Tf

使用 matlab 分析如下

intv = 5;
Tt = 500/intv; % TimeTottle ms
Tr = 200/intv;
Tf = 200/intv;
Td = Tt - Tr - Tf;
Ts = 37200/2; %tottle steps
t = 1:Tt;
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;
subplot(3,1,1)
plot(Vlist,'.')
title(['Vm = ' num2str(Vm) '/' num2str(Vm/16) 'pps' '/' num2str(Vm/16/200*60) 'rpm'])
grid on
Alist = Vlist - [0 Vlist(1:length(Vlist)-1)];
subplot(3,1,2)
plot(Alist,'.')
title(['Am = ' num2str(Am)]);
grid on
Jlist = Alist - [0 Alist(1:length(Alist)-1)];
subplot(3,1,3)
plot(Jlist,'.')
title('Jark');
grid on
for i=0:fix(length(Vlist)/10-1)
fprintf('%6d,',round(Vlist(i*10+1:i*10+10)));
fprintf('\n');
end
fprintf('%6d,',round(Vlist(i*10+11:length(Vlist))))

对于步进电机,其Vm取决于所需要的输出扭矩,可以设定Vm 反推出在不同控制策略下运行指定的距离需要的时间。

实际的运动控制相当于将速度曲线定时播放出来,控制电机的运行。

下面是依据电机和驱动器参参数实际经过优化后的步进电机高速启停换向演示,因拍摄采样率的问题,实际效果远比视频中丝滑。


作者:面包板社区博主 southcreek

社区话题






请到「今天看啥」查看全文