自制电机测功机:从方案选型到实测验证的完整指南

📅 2026/8/26 4:44:08
自制电机测功机:从方案选型到实测验证的完整指南
过去半年我一直在做小型无刷电机的性能摸底评测手头攒了各种渠道弄来的电机从几十瓦的云台无刷电机到几百瓦的电动自行车轮毂电机都有。标称参数一个比一个漂亮但实际跑起来到底什么水平不上设备测根本说不清楚。要给电机做性能标定核心设备就是一台电机测功机Motor Dynamometer。我最初想直接买现成的查了一轮下来发现这个市场对个人开发者很不友好进口产品从几万到几十万国产入门级的也在万元以上而且多数测功机是为特定安装接口、特定功率段定制的换个电机尺寸就得换整套夹具。更麻烦的是很多商品测功机的软件和报告格式是封闭的数据导出来很麻烦。综合算下来自己动手造一台反而成了性价比最高、也最能贴合自己需求的选择。这篇文章就从方案选型、机械结构、电子系统、软件标定和实测结果五个方面完整记录我的Build a Motor Dynamometer全过程给正在犹豫要不要自制的朋友一个参考。1. 为什么不用现成的一台DIY测功机到底要解决什么问题1.1 成品测功机的价格与定制化困局先说说我为什么被逼到要自己造。市面上的电机测功机从原理上分成两大类一类是面向发动机、电机台架测试的重型设备扭矩量程几十牛米起步配套的底座、联轴器、冷却系统都是工业级整套下来十几万很正常另一类是针对小功率电机开发的桌面型测功机扭矩量程在0.01到5牛米之间听起来很合适但问题也不少。首先是价格。我联系了几家国产厂家一台扭矩量程2牛米、带基础软件的小型测功机报价在一万二到一万八之间如果是进口品牌比如Magtrol、Himmelstein这些价格直接翻到三万以上。这个价位对做产品开发的公司来说不算什么但对个人开发者、开源硬件玩家、或者还在验证阶段的小团队来说就是一笔不小的负担。其次是适配问题。测功机的机械接口通常要跟被测电机的法兰、轴径、安装孔距完全匹配。我手上有几种不同尺寸的电机有的轴径3.175mm有的5mm有的8mm法兰孔距更是五花八门。买一台成品回来还得为每一种电机定制联轴器和安装板这套开模或机加工费用算下来又是一笔钱。第三是软件封闭。很多成品测功机自带的上位机软件只能输出固定的测试报告格式数据导出还要额外收费想自己写脚本批量处理曲线、和自研驱动器的数据做对比都非常困难。所以我在立项时给自己定了一个硬性指标整套系统的数据格式必须完全开放想怎么处理就怎么处理。1.2 自制测功机的目标边界自己造测功机不等于要跟工业级的设备硬碰硬。测功机本质上就是一台可控负载加上扭矩、转速测量装置我在做之前先划了一个清晰的边界明确这台设备要干什么、不干什么。测量对象小功率无刷电机和直流电机功率范围在几十瓦到五百瓦之间扭矩量程设计在5牛米以内。这覆盖了云台电机、无人机电机、小型电动工具电机、滑板车轮毂电机等大多数个人开发者会接触到的类型。测量参数主要测四个量——扭矩、转速、母线电压、母线电流。由这四个量可以推出输出功率、输入功率和效率这是电机选型最核心的参考数据。测量模式以稳态特性曲线为主也就是让电机在每个负载点稳定运行后记录一组数据然后逐步改变负载画出完整的扭矩-转速曲线、功率-转速曲线和效率-转速曲线。这种模式对采样率要求不高但对数据稳定性和重复性要求很高。能力边界我很清楚不做几百安培大电流的冲击测试不去测几千牛米的重载台架也不追求实验室级别的瞬态响应。这个定位非常关键它帮我避开了很多不必要的复杂设计比如水冷系统、四象限能量回馈装置、高动态扭矩传感器。把边界划清楚之后整个项目的技术路线就变得非常清晰了。2. 测功机的核心原理与加载方案怎么选2.1 测功机在测什么扭矩、转速、功率三者的关系测功机的底层逻辑其实很简单就是让电机带着一个可控的负载旋转同时测量电机输出的扭矩和转速然后用公式算出功率。核心公式就三个输出机械功率P T × ω其中ω是角速度单位rad/s角速度与转速的关系ω 2πn / 60其中n是转速单位rpm所以功率也可以写成P T × 2πn / 60举个例子如果测得某电机在3000rpm时输出扭矩0.2Nm那么输出功率就是P 0.2 × 2π × 3000 / 60 ≈ 62.8W这个计算本身没什么难度真正难的是如何让电机在一个可控的负载下稳定运行。要知道电机的特性曲线不是一条固定直线而是多个工作点的集合。空载时转速很高扭矩几乎为零堵转时扭矩最大转速为零。测功机要做的就是把电机从空载到堵转之间的每一个工作点都稳定地抓住然后记录下对应的数据。要抓住工作点需要解决两个问题一是给电机加一个可调的负载二是测量这个负载施加给电机的扭矩有多大。前者是加载方式的问题后者是扭矩测量方式的问题。2.2 四种加载方式对比磁粉制动器为何是首选加载方式决定了测功机的性格。我认真对比了四种常见方案结论很明确对小功率电机的稳态测功来说磁粉制动器是最省心、最稳妥的选择。四种方案的对比放在下面。加载方式基本原理优点缺点适合场景磁粉制动器励磁线圈产生磁场磁粉链在旋转件之间形成剪切阻力扭矩平稳、低速扭矩大、励磁电流与扭矩线性度好、控制响应快需要散热有少量剩磁连续大功率加载容易发热小功率电机精确特性曲线测量涡流制动器旋转的金属盘在磁场中产生涡流涡流损耗形成制动力矩结构简单、高速性能好、无接触磨损低速时扭矩很小低速段测量困难高速电机额定点测试电机对拖能量回馈用另一台电机作为负载反向拖动被测电机通过变频器控制负载扭矩可以四象限运行、能量回馈电网、适合长时间加载和动态测试需要第二台电机和变频器控制系统复杂度高、成本高实验室和产线级测功台架摩擦制动用摩擦片直接压紧旋转件产生阻力结构最简单、成本最低摩擦片磨损快、扭矩不稳定、重复性差只能做临时性粗测磁粉制动器的工作原理可以这样理解励磁线圈通入直流电流后产生磁场让制动器内部工作间隙中的磁粉磁化形成一个个细小的磁链转子旋转时这些磁粉链被剪切产生一个与励磁电流成正比的阻力扭矩。调节励磁电流的大小就能平滑地改变负载扭矩而且这种扭矩在低速下依然能保持稳这一点对测功特别重要。实际选购时要注意额定扭矩的匹配。我选了一个额定扭矩5Nm的磁粉制动器配12V供电、最大励磁电流0.6A左右。为什么选5Nm这个档位因为我需要测的电机最大堵转扭矩大概在1Nm上下制动器额定扭矩留出3倍以上的余量有两个好处一是在低励磁电流下就能覆盖被测电机的全扭矩范围控制精度更高二是制动器自身的热容量更大连续运行时间可以更长。2.3 测扭矩的两条路旋转扭矩传感器与反作用力法扭矩测量的思路决定机械结构怎么搭。市面上有两种主流方案。方案一是把旋转扭矩传感器直接串联在电机轴和制动器之间。这种传感器内部有应变桥安装在旋转轴上通过滑环或无线方式输出信号。它的优点是可以直接测出传动轴上的真实扭矩不依赖外部结构但价格高一个量程合适的旋转扭矩传感器在国产市场也要两三千起步进口的更贵而且它对联轴器的同轴度要求极其苛刻安装不好误差很大。方案二是反作用力法也叫浮动定子法。它不直接测传递扭矩而是把制动器的机壳定子部分做浮动安装让机壳可以绕输出轴轴线微微转动。机壳上固定一根力臂杆杆的另一端顶在一个固定安装的力传感器上。当电机带着制动器的转子旋转时磁粉产生的阻力扭矩会反作用到机壳上机壳有绕轴旋转的趋势这个趋势通过力臂杆压在力传感器上。扭矩就等于力传感器读到的力乘以力臂杆的有效长度。我选的是方案二。原因很简单成本低一个数量级力传感器加变送器一共两三百块钱精度对DIY来说完全够用而且结构上天然把扭矩变成了力这个更容易标定的物理量后面校准非常直观。这套方法也是很多实验室老前辈常用的土办法听起来朴素但完全经得起推敲。3. 机械本体对中、浮动支架与力臂设计3.1 底座与对中这是测量稳定性的根基整体结构上我选用了4080铝型材搭底座尺寸控制在600mm长、300mm宽。铝型材的好处是灵活电机安装板、制动器安装板、传感器支架都可以用T型螺母固定在型材槽内后续调整位置非常方便。如果直接用铸铁平板或者钢板焊接框架刚性更好但改造空间小个人DIY没必要一开始就上那么重的方案。整个机械系统里最容易栽跟头的就是电机轴和制动器轴的同心度。如果两个轴不对中联轴器在转动时会产生周期性弯矩扭矩读数会跟着波动转速越高波动越明显。更麻烦的是不对中带来的附加弯矩会通过轴系传递到浮动支架的轴承上增加轴承阻力造成额外的测量误差。所以我把对中分成了两步做。第一步是粗对中用百分表架在电机轴上转动轴分别检查电机安装板连接法兰的径向跳动和端面跳动。调整电机安装板在型材上的位置和垫片厚度把跳动控制在0.1mm以内。第二步是精对中装好弹性联轴器后用手转动联轴器中间体感受转动是否顺畅、有没有卡涩感再配合百分表在联轴器外圆复查一次径向跳动控制在0.05mm以内。对于没有百分表的朋友有一个简易替代法找一根直的金属棒用磁力表座吸附在电机侧让金属棒指向联轴器的外圆面转动电机轴粗略观察间隙变化。虽然精度不如百分表但至少能把明显的偏斜暴露出来。3.2 制动器浮动安装与力臂杆设计磁粉制动器的浮动安装是整个机械结构里最关键的一步。我需要让制动器的外壳能够在支架上自由、低摩擦地旋转一个很小的角度同时承受径向和轴向的载荷。我的做法是用两块20mm厚的铝板做支撑侧板侧板上各装一个带座轴承UCP204两个轴承支撑一根转轴磁粉制动器的机壳通过法兰盘固定在转轴上。这样制动器外壳整体变成了一根可以绕轴微转的摆外壳旋转时只受轴承的滚动摩擦阻力很小。外壳上沿径向方向固定一根力臂杆杆长我取300mm杆末端顶住S型拉压传感器。这里有几个设计要点要特别说。力臂长度不是随便定的。传感器受力等于扭矩除以力臂力臂越长同样扭矩下传感器受力越小但分辨率越好、量程利用率越高。以我的设备为例额定扭矩5Nm力臂0.3m满量程时传感器受力约16.7N也就是1.7公斤力。我选了一个50kg量程的S型传感器因为它在受力小于2kgf时仍然有很高的分辨率同时又留出了很大的过载保护余量。如果力臂太长结构占用空间大轻微变形就会被放大太短则传感器受力过大容易接近量程上限。力臂杆的刚性也要注意。杆子如果太软在受力时会产生明显弯曲等效力臂长度发生变化影响线性度。我用的是12mm直径的不锈钢圆棒一端焊接一个连接块固定到浮动转轴上另一端加工出一个螺纹头方便连接传感器。安装时要用水平尺确认力臂杆在水平位置传感器也保持水平确保传感器受力方向与力臂杆垂直。如果不垂直实际的有效力臂要乘以cos夹角这个误差会直接体现在标定结果里。此外我在浮动结构上加了一个限位挡块限制外壳最大转角在正负5度以内。这样做是为了防止意外过载时外壳旋转角度过大把力传感器或力臂杆顶坏。限位挡块用螺栓固定在一块铝板上位置调整好后就锁死平时运行完全碰不到只起保护作用。3.3 联轴器选型与转速传感器安装联轴器我踩过坑后面实测部分会详细讲。这里直接说结论不要用顶丝固定的刚性联轴器哪怕扭矩不大也容易打滑而且打滑是间歇性的扭矩读数会莫名其妙地跳。我最终用的是夹紧式梅花联轴器中间带一个弹性梅花垫。这种联轴器对同轴度的要求比波纹管联轴器宽松又比梅花直连的轴套连接可靠能吸收一定的径向偏差非常适合DIY改装。转速测量方面我一开始想用电机自带的霍尔信号因为无刷电机的三根霍尔线直接就能输出方波。实测发现低速时霍尔信号频率太低比如电机极对数为7、三相霍尔信号每机械转产生21个脉冲转速降到100rpm时每秒钟只有35个脉冲采样窗口稍微短一点误差就很大。所以后来改为在电机轴端加装一个100线的光电增量编码器欧姆龙E6B2系列配一个简单的码盘支架。编码器输出两路正交脉冲既能测转速也能判断方向而且低速性能比霍尔信号好得多。转速测量精度直接关系到输出功率计算的准确性这笔投入值得花。编码器安装要注意码盘不能与电机轴之间有任何弹性连接否则转速读数会有相位滞后码盘和光电探头的间隙要严格按厂家手册调整太近会蹭到、太远会漏脉冲。我的安装方式是用一个3D打印的码盘座直接把编码器壳体固定在电机安装板上码盘紧套在电机轴上然后用联轴器把电机轴与制动器轴连接。4. 电子系统的三条线信号调理、数据采集与负载控制4.1 力传感器信号调理与ADC选择力传感器的原始输出非常微弱。我的S型传感器灵敏度是2.0mV/V当供桥电压为10V时满量程输出也只有20mV。这类差分信号不能直接接到单片机的ADC输入端因为普通单片机ADC参考电压通常是3.3V或5V输入信号太小分辨率完全不够。信号调理有三个方向可以选择。第一是直接用称重ADC模块比如HX711。它内部集成了仪表放大器和24位Delta-Sigma ADC专门为应变式桥式传感器设计接上传感器就能读数据成本只要几块钱。缺点是采样率很低默认10SPS做一些快速的动态测试就不够用了但稳态测功场景完全没问题。第二是仪表放大器加低速高分辨率ADC比如INA125加ADS1115。INA125可以用一个电阻设置增益把20mV信号放大到2V左右再用ADS1115以16位分辨率、860SPS采样率读取。这种方案动态响应比HX711好成本也不高。第三是工业级变送器把传感器信号直接变成0-10V或4-20mA的模拟量输出再接通用采集卡。这是最稳妥、抗干扰最好的方案但价格会高一些。我实际用的是HX711。原因很简单测功机只需要稳态数据10SPS完全够用而且HX711的24位分辨率让扭矩读数非常平滑省掉了很多软件滤波工作。唯一要注意的是HX711模块上通常会有两个通道用A通道接传感器增益默认128倍B通道接参考电压用不上。供电方面我给传感器用独立10V精密稳压电源HX711模块用5V供电两者共地信号线用双绞屏蔽线引出。4.2 电压电流采样与输入功率计算要算电机效率必须知道输入功率。输入功率等于母线电压乘以母线电流所以我要在电机驱动器的供电母线上同时采样电压和电流。电压采样比较简单用电阻分压把母线电压降到ADC可测范围就可以了。但电流采样要注意方法。常见的两种方案是用分流电阻加差分放大器或者用霍尔电流传感器。分流电阻方案精度高、响应快、成本低但需要在主回路串电阻会产生发热损耗霍尔电流传感器不侵入主回路电隔离但价格稍高零漂也大一些。我选择的是INA226模块方案。这个芯片是TI出的内部集成了电流采样放大器和16位ADC专门用于测量功率。INA226通过I2C接口输出母线电压、分流电阻电压和功率三个值我不需要自己搭差分放大电路代码里直接读寄存器就可以。分流电阻我用的是10毫欧的锰铜电阻最大可测电流约20A对500W的小电机来说足够。INA226的供电和被测电路之间是共地的使用时要确保测量端和主控端的地电位一致否则I2C通信会不稳定。还要提一个容易忽略的问题输入功率的测量位置在哪里。我测的是驱动器直流母线的输入功率这个值包含了驱动器自身的损耗。如果你关心的是电机本体效率严格来说应该测电机三相输入端的电压和电流那需要用三相功率分析仪复杂度高很多。对于电机选型和电机系统评估来说母线功率更有意义因为它代表了你整个电驱系统实际消耗的能量。我写测试报告时特意标明了输入功率母线侧功率免得后续看数据时长误导。4.3 磁粉制动器的励磁电流闭环控制磁粉制动器的特性是励磁电流和输出扭矩在一定范围内近似线性。但这里的坑在于励磁线圈温度升高后电阻会变大同样的驱动电压下电流会下降扭矩就跟着漂移。所以直接用固定PWM占空比控制制动器是不可靠的必须加一个电流闭环。控制电路很简单一个NMOS管IRLZ44N做低压侧开关磁粉制动器的励磁线圈一端接12V电源另一端接MOS管的漏极源极接一个0.1欧姆采样电阻到底。单片机用PWM输出控制MOS管栅极通过采样电阻两端的电压反馈给单片机ADC用软件PID调节占空比让励磁电流稳定在目标值。PWM频率我设在20kHz比音频范围高安静也能避开力传感器采样频段。20kHz的PWM对MOS管开关损耗来说略高但电流只有0.6A这个MOS管完全扛得住。实际驱动时要注意磁粉制动器线圈是感性负载MOS管漏极必须加续流二极管否则关断瞬间的尖峰电压会击穿MOS管。我用了SS34肖特基二极管反向耐压40V对这个电压等级有足够的裕量。电流闭环的PID参数比例系数要小一些因为励磁电流只要调到稳态值不需要快速响应积分系数稍大一些用来消除稳态误差。我自己的参数大概是P0.3、I0.5、D0.1实际效果是约1秒内电流稳定到目标值的正负2%。测功机本来就是要等电机稳定后再读数这个响应速度完全够用。5. 上位机编程与砝码标定把传感器读数变成可信数据5.1 数据采集协议与上位机架构下位机用STM32F103作为主控以10Hz的频率采集HX711力值、编码器转速、INA226电压电流和励磁电流反馈四个数据通过串口以CSV格式发送给上位机。串口波特率115200每一帧数据形如t1.2, T0.153, n2456, I0.82, V11.96, I_load0.24对应的字段分别是测试时间、扭矩(单位Nm由力值乘以力臂换算)、转速(rpm)、母线电流(A)、母线电压(V)、制动器励磁电流(A)。上位机用Python脚本写的核心功能有三个读取串口数据并实时绘制曲线、向制动器发送目标励磁电流指令、将数据保存为CSV文件。绘图用matplotlib串口通信用pyserial。整个测试流程是这样操作的先让电机空载运行等转速稳定后记录第一个工作点然后通过上位机将制动器励磁电流增加一小步比如从0增加到0.05A等待扭矩和转速重新稳定记录第二个工作点如此循环直到转速降到额定转速的20%以下或者扭矩达到设定上限。自动扫描的工作流也可以实现。我已经在脚本里写好了一个简单的负载扫描函数设定好起始电流、步进电流和末电流脚本会按顺序自动修改励磁电流目标值每个电流档位等待5秒后取数据平均值。因为电机在不同负载点需要几秒的稳定时间所以整个测试过程走一遍大概需要两三分钟效率还不错。5.2 砝码标定的完整步骤测功机做出来的第一件事不是接电机而是标定。标定的目的是确定力传感器读到的ADC值跟真实扭矩之间的一一对应关系。最可靠的办法就是砝码标定法。我专门做了一套标定工具一块用来挂砝码的托盘挂在力臂杆末端确保吊点位置与正常运行传感器受力点在同一位置。标定步骤如下先把力臂杆调水平确认砝码挂点位置到制动器轴心线的垂直距离L用卡尺多次测量取平均。我的力臂L0.300m。不加砝码让系统处于自由状态采集HX711的ADC原始值作为零点记为zero。依次在托盘上放置1kg、2kg、3kg、4kg、5kg标准砝码在每个重量下等HX711读数稳定后记录ADC平均值。每个重量重复三次取平均。将每个重量换算成扭矩。例如2kg砝码产生的扭矩为T m × g × L 2 × 9.8 × 0.3 5.88Nm。注意这里g取当地重力加速度如果你在城市里做测试用9.8就足够了如果要更高的精度可以查当地的重力加速度值。用最小二乘法拟合ADC值与扭矩之间的线性关系得到斜率k和截距b。实际拟合出来的线性相关系数R²在0.999以上说明整个测量链路的线性度非常好。标定过程有一个容易被忽略的点传感器在受力方向上的预紧。我在安装S型传感器时会给它一个很小的初始拉力预紧保证它在整个工作范围内都处于拉伸状态不会出现间隙导致的非线性。标定时要确保力臂杆仍然保持水平因为砝码重力垂直向下如果力臂杆不水平砝码力臂的有效长度就不再是L而要用三角函数修正。5.3 从原始数据到特性曲线的计算过程标定完成后下一步就是把每次测得的扭矩、转速、电压、电流变成特性曲线。这个阶段我完全不依赖测功机自带软件所有计算都用Python完成。数据清洗要做的第一件事是去抖动。由于电机运行存在轻微的转速波动实时读数会有随机噪声我做了一个简单的滑动平均窗口每20个连续采样点取平均把平滑后的值作为该工作点的数据。另一个问题是异常值剔除比如联轴器偶尔打滑时扭矩读数会突然跌落这种点通过设定一个与相邻点差值超过10%就标记为异常值的方式去除。清洗完成后对每个工作点计算三个衍生量输出功率P_out T × 2πn / 60输入功率P_in V × I效率η P_out / P_in × 100%然后绘制三张曲线T-n曲线、P_out-n曲线、η-n曲线。我把它们整合在一张图里用双纵轴表示。下面是一个简化版的上位机数据读取和计算代码框架可以参考import serial import numpy as np import matplotlib.pyplot as plt ser serial.Serial(/dev/ttyUSB0, 115200, timeout1) data [] while True: line ser.readline().decode().strip() if not line.startswith(t): continue parts dict(item.split() for item in line.split(, )) t float(parts[t]) torque float(parts[T]) speed float(parts[n]) current float(parts[I]) voltage float(parts[V]) data.append((torque, speed, current, voltage)) # 按设定步进修改励磁电流或者等待手动指令 # 当采集够一个工作点后暂停并计算平均值 # 假设 data_t、data_n、data_i、data_v 是平滑后的工作点数组 data_t np.array([d[0] for d in data]) data_n np.array([d[1] for d in data]) data_i np.array([d[2] for d in data]) data_v np.array([d[3] for d in data]) # 计算功率和效率 omega 2 * np.pi * data_n / 60 p_out data_t * omega p_in data_v * data_i eff p_out / p_in * 100 # 绘制扭矩-转速曲线和效率-转速曲线 fig, ax1 plt.subplots() ax1.plot(data_n, data_t, b-o, labelTorque) ax1.set_xlabel(Speed (rpm)) ax1.set_ylabel(Torque (Nm), colorb) ax2 ax1.twinx() ax2.plot(data_n, eff, r-s, labelEfficiency) ax2.set_ylabel(Efficiency (%), colorr) plt.show()6. 实测结果、精度验证与踩坑记录6.1 一台720KV无刷电机的完整测试设备搭建完成并标定之后我找了一台720KV的无人机无刷电机来试机。这个电机的标称参数是电压12V最大持续电流30A这里只是标称值实测结果很能说明问题。测试时供电电压设定为11.1V3S锂电满电值附近制动器从零电流开始每次增加0.05A励磁电流每个点稳定5秒后记录数据。从空载到堵转整个扫描过程一共采集了24个工作点下面是其中几个有代表性的点励磁电流(A)扭矩(Nm)转速(rpm)母线电压(V)母线电流(A)输出功率(W)输入功率(W)效率(%)0.000.008492011.10.94.110.041.00.050.052398011.12.821.731.169.80.100.098342011.14.335.147.773.70.200.185273011.18.152.889.958.70.300.276181011.113.552.3149.934.9从实测数据可以明显看到这台电机在扭矩0.1Nm附近、转速3400rpm左右时效率最高达到73.7%再继续增大负载输出功率虽然还在上升但输入功率增长更快效率反而下降。这个规律对无人机选型非常有参考价值——悬停工况的四分之一油门附近处于高效区而暴力加速工况则处于低效区长时间运行就要考虑散热问题。我注意到一个问题空载转速4920rpm按KV720算理论空载转速应该是11.1×7207992rpm实测明显偏低。原因有两点一是空载损耗轴承摩擦、风阻、铁损使实际转速低于理想值二是我的编码器测的是电机轴端包含了联轴器和制动器轴承的阻力这个阻力在高速时形成附加的制动扭矩。这个现象也说明测功机的空载扭矩不为零不能把空载转速当成理想空载转速。6.2 实际运行中遇到的