应广单片机 PFS173 闭环电机控制器开发案例编码器PID与SPI调试

整理编辑:逐高电子技术开发部 / 日期:2026-11-7
PFS173 APPLICATION CASE · MOTOR CONTROL

PFS173闭环电机控制器开发:编码器反馈、PID位置环与SPI通信

一颗低成本应广单片机,能否完成编码器计数、位置闭环、PWM调速和上位机通信?本文不只回答“能不能”,还把硬件边界、PID整定、失控保护、调试顺序和量产验证拆成可执行的工程步骤。

答案先说

PFS173可以实现单轴直流电机的基础闭环位置控制:PFS173读取增量式编码器A/B相、计算位置误差、执行PID算法并输出PWM与方向信号;电机电流必须由外部H桥驱动器承担。这个方案适合功能固定、成本敏感的单轴执行器,但在量产前必须验证最大编码器边沿频率、定位误差、堵转保护、温升、EMI以及PFS173的供货生命周期。

PFS173闭环电机控制器解决什么问题?

开环控制只规定电机“以多大功率、向哪个方向转”,却不知道负载变化后是否真正到达目标位置。闭环控制增加编码器反馈,把“命令”变成“可测量、可纠偏、可停止”的控制过程。

  • 接收目标位置或位移命令
  • 读取编码器A/B相状态
  • 累加或递减当前位置
  • 计算目标与当前位置误差
  • PID生成控制输出
  • 转换为方向与PWM占空比
  • 异常时停机并上报故障

因此,真正的开发重点不只是“让电机转起来”,而是让控制器在反转、负载突变、通信占用、堵转和掉电重启时仍保持可预测行为。

公开项目实际实现了哪些功能?

公开的PFS173 MotorController项目使用带光电编码器的喷墨打印机直流电机,完成了一个可由外部主控下发目标位置的闭环控制器。项目说明与公开代码仓库可以证明以下功能路径具备可行性:

  • 读取增量式编码器A/B相并判断方向;
  • 维护当前位置计数,支持相对位置与绝对位置命令;
  • 执行位置PID并输出PWM和方向信号;
  • 通过软件SPI与Arduino Uno通信;
  • 使用MAX14870一类外部驱动器承担电机功率输出。
证据边界:公开项目证明了功能可实现,但没有给出可以直接迁移到所有电机的PID参数、最大编码器频率、定位精度或量产可靠性结论。原作者提到的12V供电与空载电流低于130mA,仅能视为该电机和该测试条件下的记录。

系统由哪些硬件模块组成?

模块 主要任务 设计时必须确认
PFS173 编码器计数、控制周期、PID、PWM、通信和状态管理 边沿处理能力、程序与RAM余量、引脚复用、定时器资源
直流电机 执行旋转或位移动作 额定电压、启动电流、堵转电流、机械惯量
增量式编码器 提供位置增量和方向信息 供电电压、输出类型、每转脉冲数、最高边沿频率
外部H桥 放大PWM与方向信号,驱动电机电流 峰值电流、续流路径、过温/过流保护、逻辑电平
上位主控 下发目标位置、模式和限幅,读取状态 协议、超时、校验、故障恢复
测试设备 观察A/B相、PWM、电流和控制周期 示波器、逻辑分析仪、限流电源、电流探头

PFS173不能直接驱动直流电机。 MCU引脚只负责逻辑控制。若把电机直接接到IO口,启动电流、反电动势和感性尖峰都可能造成复位、计数错误甚至器件损坏。

PFS173编码器反馈PID位置闭环电机控制系统架构图
工程示意图:PFS173负责反馈采集、误差计算和控制输出,外部H桥负责功率驱动,上位主控通过通信接口下发目标并读取状态。

如何识别未知电机的编码器接口?

拆机电机最容易出现的错误,是凭线色猜测电源和信号。正确方法应先测量,再接入PFS173:

  1. 断开原功率输出,确认电机端与编码器端没有共用未知高压节点;
  2. 沿PCB走线或用万用表通断档寻找编码器地线与电源线;
  3. 使用限流电源从低电压开始供电,观察静态电流是否异常;
  4. 手动缓慢转动电机轴,用示波器同时观察两个候选信号;
  5. 确认两路波形是否近似方波,并存在约90°相位差;
  6. 交换旋转方向,验证A/B领先关系是否反转;
  7. 测量高电平是否兼容PFS173输入,必要时增加分压、限流或电平转换;
  8. 确认无过压与负压后,再连接MCU并进行低速计数测试。

PFS173如何判断位置和方向?

增量式编码器的A、B两路信号相位相差约四分之一周期。A领先B表示一个方向,B领先A表示相反方向。程序在状态变化时比较“上一状态”和“当前状态”,据此让位置计数加一或减一。

输出轴圈数 = 编码器累计计数 ÷ 编码器每转有效计数 ÷ 减速比

工程中还要处理计数溢出、毛刺、漏计数、快速反转、齿轮间隙和掉电后位置丢失。只有把这些边界写进状态机,位置值才不只是“能变化”,而是可以用于闭环控制。

PFS173增量式编码器A相B相正反转方向判断时序图
原创工程示意图:增量式编码器A/B相的正向、反向相位关系,以及PFS173位置计数的增减逻辑。

怎样判断编码器处理能力是否足够?

不要只看电机转速,还要把编码器分辨率和解码倍频一起计算:

最高编码器边沿频率 = 最高转速(rpm)÷ 60 × 每转脉冲数 × 解码边沿倍数

测试必须在最高转速下同时开启PID、软件SPI和故障判断,再与低速人工计数或外部计数器比较。若通信一忙就出现位置漂移,问题通常不是PID,而是编码器服务优先级或临界区过长。

PID位置环如何控制电机?

位置误差 e(k) = 目标位置 r(k) − 当前编码器位置 y(k)
控制输出 u(k) = Kp × e(k) + Ki × Σe(k) + Kd × [e(k) − e(k−1)]
  • Kp:误差越大,推动电机越强;过大容易振荡。
  • Ki:消除持续的静差;过大容易积分饱和和回弹。
  • Kd:根据误差变化提前制动;过大可能放大编码器噪声。

参数不能从其他项目直接复制。电机惯量、减速比、负载、供电、电流限制、机械间隙和控制周期任一变化,最佳参数都会改变。

建议采用什么PID整定顺序?

  1. 先限制最大PWM,并关闭积分与微分;
  2. 从较小Kp开始,确认方向正确且系统能够靠近目标;
  3. 逐步提高Kp,直到响应足够快但尚未持续振荡;
  4. 加入少量Kd抑制过冲和目标附近摆动;
  5. 最后加入Ki消除稳态误差,并设置积分限幅;
  6. 根据齿隙与编码器分辨率设置合理死区,避免反复微动;
  7. 在空载、额定负载、低电压、高低温和堵转恢复条件下复测。
PFS173直流电机PID位置闭环控制与响应曲线工程图
原创工程示意图:目标位置、位置误差、PID控制器、PWM/H桥、电机和编码器共同构成闭环;响应曲线用于解释过冲与整定方向,不是实测数据。

相对位置和绝对位置模式有什么区别?

相对位置

以当前位置为起点移动指定计数,适合送料、点动和重复位移。它不要求系统知道机械零点,但累计误差仍需控制。

绝对位置

移动到统一坐标系中的指定位置,适合阀门、滑台和转台。增量式编码器掉电后会丢失位置,因此必须回零或保存并校验位置。

PFS173没有硬件SPI怎么办?

公开项目使用软件SPI完成与Arduino Uno的通信。软件SPI能够满足低速、短帧、低占空比通信,但它会占用CPU时间。如果在收发期间长时间关闭中断或执行阻塞等待,可能错过编码器边沿或延迟控制周期。

字段 用途 建议
帧头 识别有效数据起点 选用不易与数据混淆的固定值
命令 位置、停止、回零、读取状态 保留版本和扩展空间
模式 相对/绝对、制动/滑行 非法组合必须拒绝执行
目标位置 期望计数或位移 定义字节序、范围和符号
输出限幅 限制PWM或速度 上电使用保守默认值
状态 到位、运行、超时、堵转、编码器故障 状态应可锁存与清除
校验 发现传输错误 至少使用校验和或CRC
PFS173软件SPI通信和逻辑分析仪调试场景
软件SPI调试场景示意。 应在通信最繁忙和电机最高转速同时出现时检查时钟、数据、片选、控制周期和编码器漏计数。

软件结构应该怎样划分?

  • 编码器层:只做快速状态读取、合法跳变判断和位置增减;
  • 固定控制周期:读取位置快照、计算误差和PID;
  • 电机输出层:处理正反转、PWM限幅、最小启动输出和制动;
  • 通信层:接收缓冲、帧校验、命令解析和状态回复;
  • 保护层:监测超时、堵转、编码器无反馈、欠压和异常命令。

关键原则是:编码器处理短而快,PID周期固定,通信不长时间阻塞,任何故障都能走到确定的安全输出。

PFS173闭环电机控制器怎样调试?

  1. 只调编码器:手动转轴,确认方向和计数稳定;
  2. 只调开环输出:低占空比验证方向、PWM和H桥温升;
  3. 只调通信:电机不通电时验证帧、超时和错误命令;
  4. 只开比例环:低输出限幅确认反馈符号正确;
  5. 逐步加入D和I:记录每次参数与响应,不凭感觉反复修改;
  6. 做异常测试:拔掉编码器、堵转、通信中断、低电压、快速反转和重启。

常见故障怎样快速判断?

现象 优先怀疑 快速验证 处理方向
高速失控 编码器方向或误差符号相反 手转轴观察位置正负 统一坐标、PWM方向和误差符号
目标附近持续振荡 Kp过高、Kd不足、机械间隙 降低Kp并观察变化 重调Kp/Kd,设置合理死区
低速不动 静摩擦、最小PWM不足 缓慢增加PWM 增加启动补偿,避免长期大积分
带载到不了位置 输出限幅、驱动电流或供电不足 比较空载与带载电流 检查电源、H桥、机械阻力和限幅
高速位置漂移 编码器漏计数 高低速累计计数对比 提高编码器服务优先级,缩短临界区
通信时控制变差 软件SPI阻塞 暂停通信后复测 缩短帧、分时处理、减少关中断时间
堵转后持续发热 缺少超时或堵转保护 观察PWM与位置是否持续不变 限时停机、限流并锁存故障
重启后位置错误 增量编码器没有回零 断电重启检查坐标 增加原点传感器和回零流程

量产前必须验证哪些指标?

验证项目 至少记录什么 为什么重要
定位性能 误差、稳定时间、过冲、重复性 决定控制指标是否真的满足产品需求
最大编码器频率 最高转速下的漏计数和CPU余量 防止实验室低速正常、量产高速失控
堵转与卡滞 检测时间、峰值电流、停机方式、温升 避免电机、驱动器和结构件持续过热
通信压力 连续指令、错帧、超时、重连表现 验证软件SPI不会破坏实时控制
供电安全 上电、掉电、欠压、反接和浪涌行为 防止异常电源状态下误动作
环境与EMI 温度、电机干扰、EFT/ESD后的状态 确认整机环境中不会复位或累计误差
烧录追溯 程序版本、配置、校验值、批次记录 避免量产文件和样机版本错位
PFS173闭环电机控制器量产验证与工程测试台场景
量产验证场景示意。 建议把控制波形、电流、温升、异常恢复和烧录版本纳入同一份验证记录;图片不代表真实测试报告。

PFS173还适合新项目吗?

Free-PDK的PFS173资料页将该器件标注为已停产,并把PFS123列为潜在替代候选;同时,应广科技当前F系列MTP产品目录未列出PFS173。两项信息都不足以证明某个渠道已经无货,但足以说明新项目不能仅凭旧案例决定长期量产选型。

对已经量产的设计,是否继续使用取决于可追溯库存、稳定供货、烧录工具、源代码与最终量产文件是否齐全,以及替代验证成本。对新项目,应先向供应方确认器件状态、批次和交期,再完成样片与整机验证。

工程师先确认

  • 最大编码器频率与控制周期;
  • 程序、RAM和定时器余量;
  • 通信、保护和回零需求;
  • 温度、EMI及整机安全边界。

采购人员再确认

  • 型号状态、交期、批次与追溯;
  • 受控规格书和烧录工具;
  • 样片、试产和长期供货承诺;
  • 候选替代料的验证成本。

逐高电子可根据电机参数、编码器分辨率、最高转速、供电、通信和年用量,协助进行应广单片机选型与采购评估。最终决定仍应以当前受控规格书、样片测试、完整烧录流程和整机验证结果为准。

PFS173闭环电机控制器项目决策与量产验证路径图
原创工程决策图:从需求边界、编码器负载、控制资源、样机验证到采购与量产放行的双通道检查路径。

哪些项目不适合使用PFS173?

  • 高分辨率编码器与高速电机叠加,边沿频率接近处理能力上限;
  • 多轴、多环或需要复杂轨迹规划和前馈控制;
  • 必须依赖硬件正交编码器接口或高速硬件通信外设;
  • 涉及严格功能安全、冗余监测或认证要求;
  • AC阻容降压、高EFT环境且保护、隔离与抗扰设计不足。

这个方案适合哪些应用?

在速度和精度边界经过验证后,可用于小型送料机构、阀门执行器、玩具执行机构、摄像转台、电子锁、旋钮模拟器、小型滑台和简单机器人关节等固定功能的单轴位置控制。

常见问题

PFS173可以直接驱动直流电机吗?

不可以。PFS173只输出逻辑级PWM和方向信号,电机电流必须由外部H桥或专用驱动器承担。

PFS173可以运行PID算法吗?

可以实现基础的定点或简化PID位置环,但能否满足项目要求取决于控制周期、编码器频率、通信负载和程序资源。

软件SPI会导致编码器漏计数吗?

有可能。若软件SPI阻塞时间过长或长时间关闭中断,可能错过编码器边沿,必须在最高转速和最大通信负载同时出现时验证。

电机为什么在目标位置附近振荡?

常见原因包括Kp过高、Kd不足、机械间隙、编码器分辨率有限以及死区设置不合理,应结合位置、电流和PWM波形逐项判断。

怎样避免编码器断线后电机失控?

监测PWM持续输出时位置是否在合理时间内变化;若没有反馈,应立即关闭驱动、锁存故障并等待明确的复位或重新回零。

PFS173适合新的批量项目吗?

需要谨慎。公开器件资料将其列为旧型号/停产状态;新项目应先确认真实供应、工具链和生命周期,并同步评估可持续供货的候选型号。

PFS173 的 PID 控制周期设定为多少比较合适?

建议设定在 1ms 到 5ms 之间(即 200Hz~1000Hz)。判断依据:假设电机最高转速 3000 RPM,编码器 100 线(4 倍频后为 400 脉冲/圈),则最高脉冲频率为 20kHz。若控制周期设为 1ms,每次采样约有 20 个脉冲变化,分辨率足以计算微分;若周期过长(如 50ms),系统响应会严重滞后,导致振荡甚至失控。

驱动电机的 PWM 频率应该设为多少?

建议设定在 15kHz 到 20kHz 之间。判断依据:人类听觉上限为 20kHz,低于 15kHz 电机可能产生刺耳的高频啸叫;高于 20kHz 虽静音,但会增加 H 桥开关损耗,导致驱动器发热。PFS173 主频通常在 8MHz~16MHz,需平衡 PWM 分辨率(建议 8 位以上)与频率的关系。

PFS173 没有硬件浮点运算单元,PID 计算怎么办?

必须使用定点数(Q格式)替代浮点数。判断依据:PFS173 是 8 位架构,一次单精度浮点乘法可能需要数百个指令周期(耗时数十微秒)。若控制周期为 1ms,浮点运算极易阻塞编码器中断。使用 16 位或 32 位定点数运算,可将计算时间压缩至几微秒,确保实时性。

PID 积分项容易饱和(Windup),在 PFS173 中怎么处理?

采用遇限停止积分(Anti-windup)策略。判断依据:由于 PFS173 的 RAM 较小,积分项若不加限制,极易导致 16 位或 32 位整数溢出。当 PID 输出 \(u(k)\) 达到最大 PWM 限幅值(如 1000),且误差 \(e(k)\) 仍在增加方向时,应停止累加积分,防止电机退饱和时的巨大超调。

PFS173 最多能处理多少线数的增量式编码器?

建议不超过 500 线(2000 脉冲/圈)。判断依据:假设电机 3000 RPM(50 转/秒),500 线 4 倍频后就是 100,000 脉冲/秒(100kHz)。这意味着外部中断间隔仅 10 微秒。对于 8 位的 PFS173,若中断服务程序执行时间超过 5 微秒,CPU 将无法处理其他任务。超过 500 线必须评估超频或换用带硬件编码器接口的 MCU。

PID 输出很小但电机不转,输出变大又冲过头,怎么解决?

这是典型的静摩擦(死区)问题,需设置最小启动 PWM。判断依据:普通有刷电机的启动电压通常占额定电压的 10%~20%。可在代码中设定:当 PID 输出绝对值小于阈值(如满占空比的 15%)时强制输出 0;超过阈值时,直接加上基础启动补偿,以克服静摩擦力。

电机一启动/停止,PFS173 就死机或复位,有什么解决办法?

这是典型的 EMI(电磁干扰)问题。判断依据:直流电机碳刷换向时会产生数百伏的高频尖峰。对策:必须在电机引脚两端并联 0.1uF 瓷片电容;PFS173 的 VDD 和 GND 之间紧贴 0.1uF 退耦电容;编码器输入引脚串联 1kΩ~4.7kΩ 电阻限流。

用软件 SPI 通信时,如何保证通信不拖慢 PID 控制?

必须采用非阻塞(中断或状态机)方式收发数据。判断依据:若 SPI 速率 1Mbps,发送 16 字节需 128 微秒。若控制周期为 1ms,若用死等(Blocking)方式,CPU 会被占用 12.8% 的时间。推荐每次进中断只处理 1 个字节(约 8 微秒),将长帧分散处理,避免阻塞编码器边沿捕获。

PFS173 定时器资源紧张,编码器计数和 PWM 如何分配?

采用硬件 PWM + 外部中断 + 软定时器。判断依据:将硬件定时器固定用于生成 PWM 载波;编码器 A/B 相直接接外部中断进行边沿捕获;利用 PWM 周期中断提供一个 1ms 的基准节拍(软定时器),在主循环中判断该标志位执行 PID 和通信。这样可避开定时器不够用的窘境。

断电重启后,增量式编码器位置丢失,如何实现绝对位置?

增量式编码器断电必然丢失位置。解决数据判断:1. 增加光电/霍尔原点传感器,上电后先执行低速回零动作;2. 若使用断电不丢位置的绝对值编码器,PFS173 可通过 I2C/SPI 读取(例如 AS5600,分辨率 12 位),但会增加成本;3. PFS173 若有 DATA EEPROM,可在掉电瞬间(利用电源大电容)紧急保存位置,但擦写寿命仅约 10 万次,不适合频繁掉电场景。

参考资料与说明

  1. Repurposing the Encoder Counter
  2. Padauk MotorController 开源项目
  3. The Three Cent Motor Controller
  4. Free-PDK PFS173 器件资料
  5. 应广科技产品页面

本文根据公开项目、代码仓库和器件资料形成原创工程分析。公开项目证明了PFS173完成编码器计数、位置控制和软件SPI通信的可行性,但没有提供可直接套用的PID参数、最大编码器频率、定位精度或量产可靠性结论。目标产品应以当前官方规格书、实际电机参数和整机验证结果为准。

应广单片机技术资料

  • 台湾应广单片机官网
  • 应广单片机例程
  • 应广单片机编程指南
  • 应广单片机定时器
  • 技术开发工具
  • 应广单片机IDE&仿真器
  • 应广单片机烧录器
  • 代码生成器
应广单片机OTP与MTP怎么选?PFS调试到PMS量产流程 - 逐高电子

应广单片机OTP与MTP怎么选?PFS调试到PMS量产流程 - 逐高电子


PMS152E应广单片机选型指南:参数、引脚、封装与低功耗设计

PMS152E应广单片机选型指南:参数、引脚、封装与低功耗设计


应广单片机选型与采购指南|Padauk MCU量产验证—逐高电子

应广单片机选型与采购指南|Padauk MCU量产验证—逐高电子


低成本MCU技术指南:应广单片机PADAUK PFS154性能、开发板、烧录与实测分析|逐高电子

低成本MCU技术指南:应广单片机PADAUK PFS154性能、开发板、烧录与实测分析|逐高电子


MCU LVR 是什么?应广单片机低电压复位设置与 Under_20mS_VDD_Ok 详解

MCU LVR 是什么?应广单片机低电压复位设置与 Under_20mS_VDD_Ok 详解


MF324 无感BLDC电机控制芯片 | 应广科技8位MTP三相无刷直流电机控制器

MF324 无感BLDC电机控制芯片 | 应广科技8位MTP三相无刷直流电机控制器


应广单片机PFC232双FPPA应用实战:12V直流风扇温控显示器,MTP单片机采样、显示与PWM控制 | 逐高电子

应广单片机PFC232双FPPA应用实战:12V直流风扇温控显示器,MTP单片机采样、显示与PWM控制 | 逐高电子


从旋钮到闭环定位:应广单片机PFS173读取编码器并控制直流电机

从旋钮到闭环定位:应广单片机PFS173读取编码器并控制直流电机


应广单片机PMS120B ADC采样值偏低?输出阻抗与RC滤波应用技术 - 逐高电子

应广单片机PMS120B ADC采样值偏低?输出阻抗与RC滤波应用技术 - 逐高电子


AI小家电一定要用32位MCU吗?应广PMS120B风扇控制方案 - 逐高电子

AI小家电一定要用32位MCU吗?应广PMS120B风扇控制方案 - 逐高电子


小家电主控如何兼顾成本、采样与驱动?应广单片机 PMS120B 8位OTP单片机选型解析 | 逐高电子

小家电主控如何兼顾成本、采样与驱动?应广单片机 PMS120B 8位OTP单片机选型解析 | 逐高电子


应广单片机PFS173电容触摸耳机控制面板:原理、硬件与低功耗设计 | 逐高电子

应广单片机PFS173电容触摸耳机控制面板:原理、硬件与低功耗设计 | 逐高电子


应广单片机PUD310选型指南:8位MCU值不值得用?从USB PD快充芯片看应广实力,完全静态以 OTP 为程序基础的 CMOS 8-bit 微处理器

应广单片机PUD310选型指南:8位MCU值不值得用?从USB PD快充芯片看应广实力,完全静态以 OTP 为程序基础的 CMOS 8-bit 微处理器


3美分芯片的逆袭:应广单片机 PMS150C 驱动300颗LED自行车灯 + 完整入门教程

3美分芯片的逆袭:应广单片机 PMS150C 驱动300颗LED自行车灯 + 完整入门教程


应广单片机比较器测电压代码详解:不用ADC检测VDD电池低压(PMS150C/PFS154)

应广单片机比较器测电压代码详解:不用ADC检测VDD电池低压(PMS150C/PFS154)


开发实力

专业资深的软硬件开发工程师团队,熟悉行业客户产品硬件技术平台解决方案

全球渠道

为客户提供高性价比的产品和服务,满足客户及时快速的电子生产制造需求

品质保证

专业的测试保证团队,保证每批方案的稳定性,兼容性,和抗干扰性

售后服务

专业的技术服务团队,24小时为客户提供各种软硬件的技术支持和售后服务

服务热线

0755-88364040
18902464556

义隆代理

烧录开发

技术支持

申请样品

扫描微信二维码