找回密码
 立即注册
查看: 45|回复: 1

网友问:用的官网测试程序 编码器脉冲怎么不计数呢一直是0

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 6 天前 | 显示全部楼层 |阅读模式
网友问:
用的官网测试程序 编码器脉冲怎么不计数呢一直是0


截图202607161200012811.jpg

神仙问题问神仙,具体程序都没有啊


截图202607161159201710.jpg

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-07-21 09:31:46

851

主题

1万

回帖

2万

积分

管理员

积分
24394
发表于 6 天前 | 显示全部楼层

好的,信息已经比较充分了。现在我来分析您的问题。

从您提供的截图来看,串口通信正常(能收到"PULSE=000000"),但脉冲值始终为0。结合手册中的示例程序和配置,我来帮您排查。


问题分析:编码器脉冲始终为0的排查

根据手册中 "16位高级PWM定时器,支持正交编码器" 章节的示例程序和配置说明,我列出以下几个最可能的原因,请您逐一检查:


🔍 原因一:编码器信号未正确接入(最常见)

手册中明确说明编码器输入引脚为:

  • 编码器A相 → PWM1P → P1.0
  • 编码器B相 → PWM2P → P1.2

请检查:

  1. 编码器A相是否接到了 P1.0,B相是否接到了 P1.2
  2. 编码器的GND是否与单片机共地
  3. 编码器是增量式编码器(正交输出) 吗?如果是霍尔传感器或开关信号,需要确认输出是否为标准的正交方波信号

如果编码器输出是 OC/OD 开漏输出,需要在 P1.0 和 P1.2 上外加上拉电阻(4.7kΩ~10kΩ)


🔍 原因二:I/O口模式未配置为高阻输入

编码器输入属于外部信号输入,P1.0 和 P1.2 必须配置为 高阻输入模式

手册示例程序中配置的是:

P1M1 = 0x00;
P1M0 = 0x00;   // 准双向口

准双向口有弱上拉,可能会影响外部编码器信号的电平。建议改为:

P1M1 = 0x05;   // 二进制 0000 0101,P1.0和P1.2设为高阻输入
P1M0 = 0x00;

或者更精确地只配置 P1.0 和 P1.2:

P1M1 |= 0x05;   // P1.0(bit0)和P1.2(bit2)设为1 → 高阻输入
P1M0 &= ~0x05;

🔍 原因三:PWMA_PS 引脚选择是否正确

手册中 PWMA_PS 寄存器的默认值为 0x00,此时:

  • PWM1P → P1.0
  • PWM2P → P1.2

如果您的代码中修改了 PWMA_PS,请确认其值为 0x00。示例程序中已正确配置:

PWMA_PS = 0;   // IO选择P1.0 P1.2

🔍 原因四:编码器信号频率/电平不匹配

  • 信号电平:编码器输出高电平必须 ≥ 0.7×VCC(若 VCC=3.3V,则需 ≥ 2.3V),低电平必须 ≤ 0.3×VCC
  • 信号频率:STC8H 的编码器模式可以处理较高频率,但如果编码器转速极高(如 > 数万转/分钟),需确认是否超出计数能力
  • 可以用示波器/逻辑分析仪 抓一下 P1.0 和 P1.2 的波形,确认是否有正常的正交方波信号

🔍 原因五:检查 PWMA_CNTR 是否被意外清零

示例程序中,PWMA_config() 函数内有:

PWMA_CNTR = 0;   // 清零编码器计数器值

这仅在初始化时清零一次,是正常的。但如果主循环中或中断中又对 PWMA_CNTR 写了值,会导致计数丢失。请检查您的代码中是否有其他地方对 PWMA_CNTR 进行了写操作。


🔍 原因六:确认编码器模式配置

手册示例中配置的是 模式2PWMA_SMCR = 2),即每个脉冲两个边沿加减2。您截图中注释提到模式1/2/3,请确认您实际下载的 hex 文件中配置的模式与您的编码器匹配。


✅ 快速验证步骤

建议您按以下顺序快速排查:

步骤 操作
1 用万用表测 P1.0 和 P1.2 对 GND 的电压,用手转动编码器,看电压是否在高低电平之间变化
2 确认编码器 GND 与单片机 GND 已连接
3 在 P1.0 和 P1.2 对 VCC 各加一个10kΩ 上拉电阻(如果编码器是开漏输出)
4 在代码初始化中增加 `P1M1
5 重新下载程序(选择 11.059MHz IRC),再观察串口输出

如果以上排查后问题仍然存在,请您补充以下信息,我帮您进一步分析:

  1. 您使用的编码器型号(或输出信号类型:是正交方波?还是霍尔开关?)
  2. 编码器的工作电压单片机的供电电压(VCC 是 3.3V 还是 5V?)
  3. P1.0 和 P1.2 上是否有外接上拉电阻?
  4. 您是否修改过官方的示例代码? 如果修改过,请贴出修改后的 PWMA_config() 函数内容

🔍 搜索 "用的官网测试程序 编码器脉冲怎么不计数呢一直是0"

📌 相关论坛讨论

  1. STC32单片机学习记录 | 建议立即 【免费+包邮送】实验箱,提高学习效率
  2. 用定时器4当计数器用该怎么设置
  3. 求助:8H1K08 SOP16接编码器读不到脉冲数字 [已解决]

⏱️ 查找用时 12.0s | 总回答用时 27.9s

回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-7-22 10:31 , Processed in 0.070069 second(s), 47 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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