📖 第 19 章:步进电机圆弧插补(Circular Interpolation)

6次阅读
没有评论
这一章在干嘛?

与第 18 章同源的逐点比较法,这次的目标是圆弧:每走一步判断动点在圆内还是圆外,向圆心方向「找补」。学完你就能让 X-Y 平台画出一个整圆。

19.1 偏差判别与递推

19.2 任意象限与终点判别

19.3 实验实现:四段圆弧拼一个整圆

19.1 偏差判别与递推

以第一象限逆圆弧 AE(圆心在原点、半径 R)为例,动点 $P(X_i, Y_i)$,偏差判别式:

📖 第 19 章:步进电机圆弧插补(Circular Interpolation)
原书图 19.2.1.1:第一象限逆圆弧插补示意图

$$F = X_i^2 + Y_i^2 – R^2$$

  • $F > 0$:动点在圆外,向圆内走 $-X$ 一步;
  • $F < 0$:动点在圆内,向圆外走 $+Y$ 一步;
  • $F = 0$:在圆上,按 $F>0$ 处理走 $-X$(动点恰在 x 轴上时走 $+Y$)。

递推化简(免开方、免算 $R^2$):

$$text{向 } -X text{ 进给:} F_{i+1} = F_i – 2X_i + 1 qquad text{向 } +Y text{ 进给:} F_{i+1} = F_i + 2Y_i + 1$$

📖 第 19 章:步进电机圆弧插补(Circular Interpolation)
原书图 19.2.2.1:第一象限逆圆弧插补的过程图

与直线插补的关键区别:

直线插补的偏差递推只需要终点坐标;圆弧插补的偏差计算
还依赖动点坐标
$X_i, Y_i$——因为圆上处处曲率不同,得跟着动点走。

19.2 任意象限与终点判别

顺圆 SR1~SR4、逆圆 NR1~NR4 共 8 种线形,分两组规则:

分组 线形 F ≥ 0 进给 F < 0 进给
第一组 SR1、NR2、SR3、NR4 沿 Y 轴(SR1/NR2 走 −Y,SR3/NR4 走 +Y) 沿 X 轴(SR1/NR4 走 +X,NR2/SR3 走 −X)
第二组 NR1、SR2、NR3、SR4 沿 X 轴(NR1/SR4 走 −X,SR2/NR3 走 +X) 沿 Y 轴(NR1/SR2 走 +Y,NR3/SR4 走 −Y)

递推公式形式不变,只是符号与 X/Y 对调:$F_{i+1} = F_i – |2Y_i| + 1$(|Y| 减 1 的场合)或 $F_{i+1} = F_i + |2X_i| + 1$(|X| 加 1 的场合)。

📖 第 19 章:步进电机圆弧插补(Circular Interpolation)
原书图 19.3.1:任意象限顺逆圆弧的情况

终点判别用总步长法:$n = |X_e – X_a| + |Y_e – Y_a|$,每进给一步 n 减 1,减到 0 结束。实际每步位移比头发丝还小,宏观轨迹看起来就是光滑圆弧。

19.3 实验实现:四段圆弧拼一个整圆

/* 终点判别:总步长法 */
g_pol_par.end_pulse--;              /* 总步数减一 */
if (g_pol_par.end_pulse == 0) {
    g_motor_sta = STATE_STOP;       /* 到达终点 */
    TIM_CCxChannelCmd(ATIM_TIMX_PWM,
        st_motor[g_pol_par.act_axis].pulse_channel, TIM_CCx_DISABLE);
    HAL_TIM_Base_Stop_IT(&g_atimx_handle);   /* 停止定时器 */
}
/* 偏差递推:F = F + 2*符号*新坐标 + 1 */
g_pol_par.f_e = g_pol_par.f_e + 2 * sign_dir[g_pol_par.act_axis]
                * g_pol_par.start_point[g_pol_par.act_axis] + 1;

硬件与直线插补实验完全相同(接口三 = X 轴、接口四 = Y 轴,1.0A、8 细分 1600 脉冲/圈)。setarcdir() 按起点坐标和顺/逆方向确定象限、两轴旋转方向及偏差符号位;arc_incmove() 校验起终点满足同一圆方程($X^2+Y^2$ 相等)并计算总步数。

if (key == KEY0_PRES) {                      /* 按下 KEY0 开始插补 */
    arc_incmove(800 * 5, 0, 0, -800 * 5, 2000, CW);   /* 第四象限圆弧 */
    while (g_motor_sta);
    arc_incmove(0, -800 * 5, -800 * 5, 0, 2000, CW);  /* 第三象限圆弧 */
    /* 依次再走第二、第一象限圆弧,合成一个顺时针整圆 */
}

验证现象:按下 KEY0,笔尖依次走完四个象限圆弧,画出一个顺时针整圆,LCD/串口有对应提示。

1. 第一象限逆圆弧插补中,F>0 和 F<0 时各向什么方向进给?

F>0 动点在圆外,向 −X 进给一步;F<0 动点在圆内,向 +Y 进给一步;F=0 按 F>0 处理走 −X(动点在 x 轴上时走 +Y)。

2. 写出沿 +Y 进给一步后的偏差递推公式,并说明圆弧插补与直线插补在偏差计算上的区别。

$F_{i+1} = F_i + 2Y_i + 1$。圆弧插补的偏差计算需要上一动点坐标 $X_i, Y_i$,直线插补只需终点坐标。

3. 圆弧插补总步长法终点判别的计数器初值如何确定?

$n = |X_e – X_a| + |Y_e – Y_a|$(终点与起点横纵坐标差绝对值之和),每进给一步减 1,减到 0 结束插补。

正文完
 0