你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 用主从定时器方式实现DSP QEP模块的QCTMR功能,异常

[复制链接]
lzylzy1212 提问时间:2026-4-9 10:53 / 未解决

DSP的QEP有个功能QCTMR,可以提高编码器线数较少且转速低时的速度计算精度。原理:在读取QEP的脉冲数时,可以获得当前QCTMR定时器的值,该QCTMR定时器可配置为在每个QEP脉冲到的时候会被自动清零,这样能够补偿因QEP脉冲变化较少时的速度计算误差。

现在就是想用stm32实现dsp qep模块的QCTMR功能。用的H723芯片,我们把主定时器TIM2配置成正交编码器模式Encoder Mode Tl1 and Tl2,接ABZ编码器。另外配置一个从定时器TIM23为普通周期计数模式。然后也想要每个QEP脉冲变化时能有触发信号使得从定时器复位,因此配置了主TIM2触发模式为TIM_TRGO_OC1,TIM23从模式配置为复位。现在QEP变化可以复位TIM23->CNT,目前的问题是1个ABZ有4个qep脉冲变化,但只复位了1次TIM23。

代码如下:

TIM2的配置代码a3770e3a-d409-4bde-ae16-c8daae931e2d.png

TIM23的配置代码3a9cfd216097c992f22170268257a6e4.png

想问一下,这种实现方式可行吗?为什么1个周期4个脉冲变化只复位了1次从定时器呢,哪里有问题。求解答

image.png
image.png
image.png
image.png
image.png
收藏 评论4 发布时间:2026-4-9 10:53

举报

4个回答
lzylzy1212 回答时间:昨天 11:00

顶一下😄

lzylzy1212 回答时间:昨天 11:10

3a9cfd216097c992f22170268257a6e4.png8f68966a4628d1ae7a22672f61705910.png

butterflyspring 回答时间:昨天 17:15
看了一点资料,如果没理解错的话,是想要在两个脉冲之间计数,提高分辨率。

时间轴 →|----Tp1----|----Tp2----|----Tp3----|QEP脉冲:   ↑           ↑           ↑QCTMR值:   清零→计数→读数→清零→计数→读数→清零



那么可行的方法是用一个定时器来做输入捕获,这样在两个脉冲之间计数。
分辨率由定时器精度来决定。两个捕获值相减即可。
因为目的是在低速状态下提高分辨率,那么时间是相当充裕的。




xmshao 回答时间:5 小时前

你现在TIM2接上了编码器,然后让TIM2产生触发信号令TIM23复位。

但是,你选择的TIM2的OC1目前是不存在的,因为它的CH1CH2都做编码输入了,并不是比较输出通道。退一步讲,即使你选别的通道的OC信号作为触发输出,一个周期【你这里就是65535个脉冲】也只能产生一次触发信号去复位下一级TIMER。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版