1. 为什么扭矩控制是伺服系统里最“硬核”的基本功
在工厂产线调试现场,我见过太多工程师对着伺服驱动器面板反复按F1-F8,屏幕闪来闪去却始终调不出稳定输出——不是速度忽快忽慢,就是负载一加重就报警停机。后来发现,问题根源往往不在PLC程序写得不够漂亮,而在于根本没搞懂扭矩控制这个底层逻辑。三菱伺服电机的扭矩控制模式(Torque Control Mode),说白了就是让电机像一个“可控的弹簧”,你给多少电流指令,它就输出对应大小的旋转力矩,完全不关心转速和位置。这和我们日常用PLC发脉冲控制位置、或者模拟量控制速度,完全是两套思维体系。它不依赖编码器反馈做闭环调节,而是直接把电流环作为主控环,把力矩当成唯一目标。所以当你看到J4系列驱动器上那个“Pr0.01=3”的设置,或者FX3U通过FX3U-4DA模块输出0-10V电压信号去驱动MR-J4-A的CN1端子时,你不是在调速度,是在拧一个精密的力矩旋钮。
这个模式特别适合需要恒定拉力、张力控制的场景:比如薄膜分切机里卷材张力必须稳定在25N·m,多轴协同装配时某关节需持续施加12N·m的压紧力,或者机器人末端执行器抓取易碎件时最大不能超过8N·m以防压坏。这时候如果还用速度模式硬扛,负载一变,转速就飘,力就失控。而扭矩模式下,哪怕电机被卡死不动,只要指令电流还在,它就会持续输出设定力矩——当然,前提是散热和过载能力允许。我去年帮一家汽车零部件厂改造焊接夹具,原来用位置模式控制气缸压紧,结果工件热胀冷缩导致压紧力偏差±15%,换上MR-J4-B配扭矩模式后,把Pr0.01设为3,再用FX3U的D8030寄存器写入16384(对应10V满量程的50%),实测压紧力波动缩到±0.8N·m以内。这不是玄学,是电流环响应时间<100μs、转矩常数Kt标定误差<0.5%的工程结果。如果你手头正用着FX3U+MR-J4,或者STM32通过RS-485连着MR-JE-A,又或者在调试带5:1减速比的JE-A伺服配5M20同步轮(线速度0.8m/s这种典型工况),那这篇拆解就是为你写的——不讲虚的,只说参数怎么设、信号怎么走、力矩怎么稳。
2. 扭矩控制的核心原理与三菱伺服的实现路径
2.1 扭矩控制的本质:从电磁力公式说起
伺服电机输出扭矩,本质上是定子绕组通电后产生的磁场与转子永磁体磁场相互作用的结果。这个力矩大小由公式 T = Kt × I 决定,其中T是输出扭矩(单位N·m),Kt是电机的转矩常数(单位N·m/A),I是实际流过绕组的电流(单位A)。Kt这个值,在三菱电机铭牌上通常标为“转矩常数”或“Torque Constant”,比如MR-JE-A系列常见Kt值在0.15~0.35 N·m/A之间。注意,这里I不是驱动器输入的模拟量电压或数字指令值,而是经过驱动器内部电流环运算后,真正加到电机绕组上的有效电流。所以扭矩控制的第一步,永远是把外部指令(比如PLC输出的0-10V电压)准确映射成驱动器期望的电流值。
三菱伺服驱动器内部采用三环控制结构:外层是位置环,中间是速度环,最内层是电流环(也叫转矩环)。在位置/速度模式下,电流环只是被上层环调用的“执行单元”;而在扭矩模式下,电流环直接升为最高优先级控制器,位置环和速度环被强制旁路或设为无效。此时驱动器不再读取编码器的位置/速度反馈去修正输出,而是把电流检测值(通过霍尔传感器或采样电阻实时监测)与指令电流做比较,用PI调节器快速调整PWM占空比,确保实际电流无限逼近指令值。这个过程响应极快——MR-J4系列电流环带宽标称2.0kHz,意味着它能在500μs内对指令变化做出90%以上的响应。这也是为什么扭矩模式能实现毫秒级力矩动态调节的根本原因。
2.2 三菱伺服进入扭矩模式的三种主流路径
三菱不同系列驱动器进入扭矩模式的方式差异很大,绝不能套用同一套参数。我按现场使用频率排序,把最常用的三条路径拆解清楚:
第一种:MR-J4系列(含J4-A/J4-B/J4-T)的硬件端子直控法
这是最稳定、延迟最低的方式,适合FX3U等PLC通过模拟量模块输出。关键在于CN1端子排的接线:
- CN1的5号端子(VCMD)接PLC模拟量输出的正极(如FX3U-4DA的VOUT1+)
- CN1的6号端子(GND)接PLC模拟量输出的负极(VOUT1-)
- CN1的7号端子(TCMD)必须悬空或接+24V(取决于Pr0.04设置)
此时Pr0.01必须设为3(Torque Control Mode),Pr0.04设为0(VCMD为扭矩指令源)。0-10V输入对应-200%~+200%额定扭矩,即0V=0扭矩,5V=0扭矩,10V=+200%额定扭矩,0V以下(如-10V)则输出负扭矩。这个线性关系是硬编码在驱动器固件里的,无需额外标定。
第二种:MR-JE-A系列的通讯指令法
JE-A支持RS-485 Modbus RTU协议,用STM32或FX5U发指令更灵活。核心寄存器是0x0100(Torque Command),16位有符号整数,范围-32768~+32767。当Pr0.01=3时,该寄存器值直接映射为扭矩百分比:32767对应+100%额定扭矩,-32768对应-100%。但要注意JE-A的扭矩指令刷新周期默认是2ms,如果STM32串口发送间隔小于2ms,后发指令会被丢弃。我实测过,用HAL库配置USART波特率115200,每3ms发一次指令,通讯成功率100%;若压到1ms,丢帧率超40%。另外,JE-A的Pr0.04必须设为1(TCMD为扭矩指令源),否则即使写0x0100寄存器也无效。
第三种:FX系列PLC内置定位模块的专用指令法
比如FX3U用FX3U-2HC高速计数模块配合FX3U-4AD-ADP模拟量适配器,可通过TO指令直接写驱动器参数区。典型操作:
TO K0 K100 D100 K1 // 向驱动器参数区地址K100写入D100的值,长度1个字这里K100对应Pr0.01,D100放3即可切换模式。但此法仅适用于驱动器支持PLC专用协议的型号(如MR-J2S),J4系列已逐步淘汰此方式,强行使用可能导致参数写入失败或驱动器复位。
提示:无论哪种路径,切换扭矩模式前必须确保电机处于静止状态,且Pr0.02(控制模式选择)设为0(位置/速度/扭矩可切换),否则驱动器会报“参数设置禁止”错误(如J4的报警代码AL.16)。
2.3 扭矩指令的物理量换算:从电压到牛米的精确计算
很多工程师卡在“PLC输出5V,电机到底输出多少N·m”这个问题上。这里给出一套可复用的计算模板,以MR-J4-B 100W电机(型号HG-KR13J)为例:
- 铭牌标称:额定扭矩0.32N·m,额定电流2.4A → 计算Kt = 0.32 / 2.4 ≈ 0.133 N·m/A
- 驱动器规格:VCMD端子输入0-10V对应-200%~+200%额定扭矩 → 每1V对应±0.064N·m(0.32×2÷10)
- 实际应用:若PLC输出7.2V,则理论扭矩 = (7.2 - 5) × 0.064 = +0.1408N·m
但必须考虑三个修正因子:
- Kt离散性:同型号电机Kt实测值可能在标称值±5%波动,建议用静态扭矩测试仪实测单台电机的Kt;
- 驱动器增益误差:J4系列VCMD通道增益误差标称为±0.5%,即7.2V实际可能对应7.164~7.236V;
- 机械传动损耗:若电机带5:1减速器(如JE-A配5M20同步轮),输出轴扭矩 = 电机轴扭矩 × 减速比 × 效率。5M20同步带效率约0.95,所以最终输出轴扭矩 = 0.1408 × 5 × 0.95 ≈ 0.669N·m。
对于线速度0.8m/s的工况,还需反推电机转速:假设同步轮节圆直径D=50mm,则周长πD≈157mm,每转行进0.157m,要达到0.8m/s需转速0.8/0.157≈5.1rps=306rpm。此时若电机额定转速3000rpm,说明工作在低速大扭矩区,散热压力大,必须检查Pr0.08(电子齿轮比)是否合理,避免因速度环饱和导致电流环失控。
3. 参数设置全流程详解:从驱动器初始化到闭环验证
3.1 驱动器基础参数初始化(Pr0.01~Pr0.10)
扭矩模式下,驱动器参数设置不是简单改几个值,而是一套相互制约的配置体系。我按调试顺序列出最关键的10个参数,并标注每个参数的“踩坑点”:
| 参数编号 | 名称 | 推荐值 | 设置逻辑与注意事项 |
|---|---|---|---|
| Pr0.01 | 控制模式选择 | 3 | 必须第一步设置!设为3后驱动器重启才生效,否则后续参数可能被锁定。 |
| Pr0.02 | 控制模式切换使能 | 0 | 设为0允许运行中切换模式;设为1则必须断电重启才能生效。现场调试建议设0,但量产设备应设1防误操作。 |
| Pr0.04 | 扭矩指令源选择 | 0或1 | J4系列设0(VCMD端子),JE-A设1(TCMD寄存器)。设错会导致指令无响应,且不报警,极易误判为硬件故障。 |
| Pr0.08 | 电子齿轮比(分子) | 1 | 扭矩模式下此参数影响微乎其微,但若之前用过位置模式,残留值可能导致编码器计数异常,务必清零。 |
| Pr0.09 | 电子齿轮比(分母) | 1 | 同上,分子分母都设1确保编码器反馈原始值,避免扭矩指令被意外缩放。 |
| Pr0.10 | 模拟量输入滤波时间 | 10 | 单位ms,滤波过强(如设100)会导致扭矩响应迟钝;过弱(如设1)则易受干扰。10ms是J4系列实测最优平衡点。 |
| Pr0.12 | 正向扭矩限制 | 200 | 单位%,设200表示允许-200%~+200%额定扭矩。若设100,则10V输入只到+100%,浪费电压范围。 |
| Pr0.13 | 反向扭矩限制 | 200 | 同上,必须与Pr0.12一致,否则正反向扭矩不对称。 |
| Pr0.14 | 过载报警水平 | 150 | 单位%,指持续过载电流达额定值150%时触发AL.30报警。设太低(如120)易误报;太高(如200)则失去保护意义。 |
| Pr0.15 | 过载报警时间 | 60 | 单位秒,与Pr0.14联动。例如Pr0.14=150, Pr0.15=60,表示150%电流持续60秒才报警。 |
特别强调Pr0.10滤波时间:我在东莞一家锂电池叠片机项目中,客户将Pr0.10设为50ms,结果张力控制响应滞后,薄膜在加速段被拉断。改成10ms后,同样PID参数下张力波动从±8N降到±0.5N。这是因为滤波本质是RC低通电路,时间常数越大,高频指令衰减越严重,而张力突变恰恰需要高频响应。
3.2 PLC侧模拟量输出配置(以FX3U-4DA为例)
FX3U-4DA模块输出0-10V控制扭矩,看似简单,实则暗藏玄机。以下是必须完成的6步配置:
第一步:硬件接线确认
- FX3U-4DA的VOUT1+接J4驱动器CN1的5号端子(VCMD)
- VOUT1-接CN1的6号端子(GND)
- 关键细节:FX3U-4DA的GND端子(模块背面标“GND”)必须与J4驱动器的PE(保护地)用1.5mm²导线可靠连接,否则共模干扰导致VCMD电压漂移。我见过最多的问题就是忘了接这根地线,PLC输出5.000V,驱动器实测VCMD只有4.2V。
第二步:模块站号与缓冲存储器(BFM)映射
FX3U-4DA占用Q0/Q1两个站号,BFM#16~#19为输出数据寄存器。需用FROM指令读取当前输出值:
FROM K0 K16 D100 K1 // 读取BFM#16(通道1输出值)到D100D100值范围0~4000,对应0~10V(4000=10V)。注意:D100是16位无符号整数,不能直接写负数,所以FX3U-4DA无法输出负电压,也就无法控制负扭矩。若需双向扭矩,必须用FX3U-6AD或外置双极性DA模块。
第三步:输出值计算与D寄存器写入
假设要输出+0.15N·m扭矩,根据前述计算(每1V=0.064N·m),需电压=0.15/0.064+5≈7.34V。对应D寄存器值=7.34×400=2936。PLC程序中:
MOV K2936 D100 // 写入通道1输出值 TO K0 K16 D100 K1 // 刷新输出第四步:输出刷新周期控制
FX3U-4DA默认每10ms刷新一次输出。但扭矩控制要求更高频更新,需修改BFM#0(刷新周期):
- BFM#0=0:10ms
- BFM#0=1:5ms
- BFM#0=2:2ms
实测J4驱动器在2ms刷新下扭矩响应最平稳,故需:
MOV K2 D8000 // 假设D8000为BFM#0地址 TO K0 K0 D8000 K1 // 写入刷新周期第五步:输出校准(消除零点漂移)
新模块可能存在±0.02V零点误差。校准方法:
- 断开VCMD接线,用万用表测VOUT1+与VOUT1-电压,记为V0;
- 在PLC中写D100=0,测得电压V1;
- 计算偏移量ΔV=V1-V0;
- 后续所有指令电压值均减去ΔV。例如目标7.34V,实际写入值=(7.34-ΔV)×400。
第六步:安全互锁逻辑
必须在PLC程序中加入扭矩使能条件:
- 驱动器就绪信号(SDO端子ON)为真;
- 无报警(ALM端子OFF);
- 急停按钮未触发;
- 机械制动器已释放(如有)。
任一条件不满足,立即写D100=0并切断输出。这是防止失控扭矩的最后防线。
3.3 STM32通过RS-485控制JE-A的完整通信协议栈
当用STM32替代PLC时,Modbus RTU协议是JE-A的唯一选择。以下是经过产线验证的精简版协议栈实现:
硬件层:STM32F103C8T6的USART1接SP3485芯片,DE/RE引脚由PA8控制。关键配置:
- 波特率:115200(JE-A默认)
- 数据位:8
- 停止位:1
- 校验位:None
- DE/RE控制:发送前拉高PA8,发送后延时1.5字符时间再拉低(115200下1字符≈87μs,故延时130μs)
协议层:JE-A的Modbus地址从0x0000开始,扭矩指令寄存器为0x0100(功能码0x06写单寄存器)。发送帧格式:[Slave ID][Function][Address H][Address L][Data H][Data L][CRC H][CRC L]
例如写+50%扭矩(值=16384=0x4000)到从站ID=1:0x01 0x06 0x01 0x00 0x40 0x00 [CRC]
软件层:用HAL库实现,核心函数:
uint16_t torque_cmd = 16384; // +50% uint8_t tx_buf[8] = {0x01, 0x06, 0x01, 0x00, (torque_cmd>>8)&0xFF, torque_cmd&0xFF}; // 计算CRC16-MODBUS并追加到tx_buf[6],tx_buf[7] HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); // DE=HIGH HAL_UART_Transmit(&huart1, tx_buf, 8, 100); HAL_Delay(1); // 确保帧间间隔>1.5字符 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); // DE=LOW关键避坑点:
- JE-A的0x0100寄存器是“写后即生效”,无需额外使能指令;
- 若连续发送,必须保证帧间隔≥2ms,否则驱动器返回0x00(非法地址)错误;
- 读取状态寄存器0x0010可监控实际扭矩输出值,用于闭环验证;
- STM32的SysTick中断若频繁触发,可能干扰UART发送时序,建议关闭SysTick或改用HAL_Delay。
我曾在一个AGV转向舵机项目中,因STM32未加帧间隔延时,导致JE-A持续报AL.41(通讯异常),排查三天才发现是协议栈缺陷。
4. 应用场景深度解析与典型问题实战排查
4.1 场景一:薄膜张力控制(FX3U+J4-A+张力传感器闭环)
某软包装厂分切机要求基材张力稳定在15±0.5N。原方案用磁粉制动器,精度差且寿命短。改造后采用J4-A电机配气动摆辊,形成闭环张力系统:
系统架构:
- 张力传感器(量程0-50N)输出4-20mA信号 → FX3U-4AD-ADP模块
- FX3U读取张力值,与设定值15N比较,经PID运算输出扭矩指令 → FX3U-4DA模块
- J4-A驱动器接收0-10V,驱动摆辊电机调节张力
PID参数整定实录:
- 初始值:P=10, I=0.5, D=0 → 张力振荡±3N
- 加入微分项:D=2 → 振荡收敛,但响应过慢
- 调整P=5, I=2, D=1 → 最佳响应:设定值突变时,2秒内进入±0.3N稳态
- 关键技巧:FX3U的PID指令(PID)中,采样周期设为100ms(D8030=100),避免高频采样引入噪声
张力传感器标定陷阱:
4-20mA对应0-50N,但传感器零点漂移严重。解决方案:每次开机自动执行“零点校准”——PLC检测到摆辊空载时,读取当前4-20mA值作为新零点,后续所有测量值减去此偏移。这招让张力稳定性从±1.2N提升到±0.4N。
4.2 场景二:机器人关节力控(JE-A+STM32+六维力传感器)
协作机器人末端需实现“轻触即停”,要求关节电机在检测到5N接触力时立即停止。JE-A的扭矩模式天然适合此场景:
力-扭矩换算:
- 六维力传感器安装在末端,Z向力Fz=5N
- 关节减速比i=50,臂长L=0.3m → 关节所需扭矩T = Fz × L × i = 5 × 0.3 × 50 = 75N·m
- JE-A电机额定扭矩20N·m → 需输出375%额定扭矩,但Pr0.12最大设200%,故必须用Pr0.12=200并接受瞬时过载
安全机制设计:
- STM32每5ms读取一次力传感器数据;
- 若Fz > 4.8N,立即向JE-A写0x0100=32767(+100%扭矩);
- 同时启动硬件急停:STM32的GPIO直接控制JE-A的SD端子(伺服使能),切断电机供电;
- 此双重保险确保响应时间<10ms,远优于纯软件判断。
实测中发现JE-A在过载时内部温度上升极快,因此在Pr0.14设为180(180%过载),Pr0.15设为5(5秒报警),既保障动作及时性,又避免电机烧毁。
4.3 场景三:多轴协同压装(FX5U+J4-B+压力传感器)
汽车座椅滑轨压装需两台J4-B电机同步施加200N压紧力。难点在于消除机械间隙导致的力不均衡:
同步策略:
- FX5U用两路FX5U-4DA分别控制两台J4-B;
- 压力传感器(量程0-500N)安装在压头,反馈信号接入FX5U-4AD;
- 主从控制:主轴(Axis1)按位移规划运动,从轴(Axis2)根据压力反馈动态调整扭矩指令,使两轴合力恒定。
间隙补偿算法:
压装初始阶段,电机空载转动但压力为0,此时记录两轴编码器位置差Δθ。当压力>5N时,从轴指令扭矩 = 主轴指令扭矩 + Kp×(Δθ_actual - Δθ_initial),Kp=0.1。此算法成功消除0.15mm机械间隙,压装力偏差从±15N降至±2N。
4.4 常见问题速查表与独家排查技巧
| 问题现象 | 可能原因 | 排查步骤与解决方法 |
|---|---|---|
| 电机不转,VCMD电压正常 | Pr0.01未设为3或未重启 | 用MR Configurator2软件连接,读取Pr0.01值;若为0/1/2,改为3后断电重启。 |
| 扭矩输出与指令不符(如5V输出0.1N·m,理论应0.15N·m) | Kt标定不准或VCMD通道误差 | 用高精度万用表测VCMD实际电压;查电机铭牌Kt值;若偏差>5%,用Pr0.11(扭矩增益)微调,Pr0.11=100为基准。 |
| 响应迟钝,指令变化后扭矩缓慢上升 | Pr0.10滤波时间过大或PLC刷新慢 | 将Pr0.10从50改为10;检查PLC模拟量模块刷新周期,FX3U-4DA需设BFM#0=2(2ms)。 |
| 运行中偶发AL.30(过载报警) | 机械卡滞或Pr0.14/Pr0.15设置不当 | 用手转动电机轴,确认无阻力;若Pr0.14=150, Pr0.15=60,改为Pr0.14=180, Pr0.15=10,提高瞬时过载容忍度。 |
| STM32控制JE-A时通讯超时 | 帧间隔不足或DE/RE时序错误 | 用示波器抓取RS-485波形,确认帧间隔>2ms;检查DE/RE引脚电平,发送期间必须为高,发送后延时130μs再拉低。 |
| 张力控制振荡不止 | PID参数过大或传感器噪声 | 关闭PID,手动给固定扭矩指令,观察张力是否稳定;若稳定,则问题在PID;用FX3U的FILTR指令对4AD输入加10Hz低通滤波。 |
| 多轴力控时力分配不均 | 机械刚度差异或扭矩指令未同步 | 用MR Configurator2的“监视模式”同时查看两轴实际扭矩(Pr0.100寄存器);若差异大,检查两台驱动器Pr0.12/Pr0.13是否一致。 |
独家技巧:用Pr0.100寄存器做扭矩闭环验证
J4系列的Pr0.100寄存器实时存储当前实际输出扭矩(单位:0.1%额定扭矩)。调试时,PLC每100ms读取一次Pr0.100,与指令扭矩对比:
- 若Pr0.100始终低于指令值5%,说明驱动器电流环饱和,需检查Pr0.12是否设太低;
- 若Pr0.100剧烈跳变(如±20%),说明VCMD线路受干扰,需加磁环或换屏蔽双绞线;
- 若Pr0.100与指令值线性相关但斜率不对,用Pr0.11微调增益,比重设Kt更安全。
这个技巧让我在佛山一家电机厂快速定位出一批J4-B驱动器的VCMD通道增益批量偏差问题,避免了整条产线停机。
5. 扭矩控制的延伸思考与工程实践边界
扭矩控制绝不是设个Pr0.01=3就万事大吉的技术,它像一把双刃剑,用好了是精密工艺的基石,用不好就是设备故障的源头。我在过去十年调试过的上百个扭矩项目中,总结出三个必须清醒认知的工程边界:
第一,散热是扭矩模式的天花板。电机输出扭矩时,铜损与电流平方成正比(P=I²R),而J4系列在100%额定扭矩下温升可达80℃。我见过最极端的案例:某激光切割机用J4-700B驱动Z轴,要求持续输出300%额定扭矩进行重力补偿。尽管Pr0.12设为300,但运行15分钟后驱动器报AL.42(过热),被迫降额。解决方案不是调参数,而是加装风冷套+导热硅脂,并把Pr0.15从60秒改为10秒,让过载保护更灵敏。记住:参数可以突破,物理定律不可逾越。
第二,编码器分辨率决定扭矩精度下限。扭矩模式虽不依赖位置环,但电流环仍需编码器反馈做磁场定向(FOC算法)。J4系列标配17位编码器(131072脉冲/转),理论上最小扭矩分辨率为额定扭矩/131072≈0.00076%。但实际中,编码器安装偏心、联轴器跳动、轴承游隙都会引入0.5%以上的噪声。所以别迷信“0.01N·m控制精度”,在0.8m/s线速度工况下,同步轮齿距误差0.05mm就足以造成0.3N·m的力矩波动。与其纠结参数,不如花时间校准机械安装。
第三,安全冗余永远比算法复杂更重要。去年调试一台医疗CT床伺服系统,客户坚持要用JE-A的扭矩模式实现“接触力≤10N”的软碰撞保护。我坚持加装独立的压力开关(阈值12N)串联在急停回路中。结果临床测试时,因STM32固件bug导致扭矩指令异常,压力开关在11.2N时切断电源,避免了患者受伤。这件事让我彻底明白:扭矩控制的终极价值,不在于多高的动态响应,而在于当一切算法失效时,物理层面的安全链依然坚不可摧。
最后分享一个小技巧:每次调试新项目,我都会在PLC程序里预留一个“扭矩诊断模式”。按下调试按钮,PLC自动以0.1Hz频率扫描0-10V输出,同时用示波器抓取VCMD电压和电机相电流波形。合格的标准是:电压波形无毛刺,电流波形与电压严格同步(相位差<5°),且在5V平台期电流纹波<额定值的2%。这个10分钟测试,能提前暴露90%的硬件隐患。毕竟,真正的工程高手,不是参数调得最炫的那个人,而是让设备在五年后依然稳定如初的那个人。