搜索
bottom↓
回复: 132

C#重写了“步进电机S曲线加速数据计算小软件”

  [复制链接]

出0入58汤圆

发表于 2016-4-5 15:48:23 | 显示全部楼层 |阅读模式
最近要做一个步进电机控制的小项目,研究了一下coleyao网友的“步进电机S曲线加速数据计算小软件”。基于学习的目的用C#重写了一遍,发到论坛上大家一起学习。

功能和coleyao网友发出来的第一版源代码一模一样,只是coleyao后来改进的分阶段加速没有说明是怎么实现的,所以就不包括在里面了。

另外我还加了一个“数据分析”的功能,就是分析逻辑分析仪捕捉到的PWM波形的实际加减速曲线,目前支持logic逻辑分析仪导出来的单路信号(帖子底部附件有示例文件)。

顺便把自己写的一个51单片机的程序分享一下(见帖子底部附件)。











程序文件:

源代码(VS2013编译 github地址:https://github.com/buxiaoyang/StepperMotorSCurve):

逻辑分析仪导出测试数据:

51代码:

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入58汤圆

 楼主| 发表于 2016-4-5 15:49:17 | 显示全部楼层
忘了coleyao大神的原帖地址:  http://www.amobbs.com/thread-5492742-1-1.html

出0入0汤圆

发表于 2016-4-5 16:23:15 | 显示全部楼层
支持分享

出0入0汤圆

发表于 2016-4-5 16:24:31 | 显示全部楼层

谢谢楼主。。。。。

出0入0汤圆

发表于 2016-4-5 16:30:27 | 显示全部楼层
谢谢啦,用到再下,标记

出0入0汤圆

发表于 2016-4-5 16:54:28 | 显示全部楼层
这个值得搜藏一下。。。

出0入76汤圆

发表于 2016-4-5 17:27:05 | 显示全部楼层
不错,给你赞一个

出0入0汤圆

发表于 2016-4-5 17:27:17 | 显示全部楼层
mark,谢谢楼主

出0入0汤圆

发表于 2016-4-5 18:59:56 | 显示全部楼层
不错,以后看下能否用到

出0入0汤圆

发表于 2016-4-5 20:02:52 | 显示全部楼层
用PID来吧~这种加速方式感觉有点过时了~

出0入0汤圆

发表于 2016-4-5 20:05:26 来自手机 | 显示全部楼层
myqiang1990 发表于 2016-4-5 20:02
用PID来吧~这种加速方式感觉有点过时了~

你分享点劲的上来:)

出0入0汤圆

发表于 2016-4-5 22:43:07 | 显示全部楼层
厉害,我们公司用的都是一个比例就搞定了

出0入58汤圆

 楼主| 发表于 2016-4-5 23:07:40 | 显示全部楼层
myqiang1990 发表于 2016-4-5 20:02
用PID来吧~这种加速方式感觉有点过时了~

PID太高深了,业余选手表示看不懂。

出0入0汤圆

发表于 2016-4-6 07:57:06 来自手机 | 显示全部楼层
赞一个,终于搞懂怎么做的了

出0入0汤圆

发表于 2016-4-6 08:33:33 | 显示全部楼层
感谢分享了

出100入101汤圆

发表于 2016-4-6 12:44:24 | 显示全部楼层
LZ也是大神!

出0入0汤圆

发表于 2016-4-6 13:11:11 | 显示全部楼层
大力支持

出0入0汤圆

发表于 2016-4-6 13:43:56 | 显示全部楼层
步进电机为什么不细分的温度会比有细分的高?

驱动频率高的也会比驱动频率低的高?

出0入90汤圆

发表于 2016-4-6 13:46:17 | 显示全部楼层
做的挺棒的啊,支持一下

出0入58汤圆

 楼主| 发表于 2016-4-6 14:35:43 | 显示全部楼层
touch_mcu 发表于 2016-4-6 13:43
步进电机为什么不细分的温度会比有细分的高?

驱动频率高的也会比驱动频率低的高? ...

不懂,我是业余选手。只知道怎么写程序。其他坛友说不定有答案。

出0入0汤圆

发表于 2016-4-7 08:20:50 | 显示全部楼层
不错。谢谢分享

出0入0汤圆

发表于 2016-4-7 08:23:17 | 显示全部楼层
myqiang1990 发表于 2016-4-5 20:02
用PID来吧~这种加速方式感觉有点过时了~

能不能简单的讲下?有时核心只要几个字就行了

出0入0汤圆

发表于 2016-4-7 08:51:57 | 显示全部楼层
shawn_bu 发表于 2016-4-6 14:35
不懂,我是业余选手。只知道怎么写程序。其他坛友说不定有答案。

还没有下载,好象没看到公式啊? 公式推导才是最重要的啊;
PS: 你是否使用这个加速表,做过实际步进的控制,效果如何呢?

出0入58汤圆

 楼主| 发表于 2016-4-7 08:56:02 | 显示全部楼层
kinsno 发表于 2016-4-7 08:51
还没有下载,好象没看到公式啊? 公式推导才是最重要的啊;
PS: 你是否使用这个加速表,做过实际步进的控制, ...

附件里面有演示用的51程序,我正在用这个做项目。目前一切顺利。查看源代码就知道计算公式是什么了。

出0入0汤圆

发表于 2016-4-7 08:59:59 | 显示全部楼层
shawn_bu 发表于 2016-4-7 08:56
附件里面有演示用的51程序,我正在用这个做项目。目前一切顺利。查看源代码就知道计算公式是什么了。 ...


你的个人小站不错啊?
是自己搭的网站吗? 能下载到这个wordpress后台网站源码不?还是你自己写的啊; 我也想搭建一个自己的个人网站;

出0入58汤圆

 楼主| 发表于 2016-4-7 11:03:06 | 显示全部楼层
kinsno 发表于 2016-4-7 08:59
你的个人小站不错啊?
是自己搭的网站吗? 能下载到这个wordpress后台网站源码不?还是你自己写的啊; 我也 ...

不是我自己写的,直接用了wordpress,源码在https://wordpress.org/  。安装之后选了一个主题自己修改了一下。

出0入0汤圆

发表于 2016-4-7 16:46:29 | 显示全部楼层
最近正在学习这方面知识,楼主给力!!

出0入0汤圆

发表于 2016-4-7 21:23:35 | 显示全部楼层
touch_mcu 发表于 2016-4-6 13:43
步进电机为什么不细分的温度会比有细分的高?

驱动频率高的也会比驱动频率低的高? ...


不细分的时候,电机可以获得更大的电流,所以电机温度会较高。
细分最重要的作用之一是使动作平滑(特别是低速的时候),细分以后,电机力会变小(特别是高速的情况下)。

出0入0汤圆

发表于 2016-4-7 23:19:32 来自手机 | 显示全部楼层
哈哈哈哈

出0入4汤圆

发表于 2016-4-8 16:58:32 | 显示全部楼层
赚积分,赶快重回高级进水坛

出0入4汤圆

发表于 2016-4-8 16:59:01 | 显示全部楼层
赚积分,赶快重回高级进水坛

出0入58汤圆

 楼主| 发表于 2016-4-8 17:17:16 | 显示全部楼层
gagmeng 发表于 2016-4-8 16:59
赚积分,赶快重回高级进水坛

哥,不带同时发两个相同帖子的。

出0入4汤圆

发表于 2016-4-8 17:25:11 | 显示全部楼层
想赚积分的心太迫切了

出0入12汤圆

发表于 2016-4-8 18:07:23 | 显示全部楼层
gagmeng 发表于 2016-4-8 17:25
想赚积分的心太迫切了

咱能含蓄点吗

出0入12汤圆

发表于 2016-4-8 18:08:05 | 显示全部楼层
gagmeng 发表于 2016-4-8 16:59
赚积分,赶快重回高级进水坛

你这是赤裸裸的

出0入0汤圆

发表于 2016-4-8 18:22:10 来自手机 | 显示全部楼层
gagmeng 发表于 2016-4-8 17:25
想赚积分的心太迫切了

好吃要赞,好帖要顶
哥们你能不能像我这样含蓄点

出0入0汤圆

发表于 2016-4-8 20:19:32 来自手机 | 显示全部楼层
停厉害的  最近才在学c# 感觉自己算法是硬伤

出0入58汤圆

 楼主| 发表于 2016-4-8 21:46:45 | 显示全部楼层
米南费岛 发表于 2016-4-8 20:19
停厉害的  最近才在学c# 感觉自己算法是硬伤

我也是算法菜鸟,去年有机会面试微软,一面算法让算最大差值问题。挂了。麻痹。。。。

出0入0汤圆

发表于 2016-4-11 13:51:56 | 显示全部楼层
参考下数据输出和画图部分,谢谢

出0入0汤圆

发表于 2016-4-19 21:27:41 来自手机 | 显示全部楼层
请问楼主,要是步进电机运行的步数小于S曲线的步数该怎么办啊?

出0入0汤圆

发表于 2016-4-20 11:04:08 | 显示全部楼层
支持分享

出0入58汤圆

 楼主| 发表于 2016-4-20 17:12:01 | 显示全部楼层
linianzhenzi 发表于 2016-4-19 21:27
请问楼主,要是步进电机运行的步数小于S曲线的步数该怎么办啊?


那就是没到最大速度就要减速啦。一半加速一半减速,没有匀速的过程。

出0入0汤圆

发表于 2016-4-20 20:01:59 | 显示全部楼层
mark,DOWNLOAD,THANKS

出0入0汤圆

发表于 2016-4-25 16:30:22 | 显示全部楼层
好东西好东西

出0入0汤圆

发表于 2016-4-26 10:48:51 | 显示全部楼层
谢谢楼主。

出0入0汤圆

发表于 2016-4-27 10:49:16 | 显示全部楼层
支持分享

出20入62汤圆

发表于 2016-4-27 10:57:47 | 显示全部楼层
这个牛x啊,mark一下  晚上下班回去下载好好学习一下~~~谢谢啊~

出0入0汤圆

发表于 2016-4-27 11:14:17 | 显示全部楼层
好东西,感谢分享

出0入0汤圆

发表于 2016-4-27 12:45:12 | 显示全部楼层
你敢信,我是来学习取经C#的;

出200入657汤圆

发表于 2016-4-27 20:05:30 | 显示全部楼层
感谢!!
我是来学习C#的,感觉这些个控件用的很漂亮,基本没什么问题,值得好好研究

出0入42汤圆

发表于 2016-5-16 10:21:08 | 显示全部楼层
十分不错  谢谢  学习看看  业余时间 也搞搞板子  

出0入0汤圆

发表于 2016-5-16 12:27:13 | 显示全部楼层
谢楼主!收藏C#重写了“步进电机S曲线加速数据计算小软件”

出0入0汤圆

发表于 2016-5-16 15:05:49 | 显示全部楼层
楼主有没有研究可以实时计算S曲线加速的情况,实际可能达到的速度不是固定的是有变化。

出0入58汤圆

 楼主| 发表于 2016-5-17 08:27:14 | 显示全部楼层
996512682 发表于 2016-5-16 15:05
楼主有没有研究可以实时计算S曲线加速的情况,实际可能达到的速度不是固定的是有变化。 ...

没有实时计算过。我做的只是简单应用。

出0入0汤圆

发表于 2016-7-4 08:59:26 | 显示全部楼层
代码中的timerStep[259]就是PWM的周期变化量吧?

出0入0汤圆

发表于 2016-7-4 09:22:12 | 显示全部楼层
不错 谢谢分享

出0入0汤圆

发表于 2016-7-4 09:29:10 | 显示全部楼层
本帖最后由 kinsno 于 2016-7-4 09:56 编辑
shawn_bu 发表于 2016-5-17 08:27
没有实时计算过。我做的只是简单应用。


你的画图软件是用啥控件啊? 还是GDI+的呢?
PS: 我是VS2010,打不开你的VS2013;
PS2: 已经搞定,直拉把代码放在2010下面编译即可。。。



出0入0汤圆

发表于 2016-7-4 09:51:43 | 显示全部楼层
  改得很好,其实我也有过出安卓版或其它版本工具软件的想法,只是现在年纪大了,在单位改占用工作时间不好意思,回家了老婆不让碰电脑,也没啥时间,倒是让楼主赶到了前面,有机会别忘了出个安卓版的

出0入58汤圆

 楼主| 发表于 2016-7-4 13:06:17 | 显示全部楼层
kinsno 发表于 2016-7-4 09:29
你的画图软件是用啥控件啊? 还是GDI+的呢?
PS: 我是VS2010,打不开你的VS2013;
PS2: 已经搞定,直拉把代码 ...

低版本的没法直接打开高版本的工程。

出0入58汤圆

 楼主| 发表于 2016-7-4 13:07:00 | 显示全部楼层
coleyao 发表于 2016-7-4 09:51
改得很好,其实我也有过出安卓版或其它版本工具软件的想法,只是现在年纪大了,在单位改占用工作时间不好 ...

大神你好,终于看到你了。

出0入0汤圆

发表于 2016-7-4 13:32:49 | 显示全部楼层
shawn_bu 发表于 2016-7-4 13:07
大神你好,终于看到你了。

  小兵一个,最近单位不景气,上个月工资还没发,不知道会拖到啥时候,之前拖得久的时候会拖两个月,正准备找工作呢,周末看了一家,民营的,一周六天,我这边有点头大,人家还不一定瞧得上我呢!

出0入0汤圆

发表于 2016-7-4 18:59:49 | 显示全部楼层
高手啊,

出0入0汤圆

发表于 2016-7-4 19:03:08 | 显示全部楼层
请问老大,用的什么驱动IC

出0入0汤圆

发表于 2016-7-4 20:32:55 | 显示全部楼层
感谢楼主的分享收藏了

出0入0汤圆

发表于 2016-7-4 21:21:48 | 显示全部楼层
不错!拜读了
1

出0入8汤圆

发表于 2016-7-4 22:06:36 | 显示全部楼层
多谢分享

出0入0汤圆

发表于 2016-7-5 05:18:21 | 显示全部楼层
不错正好需要

出0入0汤圆

发表于 2016-7-5 14:20:25 | 显示全部楼层
是否可以提供出51例程中的数组,在软件中生成时使用的各项参数。

出0入0汤圆

发表于 2016-7-7 11:16:21 | 显示全部楼层
好东西,多谢了。

出0入16汤圆

发表于 2016-7-7 12:04:07 | 显示全部楼层
C# 不错,代码可以参考学习下

出0入0汤圆

发表于 2016-7-7 12:38:47 | 显示全部楼层
不错,给你赞一个

出0入0汤圆

发表于 2016-8-22 08:35:13 | 显示全部楼层
谢谢分享~

出0入0汤圆

发表于 2016-8-22 23:47:46 | 显示全部楼层
顶                 

出20入62汤圆

发表于 2016-8-23 00:02:18 | 显示全部楼层
楼主太帅气了~

出0入0汤圆

发表于 2016-8-23 15:56:54 | 显示全部楼层
zwcled 发表于 2016-7-4 19:03
请问老大,用的什么驱动IC

我们有国产步进驱动ic.256细分.需要资料加995971182

出0入0汤圆

发表于 2016-8-23 22:12:50 | 显示全部楼层
马克一下,用到的时候学习

出50入0汤圆

发表于 2016-8-23 23:53:58 来自手机 | 显示全部楼层
马克,学习了!!

出0入0汤圆

发表于 2016-8-24 18:19:08 | 显示全部楼层

谢谢分享~

出0入0汤圆

发表于 2016-9-29 22:46:35 | 显示全部楼层
Mark,谢谢分享

出0入0汤圆

发表于 2016-12-8 14:00:36 | 显示全部楼层
不错,将大神后面输出数据PWM周期改成了机器周期。更加直观

出0入0汤圆

发表于 2017-4-8 14:01:23 | 显示全部楼层
楼主讲讲,51例程中的数组【259】怎么生成的,谢谢

出0入0汤圆

发表于 2017-7-12 20:39:37 | 显示全部楼层
今天用了一下楼主的小工具,发现当我因负载重需要用的加速时间太长时,会出现报错,下载了源码来看,猜测是因为楼主设定了加速的最大步数为10000步导致,请教一下,是否是这个原因,另外由于没怎么看太多代码,没敢乱修改,想请楼主知悉,并看能不能顺便请楼主升级一下把1万步加速提高几倍

出0入58汤圆

 楼主| 发表于 2017-7-13 09:28:10 | 显示全部楼层
xuxueliang 发表于 2017-7-12 20:39
今天用了一下楼主的小工具,发现当我因负载重需要用的加速时间太长时,会出现报错,下载了源码来看,猜测是 ...

改成了最大90000步,你试试。如果还不够自己可以修改。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2017-7-13 10:13:16 | 显示全部楼层
shawn_bu 发表于 2017-7-13 09:28
改成了最大90000步,你试试。如果还不够自己可以修改。

兄弟回复真迅速,非常感谢。
这下我也能知道你的魔法数字10000到底跟那几个地方相关了

出0入0汤圆

发表于 2017-7-13 14:18:49 | 显示全部楼层
步进电机参考  多谢楼主

出0入0汤圆

发表于 2017-7-13 22:21:16 | 显示全部楼层
感谢分享

出0入0汤圆

发表于 2017-7-14 13:18:10 来自手机 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2017-8-13 23:47:43 | 显示全部楼层
你好,我看了你的上位机,写的不错。遇到一个问题,要实现读取csv里的文件,数据的23.12345   小数点后有5位,
            private int g_r_set_speed = 0;
            string[] lines = File.ReadAllLines(dataAnalyseFilePath);
            string[] columns = lines[1].Split(',');
            columns = lines[1].Split(',');
            g_r_set_speed = Convert.ToInt32(columns[0], 10);   // 读取23.12345过后,会提示数据类型不对,但是不知道怎么处理,我要读取小数点后5位的数字,怎样做才比较好。

我想读取一个小数点后面5位的数字,放入一个变量用,用来做运算

出0入58汤圆

 楼主| 发表于 2017-8-14 08:06:20 | 显示全部楼层
霸气侧漏 发表于 2017-8-13 23:47
你好,我看了你的上位机,写的不错。遇到一个问题,要实现读取csv里的文件,数据的23.12345   小数点后有5 ...

你都Convert.ToInt32了,小数都不见啦。

如果columns[0]是格式如23.12345的数字的话。

string decimal = columns[0].Substring(columns[0].IndexOf(".")+1); 就是“12345”了,不过是string,你再处理成你需要的数据类型就行了。

或者参考这个帖子https://stackoverflow.com/questi ... -part-from-a-double
var floatNumber = 12.5523;
var x = floatNumber - Math.Truncate(floatNumber);


直接数值处理得到小数,不过需要float.Parse先把columns[0]转成float类型。

出0入58汤圆

 楼主| 发表于 2017-8-14 08:12:49 | 显示全部楼层
霸气侧漏 发表于 2017-8-13 23:47
你好,我看了你的上位机,写的不错。遇到一个问题,要实现读取csv里的文件,数据的23.12345   小数点后有5 ...


你的程序还得注意,一般csv的第一行是标题,并不会是你需要的数据格式。

所以需要查看一下原csv文件判断是否需要跳过标题行从第二行开始。

还有代码重复了,做了两次split操作,虽然不影响结果。
string[] columns = lines[1].Split(',');
            columns = lines[1].Split(',');

出0入0汤圆

发表于 2017-8-14 08:17:18 来自手机 | 显示全部楼层
非常感谢,我来试试

出0入0汤圆

发表于 2017-8-14 09:32:55 | 显示全部楼层
shawn_bu 发表于 2017-8-14 08:06
你都Convert.ToInt32了,小数都不见啦。

如果columns[0]是格式如23.12345的数字的话。

string data = columns[0].Substring(columns[0].IndexOf(".") + 1);
这个方法挺好的,这样就能得到小数位,还有一个问题,怎么才能得到整数部分,

g_r_set_speed = Convert.ToInt32(columns[0], 10);这样会报错,因为columns[0]是浮点数。尴尬

出0入58汤圆

 楼主| 发表于 2017-8-14 09:42:20 | 显示全部楼层
霸气侧漏 发表于 2017-8-14 09:32
string data = columns[0].Substring(columns[0].IndexOf(".") + 1);
这个方法挺好的,这样就能得到小数 ...

整数部分是 columns[0].Substring(0, columns[0].IndexOf("."));
columns[0]中必须有.字符,如果有可能没有,需要加判断columns[0].IndexOf(".")>-1 才能做这个操作,不然会报System.ArgumentOutOfRangeException。

出0入0汤圆

发表于 2017-8-14 09:50:41 | 显示全部楼层
谢谢,对了你是怎么知道这样转换的,有没有什么帖子专门讲解这一章的。

出0入58汤圆

 楼主| 发表于 2017-8-14 09:53:49 | 显示全部楼层
霸气侧漏 发表于 2017-8-14 09:50
谢谢,对了你是怎么知道这样转换的,有没有什么帖子专门讲解这一章的。

这都是字符串处理的东西哈,你随便找本C#书或者网上教程看字符串处理函数就知道了。还有很多处理字符串的方法。

出0入0汤圆

发表于 2017-8-14 10:04:30 | 显示全部楼层
shawn_bu 发表于 2017-8-14 09:53
这都是字符串处理的东西哈,你随便找本C#书或者网上教程看字符串处理函数就知道了。还有很多处理字符串的 ...

好的,谢谢,我来找找

出0入0汤圆

发表于 2017-8-14 10:49:39 | 显示全部楼层
谢谢,这个搞定,能够读取小数和整数,哈哈

出0入58汤圆

 楼主| 发表于 2017-8-14 10:54:14 | 显示全部楼层
霸气侧漏 发表于 2017-8-14 10:49
谢谢,这个搞定,能够读取小数和整数,哈哈

不客气。祝贺祝贺。

出0入0汤圆

发表于 2017-9-19 22:54:09 | 显示全部楼层
shawn_bu 发表于 2016-4-5 23:07
PID太高深了,业余选手表示看不懂。

这个S曲线公式下去 很难去做运动控制,  你做到后面就懂了
PID  就不管那些复杂的运算    输入你的位置差    控制你的速度   或是加速度
也不用管  位置  时间  的关系  特别是位置算时间 特别耗时间.

比较关键的 三个量  时间 速度  加速度  位置         S曲线的思想 就是加速度不突变

出0入58汤圆

 楼主| 发表于 2017-9-19 23:25:48 | 显示全部楼层
wind2100 发表于 2017-9-19 22:54
这个S曲线公式下去 很难去做运动控制,  你做到后面就懂了
PID  就不管那些复杂的运算    输入你的位置差 ...

我只是做做简单的控制,让步进电机按照固定的间隔运动。这个实际产品发了很多套用了一年多貌似没出啥问题,运行状态良好。

如果做复杂控制这个应该是不行的。反正够用就好。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-15 08:01

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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