
拆过硬盘的朋友基本都干过这件事掀开盖子先盯上那两块大磁铁撬下来吸螺丝、吸刀片顺手把盘片也扒了。其实大多数人漏了硬盘里最值钱的零件——主轴电机。那是一台标准的三相无刷直流电机定子上整整齐齐绕着三组线圈转子是一圈钕磁铁来源免费、结构典型比你去网上专门买教学电机划算多了。我这次就用一块报废的SATA机械硬盘把主轴电机拆出来再用三颗MOS管搭了一个最简无刷电机驱动电路让它成功地空转起来。电路图、换向逻辑、固件代码和实测数据我全都整理在下面了。这篇文章适合手头刚好有一块坏硬盘、想弄明白无刷电机到底怎么换向的朋友哪怕你之前没系统用过MOS管按着步骤走一遍也能搭出一个能转的实验装置。1. 为什么拆硬盘电机动手前的整体思路1.1 硬盘主轴电机被忽略的三相无刷电机硬盘的机械部分其实就两套执行机构一个是驱动磁头摆动的音圈电机另一个就是驱动盘片旋转的主轴电机。我们这次要用的就是主轴电机它位于硬盘底壳中心直径大概三到四厘米引出线通常是三根有的是四根多出来的一根是星形中心抽头。从电机学角度看它是一个永磁同步电机定子绕组呈Y型连接转子上有若干对磁极通电后靠定子磁场和转子磁场之间的拉扯来转动。相比航模上用的无刷电机硬盘电机的参数更适合做低压实验绕组直流电阻通常在1到3欧姆之间额定电压也就12V左右拆掉盘片后负载极轻空载电流很小。也就是说你用一个电脑电源或者12V电池就能喂饱它。这里要提醒一句拆硬盘时别戴容易吸附金属碎屑的手套盘片边缘非常锋利拆的时候最好用螺丝刀顶住中心螺丝从四周均匀撬起。硬盘里的磁铁吸力很强别让两块磁铁突然吸到一起。1.2 这次实验到底想验证什么我这次实验的目标很明确不是做一个能带负载的工业驱动器而是用最少的元件把无刷电机驱动这个原理跑通。具体验证三件事第一无刷电机的换向逻辑到底是怎么一回事。无刷电机没有电刷不能让电流自动换向必须外部电路按顺序改变绕组通电状态才能在定子上产生旋转磁场。第二MOS管作为电子开关是如何工作的。这次实验里三颗MOS管就是三个高速开关由单片机控制它们轮流导通把电机的三相绕组依次拉到地形成电流通路。第三验证一种非常规的三管驱动方式能不能驱动普通无刷电机。常规方案是六管全桥而我这次只用三个低边MOS管加上电机中心点接电源正极也能转起来只是性能和效率有限。1.3 方案选型为什么是三个MOS管而不是六个熟悉无刷驱动的人第一反应都是三相全桥不是需要六颗MOS管吗确实标准BLDC六步换向需要三个高边管和三个低边管高边管负责把某一相通到电源正极低边管负责把另一相通到地形成电流回路。我这次决定做减法把电机Y型绕组的中心抽头直接接到电源正极三相引出端A、B、C分别经过一颗N沟道MOS管接到地。这样一来每次只导通一颗MOS管电流路径就是电源正极→中心点→某一相绕组→对应MOS管→地。三颗MOS管轮流导通定子磁场就会在A、B、C三个方向上轮流建立形成一个步进式的旋转磁场转子也就能跟着转。这种方案把六步换向简化成了三步换向每相导通角度大约120度。优点是省管子、逻辑简单、不需要高档芯片适合入门缺点是绕组利用率低、转矩脉动大带不动大负载。不过对一个硬盘电机空转实验来说完全够用。2. 硬件准备元器件清单与选购避坑2.1 核心器件清单下面是本次实验用到的完整器件列表。大部分都能在旧货和拆机件里找到没有硬性要求一定买全新。器件型号/规格数量用途硬盘SATA/IDE机械盘均可1拆主轴电机N沟道MOS管IRLZ44N / IRF540N3三相低边开关肖特基二极管1N58193续流保护普通电阻100Ω3栅极串联电阻下拉电阻10kΩ3防止栅极悬空功率电阻10Ω/10W1限制启动电流主控板Arduino Nano/Uno1产生换向PWM信号电源12V直流 / 2A以上1电机主供电面包板、杜邦线若干-搭电路如果你手头只有IRF540N这种非逻辑电平MOS管也能用但要注意它需要10V左右的栅源电压才能完全导通如果直接用5V单片机驱动管子可能只开通了一半带载时发热会很严重。所以我更推荐IRLZ44N或者AO3400这种逻辑电平MOS5V驱动就能进入低导通电阻状态。我之前用IRF540N踩过坑后面会细说。2.2 MOS管选型的三个关键参数选MOS管时不用看花里胡哨的型号抓住三个参数就够了。第一个是漏源击穿电压V(BR)DSS。因为电机是感性负载关断瞬间会产生尖峰电压所以MOS管的耐压至少要高于电源电压的一到两倍。12V供电下选30V以上的管子就很安全我选的IRLZ44N是55V余量充足。第二个是导通电阻RDS(on)。这个值越小MOS管导通时自身的发热就越小。IRLZ44N的典型导通电阻在0.022Ω左右对于几安培的实验电流来说管子上消耗的功率几乎可以忽略。如果选了一个导通电阻好几欧姆的管子那电流稍大一点管子就会烫得厉害。第三个是开启阈值电压VGS(th)。普通MOS管可能需要5V以上才能完全开启而逻辑电平MOS管VGS(th)一般在1到2V5V单片机可以直接驱动。所以如果是用Arduino这类控制器优先选逻辑电平型号如果非要用普通MOS建议加一级三极管推挽或者用栅极驱动芯片。顺便解释一下MOS管的三个极G是栅极控制信号接这里D是漏极在N沟道管里接负载S是源极通常接地。它和三级管最大的区别是电压控制栅极几乎没有静态电流所以单片机IO口可以直连驱动但一定要串联一个电阻避免栅极电容充放电瞬间的冲击电流过大。2.3 工具准备除了元器件下面这些工具也建议提前备好一把十字螺丝刀拆硬盘数字万用表用来测绕组电阻和通断12V的电源或电池组如果想看波形一台便宜的示波器会很有帮助红外测温枪或者干脆用手摸MOS管外壳判断温度。没有示波器也不影响跑通实验只是少了观察反电动势波形的乐趣。万用表是必须的至少要能测电阻和电流。3. 电路原理三个MOS管怎么驱动三相无刷电机3.1 无刷电机驱动的本质是换向先回到最底层。有刷电机靠换向器和电刷实现机械换向无刷电机则把这一套结构挪到了外面靠电子开关改变绕组的通电状态。所谓换向就是按照转子位置按顺序改变定子绕组中电流的方向或路径让定子磁场的磁极位置始终领先转子磁极一步从而持续产生转矩。换向做得好不好直接决定电机能不能转、转得顺不顺、效率高不高。工业上会用霍尔传感器或者反电动势过零检测来获取转子位置从而精确安排换向时机。我这次做的是开环实验不检测位置直接用固定顺序强拖所以叫开环强拖启动。3.2 三管低边单相励磁方案的工作原理整个电路的核心是把电机星形连接的中心点接到电源正极。硬盘电机的三相绕组一端在内部已经连成Y型中心点另一端分别引到电机外部接线端。我们把中心点接12V三个引出端分别接三颗MOS管的漏极D三颗MOS管的源极S全部接地。当Arduino输出高电平给Q1的栅极时Q1导通A相绕组通过Q1到地形成回路此时B、C两相没有电流。接着关断Q1开通Q2B相绕组通电再关断Q2开通Q3C相绕组通电。依次循环定子磁场就在A、B、C三个方向之间轮流跳变每一步跳120度电角度。因为三相绕组的中心点电位是固定的12V所以每相绕组只会产生单方向的电流不像全桥那样能让某一相电流反向。这既是省MOS管的代价也是局限一相导通时另外两相完全空闲转矩是断续的。但好在硬盘电机空载时阻力很小旋转起来以后转子本身的惯性也帮了不少忙所以实验完全可行。3.3 续流二极管为什么必须加电机绕组是感性负载电感有个特性电流不能突变。当MOS管突然关断时绕组里还在流动的电流必须找一条路泄放掉。如果没有续流路径这个电流就会对MOS管的漏源电容充电瞬间把漏极电压抬到很高的尖峰轻则产生电磁干扰重则直接击穿MOS管。所以每一相都必须配一个续流二极管。二极管的方向很关键阳极接MOS管漏极也就是电机相线阴极接12V。这样当MOS管关断、相线电压超过12V时电感电流可以通过二极管流回电源钳住电压尖峰。有的朋友觉得MOS管内部自带体二极管是不是就不用外接了不行。体二极管方向是源极到漏极也就是从地到相线方向当相线电压被拉高时它并不会导通续流。所以外部必须再接一只快恢复二极管或肖特基二极管。我用的1N5819压降小、恢复速度快比较适合这种低压开关电路。3.4 电路图与接线说明整个电路的连接关系可以这样理解12V ──[Rlimit 10Ω]──★── 电机Y型中心点 │ ┌─────────────┼─────────────┐ A相绕组 B相绕组 C相绕组 │ │ │ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ │ D1│ │ D2│ │ D3│ 1N5819 │ ▲ │ │ ▲ │ │ ▲ │ │ │ │ │ │ │ │ │ │ 12V 12V 12V │ │ │ Q1漏极 Q2漏极 Q3漏极 IRLZ44N │ │ │ Q1源极 Q2源极 Q3源极 │ │ │ GND GND GND │ │ │ Q1栅极→100Ω→D9 Q2栅极→100Ω→D10 Q3栅极→100Ω→D11 │ │ │ 10kΩ到GND 10kΩ到GND 10kΩ到GND接线时注意几点第一12V电源正极不要直接接电机中心点先串联一个10Ω/10W功率电阻。原因很简单硬盘电机的绕组内阻很小直接通12V的话稳态电流可能到好几安培容易把MOS管和电源拖垮。串联限流电阻后即使程序跑飞导致某相一直导通电流也不会失控。第二栅极到Arduino之间串100Ω电阻可以减小栅极电容充放电对IO口的冲击也避免栅极驱动线引入的高频振铃。栅极和源极之间再并一个10kΩ下拉电阻确保单片机上电瞬间IO口处于高阻态时MOS管不会因为栅极悬空而误导通这一点在调试中非常重要。第三三颗MOS管的源极一定要共地并且尽可能靠近电源地端减小回路面积。面包板搭线时尽量用短导线电源线稍微粗一点防止大电流线上产生明显压降。4. 实操过程拆电机、搭电路、写代码4.1 从旧硬盘里取出主轴电机拆硬盘的步骤很直接先拧下外壳上的所有螺丝打开盖子接着把磁头组件上的限位螺丝和柔性排线取掉整个磁头臂就可以拿下来再用一字螺丝刀小心撬起盘片盘片一般由中心压片压着拧下压片螺丝即可取下最后在硬盘底壳中心就能看到主轴电机。主轴电机通常由三颗螺丝固定拧下后就可以从底壳中取出。注意电机和底壳之间可能有粘性导热胶稍微用点力晃动就能分离。取出后剪掉原来的柔性排线或引线露出三根或四根接线端子。如果是四根线其中一根是中心抽头接12V用如果是三根线说明星形中心点被封装在电机内部我们直接把三根线分别接MOS管漏极而中心点需要额外处理。事实上很多三线硬盘电机并没有把中心点引出来这就不能让中心点接12V。这时候还有一个变通办法把三根线中的任意一根当作公共端接到12V另外两根接MOS管。这样一来有两相串联后并联在一相上不对这样做驱动逻辑会变复杂。如果遇到三线电机我建议继续拆打开电机底部金属盖板可以看到内部绕组和星形连接点直接把中心点焊出一根引线来。不过这个操作需要小心绕组漆包线很细别刮断。我这次用的硬盘电机恰好是四线引出省了拆电机内部的步骤中心抽头明确标着COM。4.2 辨识三相绕组与公共端电机拆出来后不要急着接线先用万用表确认哪根是中心抽头、哪三根是相线。把万用表拨到电阻档测量任意两根引线之间的阻值。对于四线电机中心抽头到任何一根相线的阻值基本相等比如都是1.2Ω而两相相线之间的阻值是中心抽头到相线阻值的两倍差不多2.4Ω。因为两相绕组是串联在中心点和两个相线端子之间的。找到中心点之后用不同颜色的热缩管标记A、B、C三个相线方便后续换向。其实哪根是A、哪根是B、哪根是C并不严格因为换向顺序可以通过程序调整即便相序接反电机也只是反转交换任意两相即可。4.3 面包板搭建驱动电路接下来就是接线。我按下面这个顺序操作能有效降低出错概率先把三颗MOS管插到面包板上引脚朝向一致确认D极、S极、G极的位置。IRLZ44N的引脚从左到右一般是G、D、S但不同封装可能有差异最好查一下数据手册。然后把三个10kΩ下拉电阻从栅极接到源极也就是接到公共地排。再把100Ω栅极电阻一端接栅极另一端各接一根杜邦线准备连Arduino。接着接主功率回路三个MOS管的源极全部接到面包板的地排三颗1N5819二极管的阴极统一接到12V的正极排阳极分别接三个MOS管的漏极。最后把电机三根相线分别接到三个MOS管的漏极中心线接到12V正极排注意在正极排和电源之间串入10Ω功率电阻。4.4 单片机换向程序驱动逻辑其实很简单就是三个MOS管轮流导通。我用Arduino Nano作为主控D9、D10、D11三路PWM分别控制A、B、C三相。下面是完整的示例代码#define PIN_A 9 #define PIN_B 10 #define PIN_C 11 int duty 120; // PWM占空比0~255 unsigned long stepTime 30; // 每一步持续ms启动时先慢一点 void setup() { pinMode(PIN_A, OUTPUT); pinMode(PIN_B, OUTPUT); pinMode(PIN_C, OUTPUT); } void loop() { // 先关闭所有相再打开目标相避免两个MOS同时导通 digitalWrite(PIN_B, LOW); digitalWrite(PIN_C, LOW); analogWrite(PIN_A, duty); delay(stepTime); digitalWrite(PIN_A, LOW); digitalWrite(PIN_C, LOW); analogWrite(PIN_B, duty); delay(stepTime); digitalWrite(PIN_A, LOW); digitalWrite(PIN_B, LOW); analogWrite(PIN_C, duty); delay(stepTime); // 每循环一轮略微加快换向频率实现“强拖加速” if (stepTime 2) { stepTime--; } }这段代码的逻辑很直白先让A相导通一段时间然后关掉A相、打开B相再关掉B相、打开C相如此循环。stepTime从30毫秒开始每执行一轮就减少1毫秒直到最低2毫秒这样电机可以从低速慢慢被拖起来不会因为一开始换向太快而失步。有一点要注意代码里我特意先关闭其他两相再打开目标相顺序不能颠倒。如果先开新相再关旧相某一瞬间可能有两颗MOS管同时导通相当于两相同时接地会造成额外的电流冲击和磁场混乱。虽然这个实验里影响不大但养成先关后开的习惯以后做全桥驱动时会省很多麻烦。Arduino默认PWM频率比较低在490Hz左右驱动电机会有明显的嗞嗞噪声电流纹波也偏大。如果你不介意噪声就先这么跑想改善可以把D9和D10所在定时器的预分频调小把PWM频率提高到20kHz以上声音会安静很多。4.5 第一次通电开环强拖启动电路搭好、程序烧录完成后先不要急着接电机。单独给Arduino上电用万用表或示波器确认D9、D10、D11三路输出依次有脉冲跳变。确认之后把12V电源接到驱动板再连接电机。第一次通电建议把duty先改小一点比如80左右对应的平均电压不到4V电流比较温和。然后观察电机有没有动作正常情况下哪怕stepTime很大电机也会一卡一卡地跟着磁场转动就像步进电机一样。随着stepTime不断减小转速会持续爬升最终达到一个稳定的速度。如果电机完全不动先别急着加占空比检查三路PWM是否真的接到了正确的栅极或者用万用表量一下三个MOS管的漏极有没有依次出现低电平。还有一个常见的坑是MOS管没有完全导通如果驱动电压不足电机只能听到嗡声但转不起来。当电机顺利转起来之后可以慢慢增大duty观察转速和电流的变化。到这一步实验的主体就算跑通了。5. 实测数据与波形分析5.1 测试环境与记录方法我做测试时的环境是这样的12V开关电源供电电流通过万用表串联读取电机不装盘片直接悬空支撑限流电阻固定为10Ω/10WArduino占空比从60逐级调到255。转速不是用测速计量的而是用换向频率换算出来的。换算公式很简单电子换向频率等于每个完整循环所需时间的倒数对于四对极电机机械转速nrpm等于60乘以电频率再除以极对数4。比如stepTime为3毫秒时一个周期是9毫秒电频率约111Hz对应转速约1665转/分。这个估算值在电机稳定同步运行时是准的如果电机失步或处于加速过程中会有误差。5.2 不同PWM占空比下的转速和电流数据以下是我在室温约25℃条件下的记录PWM占空比平均电流换向频率估算转速MOS管表面温度8031%0.13A55Hz825rpm微温12047%0.19A90Hz1350rpm约40℃16063%0.26A125Hz1875rpm约48℃20078%0.32A165Hz2475rpm约55℃255100%0.39A210Hz3150rpm约62℃数据规律很明显占空比提高电机端平均电压升高转速和电流同步上升。转速和占空比基本呈线性关系说明电机工作在低负载区反电动势与转速成正比没有出现明显的换向饱和。需要说明的是这个电流是平均值实际MOS管和绕组中的峰值电流要比这个高。因为低压PWM下电流是脉动的尤其PWM频率较低时纹波很大。我在测量时特意把万用表打到DC电流档因此看到的已经是平均值。5.3 反电动势波形观察把示波器探头接到任一相线、参考地会看到该相在导通和关断两种情况下的电压波形。导体处于关断状态时该相绕组并没有电流但转子旋转会在绕组中感应出反电动势波形呈梯形波状叠加在电源电压上。反电动势的过零点就是换向的理想时机。在标准的无感无刷驱动中控制器会通过比较器或ADC检测这个过零点再延迟30度电角度后切换换向。我这套开环程序并没有做这个检测所以换向点是盲换转子位置超前或者滞后都会造成力矩波动。但你仍然可以用示波器先观察这个波形为以后改无感闭环驱动打下基础。如果不用示波器也可以把万用表拨到交流电压档在关断相上量出一个交流电压那就是反电动势的残余分量。5.4 数据背后的物理分析为什么转速会随着占空比增加而上升可以把每个导通状态看成给绕组施加一个平均电压电机稳态时绕组电流乘以电阻等于外加电压减去反电动势。反电动势又和转速成正比所以外加电压越高能平衡的转速就越高。空载电流不高是因为大部分电压被反电动势抵消了真正消耗在绕组电阻上的压降并不大。当电机轴上有负载时转速会下降反电动势变小绕组电流就会增大于是电机输出转矩来抵消阻力。这是所有直流电机的基本特性。还要说明的是三管方案下每相只导通120度每相绕组在一个电周期内只有三分之一时间通电所以它产生的平均转矩比全桥驱动低转速脉动也更明显。实验里能听到轻微的嗡嗡声就是转矩脉动的直接表现。6. 踩坑记录与问题排查速查表6.1 电机不转的4个原因排查实验过程不会总是一帆风顺我把最容易碰到的问题整理成一张速查表现象可能原因排查方法电机完全不动无声音栅极信号没到MOS管或接线错误检查D9/D10/D11三路信号用万用表量栅极电压核对相线和中心点电机嗡嗡响但不转换向速度太快转子跟不上把stepTime初始值调到50ms以上降低duty电机抖动一下又停换向顺序和相序不匹配磁场方向紊乱交换任意两相相线或修改程序中的换向顺序电机转但无力、电流很小MOS管没完全导通或限流电阻太大更换逻辑电平MOS管或减小限流电阻到5Ω左右我第一次实验时遇到的现象是电机只抖动不转排查半天发现stepTime初始值设成了5毫秒换向太快转子根本来不及跟上磁场。改成从50毫秒启动就顺利转起来了。6.2 为什么MOS管烫得能煎鸡蛋MOS管发烫通常是两件事造成的一是管子没有完全导通工作在线性放大区导通电阻比数据手册标称值大得多功耗自然高二是电机失步转子没有跟着磁场跑绕组电流失去反电动势的抵消可能长时间处于大电流状态。排查方法很简单用万用表测MOS管的栅源电压确认在导通状态下是不是接近5V再测漏源电压导通时应该接近0V如果还有好几伏甚至十几伏说明管子没有完全开。这种情况下换用逻辑电平MOS管是最直接的解决办法。第二个原因是失步。开环强拖在空载时很有用但负载稍重或者换向频率提升太快就会失步。失步的典型症状是电流突然变大、转速下降、电机发出不规则的噪声同时MOS管快速升温。遇到失步就立即断电把stepTime下降得慢一点或者增大限流电阻。我实测里MOS管在100%占空比下温度有62℃那是没加散热片的正常水平。如果在运行几分钟后手能一直放在管子表面超过几秒温度通常低于60℃问题不大如果烫到不能碰就要好好查原因了。6.3 换向失步与开环限制这套三管方案的核心局限是开环驱动。电机的换向时机全靠程序预先安排的固定顺序没有根据转子实际位置动态调整。所以电机只能在轻载、转速稳定的情况下运转一旦负载加大或者急加速就会失步。失步的物理本质是转子磁场没有跟上定子磁场导致两者之间的角度差越来越大最终平均转矩为零甚至反向。在实验中失步常表现为转速骤降、电流飙升。如果要进一步提高方向很明确改成闭环换向。最简单的方案是用三个霍尔传感器检测转子位置每次换向都根据霍尔信号决定或者走无感路线通过比较器检测反电动势过零点延迟30度后换向。再把PWM频率提上去、改用六管全桥就能接近一个正经的无刷驱动器了。6.4 后续可以怎么升级这个实验做完后如果你对无刷驱动产生了兴趣可以在现有基础上做几个小升级难度从低到高排列第一是换用六管全桥。云驱动板或自己搭IR2104半桥驱动芯片就能实现标准六步换向每步两相导通力矩明显提升。此时三管方案的代码稍作修改把换向状态从三个变成六个即可。第二是加入霍尔传感器闭环。从旧光驱或拆机风扇里可以找到霍尔芯片贴在电机定子旁边用单片机的三个外部中断读取位置信号实现真正与转子同步的换向噪音和发热都会下降。第三是上FOC。用STM32F103系列做磁场定向控制配合电流采样和编码器或观测器让电机运行得丝滑。不过那就是另一个深坑了需要投入的时间和资料都不少建议先把开环和霍尔换向玩明白再上。最后分享一个我自己的经验如果你想拿这个实验给孩子或者朋友演示什么是换向最好的方法是把stepTime故意调大比如500毫秒能看到电机一格一格地爬特别直观。等大家理解了原理再逐步提速到平滑旋转体验完全不一样。DIY的乐趣就在这个从卡顿到顺滑的过程里。