|
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的配置代码 TIM23的配置代码 想问一下,这种实现方式可行吗?为什么1个周期4个脉冲变化只复位了1次从定时器呢,哪里有问题。求解答 |
STM32H7的双缓冲
TIM11,TIM13失效
H745 在调试SD卡时出现HAL_SD_GetCardStatus(hsd, &CardStatus) 获取失败,
STM32H7高温情况下出现必须下电才能正常工作
STM32H757 程序经过SFI加密后,下载到FLASH里的程序是密文吗?
【我心中的STM32H7A3】+小游戏机
如何解决STM32H7在3V供电下内部LDO启动裕量不足的问题?
STM32H743IIT6驱动外扩SDRAM芯片热启动能成功,冷启动失败
STM32H743IIT6驱动RGB液晶屏显示红,绿,蓝三色显示都偏暗
为什么STM32H7的DMA第一次启动延时较长?
微信公众号
手机版
你现在TIM2接上了编码器,然后让TIM2产生触发信号令TIM23复位。
但是,你选择的TIM2的OC1目前是不存在的,因为它的CH1CH2都做编码输入了,并不是比较输出通道。退一步讲,即使你选别的通道的OC信号作为触发输出,一个周期【你这里就是65535个脉冲】也只能产生一次触发信号去复位下一级TIMER。
顶一下😄
时间轴 →|----Tp1----|----Tp2----|----Tp3----|QEP脉冲: ↑ ↑ ↑QCTMR值: 清零→计数→读数→清零→计数→读数→清零
那么可行的方法是用一个定时器来做输入捕获,这样在两个脉冲之间计数。
分辨率由定时器精度来决定。两个捕获值相减即可。
因为目的是在低速状态下提高分辨率,那么时间是相当充裕的。
是的,问题是这个定时器如何在2个Qep脉冲之间计数并复位,计数很简单就实现,主要是复位。贴的代码段就是用编码器的模式的TIM2去复位计数定时器TIM23的,但是不是每个QEP脉冲都复位,4个脉冲也就是一个周期才复位1次,所以精度很差,达不到要求。
[md]但是实验下来OC1是可以复位的,也不是TIM2.CNT到达period才复位1次,是每4个QEP脉冲(编码器模式为EncoderT12)会复位1次。
定时器工作在从模式下,它的复位来源于触发信号。
主定时器的触发信号一个周期只能来一次,所以只能复位一次。
因此用捕获的方式才可以更精准的获得测量值,只是做给减法。
而触发复位计数器就是避免做减法,但是次数不够。