不靠磁铁、不走光路,用PCB线圈做一只“会读位置的圆环”。
今天聊一套基于MCXA34x的16/15双码道感应编码器Demo:它为什么适合一些电机和机器人场景,以及工程上怎么把模拟信号变成可信角度。
写在前面
在旋转位置检测系统中,大家很容易先问“多少bit、多少精度”。但真正落到电机、机器人关节、转台或执行器里,问题通常更现实:传感器能不能做薄?中间能不能留孔?怕不怕灰尘油污?旁边有电机磁钢会不会互相影响?接口和诊断能不能跟控制器配合?
本文关注其中一条很有工程代表性的技术路线:基于PCB线圈的双码道感应编码器。
常见的磁编码器结构紧凑、应用成熟,但在强磁场附近需要认真评估干扰;光学编码器精度很高,却往往对灰尘、油污和装配环境更挑剔。感应式编码器提供了另一条路线:用PCB线圈和导电转子形成随角度变化的耦合信号,不需要永磁体,也不依赖光路。
当然,感应式并不是“画几圈线圈就自动高精度”。线圈设计、模拟前端、机械偏心、安装气隙、温漂和标定都会影响最终表现。因此,本文更关注这套Demo已经打通的工程链路:怎样采信号、怎样校准、怎样解出绝对角度、怎样判断结果是否可信,而不是把输出码宽直接包装成系统精度。
本文介绍一套基于MCXA34x的16/15双码道感应编码器Demo:在同一套转子/定子结构上布置16周期和15周期两条感应轨道,通过Vernier原理解算单圈绝对角度,并由 MCU 完成四路采样、校正、跟踪、诊断和可视化。
一. 系统概览
这套Demo由三部分组成:
圆环形双轨PCB线圈和导电转子
基于MCXA344的采集与解算板
FreeMASTER调试界面及Web Dashboard
Image
当前固件实现的主要功能包括:
Image
Image
这套Demo固件已使用Keil MDK / ArmClang 6.23完整构建,结果为0 error、0 warning。
二. 感应式位置检测原理
每条码道包含一组发射线圈和两组空间上相差90°电角度的接收线圈。AS5715R向发射线圈施加高频激励;导电转子靠近线圈后产生涡流,涡流又会改变发射线圈到接收线圈之间的耦合强度。
转子旋转时,两组接收线圈看到的耦合变化近似正弦和余弦。经过AS5715R解调和差分输出后,可以把每条码道写成一个简化信号模型:
其中θ是机械角度, N是一圈内的电周期数; O表示中心偏置;A表示通道增益;Φ表示相位偏差。理想情况下,两路幅值相等、中心一致、相位正交;真实硬件则会叠加偏置、增益误差、相位误差、温漂、噪声和机械偏心。
也就是说,感应编码器不是直接“测到一个角度数字”,而是先得到随位置变化的模拟矢量,再由MCU把这个矢量恢复成角度。后面的标定和解算,都是围绕这件事展开。
三. 16/15双码道Vernier原理
如果只有一条16周期轨道,它一圈会重复16次。优点是“刻度细”,缺点也很明显:MCU 能知道自己在某个小区间里的位置,却不知道这是第几个小区间。
这就像手里有一把刻度很密、但每隔一段就从零重新开始的尺子:读数很细,门牌号还得另找办法。
双码道的思路,是再放一条15周期轨道。两条轨道都在转,但“步频”差1。把两条轨道的相位差拿出来看,它在完整机械一圈内刚好只走一圈,因此可以用来判断当前处在全圆的哪个位置:
这里的P16和P15分别是16周期轨道和15周期轨道解出的相位。直观理解就是:16 周期轨道负责“细刻度”,15周期轨道配合它提供“门牌号”。固件先用两者的相位差确定粗略绝对位置,再用16周期轨道的局部相位把区间内位置补细。
这种方法成立有两个重要前提:
1. 两条码道必须完成各自的椭圆校正和零相位对齐;
2. 机械结构必须保证两条码道具有一致的转子基准、同轴度和相对安装关系。
实际系统还要防止偶发毛刺把角度带到相邻分支。当前固件会结合上一帧角度和速度预测,对候选结果做双码道一致性检查;如果新结果看起来“跳得太离谱”,程序会优先选择更接近预测值、且两条轨道都能解释得通的分支。这个机制不能代替好的模拟信号,但可以降低单帧干扰造成绝对位置误判的概率。
四. 硬件架构:模拟前端与同步采样
每条感应轨道由一颗AS5715R产生差分sin/cos信号。第一条轨道的信号进入MCXA34x内部OPAMP0/1,第二条轨道通过外部TLV9062调理,最终形成四路ADC输入:
四路信号并不等于要摆四颗ADC。当前实现让ADC0依次采A1 SIN、A2 COS,让ADC1依次采A1 COS、A2 SIN;两个ADC由CTIMER0的同一个匹配事件触发,在10 kHz节拍下完成两组链式转换。
MCXA34x的180 MHz Cortex-M33、FPU、双LPADC、片上OPAMP和定时触发资源,让模拟采集与实时算法可以在同一颗MCU内形成闭环。器件本身还带有MAU数学加速单元;当前固件的相位解算路径使用atan2f() ,后续仍可评估把该路径迁移到MAU的收益。
五. 软件处理:
把"会变形的圆"变成可信角度
拿到四路ADC原始值之后,直接计算atan2(sin, cos) 看起来很诱人,但在真实硬件上通常不够。理想的sin/cos在XY平面上应该画出一个居中的圆;实际板子上,因为偏置、增益不一致、相位不正交和机械偏心,这个圆常常会变成一个偏心、倾斜的椭圆。
如果不先处理这个“变形的圆”,后面的角度会看起来能跑,细看却带着周期性误差。当前固件把处理流程拆成四步。
5.1 先把信号拉回可计算状态
Factory Cal过程中,固件会采集8192个降采样标定点,要求转子至少完整旋转一圈,让两条轨道都覆盖完整信号范围。标定的目标不是把每个点都记下来,而是提取这条椭圆轨迹的中心、大小和倾斜关系。
运行时,每一帧原始向量先减去中心偏置,再通过变换矩阵同时修正幅值比例和正交误差:
可以把它理解成:先把偏掉的圆心拉回原点,再把被压扁、旋转的椭圆尽量拉回接近单位圆。只有到了这一步, atan2f()算出来的相位才更有物理意义。
标定结束时,固件还会记录16周期和15周期两条码道的相位零点,确保它们站在同一个机械零位上说话。若信号幅值、ADC饱和比例或矩阵有效性不满足要求,标定会直接失败,避免生成一组“看起来有参数、实际上不可信”的校准结果。
5.2 再做粗定位和细定位
两条校正后的相位进入Vernier解算器。15/16相位差负责判断单圈绝对位置,大致解决“这是全圆里的哪一段”; 16周期轨道负责提供更细的局部相位,解决“这一段里面具体在哪里”。
解出候选角度后,固件还会反过来检查:这个角度是否能同时解释16周期轨道和15周期轨道的实测相位。如果两条轨道对不上,就置位TRACK_MISMATCH并保持上一帧有效角度。
这类策略在编码器系统里很重要:宁可短时间不更新,也不要很自信地报出一个错角度。
5.3 用PLL让输出更像真实机械运动
角度传感器不是只给示波器看的,它最终常常要进入电机控制、速度估计或位置闭环。原始角度即使平均值正确,也可能因为噪声、采样抖动或偶发毛刺让下游控制器不好受。
当前Demo使用Type-II软件PLL跟踪角度和速度。它的作用可以理解成“带物理直觉的滤波器”:一方面抑制单帧噪声,另一方面利用连续相位误差估计角速度。当前闭环带宽为100 Hz,运行在10 kHz采样节拍上;速度积分设置上下限,防止启动毛刺或错误相位把内部状态带飞。
输出层还加入了0.015° 角度死区和1 count数字迟滞,用于抑制静止状态下的显示抖动。代价是极慢运动时可能出现小台阶,这是稳定显示和低速响应之间的工程取舍。
5.4 运行中持续看信号是否还可信
Demo并不只输出一个角度数值,还持续观察信号链路状态。幅值统计用于判断整圈信号是否均匀;运行时修整只在标定有效、状态OK、幅值范围合理且ADC未饱和时工作,缓慢修正中心偏置和增益变化。
诊断状态会报告轨道过弱、ADC接近电源轨、双轨相位不一致、标定或Flash数据无效、当前结果正在保持上一有效值等信息。正常时状态字为0;异常出现后再报告对应故障位。对工程调试来说,这比只给一个“角度值”有用得多,因为它能告诉你问题更可能出在线圈、模拟前端、装配、标定,还是运行环境。
六. Flash标定:
让校准参数在上电后可靠恢复
工厂标定结果被保存到Flash最后8KB区域。该区域按128字节划分为多个槽位,每条记录包含版本、递增序列号、两条轨道参数、零位信息、标定质量和CRC32。
上电时,程序扫描所有有效槽位并选择序列号最新的一条。写入新标定时优先使用空槽;空间用完后再擦除整个标定区重新开始。若CRC或数据范围检查失败,固件会回退到板级默认值,同时置位“需要工厂标定”状态。
这一设计的重点不仅是将若干浮点参数写入Flash,更在于提供版本识别、完整性校验和失效回退机制,使系统能够明确识别不可用的校准数据。
七. FreeMASTER:
建立可观测的调试闭环
Demo调试阶段使用FreeMASTER桌面界面和Web Dashboard。通过LPUART0以115200 8N1连接后,可以实时查看:
- 单圈角度、16-bit counts、RAM 多圈位置和角速度;
- 两条轨道的原始相位、幅度和一致性状态;
- 四路 ADC 原始值、采样计数和 overrun 计数;
- encoder_process() 与 ADC 回调的当前/峰值周期数;
- 工厂标定进度和当前标定来源。
界面还提供Zero Here、Reset Turns、Factory Cal和MCU Reset等控制。与单纯查看串口输出相比,同时观察波形、状态和时序信息更有利于定位模拟链路、标定流程和角度处理中的问题。
八. 正确理解16-bit输出
当前输出把0~360°映射为65536个counts,理论量化步距约为:
但这只是输出码宽,不等于系统已经达到16-bit绝对精度。
真实精度还取决于线圈几何、转子偏心和倾斜、安装气隙、前端噪声、温度漂移、标定覆盖以及整机机械结构。当前Demo已经实现完整解算和诊断框架,也预留了性能测量手段,但没有把未经系统测试的精度数字写成宣传结论。
65536个输出码只定义了数字表示方式,并不能替代对物理测量性能的验证。后续若面向产品化,应补充INL、重复性、温漂、转速范围、气隙容差和EMC等整机测试。
九. 潜在应用方向
薄型、中空、不依赖永磁体,再加上PCB线圈易于与结构件集成,这类方案适合继续探索:
- 机器人关节和中空执行器;
- 云台、转台和伺服机构;
- 电机位置反馈与教学实验平台;
- 对磁场环境敏感的角度检测原型。
十. 结语
这个Demo的价值并不局限于某一个公式,而在于将PCB线圈、模拟前端、同步采样、标定、绝对角度解算、动态跟踪、非易失存储和可视化工具连接成一条完整工程链路。
MCXA34x在这里也不是单纯充当“算atan2的芯片”。它把模拟信号调理、双ADC采集、确定性触发和实时计算放进同一个器件,为紧凑型感应编码器提供了很实用的实现基础。
如果你也在做电机位置反馈、机器人关节或角度传感器,并希望进一步了解这类感应式编码器Demo的资料、适配方式或评估支持,欢迎联系NXP技术支持或销售团队。也欢迎把你最关心的数据留在评论区:静态抖动、INL、最高转速、温漂,还是“它到底能不能装进我的电机里?”
来源:恩智浦MCU加油站
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。