OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10287|回复: 13

自己做的一个步进电机控制程序,有s曲线加减速的下位机

[复制链接]

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2015-4-22
在线时间
14 小时
发表于 2016-4-22 13:32:02 | 显示全部楼层 |阅读模式
这个程序已经验证,是和上位机配合使用的;采用的是定时器中断中I/O口翻转,输出可控脉冲;另外加一个定时器做S曲线加减速采样点控制。本人小白第一次做,分享一下,知道自己的问题以及想要知道大家都是怎么做的呢,有没有更好的办法实现三轴(S曲线加减速)控制呢?

运动控制程序20160219.rar

5.31 MB, 下载次数: 22219

源码

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

64

帖子

3

精华

高级会员

Rank: 4

积分
768
金钱
768
注册时间
2014-3-11
在线时间
55 小时
发表于 2016-4-22 14:41:36 | 显示全部楼层
步进电机加减速控制主要在于两个点:
一、速度表的设计。
二、距离与速度表的对应(如果需要进行定长运行)

一、速度表的设计常见的方法就是:
1、梯形加减速,定长时间(dt)定长变速,变速的多少就是加速度了,这个应该好理解,最简单的加减速曲线就是这种了。
2、S加减速,y=C/(1+e^(a-bx))
3、matlab拟合

二、定长的控制关系到速度表与长度的一一对应关系,即什么时候加速,匀速多长的距离,预留多长的距离来进行减速,这个地方才是加减速控制的重点和难点
回复 支持 1 反对 0

使用道具 举报

6

主题

64

帖子

3

精华

高级会员

Rank: 4

积分
768
金钱
768
注册时间
2014-3-11
在线时间
55 小时
发表于 2016-4-22 14:43:14 | 显示全部楼层
不知道楼主设怎么设计的,看了一下源码,然而算法部分基本毫无注释,表示看着真费劲
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2015-4-22
在线时间
14 小时
 楼主| 发表于 2016-4-22 17:51:30 | 显示全部楼层
秋之前 发表于 2016-4-22 14:43
不知道楼主设怎么设计的,看了一下源码,然而算法部分基本毫无注释,表示看着真费劲

多谢提示...由于这个系统做的是速度和时间的s曲线,参数是加速度a、最大速度Vmax、最小速度、速度变化间隔时间dt,4个参数决定的,没有考虑路程,整个过程是传感器到位来定位的
[mw_shl_code=c,true]//生成速度数组,方便中断调用
void VarrayupMake()
{
        while(n*dt<=a&&n<=300)//最多纪录300次速度到速度表Varrayup[]
        {
                if((n*dt)>=0&&(n*dt)<=(a/2))//S曲线的前一半速度值纪录公式
                {
                        v=2*(VMAX-VMIN)/(a*a)*(n*dt*n*dt)+VMIN;
                }
                else if(n*dt<=a)//s曲线后一半速度纪录公式
                {
                        v=-2*(VMAX-VMIN)/(a*a)*(n*dt-a)*(n*dt-a)+VMAX;
                }
                Varrayup[n]=v;//纪录到速度表Varray[]中
                n++;
        }
}[/mw_shl_code]
回复 支持 反对

使用道具 举报

22

主题

180

帖子

1

精华

高级会员

Rank: 4

积分
616
金钱
616
注册时间
2015-6-29
在线时间
101 小时
发表于 2016-4-22 19:30:56 | 显示全部楼层
不知道什么样的应用才会用到S曲线加速呢,目前项目中顶多用个分段加速或者梯形加速,其实更多的是直接一个速度启动、运行、停,哈哈
我是菜鸟
回复 支持 反对

使用道具 举报

7

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2015-11-18
在线时间
9 小时
发表于 2016-7-9 16:48:36 | 显示全部楼层
有没有用到logistic函数模型啊?
回复 支持 反对

使用道具 举报

7

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2015-11-18
在线时间
9 小时
发表于 2016-7-9 16:51:01 | 显示全部楼层
秋之前 发表于 2016-4-22 14:41
步进电机加减速控制主要在于两个点:
一、速度表的设计。
二、距离与速度表的对应(如果需要进行定长运行) ...

能不能举个S加减速例子,不知道那公式怎么用起来
回复 支持 反对

使用道具 举报

3

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-10
在线时间
11 小时
发表于 2016-12-15 17:18:46 | 显示全部楼层
还是要问下,速度能上到多少,机架会不会咣咣想
有没有用正反转测试过振动呢
回复 支持 反对

使用道具 举报

3

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-10
在线时间
11 小时
发表于 2016-12-15 17:21:14 | 显示全部楼层
负西弱 发表于 2016-4-22 19:30
不知道什么样的应用才会用到S曲线加速呢,目前项目中顶多用个分段加速或者梯形加速,其实更多的是直接一个 ...

稍微速度高一点的应用都要用到速度的升降啊
能直接启动到运行速度的话,估计不会超过5K的脉冲频率。
大致也就是30-50mm/S的速度
回复 支持 反对

使用道具 举报

10

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
602
金钱
602
注册时间
2015-7-11
在线时间
94 小时
发表于 2016-12-20 12:21:33 | 显示全部楼层
谢谢,学习一下
回复 支持 反对

使用道具 举报

3

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-10
在线时间
11 小时
发表于 2016-12-26 17:55:27 | 显示全部楼层
秋之前 发表于 2016-4-22 14:41
步进电机加减速控制主要在于两个点:
一、速度表的设计。
二、距离与速度表的对应(如果需要进行定长运行) ...

怎么现在一讲S型速度曲线就要搞速度表呢?
如果速度需要比较大的话,那这个表得搞到多大啊

另外,y=C/(1+e^(a-bx)) 这个形式的S曲线也不知道是哪个先想出来的。
不知道有没有做的参数比较好的,可以跑到比较高的速度的

倒是第二点,在给定运动距离的前提下,计算能达到的最大速度值确实是难点啊
这个有没有什么好方法啊。
回复 支持 反对

使用道具 举报

6

主题

64

帖子

3

精华

高级会员

Rank: 4

积分
768
金钱
768
注册时间
2014-3-11
在线时间
55 小时
发表于 2016-12-27 08:34:46 | 显示全部楼层
jplzl10000 发表于 2016-12-26 17:55
怎么现在一讲S型速度曲线就要搞速度表呢?
如果速度需要比较大的话,那这个表得搞到多大啊

1、所谓的速度表本来就是将连续的变化曲线进行离散化,然后取若干特征点的速度做成一个速度表,如果特征点太多了就不实用了。
2、y=C/(1+e^(a-bx))这个函数,学过高等数学和自动控制原理的对这个函数应该不会太陌生,具体是怎么来的我也忘了,只知道这两本书中有类似的函数。
3、定长控制本来就很不好弄,特别是减速的时候容易出现偏差,导致减速很不理想,我之前的做法是将速度和加速度控制在一定的范围,对不理想的时候做一些补偿
回复 支持 反对

使用道具 举报

3

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-10
在线时间
11 小时
发表于 2016-12-28 17:16:33 | 显示全部楼层
秋之前 发表于 2016-12-27 08:34
1、所谓的速度表本来就是将连续的变化曲线进行离散化,然后取若干特征点的速度做成一个速度表,如果特征 ...

个人觉的,事先建表这种方法只适合于低脉冲频率的应用,比如20K以下的
但真正实际应用的话,那上到100K也是经常的啊,那这个表是没法建的。
建表也需要花时间和存储空间的。
然后,y=C/(1+e^(a-bx))这个特征函数也不知道是谁想出来的,有哪个理论说电机的矩频特性或速度特性是这样的一个S么?按百度里面的说法,这只是说是个logistic型的,也就是把值限定在[0,1]区间内而以,实际用在电机速度上的话,就会发现,这个函数的参数很不好确定

定长控制其实也是最正宗最实际的应用吧。没有哪个应用会是按照事先设计的电机速度和距离运行的。都是先设定实际的距离,然后速度是按照应用和经验来设定。
所以,感觉电机的S型速度不是什么难点,在定长定距离和设定速度下求得合理的S型才是难点啊
都不知道有什么方法可以确定S型速度下的运行距离
回复 支持 反对

使用道具 举报

6

主题

64

帖子

3

精华

高级会员

Rank: 4

积分
768
金钱
768
注册时间
2014-3-11
在线时间
55 小时
发表于 2016-12-29 08:37:42 | 显示全部楼层
jplzl10000 发表于 2016-12-28 17:16
个人觉的,事先建表这种方法只适合于低脉冲频率的应用,比如20K以下的
但真正实际应用的话,那上到100K ...

y=C/(1+e^(a-bx))这个函数通过调整参数可以拟合出S曲线,我以前调试云台的时候用matlab模拟的时候就是用的这个曲线函数,至于这个函数怎么分析的我也不记得了,毕竟1年多再也没接触过电机控制了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-28 03:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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