1. 课程导入

在现代工业自动化、机器人控制、精密仪器与运动控制系统中,位置、速度和方向是最基础也最关键的物理量。旋转编码器作为一种将机械旋转量转换为电信号的传感器,被广泛用于测量电机转角、丝杠位移、转台角度以及轮轴转速。然而,一个可用的测量结果并不只是"接上编码器、读一个数"这么简单。从机械安装、信号调理、边沿检测、方向判别、计数与倍频,到速度计算、误差补偿、通信上传与上位机显示,整个链路构成了一个完整的旋转编码器测量系统。

本课程围绕"如何设计一个可靠、精确、可复用的旋转编码器测量系统"展开。本章作为导入章节,将帮助学习者建立全局认知:明确测量系统的定义与边界,理解学习目标,掌握整体知识框架,并熟悉典型应用场景,为后续章节的深入设计打下基础。

一、什么是旋转编码器测量系统

旋转编码器测量系统是指以旋转编码器为敏感元件,配合机械接口、信号调理电路、采集与处理单元、通信接口以及上位机软件,完成对角度、角速度、角加速度、转速、转向等参数的获取、处理、传输与显示的完整技术体系。它既包含硬件层面的电气与机械设计,也包含软件层面的算法与数据处理。

从信号链角度看,一个典型的测量系统可以划分为五个层次:

  • 感知层:增量式或绝对式旋转编码器,输出A/B/Z差分或单端信号、SSI、BiSS、EnDat等。
  • 调理层:差分接收、滤波、电平转换、光耦隔离、施密特整形。
  • 采集层:MCU/FPGA的定时器编码器模式、正交解码器、外部计数芯片。
  • 处理层:四倍频、方向判别、位置累加、速度估算、零位校准、误差补偿。
  • 应用层:CAN、RS-485、EtherCAT、USB等通信,以及上位机显示与控制闭环。
测量系统的核心价值在于:把编码器输出的脉冲或数字码,稳定、实时、低误差地转换为控制系统可用的物理量。设计目标通常包括分辨率、精度、响应速度、抗干扰能力、可靠性与成本之间的平衡。

二、学习目标

完成本课程后,学习者应能够独立完成旋转编码器测量系统的方案设计、器件选型、电路搭建、程序编写与调试验证。具体目标如下:

  1. 理解增量式与绝对式编码器的工作原理、输出信号形式及适用边界。
  2. 掌握正交编码信号的边沿检测、四倍频、方向判别与计数算法。
  3. 能够设计差分接收、隔离、滤波与整形电路,并分析信号完整性。
  4. 能够基于MCU定时器或FPGA实现位置与速度的实时采集。
  5. 掌握M/T法、T法、M法等速度估算方法及其误差特性。
  6. 能够进行零位校准、多圈计数、线性化与温度补偿。
  7. 能够通过通信接口将测量结果上传,并完成上位机可视化与验证。
  8. 具备常见故障定位与系统复盘能力,如丢脉冲、方向反转、抖动、漂移等。

三、整体知识框架

本课程共30章,按照"基础—硬件—算法—系统—应用—排障"的逻辑递进组织。下图展示了旋转编码器测量系统的整体知识框架与信号流关系,便于学习者建立全局地图。

旋转编码器测量系统 · 知识框架与信号流 感知层 增量式 / 绝对式 A/B/Z · SSI · BiSS 调理层 差分接收 · 隔离 滤波 · 施密特整形 采集层 MCU 定时器 / FPGA 正交解码 · 外部计数 处理层 四倍频 · 方向判别 速度估算 · 零位校准 应用层 CAN / RS-485 / EtherCAT / USB · 上位机显示 · 闭环控制 机械与安装 同轴度 · 联轴器 · 防护 电源与接地 隔离 · 屏蔽 · 回流路径 标定与验证 分辨率 · 线性度 · 重复性 排障与复盘 丢脉冲 · 抖动 · 漂移 信号流:感知 → 调理 → 采集 → 处理 → 应用;支撑体系贯穿机械、电源、标定与排障 课程主线:原理认知 → 硬件设计 → 算法实现 → 系统集成 → 调试验证

四、典型应用场景

旋转编码器测量系统的应用几乎覆盖所有需要旋转量测的领域。不同场景对分辨率、响应速度、环境适应性和通信方式的要求差异很大,设计时需针对性取舍。

应用场景 典型编码器 关键指标 设计重点
伺服电机闭环控制 增量式/绝对式,2500线以上 分辨率、延迟、抗干扰 差分接收、四倍频、实时速度估算
机器人关节角度测量 绝对式多圈,17~23位 绝对位置、多圈记忆 SSI/BiSS协议、零位校准、掉电保存
数控机床丝杠位移 增量式,高线数 精度、重复性 滤波、细分、温度补偿
风力发电机转速监测 增量式,重载型 可靠性、长距离传输 隔离、屏蔽、RS-485/CAN
医疗设备转台定位 绝对式,高精度 低噪声、高线性度 低抖动电源、线性化校准
物流分拣线速度检测 增量式,经济型 成本、响应速度 M法测速、简单滤波

五、常见误区与学习建议

误区一:只看编码器分辨率,忽略系统误差。编码器本身线数高,并不代表最终测量精度高。安装偏心、联轴器间隙、信号丢脉冲、计数方向错误都会显著降低系统精度。
误区二:把A/B相直接接MCU普通IO轮询。高速旋转时轮询会漏掉脉冲,必须使用定时器编码器模式、外部中断配合正交解码,或专用解码芯片。
学习建议:每学完一个模块,尽量在开发板上复现。例如用STM32定时器编码器模式读取A/B相,用串口打印计数值,再手动旋转编码器观察正反转计数变化。动手验证比只看公式更容易发现方向判别、倍频和零位处理中的细节问题。

下面给出一个最小验证示例,用于快速确认编码器接线与计数方向是否正确:

// STM32 定时器编码器模式初始化(示意)
TIM_Encoder_InitTypeDef enc = {0};
enc.EncoderMode = TIM_ENCODERMODE_TI12;   // A/B 两相都计数,实现四倍频
enc.IC1Polarity = TIM_ICPOLARITY_RISING;
enc.IC2Polarity = TIM_ICPOLARITY_RISING;
HAL_TIM_Encoder_Init(&htim3, &enc);
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);

// 读取计数值
int16_t cnt = (int16_t)__HAL_TIM_GET_COUNTER(&htim3);
printf("encoder count = %d\r\n", cnt);
// 正转 cnt 增大,反转 cnt 减小;若相反,交换 A/B 相或取反方向