简介:围绕双极性四线步进电机控制展开的这份 docx 文档,面向单片机开发、硬件调试及自动化精密定位方向的学习者,重点解决整步、半步与细分微步驱动方式的选择和时序理解问题。内容把单4拍、双4拍、8拍三种通电时序逐表列出,并说明反转时如何倒序控制;同时延伸到1/4、1/8、1/16乃至1/256微步,结合1.8°步距角与10细分实例讲清脉冲数、实际步距角和精度影响因素,也交代了低频振动来源及细分精度受电流控制精度制约等要点。文档还提到ULN2003简易驱动,以及DRV8889A-Q1通过SPI配置微步值、DIR引脚控制方向并读取参数的典型应用与简化原理图,便于读者把时序表、芯片选型和硬件连接对应起来。压缩包仅含1个docx文件,大小约1.25MB,结构集中、查阅方便。已有1020人学习,适合作为步进电机控制入门到细分驱动进阶的参考资料。
1. 从一台抖得像筛糠的云台说起:双极性四线步进电机的控制到底难在哪
一台小型云台在低速转动时抖得像筛糠,拆开看,里面是一颗双极性四线步进电机,驱动板上四颗功率管,单片机每 2 ms 打一次时序。这类场景在自动化设备和精密定位里太常见:电机只有四个端子、两相绕组,控制逻辑说穿了就是高低电平的排列组合,可排列顺序错一位,转子就原地打摆;节拍给快一点,高速立刻丢步;想靠细分把 1.8° 磨到 0.18°,又会发现分辨率上去了、精度没动。这篇笔记拆的就是这套电机控制的完整落地路径:单 4 拍、双 4 拍、8 拍三张时序表怎么读、怎么写成能烧进单片机的数组、细分微步为什么绕不开专用驱动芯片,以及我在台架上真踩过的几个坑。适合刚接手电机控制模块的单片机工程师,也适合手上有一堆时序表却总是调不出平稳转动的人。
2. 把三张时序表读对:单4拍、双4拍与8拍的相位关系
2.1 四个端子两相绕组:先用 H 桥把电流方向想明白
双极性四线电机内部就是两相绕组 A 和 B,每相一个绕组、两端引出,一共四根线。图纸上标的 A+、A-、B+、B- 只是接线约定,A- 不是地,也不是负极,它是 A 绕组的另一端。这一点想岔了,后面所有时序都会跟着歪。绕组里的电流方向决定这一相产生的磁场极性,电流从 A+ 流向 A- 是一种极性,反过来就是相反的极性。所以每一相都必须能被双向驱动,硬件上对应一个 H 桥:左上和右下同时导通,电流正向;右上和左下同时导通,电流反向。同侧上下管同时导通就是直通,功率级当场报废。
把机械角换算成电角度,是后面理解细分的钥匙。常见两相步进电机步距角 1.8°,转子 50 个齿,转一圈 360° 机械角对应 50 个电周期,一个电周期是 7.2° 机械角,里面装 4 个整步,每个整步正好 90° 电角度。记住 90° 这个数:单 4 拍每拍电角度前进 90°,8 拍每拍前进 45°,16 细分每微步前进 5.625°。所有时序表、细分表、正弦电流表,本质上都是在描述这个电角度怎么走。
驱动方式的差别只有两件事:一次给几相通电,以及相邻两拍之间电角度走多少。前者决定扭矩和发热,后者决定步距角和振动。把这两个变量抓住,后面三张表就不用死记。
2.2 单4拍与双4拍:整步的两种通电宽度
单 4 拍是最朴素的整步方式,一拍只给一相通电。正确的相序是 (A+)→(B+)→(A-)→(B-),每拍电角度 90°,四拍一个电周期,机械角走 7.2°,一圈 200 步。
| 线圈 | 拍1 | 拍2 | 拍3 | 拍4 |
|---|---|---|---|---|
| A+ | 1 | 0 | 0 | 0 |
| B+ | 0 | 1 | 0 | 0 |
| A- | 0 | 0 | 1 | 0 |
| B- | 0 | 0 | 0 | 1 |
这张表我第一次照抄的时候翻车了:把四行从上到下依次当成四拍,写成 A+→A-→B+→B-,电机通电后原地来回摆,手拨一下才勉强转半圈。原因很简单,A+ 和 A- 是同一绕组的两端,先正向后反向,定子磁场只是在一根轴上来回翻,根本不构成旋转磁场。血泪经验是:读这类表先确认行是线圈、列是拍,再确认相序里 A、B 两相是交替超前的。正确顺序必须是 (A+)→(B+)→(A-)→(B-),相邻两拍只有一相在变。
双 4 拍则是每拍两相同时通电,相序是 (A+B+)→(A-B+)→(A-B-)→(A+B-),同样四拍一个电周期,步距角仍是 1.8°,一圈还是 200 步。
| 线圈 | 拍1 | 拍2 | 拍3 | 拍4 |
|---|---|---|---|---|
| A+ | 1 | 0 | 0 | 1 |
| B+ | 1 | 1 | 0 | 0 |
| A- | 0 | 1 | 1 | 0 |
| B- | 0 | 0 | 1 | 1 |
两相同时通电,合成磁场是两个绕组磁场的矢量和,幅值变成单相时的 1.4 倍左右,扭矩明显更大,代价是静态电流翻倍、发热更高。定位系统里如果不需要细分,双 4 拍通常是性价比最高的选择:同样的驱动器、同样的单片机,扭矩直接多出四成。单 4 拍则适合对发热敏感、负载很轻的场合,比如小风门、轻载拨杆。
2.3 8拍半步:用翻倍的拍数换平稳
8 拍半步把单 4 拍和双 4 拍交替插入,每一拍电角度只走 45°,机械角 0.9°,一圈 400 步。相序是 (A+)→(A+B+)→(B+)→(A-B+)→(A-)→(A-B-)→(B-)→(A+B-)。
| 线圈 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| A+ | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
| B+ | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| A- | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
| B- | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
半步的扭矩在单相和双相之间来回跳,从 1.0 倍到 1.4 倍,平均值比单 4 拍高,振动却比整步小得多。原因在于每步的机械位移减半,转子过冲的能量也跟着减半,低频那阵「嗡嗡」的共振就压下去不少。很多云台、滑台在 100~300 pps 这个区间用整步会有明显抖动,换成 8 拍立刻安静,成本只是脉冲数翻倍。
这里有个容易被忽略的细节:8 拍表的相邻拍必须只变一位。如果某一拍同时把 A+ 拉低、B- 拉高,等于跳过了中间状态,转子会被硬拽过去,表现为「走两步退一步」。这一条可以用脚本自动查,比人眼盯表靠谱。
2.4 用一段脚本自检时序表:相邻状态只准变一位
手工抄表最容易错的就是相序。我一般会先写几行 Python 把表跑一遍,确认每张表都满足「相邻两拍只变一位、同一绕组两端不同时为 1」,再往单片机里搬。
# 列顺序固定为 (A+, B+, A-, B-),改表时只动这里 SEQ = { # 单4拍:A+ -> B+ -> A- -> B- "single4": [(1,0,0,0), (0,1,0,0), (0,0,1,0), (0,0,0,1)], # 双4拍:A+B+ -> A-B+ -> A-B- -> A+B- "double4": [(1,1,0,0), (0,1,1,0), (0,0,1,1), (1,0,0,1)], # 8拍半步:整步与半步交替 "half8": [(1,0,0,0), (1,1,0,0), (0,1,0,0), (0,1,1,0), (0,0,1,0), (0,0,1,1), (0,0,0,1), (1,0,0,1)], } def hamming(a, b): """两拍之间变化的线圈数,正常必须为 1""" return sum(x != y for x, y in zip(a, b)) for name, seq in SEQ.items(): n = len(seq) step_deg = 360.0 / (n * 50) # 一个电周期 4 拍 = 7.2 度机械角 bad = [i for i in range(n) if hamming(seq[i], seq[(i + 1) % n]) != 1] short = [i for i, s in enumerate(seq) if s[0] and s[2] or s[1] and s[3]] # A+/A- 或 B+/B- 同时为1 print(f"{name}: {n} 拍, 步距角 {step_deg:.2f}°, 一圈 {n * 50} 步, " f"非法跳变 {bad or '无'}, 绕组直通 {short or '无'}")这段脚本的逻辑很直白:hamming算出相邻两拍的差异位数,正常旋转磁场每一拍只能换一相,差异数必须是 1;short那一行查的是同一绕组两端同时为 1,对应 H 桥同侧直通,是硬件层面的致命错误。参数上只需要改SEQ字典里的元组顺序,列顺序必须严格按 (A+, B+, A-, B-) 排,改错了检查结果会全部报红。跑出来的三个步距角分别是 1.80°、1.80°、0.90°,一圈步数 200、200、400,和手工算的一致,就可以放心往下写 C 代码了。
提示:脚本里的步距角是按 1.8° 基准电机算的,如果手上是 0.9° 或 7.5° 的型号,把 50 这个齿数换成对应值即可,0.9° 对应 100 齿,7.5° 对应 12 齿。
3. 从时序表到能转的台架:引脚映射、功率级与节拍函数
3.1 功率级选型:ULN2003 的边界与 H 桥的必需性
原始资料里提到四拍、八拍可以用 ULN2003 做简易驱动,这句话要拆开看。ULN2003 是七路达林顿阵列,开集电极输出,只能把输出端拉到地,本身不具备拉高能力。把它接到四线双极性电机上,绕组一端必须固定接 VCC,另一端被拉低才有电流,电流方向只有一种。这意味着你只能实现「正向通电」,A- 那一拍根本不存在,退化成两相单向励磁,扭矩只剩一半,细分的正弦电流更是无从谈起。
ULN2003 真正对口的,是带中心抽头的五线或六线单极性电机,抽头接 VCC,四个末端轮流拉低,正好是它的舒适区。如果你手上是四线双极性,功率级必须换 H 桥。常见的选择差距很大:
| 方案 | 通道 | 连续电流 | 控制方式 | 适用场景 |
|---|---|---|---|---|
| ULN2003 | 7 路灌电流 | 500 mA/路 | 单向,只能单极性 | 五线/六线小电机 |
| L298N 模块 | 2 路 H 桥 | 2 A(需散热片) | IN1/IN2 + ENA | 台架验证、大电流 |
| TB6612FNG | 2 路 H 桥 | 1.2 A | IN1/IN2 + PWM | 小型设备、电池供电 |
| DRV8833 | 2 路 H 桥 | 1.5 A | IN1/IN2 + PWM | 低压紧凑板 |
| DRV8889A-Q1 | 1 路集成微步 | 依配置 | STEP/DIR + SPI | 需要 1/256 细分 |
我一般台架阶段先用 L298N 模块,接线直观、烧了不心疼;确认时序和节拍没问题,再换 TB6612 或 DRV8833 做小体积板;确实需要高细分、低噪声,才上 DRV8889A-Q1 这类带 SPI 的集成驱动器。选型的关键不是通道数,而是「能不能双向出电流」和「斩波频率够不够」。
3.2 接线与上电顺序:共地、VCC、电机线,一步都不能省
接线顺序反了,最容易发生的是「通电就发热,但电机不转」。我固定的步骤是:先用万用表测电机四线,找出两组相通的两根线,正常阻值几欧到几十欧,两组之间应该完全不通;阻值无穷大说明绕组断了,阻值为零说明内部短路,这两种情况接上去都白忙。
接着按「共地 → 逻辑电源 → 电机电源 → 电机线 → 使能」的顺序上电。共地这一步必须先在单片机 GND 和驱动板 GND 之间连一根粗线,共地不良时逻辑电平会乱跳,表现为时序看起来对、电机却随机抖动,属于典型的玄学故障,查半天查不出原因。电机电源和逻辑电源分开走时,电机侧一定要并一个 100 µF 以上的电解电容加 0.1 µF 陶瓷电容,抑制换向时的反电动势尖峰。
// 引脚映射:一片双 H 桥,A 相和 B 相各占一个桥 // 约定:P=正向端,N=反向端,同一时间 P/N 不能同时拉高 #define PIN_A_P 2 // A 相正向,接 H 桥 IN1 #define PIN_A_N 3 // A 相反向,接 H 桥 IN2 #define PIN_B_P 4 // B 相正向,接 H 桥 IN3 #define PIN_B_N 5 // B 相反向,接 H 桥 IN4 #define PIN_EN 6 // 驱动使能,低电平时电机自由 #define PIN_LED 13 // 台架指示,方便示波器触发 static inline void coil_write(uint8_t ap, uint8_t an, uint8_t bp, uint8_t bn) { digitalWrite(PIN_A_P, ap); digitalWrite(PIN_A_N, an); digitalWrite(PIN_B_P, bp); digitalWrite(PIN_B_N, bn); }PIN_EN单独拉出来是有意的,调试时把使能关掉,电机自由转动,可以用手感受轴承有没有卡滞;这一步能排除不少「以为是电气问题、实际是机械问题」的误判。coil_write封装成内联函数,后面换时序表只要改参数,不用动引脚。
注意:H 桥模块的 ENA/ENB 如果悬空,输出状态不确定,一定要拉到确定的电平;部分模块自带上拉,也建议显式驱动。
3.3 时序数组与步进函数:跑通 200 步一圈
把第 2 章验证过的表搬进 C,用二维数组存,行是拍、列是线圈。步进函数只做三件事:按当前索引取一拍、写到引脚、索引按方向走一格。
// 列顺序严格为 (A+, B+, A-, B-),与 Python 自检脚本保持一致 static const uint8_t SEQ_SINGLE4[4][4] = { {1, 0, 0, 0}, // 拍1: A+ {0, 1, 0, 0}, // 拍2: B+ {0, 0, 1, 0}, // 拍3: A- {0, 0, 0, 1}, // 拍4: B- }; static const uint8_t SEQ_HALF8[8][4] = { {1, 0, 0, 0}, // 1: A+ {1, 1, 0, 0}, // 2: A+B+ {0, 1, 0, 0}, // 3: B+ {0, 1, 1, 0}, // 4: B+A- {0, 0, 1, 0}, // 5: A- {0, 0, 1, 1}, // 6: A-B- {0, 0, 0, 1}, // 7: B- {1, 0, 0, 1}, // 8: B-A+ }; static int16_t g_idx = 0; // 当前拍索引,可为负,用取模归一 static uint8_t g_dir = 1; // 1 正转,0 反转 static uint8_t g_mode = 1; // 0 单4拍,1 8拍,2 双4拍 // 走一拍:返回实际写入的相位,便于示波器观测 uint8_t step_once(void) { const uint8_t (*tbl)[4]; uint8_t len; if (g_mode == 0) { tbl = SEQ_SINGLE4; len = 4; } else if (g_mode == 1) { tbl = SEQ_HALF8; len = 8; } else { tbl = SEQ_SINGLE4; len = 4; } // 双4拍同理替换 g_idx = (g_idx + (g_dir ? 1 : -1) + len) % len; // 负数取模要先加 len const uint8_t *p = tbl[g_idx]; coil_write(p[0], p[2], p[1], p[3]); // 注意列序映射:A+,B+,A-,B- -> ap,an,bp,bn return g_idx; }这里最容易翻车的是最后那行coil_write的参数顺序。数组列序是 (A+, B+, A-, B-),而函数形参是 (ap, an, bp, bn),所以映射关系是p[0]→ap, p[2]→an, p[1]→bp, p[3]→bn。写错一次,A 相和 B 相就换位,电机表现为「能转但方向反了、扭矩很小」,很多人第一反应是调换电机线,结果把问题藏得更深。
g_idx用int16_t而不是uint8_t,是为了处理反转时索引变负的情况,取模前先加len是 C 语言里的常规做法,否则负数取模结果是负的,数组越界直接跑飞。
3.4 节拍、加减速与换向:把 delay 换成状态机
delay(2)是新手最容易留下的定时炸弹。它阻塞主循环,按键、串口、限位全都停摆,而且节拍精度取决于编译器优化等级,同一份代码换块板子速度就变了。我一般改成基于micros()的非阻塞节拍器:
static uint32_t g_next_us = 0; static uint16_t g_interval_us = 4000; // 初始 4 ms 一拍,约 250 pps static uint16_t g_target_us = 800; // 目标 0.8 ms 一拍,约 1250 pps static uint16_t g_accel_us = 20; // 每拍缩短 20 us,线性加速 void step_task(void) { uint32_t now = micros(); if ((int32_t)(now - g_next_us) < 0) return; // 时间没到,直接返回 g_next_us += g_interval_us; step_once(); // 线性加减速:向目标间隔逼近,避免启动瞬间丢步 if (g_interval_us > g_target_us) { g_interval_us = (g_interval_us - g_target_us > g_accel_us) ? g_interval_us - g_accel_us : g_target_us; } } void motor_set_dir(uint8_t dir) { g_dir = dir ? 1 : 0; }逻辑上,g_next_us累加而不是赋值成now,是为了避免每次循环的时间抖动累积,长时间运行后节拍仍然均匀。(int32_t)(now - g_next_us) < 0这种写法能正确处理micros()溢出回绕,直接写now < g_next_us在 71 分钟之后会卡死一次,这种 bug 在台架上跑十分钟根本复现不出来。
参数上,g_interval_us的下限由电机的转矩-频率特性决定,不是越小越好。1.8° 电机在 24 V 供电、双 4 拍下通常能跑到 1000~1500 pps,再往上扭矩掉得很快,必须靠加速斜坡顶上去。g_accel_us设成 20 µs 意味着从 4000 µs 降到 800 µs 需要 160 拍,大约 0.3 秒,这个斜坡对大多数小惯量负载够用;负载惯量大就调小到 10 µs 拉长加速时间,或者改成 S 形曲线。
换向不能直接改g_dir就完事,正确做法是先按当前方向减速到最低速,再切方向,再加速回去。直接反向等于让转子瞬间倒转,丢步是轻的,严重的会把联轴器拧松。上面这段代码里我只留了接口,实际工程中会在motor_set_dir里加一个状态机,把「减速—停止—换向—加速」串起来。
4. 细分微步:从 1.8° 到 0.18°,分辨率和精度不是一回事
4.1 细分倍数的算术:每圈脉冲数、电角度与微步表
细分的本质是把一个整步的电角度 90° 再切成 N 份,靠精确控制两相电流的幅值,让合成磁场停在任意角度上。以 1.8° 两相电机为例,不细分时 200 个脉冲一圈;做到 10 细分,每个脉冲 0.18°,一圈 2000 个脉冲。倍数和脉冲数的关系简单到不需要记公式:每圈脉冲数 = 200 × 细分倍数,步距角 = 1.8° ÷ 细分倍数。
| 细分倍数 | 每圈脉冲 | 理论步距角 | 每微步电角度 |
|---|---|---|---|
| 1(整步) | 200 | 1.80° | 90° |
| 2(半步) | 400 | 0.90° | 45° |
| 4 | 800 | 0.45° | 22.5° |
| 8 | 1600 | 0.225° | 11.25° |
| 16 | 3200 | 0.1125° | 5.625° |
| 256 | 51200 | 0.0070° | 0.352° |
这张表右边两列要分开看。理论步距角是「发一个脉冲,磁场矢量转过的角度」,而电机实际能停到哪儿,取决于转子能不能分辨这么小的转矩差、驱动器的电流环精度够不够、齿槽转矩和摩擦占多大比例。10 细分下电机精度能不能接近 0.18°,原始资料里说得很清楚,取决于细分驱动器的电流控制精度等因素。我自己的经验是:4 细分以内基本能兑现,8~16 细分在空载、低摩擦的台架上能看出改善,再往上主要收益是噪声和低速平稳度,定位精度的提升非常有限,甚至会被机械回差完全吃掉。
还有一个常被忽略的点:细分不增加扭矩。微步时两相电流是正弦和余弦关系,合成矢量幅值保持不变,但每一相的峰值电流只有整步时的 0.707 倍左右,所以同样的绕组电流设定下,微步的保持扭矩反而略低于双 4 拍。想要高细分又要扭矩,只能提高电流设定或者换更大的电机。
4.2 硬件微步:DRV8889A-Q1 的引脚分工与 SPI 配置项
做到 1/16 以上的细分,靠单片机直接给 H 桥发高低电平已经不现实了,因为需要实时调节相电流的幅值,本质是一个电流环。这时候要用集成微步驱动器,DRV8889A-Q1 这类芯片支持到 1/256,把电流斩波、微步译码、故障检测都做在片内。
它的控制接口分两部分:实时运动用 STEP/DIR 两根线,配置和状态用 SPI。这一点和纯 STEP/DIR 的芯片不同,第一次上手容易只接 STEP/DIR 就通电,结果微步倍数还是默认值。
| 引脚 | 方向 | 作用 | 常见接法 |
|---|---|---|---|
| STEP | 输入 | 每个上升沿推进一步 | 接单片机定时器 PWM 或 GPIO |
| DIR | 输入 | 电平决定方向 | GPIO,换向前先减速 |
| nSLEEP | 输入 | 低电平休眠,释放后需等唤醒时间 | GPIO 上拉,故障时主动拉低 |
| nFAULT | 输出 | 开漏,故障时拉低 | 上拉到逻辑电源,接中断 |
| STL | 输出 | 失速检测指示 | 可悬空,调试时接 LED |
| SCLK/SDI/SDO/nSCS | SPI | 配置与回读 | 标准四线 SPI,模式按手册 |
SPI 侧我一般只动四类配置:微步模式(决定 STEP 一个脉冲走多少电角度)、电流档位(满量程的百分比,直接决定发热)、衰减模式(慢衰减/快衰减/混合,影响低速平稳度和电流纹波)、失速检测阈值(堵转时能不能及时报出来)。寄存器地址和位定义每颗芯片都不一样,这里不硬套,按手册逐位配就行,关键是配完要做一次回读校验——写完不读回来,等于闭着眼睛调参。
上电顺序也有讲究:先给逻辑电源,再拉高 nSLEEP,等芯片内部稳压和电荷泵就绪(手册里有个毫秒级的唤醒时间),再开始发 STEP。顺序反了,前几个脉冲会丢,表现出来就是「每次上电位置都不一样」,很多人误以为是丢步,其实是芯片还没醒。
4.3 软件微步:用两路 PWM 近似正弦电流的边界
没有专用芯片时,可以用单片机两路 PWM 加低通滤波,给 H 桥送近似正弦的电压,做低倍数微步(一般到 1/8 就到头了)。原理是把电角度离散成表,每一拍查一次两相的目标幅值。
import math def microstep_table(n_sub): """生成一个电周期(4*n_sub 微步)的两相幅值表,范围 0~1000""" tbl = [] for k in range(4 * n_sub): theta = math.pi / 2 * k / n_sub # 每微步 90/n_sub 电角度 ia = int(round(math.cos(theta) * 1000)) ib = int(round(math.sin(theta) * 1000)) tbl.append((ia, ib)) return tbl for n in (4, 8, 16): t = microstep_table(n) print(f"1/{n} 细分, 一个电周期 {len(t)} 微步, 一圈 {200 * n} 微步") print(" 前 4 项:", t[:4])microstep_table里用余弦给 A 相、正弦给 B 相,是因为两相绕组在空间上相差 90° 电角度,合成矢量的角度正好等于theta,幅值恒定为 1000。n_sub就是细分倍数,4 * n_sub是一个完整电周期的微步数,乘 50 个电周期就是一圈的总微步数。输出的 0~1000 对应 PWM 占空比的千分比,实际写进比较寄存器时按定时器位宽缩放。
这套做法的边界要提前说清楚:单片机输出的是电压,不是电流,绕组是感性负载,电流滞后于电压,低速时靠电感自然滤波还能看,转速一高波形就畸变,微步的均匀性直接崩掉。而且 H 桥的死区、管压降、电源纹波都会叠加成位置误差。所以软件微步适合低速、轻载、对成本敏感的场合,真要跑得稳、走得准,还是得上带电流环的集成驱动器。这不是玄学,是拓扑决定的。
5. 避坑与排查:五个把电机调成「嗡嗡响不转」的现场问题
5.1 现象一:原地抖动不转,手拨一下才勉强走
现象很典型:上电后转子在一个小角度内来回摆,发出低频嗡嗡声,用手轻轻一拨能转小半圈,松手又停。第一反应通常是电机坏了或者功率不够,其实八成是相序错了。原因在于 A+ 和 A- 是同一绕组的两端,如果时序写成 A+→A-→B+→B-,定子磁场只在一根轴上来回翻,不产生旋转磁场。解决方式是回到第 2 章的脚本,用hamming检查相邻两拍是不是只变一位,正常旋转磁场的差异数必须恒为 1。改完相序再上电,抖动会立刻消失。
还有一种可能是两相接线接反了:A 相接到了 B 相的桥臂上。用万用表量一下,同一绕组的两根线阻值几欧到几十欧,不同绕组之间不通,对不上就重新排线。
5.2 现象二:上电三秒驱动发烫,电机纹丝不动
现象是功率器件几秒内明显升温,电机一点动静
本文还有配套的精品资源,点击获取