请教tinyg的加减速实现原理

2020-01-04 18:59发布

之前论坛有人详细分析了grbl的代码,但是grbl使用的是T型加减速,而tinyg和tinyg2则使用S加速和更高阶的平滑曲线,但是没有弄懂代码,它有一个DDA timer,但是固定频率的,怎么输出平滑的脉冲?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
advarx21ic
1楼-- · 2020-01-04 22:19
我也没看懂,现在的marlin 固件也是s加减速的
落叶知秋
2楼-- · 2020-01-05 01:30
TinyG其实跟GRBL差不多的原理,S型加减速也是在T型的两边做了一个高一阶的计算

发现楼主喜欢纠结“平滑脉冲”
liurangzhou
3楼-- · 2020-01-05 06:38
 精彩回答 2  元偷偷看……
iqxt88
4楼-- · 2020-01-05 08:21
s加速分成头/中/尾3部 , 加速》巡航》减速。 然后3部各分成多个段,每个段时间是固定的然后每个段产生DDA步进脉冲。
liurangzhou
5楼-- · 2020-01-05 09:14
iqxt88 发表于 2019-7-2 19:41
s加速分成头/中/尾3部 , 加速》巡航》减速。 然后3部各分成多个段,每个段时间是固定的然后每个段产生DDA ...

看它的DDA定时器是固定时基,怎么实现不同周期脉冲输出?
落叶知秋
6楼-- · 2020-01-05 14:38
liurangzhou 发表于 2019-7-2 19:27
高手来了,步进电机在高速的时候如果脉冲不平滑,很容易卡死堵转,tinyg中的DDA定时器是个固定时基,不知 ...

TinyG也是DDA的方法,固定时基只不过是固定了最大的脉冲输出频率

如果那个轴的脉冲需要变更输出频率,重新计算那个轴的substep_increment值就好了

具体可以看dda_timer和_load_move里面的处理
就是每次进dda_timer溢出中断后,每个运动轴的accumulator(步数累加器)就会增加固定值,
然后如果符合DDA方法条件就会置位脉冲脚,否则根据每个轴的substep_increment来累加accumulator

每轴的substep_increment是在加减速的时候进行计算的,根据DDA方法计算参考轴和其他轴的行程步数

至于楼主关心的“平滑脉冲”问题是存在的,最多偏差了一个固定时基的时间吧,看默认设置是大概20us
比如TinyG的轴最大能输出50KHz的脉冲频率,但实际运行时要输出49KHz的频率,那么如果对比这两串脉冲,
可能会看到49KHz的那串脉冲大部分跟50KHz是一样的,但在某一个地方的脉冲会比50KHz的多输出了一个20us的高电平
这个时间估计对步进电机影响是很微小的

一周热门 更多>