MakerLab创客实验室 — Let's Make something.
现在注册
已注册用户请 登入
收藏此话题的成员
hy1066994565 mini avatar LCH2HK mini avatar
飘落的叶子 large avatar
MakerLab创客实验室  ›  固件

marlin固件stepper.cpp

By 飘落的叶子 at 一年前 , 1634 次浏览

marlin固件里面在stepper.cpp里面生成y轴步进脉冲的时候为什么
if (counter_y > 0)
{
WRITE(Y_STEP_PIN, !INVERT_Y_STEP_PIN);
counter_y -= current_block->step_event_count;
count_position[Y_AXIS]+=count_direction[Y_AXIS];
WRITE(Y_STEP_PIN, INVERT_Y_STEP_PIN);
}
为什么要判断counter_y > 0,为什么counter_y -= current_block->step_event_count这句counter_y要减去一个最大步数啊

3 回复
Andy medium avatar
#1 - 一年前
Andy

因为固件所有的脉冲都是在同一个中断中产生,所以判断是否大于零来决定是否对某个轴进行脉冲输出,输出脉冲了,当然要减掉,不见掉用于都无法完成脉冲数量了。

飘落的叶子 medium avatar
#2 - 一年前
飘落的叶子

@Andy 那我感觉每发一个脉冲进一次中断,那不是应该减去1吗,为什么减去xyze中的最大步数,而且在一开始进定时器中断的时候是这样的:if (current_block != NULL)
{
current_block->busy = true;//设定block的状态
trapezoid_generator_reset();
counter_x = -(current_block->step_event_count >> 1);
counter_y = counter_x;//设定xyze轴的step计数
counter_z = counter_x;
counter_e = counter_x;
step_events_completed = 0;
}
counter_x = -(current_block->step_event_count >> 1);这句话不就说明counter_x是负的了吗?
在counter_x定义的时候是这样的:static long counter_x, // Counter variables for the bresenham line tracer
这个bresenham line tracer是什么意思啊,谢谢你

bobo medium avatar
#3 - 一年前
bobo

建议你好好研究下bresenham画直线算法