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

⚙️ 正点原子《DMF407 电机控制专题教程》V1.0 · Chapter 19
🗨️ 本章金句:「直线插补画横竖撇,圆弧插补画弯钩:判偏差、走一步,把圆「逼近」出来。」
这一章在干嘛? 与第 18 章同源的逐点比较法,这次的目标是圆弧:每走一步判断动点在圆内还是圆外,向圆心方向「找补」。学完你就能让 X-Y 平台画出一个整圆。
19.1 偏差判别与递推19.2 任意象限与终点判别19.3 实验实现:四段圆弧拼一个整圆

19.1 偏差判别与递推

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

原书图 19.2.1.1
原书图 19.2.1.1:第一象限逆圆弧插补示意图
$$F = X_i^2 + Y_i^2 - R^2$$

递推化简(免开方、免算 $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.2.2.1
原书图 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.3.1
原书图 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 结束插补。
← 上一篇🏠 顶层目录下一篇 →