找回密码
 立即注册
查看: 80|回复: 2

STC8H1K17,正交编码器

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-10-21 19:12:32
已绑定手机

1

主题

0

回帖

9

积分

新手上路

积分
9
发表于 2025-10-21 19:12:32 | 显示全部楼层 |阅读模式
STC8H1K17,使用PWMA的正交编码器,编码器模式3,转动电机,为什么读出来的数始终是4的倍数?是编码器在完成4个计数后,才会给PWM1_CNTR赋值+4吗?
截图202510211911442884.jpg
回复

使用道具 举报 送花

3

主题

1848

回帖

544

积分

等待验证会员

积分
544
发表于 2025-10-21 19:18:00 | 显示全部楼层
您好,关于您在使用 STC8H1K17 单片机时,通过 PWMA 模块实现正交编码器接口(QEI),并遇到读取的计数值始终为 4的倍数 的问题,这是一个在正交编码器应用中较为常见的现象。下面我将从硬件原理、编码器模式3的工作机制以及可能的软件配置问题出发,为您详细分析这一现象的成因。

一、正交编码器接口的基本原理

正交编码器接口(Quadrature Encoder Interface, QEI)是一种常用于检测旋转方向和角度的硬件模块。其输入通常为两路相位差为90°的脉冲信号 A(PHA)和 B(PHB),通过检测这两路信号的变化,可以判断旋转方向并进行计数。

1.1 编码器的四倍频机制

大多数正交编码器接口模块都支持 4倍频计数模式,即每一对A/B信号的上升沿和下降沿都会触发一次计数操作,从而实现更高的分辨率。具体来说:
每个周期(360°电角度)有4个有效边沿:
A上升沿
B上升沿
A下降沿
B下降沿

因此,若编码器每圈输出N个脉冲,则QEI模块实际可获得 4N 个计数。

二、STC8H1K17的PWMA模块与正交编码器模式

STC8H1K17的PWM模块支持多种功能,其中包括 正交编码器接口模式(QEI Mode)。当配置为正交编码器模式3时,该模块将作为QEI接口使用,自动解析PHA和PHB信号,并更新计数寄存器(如PWM1CNTR)。

2.1 编码器模式3的特点

在模式3中,PWMA模块的行为如下:
使用两路输入信号 PHA(A相)和 PHB(B相)
支持4倍频计数
可配置为向上/向下计数或双向计数
自动识别旋转方向
计数寄存器(如PWM1CNTR)由硬件自动更新

因此,每检测到一次边沿变化,计数器就更新一次,理论上每次计数应为 ±1。

三、为什么读出的值总是4的倍数?

您提到的现象是:读出来的数值始终是4的倍数,这可能由以下几个原因造成:

3.1 编码器硬件本身输出为4倍频信号

有些编码器出厂时已经内置了4倍频电路,直接输出的是4倍频信号。此时,单片机即使再进行一次4倍频处理,就会导致累计8倍频,但实际上您读取到的每次计数增加4,是因为:
编码器输出每1个脉冲,实际代表了4个原始边沿
单片机再次4倍频处理,每1个脉冲就相当于4个计数

解决方法:
确认编码器规格,是否输出的是原始A/B信号还是已经4倍频后的信号
若是4倍频输出,应关闭单片机端的4倍频功能

3.2 单片机配置为4倍频,但软件读取频率过低

如果您的程序中读取PWM1CNTR的频率较低(例如每10ms读一次),而电机转速较高,那么在这段时间内可能会发生多个计数事件。由于4倍频机制下每圈计数为4N,且高速旋转时短时间内累计多个4的倍数,导致读取结果总是4的整数倍。

举例说明:
编码器每圈输出100个脉冲(原始信号)
单片机进行4倍频处理,每圈计数为400
若每1ms读一次计数器,而电机转速为600RPM(即每秒10圈),则每1ms计数器会增加:
400 × 10 / 1000 = 4
所以读出的数值每次增加4,表现为4的倍数

解决方法:
提高读取频率(使用定时器中断)
或者在软件中做差值计算,而非直接读取当前值

3.3 单片机QEI模块内部逻辑导致的4倍频机制

有些MCU的QEI模块会在内部将原始A/B信号先进行4倍频处理后再计数。例如:
每个完整周期(A和B各一个脉冲)产生4个计数
若程序中未对计数器进行归一化处理,直接读取其值,自然会是4的倍数

建议检查:
查阅STC8H1K17数据手册中关于QEI模块的具体描述
确认是否在模式3中默认启用4倍频
若是,则应根据实际需求决定是否关闭

3.4 编码器信号质量差或抖动处理导致漏边沿

若编码器信号存在噪声或抖动,可能导致QEI模块未能正确识别所有边沿,从而导致部分计数被忽略。例如,若每4个边沿中只识别到1个,则计数结果也会表现为4的倍数。

建议措施:
使用硬件滤波或软件延时去抖
检查信号完整性,使用示波器观察PHA/PHB波形是否干净

四、如何验证并解决该问题?

为了准确判断问题根源,建议您进行以下操作:

4.1 验证编码器输出信号
使用示波器观察PHA和PHB信号的波形和频率
判断是否已经是4倍频输出
测量每圈脉冲数,确认是否与手册一致

4.2 检查单片机QEI配置
查看是否启用4倍频模式
检查计数方向是否正确
是否有溢出或限幅设置影响计数

4.3 软件调试建议
在中断中定时读取PWM1CNTR的值(如每1ms一次),记录差值
计算单位时间内的计数变化,观察是否符合预期
若每次变化为4,则说明确实是4倍频计数

五、结论

综上所述,您读取到的数值始终为 4的倍数,可能的原因包括:

| 可能原因 | 说明 |
|----------|------|
| 编码器输出为4倍频信号 | 导致单片机再处理后计数为8倍频,但读出为4的倍数 |
| 单片机QEI模块启用4倍频 | 每次有效边沿计数+1,但由于读取频率低,读出为4的倍数 |
| 软件读取频率过低 | 快速旋转下累计多个4倍频计数,导致读数为4的整数倍 |
| 信号抖动或质量差 | 导致部分边沿未被识别,计数不连续 |

建议您结合硬件信号测试与软件配置检查,逐步排查上述可能性,以定位具体原因。

如需进一步帮助,建议提供以下信息:
编码器型号及每圈脉冲数(PPR)
STC8H1K17的QEI配置代码(如初始化寄存器设置)
PWM1CNTR的读取方式及频率

祝您调试顺利,如有需要,欢迎继续交流。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:606
  • 最近打卡:2025-11-01 11:29:35
已绑定手机
已实名认证

122

主题

2948

回帖

7664

积分

版主

积分
7664
发表于 2025-10-21 22:35:21 | 显示全部楼层
中断里面读取的吗?如果想要每个都读取,可以尝试打开TIE,捕获中断。
或者在while循环内持续读取
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-11-1 22:13 , Processed in 0.124393 second(s), 62 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表