用stc15w和旧光驱移植arduino写字机GRBL之八:前瞻算法2
本帖最后由 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;
{:lol:}感谢分享,分析得很好 谢谢楼主!
最近在当小白鼠,提前感受STC8H的强大。假期打算将GRBL移植到STC8H上跑。1.2K的RAM虽然小点,裁剪一下还是可以的。
里面有一句 float inverse_millimeters = 1.0/block->millimeters;// Inverse millimeters to remove multiple divides
哥们能帮忙解读一下吗,先谢谢了 flash3g 发表于 2019-1-8 20:56
里面有一句 float inverse_millimeters = 1.0/block->millimeters;// Inverse millimeters to remove mu ...
个人理解就是为了做个除法,做一次除法,后面都用乘法,比较节省资源。 su33691 发表于 2019-1-8 15:37
谢谢楼主!
最近在当小白鼠,提前感受STC8H的强大。假期打算将GRBL移植到STC8H上跑。1.2K的RAM虽然小点,裁 ...
咱的好奇心也很重,一起折腾吧{:lol:} XTXB 发表于 2019-1-9 11:17
个人理解就是为了做个除法,做一次除法,后面都用乘法,比较节省资源。 ...
哦!昨晚看了几个钟越看越模糊,你这么一说我就明白了,非常感谢你! 用这个东西可以用来做雕刻机啊? PCBBOY1991 发表于 2019-1-9 11:59
用这个东西可以用来做雕刻机啊?
原理上可以做离线雕刻机,不过在线雕刻已经很成熟,操作更灵活,做离线雕刻意义不大。 XTXB 发表于 2019-1-9 12:38
原理上可以做离线雕刻机,不过在线雕刻已经很成熟,操作更灵活,做离线雕刻意义不大。 ...
嗯,谢谢哈。 楼主你是人才,向你学习。 厉害,楼主的精神和资料都值得学习{:handshake:}{:handshake:}{:handshake:} 膜拜,如果楼主想做大点的话,我可以送几个丝杆电机。{:handshake:}{:handshake:} su33691 发表于 2019-1-8 15:37
谢谢楼主!
最近在当小白鼠,提前感受STC8H的强大。假期打算将GRBL移植到STC8H上跑。1.2K的RAM虽然小点,裁 ...
stc8a8k不是有 8k ram嘛{:shocked:} iidm 发表于 2019-1-16 19:45
膜拜,如果楼主想做大点的话,我可以送几个丝杆电机。 ...
多谢了!就是个爱好,不想整太大动静{:lol:} ,暂时就这个迷你的玩玩。 XTXB 发表于 2019-1-17 21:51
多谢了!就是个爱好,不想整太大动静 ,暂时就这个迷你的玩玩。
支持一下! XTXB 发表于 2019-1-9 11:17
个人理解就是为了做个除法,做一次除法,后面都用乘法,比较节省资源。 ...
你这个写了注释的代码可以分享一下吗???{:lol:}想学习下 jaywen 发表于 2019-3-12 13:37
你这个写了注释的代码可以分享一下吗??? 想学习下
GRBL只啃了一部分,不够完善,当时做的个笔记而已,后来发现有些错误,怕误导坛友,看英文的还更准确些,以后全部啃完了再发出来。 XTXB 发表于 2019-3-12 17:56
GRBL只啃了一部分,不够完善,当时做的个笔记而已,后来发现有些错误,怕误导坛友,看英文的还更准确些, ...
好的。。。期待{:lol:} 帖子移动通知:
原分论坛:8051/STC32【已下线】
目标分论坛:51单片机
移动时间:0小时之后
页:
[1]