PLC论坛-全力打造可编程控制器专业技术论坛

 找回密码
 注册哦

QQ登录

只需一步,快速开始

微信扫码登录

查看: 83085|回复: 0

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

[复制链接]
发表于 2024-7-23 11:00:15 | 显示全部楼层 |阅读模式




这个项目使用步进电机高速启停并换向。需要在尽可能短时间完成相应的圈数。常用的线性加速启停的时候有很大的噪声。需要做一点运动控制。达到加速度变化连续的效果。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 msTr = 200/intv;Tf = 200/intv;Td = Tt - Tr - Tf;Ts = 37200/2; %tottle stepst = 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 onAlist = Vlist - [0 Vlist(1:length(Vlist)-1)];subplot(3,1,2)plot(Alist,'.')title(['Am = ' num2str(Am)]);grid onJlist = Alist - [0 Alist(1:length(Alist)-1)];subplot(3,1,3)plot(Jlist,'.')title('Jark');grid onfor i=0:fix(length(Vlist)/10-1)fprintf('%6d,',round(Vlist(i*10+1:i*10+10)));fprintf('\n');endfprintf('%6d,',round(Vlist(i*10+11:length(Vlist))))


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

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

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



video: https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_3427024882503041031


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册哦

本版积分规则

QQ|小黑屋|手机版|Archiver|PLC技术网-PLC论坛 ( 粤ICP备17165530号 )|网站地图

GMT+8, 2024-9-8 09:07 , Processed in 0.065759 second(s), 26 queries .

快速回复 返回顶部 返回列表