搜索
bottom↓
回复: 19

用stc15w和旧光驱移植arduino写字机GRBL之八:前瞻算法2

[复制链接]

出0入0汤圆

发表于 2019-1-8 13:14:36 | 显示全部楼层 |阅读模式
本帖最后由 XTXB 于 2019-1-8 14:15 编辑

stc15w4k32s4和旧光驱移植arduino写字机GRBL连载:
用stc15w4k32s4和旧光驱移植arduino写字机GRBL之一:机架搭建
https://www.amobbs.com/thread-5701202-1-1.html

用stc15w4k32s4和旧光驱移植arduino写字机GRBL之二:PCB制作
https://www.amobbs.com/thread-5701573-1-1.html

用stc15w4k32s4和旧光驱移植arduino写字机GRBL之三:Bresenham算法
https://www.amobbs.com/thread-5701994-1-1.html

用stc15w4k32s4和旧光驱移植arduino写字机GRBL之四:FIFO算法
https://www.amobbs.com/thread-5702730-1-1.html

用stc15w4k32s4和旧光驱移植arduino写字机GRBL之五:G_Code
https://www.amobbs.com/thread-5702784-1-1.html

用stc15w4k32s4和旧光驱移植arduino写字机GRBL之六:运动控制motion_control
https://www.amobbs.com/thread-5703165-1-1.html

用stc15w4k32s4和旧光驱移植arduino写字机GRBL之七:前瞻算法1
https://www.amobbs.com/thread-5703989-1-1.html

用stc15w4k32s4和旧光驱移植arduino写字机GRBL之八:前瞻算法2
前瞻算法得到的小线段运动数据要具体到每个小线段的起始速度,结束速度,中间速度节点时的步数,加速度等:
uint32_t initial_rate;              // The step rate at start of block 开始速度,步/分
uint32_t final_rate;                // The step rate at end of block结束速度,步/分
int32_t rate_delta;                 // The steps/minute to add or subtract when changing speed (must be positive)
                                //在改变速度时需要要增加或减去的速度,步/分钟
uint32_t accelerate_until;          // The index of the step event on which to stop acceleration
                                        //加速段的步数
uint32_t decelerate_after;          // The index of the step event on which to start decelerating
                                        //减速段的步数=停止加速+平台期步数
uint32_t nominal_rate;  // The nominal step rate for this block in step_events/minute
                                //步/分,这个块的正常速度

前瞻算法用到的物理学知识:V2²-V1²=2as,a:加速度;s:从V1到V2运动距离。

之前有探讨过,根据经验知道E的速度对D的速度有影响,GRBL中利用函数planner_reverse_pass( )向后推计算:
在向后推算中,在void planner_reverse_pass() 函数中,调用void planner_reverse_pass_kernel( ),
以确认当前点的进入速度current->entry_speed。
方法是逐点检查减速线段,反向计算,假设从下一点开始加速,计算到当前点时的速度max_allowable_speed,跟当前点的进入速度比较,取最小值为当前点的进入速度。

同样,根据经验知道F的速度对G的速度有影响,GRBL中利用函数planner_forward_pass( )向前推算:

在向前推算中,在void planner_forward pass() 函数中,调用void planner_forward pass_kernel( ),
以确认当前点的进入速度current->entry_speed。
方法是:逐点检查从上一点开始加速,计算到当前点的速度max_allowable_speed,跟当前点的进入速度比较,取最小值为当前点的进入速度。

由于上面算法已经将各个交点的速度落实下来了,接下来GRBL中利用函数planner_recalculate_trapezoids( )落实线段中途的速度节点的位置。

如图④所,假设线段的长度为s,刚好只有加速和减速过程,类似G-H,到M点时刚好达到系统设定的最大速度Vm,随即减速。
已知线段的长度为s,初速度为Vp,线段的加速度为a,线段的末速度为Vq,求加速距离S1。
设减速距离为S2,由加速度计算公式:Vm²-Vp²=2as1 , Vm²-Vq²=2as2 ,  s1+s2=s。得s1=(2as-Vp²+Vq²)/4a
在GRBL0.8中:
intersection_distance=(2*acceleration*distance-initial_rate*initial_rate+final_rate*final_rate)/(4*acceleration)
加速阶段距离: accelerate_steps= estimate_acceleration_distance( )=(Vm²-Vp²)/2a
减速阶段距离:decelerate_steps = -(Vm²-Vq²)/2a
平台阶段距离:plateau_steps = block->step_event_count-accelerate_steps-decelerate_steps;
如果plateau_steps < 0,说明只有加减速。
如果plateau_steps = 0,说明可以加速到最大速度。
如果plateau_steps >0,说明有完整的加速,减速,平台期。
加速段的距离:accelerate_steps =min(accelerate_distance,block->step_event_count);
block->accelerate_until = accelerate_steps
block->decelerate_after = accelerate_steps+plateau_steps;

本帖子中包含更多资源

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

x

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出16170入6148汤圆

发表于 2023-10-25 17:13:14 来自手机 | 显示全部楼层
帖子移动通知:
原分论坛:8051/STC32【已下线】
目标分论坛:51单片机
移动时间:0小时之后

出0入10汤圆

发表于 2019-3-13 09:23:00 | 显示全部楼层
XTXB 发表于 2019-3-12 17:56
GRBL只啃了一部分,不够完善,当时做的个笔记而已,后来发现有些错误,怕误导坛友,看英文的还更准确些, ...

好的。。。期待

出0入0汤圆

 楼主| 发表于 2019-3-12 17:56:48 | 显示全部楼层
jaywen 发表于 2019-3-12 13:37
你这个写了注释的代码可以分享一下吗???    想学习下

GRBL只啃了一部分,不够完善,当时做的个笔记而已,后来发现有些错误,怕误导坛友,看英文的还更准确些,以后全部啃完了再发出来。

出0入10汤圆

发表于 2019-3-12 13:37:33 | 显示全部楼层
XTXB 发表于 2019-1-9 11:17
个人理解就是为了做个除法,做一次除法,后面都用乘法,比较节省资源。 ...

你这个写了注释的代码可以分享一下吗???    想学习下

出0入0汤圆

发表于 2019-1-18 00:14:37 | 显示全部楼层
XTXB 发表于 2019-1-17 21:51
多谢了!就是个爱好,不想整太大动静 ,暂时就这个迷你的玩玩。

支持一下!

出0入0汤圆

 楼主| 发表于 2019-1-17 21:51:06 | 显示全部楼层
iidm 发表于 2019-1-16 19:45
膜拜,如果楼主想做大点的话,我可以送几个丝杆电机。 ...

多谢了!就是个爱好,不想整太大动静 ,暂时就这个迷你的玩玩。

出0入0汤圆

发表于 2019-1-16 20:40:53 | 显示全部楼层
su33691 发表于 2019-1-8 15:37
谢谢楼主!
最近在当小白鼠,提前感受STC8H的强大。假期打算将GRBL移植到STC8H上跑。1.2K的RAM虽然小点,裁 ...

stc8a8k不是有 8k ram嘛

出0入0汤圆

发表于 2019-1-16 19:45:09 | 显示全部楼层
膜拜,如果楼主想做大点的话,我可以送几个丝杆电机。

出0入0汤圆

发表于 2019-1-9 21:31:26 | 显示全部楼层
厉害,楼主的精神和资料都值得学习

出100入85汤圆

发表于 2019-1-9 13:47:15 来自手机 | 显示全部楼层
楼主你是人才,向你学习。

出0入0汤圆

发表于 2019-1-9 12:47:59 | 显示全部楼层
XTXB 发表于 2019-1-9 12:38
原理上可以做离线雕刻机,不过在线雕刻已经很成熟,操作更灵活,做离线雕刻意义不大。 ...

嗯,谢谢哈。

出0入0汤圆

 楼主| 发表于 2019-1-9 12:38:20 | 显示全部楼层
PCBBOY1991 发表于 2019-1-9 11:59
用这个东西可以用来做雕刻机啊?

原理上可以做离线雕刻机,不过在线雕刻已经很成熟,操作更灵活,做离线雕刻意义不大。

出0入0汤圆

发表于 2019-1-9 11:59:28 | 显示全部楼层
用这个东西可以用来做雕刻机啊?

出0入0汤圆

发表于 2019-1-9 11:58:15 | 显示全部楼层
XTXB 发表于 2019-1-9 11:17
个人理解就是为了做个除法,做一次除法,后面都用乘法,比较节省资源。 ...

哦!昨晚看了几个钟越看越模糊,你这么一说我就明白了,非常感谢你!

出0入0汤圆

 楼主| 发表于 2019-1-9 11:20:47 | 显示全部楼层
su33691 发表于 2019-1-8 15:37
谢谢楼主!
最近在当小白鼠,提前感受STC8H的强大。假期打算将GRBL移植到STC8H上跑。1.2K的RAM虽然小点,裁 ...

咱的好奇心也很重,一起折腾吧

出0入0汤圆

 楼主| 发表于 2019-1-9 11:17:13 | 显示全部楼层
flash3g 发表于 2019-1-8 20:56
里面有一句 float inverse_millimeters = 1.0/block->millimeters;  // Inverse millimeters to remove mu ...


个人理解就是为了做个除法,做一次除法,后面都用乘法,比较节省资源。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2019-1-8 20:56:38 | 显示全部楼层

里面有一句 float inverse_millimeters = 1.0/block->millimeters;  // Inverse millimeters to remove multiple divides       

哥们能帮忙解读一下吗,先谢谢了

出0入0汤圆

发表于 2019-1-8 15:37:41 | 显示全部楼层
谢谢楼主!
最近在当小白鼠,提前感受STC8H的强大。假期打算将GRBL移植到STC8H上跑。1.2K的RAM虽然小点,裁剪一下还是可以的。

出0入0汤圆

发表于 2019-1-8 13:24:56 | 显示全部楼层
感谢分享,分析得很好
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-21 09:09

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

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