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

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
收藏 评论7 发布时间:2026-4-9 10:53

举报

7个回答
xmshao 回答时间:2026-4-10 11:29:17

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

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

lzylzy1212 回答时间:2026-4-9 11:00:21

顶一下😄

lzylzy1212 回答时间:2026-4-9 11:10:32

3a9cfd216097c992f22170268257a6e4.png8f68966a4628d1ae7a22672f61705910.png

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

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



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




lzylzy1212 回答时间:2026-4-15 16:31:45

butterflyspring 发表于 2026-4-9 17:15
看了一点资料,如果没理解错的话,是想要在两个脉冲之间计数,提高分辨率。</p>
<p>时间轴 →|----Tp1----|----Tp ...

是的,问题是这个定时器如何在2个Qep脉冲之间计数并复位,计数很简单就实现,主要是复位。贴的代码段就是用编码器的模式的TIM2去复位计数定时器TIM23的,但是不是每个QEP脉冲都复位,4个脉冲也就是一个周期才复位1次,所以精度很差,达不到要求。

lzylzy1212 回答时间:2026-4-15 16:33:12

xmshao 发表于 2026-4-10 11:29
你现在TIM2接上了编码器,然后让TIM2产生触发信号令TIM23复位。</p>
<p>但是,你选择的TIM2的OC1目前是不存在 ...

[md]但是实验下来OC1是可以复位的,也不是TIM2.CNT到达period才复位1次,是每4个QEP脉冲(编码器模式为EncoderT12)会复位1次。

butterflyspring 回答时间:2026-4-15 17:38:22
lzylzy1212 发表于 2026-4-15 16:31
[md]是的,问题是这个定时器如何在2个Qep脉冲之间计数并复位,计数很简单就实现,主要是复位。贴的代码段 ...

定时器工作在从模式下,它的复位来源于触发信号。

主定时器的触发信号一个周期只能来一次,所以只能复位一次。

因此用捕获的方式才可以更精准的获得测量值,只是做给减法。
而触发复位计数器就是避免做减法,但是次数不够。

所属标签

相似问题

官网相关资源

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