跟随误差&电机过载保护
概述
跟随误差和电机过载保护是机器人运动控制中的关键安全监测机制。本章说明跟随误差的概念、监测参数设置、电机过载保护配置以及速度碰撞检测功能。
跟随误差概念
什么是跟随误差
跟随误差是指控制器下发的指令位置与伺服驱动器反馈的实际位置之间的偏差。它是衡量伺服系统跟踪性能的核心指标。
- 静态误差:机器人静止时的指令位置与实际位置偏差
- 动态误差:机器人运动时的指令位置与实际位置偏差
跟随误差过大的原因
| 原因 | 说明 | 排查方向 |
|---|---|---|
| 负载过重 | 电机输出扭矩不足以驱动负载 | 减轻负载或调整加减速参数 |
| 加减速过大 | 指令加速度超过电机能力 | 降低加速度参数 |
| 机械卡滞 | 机械传动部分存在阻力 | 检查减速机、导轨等机械部件 |
| 伺服参数不当 | 伺服增益等参数设置不合理 | 调整伺服 PID 参数 |
| 编码器故障 | 编码器反馈异常 | 检查编码器连接和状态 |
跟随误差保护机制
当跟随误差超过设定的最大跟随误差上限时,控制器将:
- 立即停止当前运动(紧急停止)
- 上报跟随误差过大错误(kind=2)
- 需要清除错误后才能重新使能
1. 最大跟随误差上限
1.1 上位机设置最大跟随误差参数上限
命令字: 0x3860
参数列表:
| 参数名 | 类型 | 说明 | 范围 |
|---|---|---|---|
| maxDynamicDeviations | int[6] | 最大动态误差 | [1, 2×10⁷] ‱° |
| maxStaticDeviations | int[6] | 最大静态误差 | [1, 2×10⁷] ‱° |
单位说明: ‱° 表示万分之一度(0.0001°),例如 5000000 表示 500° 的跟随误差阈值。
请求示例:
json
{
"maxDynamicDeviations": [5000000, 5000000, 5000000, 5000000, 5000000, 5000000],
"maxStaticDeviations": [5000000, 5000000, 5000000, 5000000, 5000000, 5000000]
}参数配置建议
- 动态误差通常设置为静态误差的 2-5 倍,因为运动时允许更大的跟随偏差
- 对于高精度应用(如激光切割),应设置更小的跟随误差阈值
- 对于重负载应用,可适当增大阈值以避免频繁触发保护
- 各轴独立设置,通常 J1-J3 轴负载较大,可设置较大阈值
1.2 上位机查询最大跟随误差参数上限
命令字: 0x3861
参数列表:
| 参数名 | 类型 | 说明 | 范围 |
|---|---|---|---|
| robot | int | 当前机器人号 | [1, 4] |
请求示例:
json
{
"robot": 1
}1.3 控制器回复上位机最大跟随误差参数上限
命令字: 0x3862
参数列表:
| 参数名 | 类型 | 说明 | 范围 |
|---|---|---|---|
| maxDynamicDeviations | int[6] | 最大动态误差 | [1, 2×10⁷] ‱° |
| maxStaticDeviations | int[6] | 最大静态误差 | [1, 2×10⁷] ‱° |
| robot | int | 当前机器人号 | [1, 4] |
响应示例:
json
{
"maxDynamicDeviations": [5000000, 5000000, 5000000, 5000000, 5000000, 5000000],
"maxStaticDeviations": [5000000, 5000000, 5000000, 5000000, 5000000, 5000000],
"robot": 1
}2. 当前跟随误差(监控)
2.1 上位机查询当前跟随误差
命令字: 0x3870
参数列表:
| 参数名 | 类型 | 说明 | 范围 |
|---|---|---|---|
| robot | int | 当前机器人号 | [1, 4] |
请求示例:
json
{
"robot": 1
}2.2 控制器回复上位机当前跟随误差
命令字: 0x3871
参数列表:
| 参数名 | 类型 | 说明 | 维度 |
|---|---|---|---|
| curDeviations | double[7] | 当前机器人误差列表 | 单位 ‱° |
| curExternalDeviations | double[5] | 当前外部轴误差列表 | 单位 ‱° |
| maxDeviations | double[7] | 最大机器人误差列表 | 单位 ‱° |
| maxExternalDeviations | double[5] | 最大外部轴误差列表 | 单位 ‱° |
| robot | int | 当前机器人号 | [1, 4] |
说明:
maxDeviations记录的是历史最大误差值,可用于分析运动过程中的峰值误差。
响应示例:
json
{
"curDeviations": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"curExternalDeviations": [0.0, 0.0, 0.0, 0.0, 0.0],
"maxDeviations": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
"maxExternalDeviations": [0.0, 0.0, 0.0, 0.0, 0.0],
"robot": 1
}3. 电机过载保护
功能说明
电机过载保护用于监测电机扭矩是否长时间超出安全范围。当电机扭矩持续超过设定的 robotLimit 值超过 minLimiteTime 时间时,触发过载保护。
保护机制
- 实时监测各轴电机扭矩
- 当扭矩超过
robotLimit时开始计时 - 持续时间超过
minLimiteTime则触发过载保护 - 停止运动并上报过载错误
3.1 上位机设置电机过载保护参数
命令字: 0x3880
参数列表:
| 参数名 | 类型 | 说明 | 范围 |
|---|---|---|---|
| enable | bool | 电机过载保护使能 | true/false |
| minLimiteTime | int | 电机过载保护最小确认时间 | [10, 9999] ‰ |
| robotLimit | int[6] | 电机扭矩过载值列表 | [0, 9999) ‰ 或 mNm |
| robot | int | 当前机器人号 | [1, 4] |
单位说明:
minLimiteTime单位为千分之一秒(‰),如 10 表示 10ms。robotLimit为相对于电机额定扭矩的千分比。
请求示例:
json
{
"enable": false,
"minLimiteTime": 10,
"robot": 1,
"robotLimit": [999, 999, 999, 999, 999, 999]
}3.2 上位机查询电机过载保护参数
命令字: 0x3881
参数列表:
| 参数名 | 类型 | 说明 | 范围 |
|---|---|---|---|
| robot | int | 当前机器人号 | [1, 4] |
请求示例:
json
{
"robot": 1
}3.3 控制器回复上位机电机过载保护参数
命令字: 0x3882
参数列表:
| 参数名 | 类型 | 说明 | 范围 |
|---|---|---|---|
| enable | bool | 电机过载保护使能 | true/false |
| minLimiteTime | int | 电机过载保护最小确认时间 | [10, 9999] ‰ |
| robotLimit | int[6] | 电机扭矩过载值列表 | [0, 9999) ‰ 或 mNm |
| robot | int | 当前机器人号 | [1, 4] |
响应示例:
json
{
"enable": false,
"minLimiteTime": 10,
"robot": 1,
"robotLimit": [999, 999, 999, 999, 999, 999]
}4. 伺服速度碰撞检测
功能说明
速度碰撞检测通过监测伺服电机的实际速度与指令速度的偏差来判断是否发生碰撞。当实际速度与指令速度的偏差超过允许范围并持续一定时间时,判定为碰撞发生。
工作原理
- 控制器持续比较指令速度与实际速度
- 计算速度偏差 = |实际速度 - 指令速度|
- 当速度偏差 >
speed_enable_error且持续时间 >speed_delay_time时触发碰撞检测
4.1 设置伺服速度碰撞检测参数
命令字: 0x40A0
参数列表:
| 参数名 | 类型 | 说明 |
|---|---|---|
| switch | bool | 速度碰撞检测开关 |
| speed_delay_time | int | 伺服速度延迟时间 |
| speed_enable_error | double | 伺服速度允许误差 |
请求示例:
json
{
"switch": true,
"speed_delay_time": 10,
"speed_enable_error": 10
}4.2 上位机获取伺服速度碰撞检测参数
命令字: 0x40A1
参数列表:
无
4.3 控制器回复伺服速度碰撞检测参数
命令字: 0x40A2
参数列表:
| 参数名 | 类型 | 说明 |
|---|---|---|
| switch | bool | 速度碰撞检测开关 |
| speed_delay_time | int | 伺服速度延迟时间 |
| speed_enable_error | double | 伺服速度允许误差 |
响应示例:
json
{
"switch": true,
"speed_delay_time": 10,
"speed_enable_error": 10
}