OpenEdv-开源电子网

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

多轴联动算法,多轴插补(加减速算法还没搞定)

[复制链接]

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
发表于 2015-10-8 17:01:24 | 显示全部楼层 |阅读模式
一直很喜欢玩数控系统,今天用STM32写了一个简单的多轴直线插补算法,(连续插补的加减速算法还未调试出来)。给大家参考。

方法是这样的:  先计算出理论要到达的坐标,然后用步进电机去逼近这个值。

由于资源不够(或者我的算法不好 ),输出的脉冲无法达到很快,不过插补精度比较高。

[mw_shl_code=c,true]//***************************************???????ú????/ s16 bujindianjizhixiangeijing(int64_t umx, int64_t umy, int64_t umz, int64_t speed)//mm/M { int64_t jueduijuli; if(speed > bujindianjizuidasudu * 60) { speed = bujindianjizuidasudu * 60; } yudingsudu = speed / 60; cankaomaichong = 0; yuanzuobiao[ 0 ] = jueduizuobiao[ 0 ]; yuanzuobiao[ 1 ] = jueduizuobiao[ 1 ]; yuanzuobiao[ 2 ] = jueduizuobiao[ 2 ]; umx -= jueduizuobiao[ 0 ]; umy -= jueduizuobiao[ 1 ]; umz -= jueduizuobiao[ 2 ]; jueduijuli =sqrt(umx*umx + umy*umy + umz*umz); zuidacankao = jueduijuli * 600 / (speed ); //?????à?????????ó?ù?è???±??:???????¨?±?÷???????±?? ?ò·??®???? //********************************************* yudingzuobiao[ 0 ] = umx; yudingzuobiao[ 1 ] = umy; yudingzuobiao[ 2 ] = umz; jiansu = 0; bujindianjiyunxing = 1;//???????ú???????? return 0; }[/mw_shl_code]

[mw_shl_code=c,true]void TIM4_IRQHandler(void) { if(cankaomaichong >= zuidacankao) { cankaomaichong = 0; bujindianjiyunxing = 0; yuanzuobiao[ 0 ] = jueduizuobiao[ 0 ]; yuanzuobiao[ 1 ] = jueduizuobiao[ 1 ]; yuanzuobiao[ 2 ] = jueduizuobiao[ 2 ]; } if(bujindianjiyunxing == 1) { cankaomaichong++; } //************************************************ jueduizuobiao[ 0 ] = cankaomaichong * yudingzuobiao[ 0 ] / zuidacankao + yuanzuobiao[ 0 ]; jueduizuobiao[ 1 ] = cankaomaichong * yudingzuobiao[ 1 ] / zuidacankao + yuanzuobiao[ 1 ]; jueduizuobiao[ 2 ] = cankaomaichong * yudingzuobiao[ 2 ] / zuidacankao + yuanzuobiao[ 2 ]; //************************************************************************************** yudingmaichong[ 0 ] = jueduizuobiao[ 0 ] * bujindianji1yimmbujinshu / 1000; //yudingmaichong[ 1 ] = jueduizuobiao[ 1 ] * bujindianji1yimmbujinshu / 1000; //yudingmaichong[ 2 ] = jueduizuobiao[ 2 ] * bujindianji1yimmbujinshu / 1000; //************************************************************************************** if(jueduimaichong[ 0 ] < yudingmaichong[ 0 ]) { if(bujindianji1fangxiangyinjiao != bujindianji1zhengzhuan) { bujindianji1fangxiangyinjiao = bujindianji1zhengzhuan; }else { bujindianji1maichongyinjiao =! bujindianji1maichongyinjiao; jueduimaichong[ 0 ]++; } } if(jueduimaichong[ 0 ] > yudingmaichong[ 0 ]) { if(bujindianji1fangxiangyinjiao != bujindianji1fanzhuan) { bujindianji1fangxiangyinjiao = bujindianji1fanzhuan; }else { bujindianji1maichongyinjiao =! bujindianji1maichongyinjiao; jueduimaichong[ 0 ]--; } } //************************************************************************************** if(zuidacankao <= (cankaomaichong + jiasudujishi)) { //jiansu = 1; } //************************************************************************************** tim[ 1 ]++; TIM_ClearFlag(TIM4, TIM_FLAG_Update);//??TIMx??????? TIM_ClearITPendingBit(TIM4, TIM_IT_Update);//????TIMx???????????í?? }[/mw_shl_code]


wsnstm20151007步进电机多轴插补.rar

27.39 MB, 下载次数: 39947

为了雅典娜?为了爱与正义
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

130

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1878
金钱
1878
注册时间
2011-9-16
在线时间
421 小时
发表于 2015-10-10 17:56:30 | 显示全部楼层
这代码,太有才了,外国人绝对看不懂
回复 支持 2 反对 0

使用道具 举报

55

主题

243

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1608
金钱
1608
注册时间
2012-12-30
在线时间
241 小时
发表于 2015-10-8 17:21:41 | 显示全部楼层
好东西啊  必须顶  一直想搞的方向  先收下了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-10-8 22:57:04 | 显示全部楼层
谢谢分享....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-10-12 18:01:05 | 显示全部楼层
好强,好霸气啊,不愧是中国的程序员。全用拼音来定义变量。^_^
原子哥是不是又要出黑科技了呀。^_^...
回复 支持 反对

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
 楼主| 发表于 2015-10-19 18:33:07 | 显示全部楼层
回复【4楼】mackyming:
---------------------------------
英文太烂
为了雅典娜?为了爱与正义
回复 支持 反对

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
 楼主| 发表于 2015-10-19 18:33:46 | 显示全部楼层
回复【5楼】fanghuiopenedv:
---------------------------------
没办法,我也不想用拼音,编译器不支持中文定义变量啊!!
为了雅典娜?为了爱与正义
回复 支持 反对

使用道具 举报

49

主题

341

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5265
金钱
5265
注册时间
2012-8-25
在线时间
1025 小时
发表于 2015-12-8 16:34:01 | 显示全部楼层
jueduijuli =sqrt(umx*umx + umy*umy + umz*umz);
如果用定时计算,会导致频率过高,应该用脉冲最大点轴,换算速度,
回复 支持 反对

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
 楼主| 发表于 2015-12-11 13:12:12 | 显示全部楼层
回复【8楼】gotofly21:
---------------------------------
只是随便写了个直线插补算法了,因为我觉得这个算法比较简单易懂,做产品这样的算法肯定不行的
为了雅典娜?为了爱与正义
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-6-12
在线时间
0 小时
发表于 2016-6-12 22:48:42 | 显示全部楼层
你好,请问您关于带加减速的插补实现了吗?
回复 支持 反对

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
 楼主| 发表于 2016-7-19 17:12:29 | 显示全部楼层
酒是故乡醇 发表于 2016-6-12 22:48
你好,请问您关于带加减速的插补实现了吗?

最近没搞这个
为了雅典娜?为了爱与正义
回复 支持 反对

使用道具 举报

25

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2015-5-2
在线时间
59 小时
发表于 2016-11-12 17:19:01 | 显示全部楼层
顶一个,目前做一个数控的项目,也是用到差补算法
回复 支持 反对

使用道具 举报

3

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-10
在线时间
11 小时
发表于 2016-12-19 09:50:25 | 显示全部楼层
没有加减速的插补?
感觉就不应该把联动叫做插补啊
插补都是机床上的叫法,和多轴联动应该有本质的区别
回复 支持 反对

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
 楼主| 发表于 2016-12-20 11:11:20 | 显示全部楼层
jplzl10000 发表于 2016-12-19 09:50
没有加减速的插补?
感觉就不应该把联动叫做插补啊
插补都是机床上的叫法,和多轴联动应该有本质的区别

以你的理解,解释一下插补和联动的关系
为了雅典娜?为了爱与正义
回复 支持 反对

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
 楼主| 发表于 2016-12-20 11:12:43 | 显示全部楼层
wsnfly 发表于 2016-12-20 11:11
以你的理解,解释一下插补和联动的关系

目前多轴联动和加减速已经搞定,但是高精度的插补还没实现
为了雅典娜?为了爱与正义
回复 支持 反对

使用道具 举报

3

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-10
在线时间
11 小时
发表于 2016-12-26 17:46:51 | 显示全部楼层
wsnfly 发表于 2016-12-20 11:11
以你的理解,解释一下插补和联动的关系

联动应该是指一个或多个辅助轴以一个主轴为参考进行运动
而通常以主轴为参考的驱动多是以插补这种形式进行的
是这样?
回复 支持 反对

使用道具 举报

3

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-10
在线时间
11 小时
发表于 2016-12-26 17:48:05 | 显示全部楼层
wsnfly 发表于 2016-12-20 11:12
目前多轴联动和加减速已经搞定,但是高精度的插补还没实现

是S型的还是T型的加减速?
现在我遇到点问题就是,不好确定运动速度和距离的关系。
也就是说,给定一段距离后,不好确定其运动最大速度是多少
回复 支持 反对

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
 楼主| 发表于 2016-12-28 12:09:42 | 显示全部楼层
jplzl10000 发表于 2016-12-26 17:48
是S型的还是T型的加减速?
现在我遇到点问题就是,不好确定运动速度和距离的关系。
也就是说,给定一段 ...

现在T型加减速已经搞定了,但是我最近没弄这块,所以没把加减速和插补做到一起去。S型加减速还是有点难度的,毕竟这个芯片的运算量有限。
为了雅典娜?为了爱与正义
回复 支持 反对

使用道具 举报

3

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-10
在线时间
11 小时
发表于 2016-12-28 17:03:33 | 显示全部楼层
wsnfly 发表于 2016-12-28 12:09
现在T型加减速已经搞定了,但是我最近没弄这块,所以没把加减速和插补做到一起去。S型加减速还是有点难度 ...

T型的速度和距离之间的关系还好确定啊,是二次方的
但S型速度和距离的关系就难确定了,不知道有没有什么好方法可以做个简单的速度和距离的对应,哪怕只是近似也好啊
回复 支持 反对

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
 楼主| 发表于 2016-12-28 21:38:41 | 显示全部楼层
jplzl10000 发表于 2016-12-28 17:03
T型的速度和距离之间的关系还好确定啊,是二次方的
但S型速度和距离的关系就难确定了,不知道有没有什么 ...

T是计算出加速度就行了,S是要计算出加速度的加数度
为了雅典娜?为了爱与正义
回复 支持 反对

使用道具 举报

3

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-10
在线时间
11 小时
发表于 2016-12-29 13:40:37 | 显示全部楼层
wsnfly 发表于 2016-12-28 21:38
T是计算出加速度就行了,S是要计算出加速度的加数度

大哥,搞反了吧。
加加速度是已知的,可以作为参数由用户设定的
主要是计算速度和距离啊
要计算在给定的速度段下运行的距离
这个不好计算
回复 支持 反对

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
 楼主| 发表于 2017-1-2 17:20:29 | 显示全部楼层
jplzl10000 发表于 2016-12-29 13:40
大哥,搞反了吧。
加加速度是已知的,可以作为参数由用户设定的
主要是计算速度和距离啊

对啊,加加速度是已知的,用STM32F1系列的计算能力,能计算这么复杂的运算吗,我写的那个算法用加速度求已经很吃力了,别说用加加速度了。。
为了雅典娜?为了爱与正义
回复 支持 反对

使用道具 举报

3

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-10
在线时间
11 小时
发表于 2017-1-3 17:42:12 | 显示全部楼层
wsnfly 发表于 2017-1-2 17:20
对啊,加加速度是已知的,用STM32F1系列的计算能力,能计算这么复杂的运算吗,我写的那个算法用加速度求 ...

T型速度曲线用F1的都有压力?
有比较简单的S型的,就是用建表的方式,用F1的话,应该也是可以的啊,没什么压力啊
就是效果不太好
回复 支持 反对

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
 楼主| 发表于 2017-1-4 21:02:55 | 显示全部楼层
jplzl10000 发表于 2017-1-3 17:42
T型速度曲线用F1的都有压力?
有比较简单的S型的,就是用建表的方式,用F1的话,应该也是可以的啊,没什 ...

表没压力,全部计算得出有压力
为了雅典娜?为了爱与正义
回复 支持 反对

使用道具 举报

cws 该用户已被删除
发表于 2017-4-12 14:13:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

cws 该用户已被删除
发表于 2017-4-12 14:14:31 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-11-2
在线时间
12 小时
发表于 2017-11-17 10:13:12 | 显示全部楼层
wsnfly 发表于 2016-12-20 11:11
以你的理解,解释一下插补和联动的关系

一般数控的轴分两种联动轴和同动轴。我的理解是联动-英文linkage 就是每个轴在运动过程中位置是时时关联的X轴走到哪里Y轴也必须在对应的位置否则就会扩大误差。同动轴 synchronous就是可以同时运动各自设定位置目标速度各走各的,各个轴只求最后位置与设定一致不要求过程轴位置时时对应。机床上的差补就是时时关联的联动。
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-11-2
在线时间
12 小时
发表于 2017-11-17 11:12:52 | 显示全部楼层
本帖最后由 毛子哥 于 2017-11-17 12:20 编辑

楼主还在搞吗?
回复 支持 反对

使用道具 举报

49

主题

341

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5265
金钱
5265
注册时间
2012-8-25
在线时间
1025 小时
发表于 2017-11-17 11:33:52 | 显示全部楼层
本帖最后由 gotofly21 于 2017-11-17 11:40 编辑
毛子哥 发表于 2017-11-17 11:12
楼主还在搞吗?建议楼主试试数字积分法(DDA),用一个定时器积分,变换公式看了头大课本上从头推到尾 ...

明显没有理解dda法,100,99,岂不是要9900步,就是你能跑出来,有没有想过频率会升高99倍,本来可以跑99mm/fen,只能跑1mm/分。别说你能跑无限高频率
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-11-2
在线时间
12 小时
发表于 2017-11-17 12:01:12 | 显示全部楼层
本帖最后由 毛子哥 于 2017-11-17 12:22 编辑
gotofly21 发表于 2017-11-17 11:33
明显没有理解dda法,100,99,岂不是要9900步,就是你能跑出来,有没有想过频率会升高99倍,本来可以跑99m ...

哦哦你说的对√哦,别出声让我悄悄的把评论删了。
回复 支持 反对

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
 楼主| 发表于 2017-11-17 12:21:17 | 显示全部楼层
毛子哥 发表于 2017-11-17 12:01
哦哦你说的对√哦,让我瞧瞧的的把评论删了,晚上在对着书本再敲一遍。

最终选择了运动控制芯片,效果比自己写的算法好很多。就是价格。。。
为了雅典娜?为了爱与正义
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2017-11-27 17:59:30 | 显示全部楼层
wsnfly 发表于 2017-11-17 12:21
最终选择了运动控制芯片,效果比自己写的算法好很多。就是价格。。。

楼主能告诉我    你这个用在什么应用上面的吗  举个例子
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2017-11-12
在线时间
18 小时
发表于 2017-11-27 21:30:07 | 显示全部楼层
这是直角多轴啊
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2018-8-31
在线时间
3 小时
发表于 2018-8-31 10:03:54 | 显示全部楼层
wsnfly 发表于 2016-12-20 11:12
目前多轴联动和加减速已经搞定,但是高精度的插补还没实现

也在研究这个可否加QQ429023062交流下
回复 支持 反对

使用道具 举报

0

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
347
金钱
347
注册时间
2018-3-20
在线时间
75 小时
发表于 2020-12-9 08:11:25 | 显示全部楼层
多谢大佬
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2021-1-18
在线时间
6 小时
发表于 2021-5-20 13:11:49 | 显示全部楼层
大家能多发点stm32 多轴和数控系统就更好了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2020-12-12
在线时间
3 小时
发表于 2021-10-5 20:33:42 来自手机 | 显示全部楼层
厉害厉害!学习学习
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 05:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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