PFS173可以用两个普通数字输入读取增量式旋转编码器的A/B相信号,并把计数结果用于直流电机的位置闭环。对于低速、小惯量的定位机构,PFS173配合H桥驱动器、编码器和原点开关,就能完成“设定位置、转动到位、误差范围内停止”的基本控制流程。
图1:PFS173接收编码器A/B相输入,输出方向和PWM,经H桥驱动直流电机,再由编码器返回位置反馈。
PFS173读取旋转编码器的结论是什么?
PFS173读取旋转编码器的可靠方法是保存A/B两相的前后状态,只对合法的四相跳变执行加计数或减计数。PFS173不应只读取某一路引脚的高低电平,也不应依赖长延时消抖;这两种做法在旋钮速度提高或电机噪声增大后,容易产生丢计数和反向误计数。
增量式编码器通常输出A相与B相两路相差90度的方波。顺时针与逆时针的差别,不在于某个引脚是高还是低,而在于A/B状态变化的先后顺序。PFS173识别顺序后,把当前位置保存为一个有符号计数值,就得到了位置反馈。
PFS173编码器控制方案适合哪些应用?
PFS173编码器控制方案适合低速、低成本、直流供电的小型机构,例如电动旋钮、滑轨、阀门演示装置、自动百叶窗、轻载拨杆和拆机直流电机再利用项目。PFS173不适合直接承担高速伺服、高精度工业编码器或安全相关运动控制;这些场景需要更快的计数外设、可靠的故障诊断和独立的安全设计。
如果机构只需要读取人的旋钮动作,PFS173只接编码器即可。如果机构需要转到指定位置,PFS173还需要读取电机轴编码器、输出PWM、控制H桥方向,并设置原点开关或机械限位。
增量式编码器的A/B相是如何判断方向的?
增量式旋转编码器在一个完整机械周期内,会依次出现00 → 01 → 11 → 10 → 00或相反的状态序列。一个序列代表正转,另一个序列代表反转。PFS173通过比较“上一次AB状态”和“本次AB状态”判断方向。
| 上一次AB状态 | 当前AB状态 | 处理建议 |
|---|---|---|
| 合法相邻状态 | 下一个合法相邻状态 | 按方向加1或减1 |
| 状态保持不变 | 状态保持不变 | 不计数 |
| 非相邻状态,例如00直接跳到11 | 同时跳变或受到干扰 | 丢弃该次变化 |
四状态解码可以减少机械抖动和电磁干扰对位置计数的影响。若编码器每个机械刻度产生4次合法边沿,程序可以使用4倍频计数获得更高分辨率;若应用只关心旋钮刻度,则每积累4次有效变化再更新一次应用层数值。
PFS173读取编码器的最小接线是什么?
PFS173读取普通机械编码器至少需要两个数字输入、两路上拉和公共地。编码器A相、B相连接到两个PFS173输入IO,编码器公共端接GND;A相和B相各通过约10kΩ电阻上拉到逻辑电源。
编码器A相 ───── PFS173输入IO_A
编码器B相 ───── PFS173输入IO_B
编码器公共端 ── GND
IO_A ── 10kΩ ── VDD
IO_B ── 10kΩ ── VDD
低速手动旋钮可先用这一最小电路验证逻辑。电机编码器或长线编码器还应增加电源去耦、合理接地、ESD保护和线缆隔离。电机线与编码器线并行过长时,PWM换向噪声可能被误识别为编码器边沿。
PFS173编码器程序应该怎样写?
PFS173编码器程序应把上一次A/B状态与当前A/B状态组合为4位索引,再查表决定计数变化。查表法逻辑短、容易测试,也方便把非法跳变统一映射为0。
int8_t encoder_delta(uint8_t old_ab, uint8_t new_ab)
{
uint8_t transition = (old_ab << 2) | new_ab;
return transition_table[transition];
}
void encoder_update(void)
{
uint8_t new_ab = read_encoder_ab();
position += encoder_delta(last_ab, new_ab);
last_ab = new_ab;
}
PFS173可以用轮询或中断更新编码器状态。低速人机旋钮可采用固定周期轮询;如果编码器连接在电机上,采样周期必须短于最短有效边沿间隔。对于速度更高的应用,应优先使用边沿中断或改用带专用编码器接口的MCU。
PFS173如何把编码器位置输出给外部设备?
PFS173编码器工程可采用“计数脉冲+方向”或SPI读取位置两种形式。选择哪一种取决于外部主控是否允许漏脉冲,以及是否需要随时读取完整位置。
| 输出方式 | 输出内容 | 优点 | 局限 | 适合场景 |
|---|---|---|---|---|
| 计数脉冲+方向 | 每个位移输出一个脉冲,方向脚标识正反转 | 接线少、外部逻辑简单 | 外部设备漏掉脉冲会失步 | 灯光调节、菜单旋钮、低速控制 |
| SPI读取位置 | 主控读取PFS173保存的完整位置计数 | 可定期校验,避免单次漏脉冲影响 | 需要通信时序 | 多模块控制、位置显示、闭环系统 |
如果主控必须保证当前位置一致,应选择SPI读取位置,并在开机回零后把位置计数与机械原点绑定。计数脉冲+方向更适合作为简单输入设备接口。
PFS173如何控制直流电机的位置?
PFS173控制直流电机位置的基本方法是:编码器给出当前位置,控制程序计算目标位置与当前位置的差值,PFS173再输出方向和PWM给H桥驱动器。误差为正时电机向一个方向转动,误差为负时电机反向,误差进入死区后停止。
图2:PFS173先识别A/B相的合法状态变化,再根据当前位置与目标位置的误差控制H桥和直流电机。
目标位置 → 位置误差计算 → PFS173方向与PWM输出
编码器反馈 ← 直流电机 ← H桥电机驱动器
原始开源案例使用MAX14870驱动直流电机,并在PFS173编码器读取逻辑基础上增加电机控制环路。MAX14870类H桥驱动器把电机电流与PFS173逻辑IO隔开,PFS173只负责方向、PWM和位置判断。
PFS173位置控制先用P控制还是直接用PID?
PFS173位置控制建议先用P控制,而不是一开始就加入完整PID。P控制仅按位置误差调整PWM,足以验证编码器方向、电机方向、最小驱动占空比和停止死区是否正确。
误差 = 目标位置 - 当前位置
PWM = abs(误差) × Kp
当误差较大时,PFS173输出较高PWM;接近目标时,PFS173降低PWM。实际程序还应限制PWM最大值,并设置最小有效PWM,避免小占空比无法克服电机静摩擦。
| 现象 | 优先处理方法 |
|---|---|
| 电机靠近目标后不再移动 | 提高最小有效PWM,或减小停止死区 |
| 电机超过目标后反复来回摆动 | 降低Kp,必要时加入少量D项 |
| 电机始终停在目标一侧 | 检查死区、编码器比例和机械摩擦 |
| 电机转向与目标相反 | 交换电机方向逻辑或反转编码器计数符号 |
| 电机堵转仍持续输出 | 加入超时、过流或“位置不变化”保护 |
PFS173编码器电机控制的推荐程序流程
初始化时钟、编码器IO、PWM、H桥控制IO与原点开关;
读取初始AB状态;
执行回零,确认机械原点;
当前位置 = 0;
循环执行:
更新A/B状态并修正当前位置;
接收或读取新的目标位置;
误差 = 目标位置 - 当前位置;
若误差处于停止死区:
停止电机;
否则:
设置H桥方向;
由误差计算PWM;
限制PWM的最小值和最大值;
输出PWM;
检查原点、超时、堵转和通信异常;
位置闭环调试时,应先断开机械负载,确认编码器计数与转向,再连接H桥,最后接入实际机构。直接在完整机械系统上调PID,通常会把接线、方向和算法问题混在一起。
PFS173编码器项目最常见的五个问题
旋钮转一格,位置跳两格或四格
这是计数倍率与应用层刻度不一致。先记录编码器转一格实际出现多少次合法状态变化,再决定使用1倍频、2倍频还是4倍频。
电机启动后编码器计数乱跳
这是电机噪声、接地回流或长线耦合造成的概率较高。应先用示波器或逻辑分析仪观察A/B相,再缩短编码器线、改善去耦、分离电机线与信号线,并检查H桥换向时的电源压降。
上电后当前位置不可信
增量式编码器无法自己知道真实机械位置。PFS173电机控制器应增加原点开关或限位开关,在启动时回零,再将位置计数清零。
目标位置附近反复抖动
目标附近抖动通常说明Kp过高、死区过小,或机械回差明显。先降低Kp,再扩大停止死区;如果电机惯量较大,再考虑加入少量D项。
电机卡住时持续加电
位置闭环不能只依赖目标误差。PFS173电机控制器应检测“PWM已输出但位置在规定时间内没有变化”的情况,并停止H桥输出,避免电机和驱动器长时间过热。
更快定位问题的检查顺序
- 先观察编码器A/B相是否有稳定的相位差;
- 再确认顺时针、逆时针对应的计数正负方向;
- 然后在不接机械负载时测试H桥方向与PWM;
- 最后接入实际负载,调节Kp、最小PWM与停止死区。
PFS173编码器与电机控制的选型边界
如果项目是教学、DIY、低速定位或拆机电机再利用,PFS173案例能清楚展示编码器解码、PWM调速和位置闭环的基本方法。如果项目需要长期量产,应先确认PFS173供货状态;Free PDK的芯片页面将PFS173标注为停产,并指出PFS123是潜在替代型号。PFS123/PFS123B在官方产品目录中具有3KW程序空间、256字节RAM、最多18个IO和PWM资源,但替换前仍应逐项核对封装、引脚、工具链和代码选项。
常见问题
PFS173能否直接驱动直流电机?
不能。PFS173只能输出逻辑电平和PWM控制信号,直流电机必须通过MAX14870等H桥电机驱动器、MOSFET驱动电路或成品驱动模块供电。
PFS173能否读取绝对值编码器?
可以,但取决于绝对值编码器的输出协议。本文讲的是A/B两相增量编码器;若编码器使用SSI、SPI、I²C或专有串行协议,PFS173需要按相应协议读取,并评估时序与程序空间。
没有原点开关能否做位置控制?
可以做相对位置控制,但无法保证断电重启后的绝对机械位置正确。需要稳定绝对位置时,原点开关或绝对值编码器不可省略。
PFS173的P控制参数从哪里开始?
先使用较小Kp、较大的停止死区和安全的PWM上限。确认电机方向和编码器方向正确后,再逐步提高Kp;出现明显过冲就降低Kp,而不是立刻加入完整PID。
