驱动原理:单极性驱动与双极性驱动、整步/半步/细分驱动原理、电流斩波控制(Chopper)技术

好,咱们接着聊驱动原理。说实话,这块内容是步进电机驱动的「内功心法」。你光会接线不行,得明白电机肚子里那点事儿——怎么给它通电,它才肯乖乖转。

我刚开始做电机驱动那会儿,总觉得不就是给线圈通电嘛,能有多难?结果一上高速,电机抖得像筛糠,还丢步。后来才明白,驱动方式选不对,神仙也救不了。

一、单极性驱动 vs 双极性驱动

这两种驱动方式,说白了就是给线圈通电的「姿势」不一样。

1. 单极性驱动

单极性驱动,电机每相绕组只有一个方向通电。线圈中间有个抽头,电流从抽头流进去,从一端出来。你想想看,这样电流方向是固定的。

  • 优点:驱动电路简单,每个绕组只需要一个开关管。
  • 缺点:线圈利用率低,只有一半绕组在工作。
  • 典型应用:老式软驱、打印机里的步进电机。
我的经验:单极性驱动适合低速、小扭矩场合。我曾经在一个低成本项目里用过,电机发热小,但扭矩确实软。如果你对扭矩有要求,别省那点驱动成本。

2. 双极性驱动

双极性驱动就厉害了。电流可以正反两个方向流。没有中间抽头,整个线圈都用上了。

  • 优点:线圈利用率100%,同样体积下扭矩更大。
  • 缺点:需要H桥电路,驱动复杂一些。
  • 典型应用:3D打印机、CNC、工业自动化。

我建议你直接上双极性驱动。现在H桥驱动芯片便宜得很,比如DRV8825、A4988,几块钱一片。单极性驱动基本可以进博物馆了。

对比项 单极性驱动 双极性驱动
线圈利用率 50% 100%
驱动电路 简单(单管) 复杂(H桥)
扭矩
成本
推荐度 不推荐 强烈推荐

二、整步、半步、细分驱动原理

这三个概念,决定了电机转一步走多大角度。嗯,这里要注意,不是步距角越小越好,得看应用场景。

1. 整步驱动

整步就是最原始的驱动方式。每次给两相通电,转子转一个完整的步距角。比如1.8°的电机,整步就是1.8°一步。

  • 特点:扭矩最大,但低速振动大。
  • 我遇到过:用整步驱动做低速进给,电机嗡嗡响,工件表面有振纹。后来换成半步就好了。

2. 半步驱动

半步驱动,就是整步和单相通电交替进行。步距角减半,比如1.8°变成0.9°。

  • 优点:振动明显减小,分辨率翻倍。
  • 缺点:扭矩波动大,单相通电时扭矩只有一半。
避坑指南:我曾经在一个送料机构里用半步驱动,结果扭矩波动导致送料不均匀。后来加了细分才解决。半步驱动适合对振动敏感、但对扭矩均匀性要求不高的场合。

3. 细分驱动

细分驱动,说白了就是把一步「切」成很多小步。通过控制两相电流的比例,让转子停在任意位置。

举个例子,1/16细分,就是把1.8°切成16份,每份0.1125°。电机转起来丝般顺滑。

// 细分电流控制示例(伪代码)
// 假设1/16细分,查表法
const uint16_t sin_table[16] = {
    0,   125,  250,  375,  500,  625,  750,  875,
    1000, 875,  750,  625,  500,  375,  250,  125
};

void set_microstep(uint8_t step) {
    uint16_t current_A = sin_table[step];       // A相电流
    uint16_t current_B = sin_table[(step+4)%16]; // B相电流(相差90°)
    set_dac_A(current_A);
    set_dac_B(current_B);
}

你想想看,细分越高,电机运行越平滑。但也不是越高越好。我见过有人用1/256细分,结果扭矩小得可怜,稍微带点负载就丢步。

注意:细分不能提高定位精度!它只是让运动更平滑。定位精度取决于电机本身的步距角精度和机械传动。别被厂商宣传忽悠了。

三、电流斩波控制(Chopper)技术

这个技术,是步进电机驱动的「灵魂」。没有它,电机高速跑不起来,低速还发热严重。

为什么会这样?因为电机线圈有电感。电感会阻碍电流变化。你给线圈加电压,电流不会瞬间达到设定值,而是慢慢爬升。转速一高,电流还没爬上去,下一个脉冲就来了。结果就是扭矩暴跌。

Chopper技术怎么解决?说白了就是「斩波」——用PWM控制,让电流维持在设定值附近。

工作原理

  1. 给线圈加满电压,电流快速上升。
  2. 电流达到设定值,关断开关管,电流通过续流二极管衰减。
  3. 电流降到下限,再次开通开关管。
  4. 如此反复,电流被「斩」成锯齿波,平均值稳定在设定值。
// 电流斩波控制伪代码
#define TARGET_CURRENT 1000  // 目标电流(mA)
#define HYSTERESIS 50        // 滞环宽度

void chopper_control(uint16_t actual_current) {
    if (actual_current < (TARGET_CURRENT - HYSTERESIS)) {
        // 电流偏低,开通MOSFET
        GPIO_SetBits(MOSFET_PORT, MOSFET_PIN);
    }
    else if (actual_current > (TARGET_CURRENT + HYSTERESIS)) {
        // 电流偏高,关断MOSFET
        GPIO_ResetBits(MOSFET_PORT, MOSFET_PIN);
    }
    // 在滞环范围内,保持当前状态
}
我的习惯:实际项目中,我很少用滞环控制,因为开关频率不固定,容易产生噪声。我更推荐固定频率PWM+电流采样反馈。比如20kHz的PWM,每个周期采样一次电流,调整占空比。这样噪声可控,EMI也好处理。

Chopper的关键参数

参数 说明 我的建议
斩波频率 PWM开关频率 20kHz-40kHz,避开人耳敏感区
电流设定值 电机额定电流 不要超过额定值,否则烧电机
衰减模式 快衰减/慢衰减/混合衰减 低速用慢衰减,高速用快衰减
采样电阻 电流检测用 0.1Ω-0.5Ω,功率要够

嗯,这里有个坑。我曾经在一个项目里,斩波频率设成50kHz,结果电机啸叫得厉害。后来查资料才知道,50kHz刚好在电机机械谐振频率附近。换成25kHz,世界安静了。

总结一下
- 双极性驱动是主流,别纠结单极性了。
- 细分驱动让运动平滑,但别迷信高细分。
- Chopper技术是高速驱动的关键,参数要仔细调。
- 实际项目中,多试几个斩波频率和衰减模式,找到最合适的组合。

好了,驱动原理这块就聊到这儿。下一章咱们讲硬件设计——怎么选驱动芯片、怎么画PCB、怎么处理散热。到时候我会分享一些我踩过的坑,保证让你少走弯路。