第1章:传感器与反馈系统——力矩闭环的“眼睛”和“耳朵”
大家好,我是你们这节课的讲师。咱们直接切入正题——力矩控制,说白了就是让机器人“知道”自己用了多大的力。那它怎么知道?靠的就是传感器和反馈系统。今天咱们就把扭矩传感器、电流传感器、编码器这三样东西彻底聊透。
1.1 扭矩传感器:直接测量力的“硬汉”
扭矩传感器,顾名思义,就是直接测扭矩的。它通常安装在电机输出轴和负载之间。你想想看,电机一转,轴上的扭矩就会让传感器内部的弹性体产生微小形变。通过应变片或者压电效应,这个形变就变成了电信号。
核心原理: 应变片桥式电路。扭矩导致弹性体形变,应变片电阻变化,电桥输出差分电压。
我在项目中遇到过一个问题:某次调试六轴机械臂,末端执行器总是抖。查了半天,发现是扭矩传感器的安装面不平,导致预紧力不一致。嗯,这里要注意——扭矩传感器的安装扭矩是有严格要求的,别随便拧。
读取方式: 一般通过ADC采集,比如用24位的Σ-Δ ADC,采样率至少1kHz。代码示例:
// 伪代码:读取扭矩传感器
uint32_t raw_adc = adc_read(ADC_CH_TORQUE);
float torque = (raw_adc - offset) * scale; // 标定后的扭矩值
我的习惯: 每次上电先做一次零点校准,记录offset值。因为温度变化会导致零点漂移,不校准的话,你测出来的力可能偏了10%以上。
1.2 电流传感器:间接估算力矩的“经济型选手”
电流传感器,其实更准确地说,是检测电机相电流的。为什么它能估算力矩?因为对于永磁同步电机(PMSM)来说,电磁转矩和q轴电流基本成正比。公式很简单:
T = Kt * Iq
其中Kt是转矩常数,Iq是q轴电流。但这里有个坑——电流传感器测的是相电流,你得通过Clark变换和Park变换才能得到Iq。而且,电机内部的摩擦、齿槽转矩都会让这个估算不准。
我曾经踩过的坑: 有一次用电流估算力矩做力控,结果发现低速时力控精度很差。后来排查发现,是电流传感器的偏置没校准好,导致低速时信噪比太低。解决办法:用高精度运放做偏置补偿,或者用差分采样。
读取方式: 通常用霍尔电流传感器或分流电阻+隔离运放。采样频率建议至少10kHz,因为电流环的带宽一般要1kHz以上。
// 伪代码:读取相电流并计算Iq
float ia = read_current_sensor(CH_A);
float ib = read_current_sensor(CH_B);
float ic = -ia - ib; // 三相平衡
// Clark变换
float i_alpha = ia;
float i_beta = (ia + 2*ib) / sqrt(3);
// Park变换(假设电角度theta已知)
float iq = i_beta * cos(theta) - i_alpha * sin(theta);
float torque_estimate = Kt * iq;
1.3 编码器:位置和速度的“守门员”
编码器,大家都很熟了。但我要强调一点——在力矩控制里,编码器不只是用来测位置的,它更是速度环和加速度环的基础。没有准确的角速度,你的力矩闭环就是瞎搞。
编码器分增量式和式。增量式便宜,但上电需要找零位;式直接告诉你位置,但贵。我个人习惯,做力矩控制时尽量用式编码器,省心。
读取方式: 对于增量式,用定时器捕获脉冲数;对于式,用SPI或SSI接口读取。速度可以通过位置差分得到,但要注意——直接差分会放大噪声。
我的建议: 用M/T法测速。低速时用T法(测脉冲间隔),高速时用M法(测脉冲数)。这样全速域都能保证精度。
// 伪代码:M/T法测速
uint32_t pulse_count = get_encoder_pulses();
uint32_t time_interval_us = get_time_interval();
float speed_rpm = (pulse_count * 60.0f) / (encoder_resolution * time_interval_us * 1e-6);
1.4 力矩闭环:把传感器数据串起来
好了,三种传感器都讲完了。现在把它们组合起来,形成一个完整的力矩闭环。说白了,就是:
- 目标力矩 从上层控制器来(比如轨迹规划器)。
- 实际力矩 通过扭矩传感器直接测,或者通过电流传感器估算。
- 误差 = 目标力矩 - 实际力矩。
- 控制器(比如PID)根据误差输出电流指令给电机驱动器。
- 编码器 提供位置和速度信息,用于前馈补偿或阻尼注入。
下面这张图展示了整个系统的数据流:
你看,整个系统就是一个典型的负反馈闭环。扭矩传感器或电流传感器提供力矩反馈,编码器提供位置和速度信息用于前馈或阻尼。PID控制器根据误差调整输出。
关键点: 力矩闭环的带宽取决于传感器采样率、控制器计算周期和电机响应速度。一般来说,电流环带宽最高(1-5kHz),速度环次之(100-500Hz),位置环最慢(10-100Hz)。力矩环通常放在电流环外面,带宽在100-500Hz左右。
1.5 实战中的避坑指南
- 传感器噪声: 扭矩传感器和电流传感器都有噪声。我习惯在ADC后面加一个低通滤波器,截止频率设为力矩环带宽的5-10倍。
- 标定问题: 扭矩传感器和电流传感器都需要标定。别偷懒,用标准砝码或扭矩扳手做一次完整的标定曲线。
- 温度漂移: 传感器受温度影响很大。我建议在电路板上加一个温度传感器,做温度补偿。
- 通信延迟: 如果用SPI或CAN读取传感器,注意通信延迟。我曾经遇到过因为CAN总线负载过高导致力矩环抖动的案例。
重要提醒: 力矩闭环不是万能的。如果机械结构有间隙或柔性,力矩环可能会振荡。这时候需要加入陷波滤波器或自适应控制算法。
好了,这一章的内容就到这里。传感器是力矩控制的基础,选型、安装、标定、读取,每一步都不能马虎。下一章咱们会深入讲力矩控制器的设计,包括PID参数整定和前馈补偿。到时候见。