伺服电机AB相输出,接入定时器通道,对定时器IO口的速率有何要求【详细分析】
1.前言
首先,要理解标题"伺服电机AB相输出,接入定时器通道,对定时器IO口的速率有何要求"这句话,主体是伺服电机 AB相输出,指的的伺服电机反馈的AB相信号,不是步进电机。因为步进电机一般是脉冲信号驱动,而不带反馈的(也可以给步进电机加上反馈,一种常见的方法是带上编码器,但这实际上就有伺服电机的味道了。具体可参考)。
其次,AB相信号是什么东西?AB相信号是A相和B项的合称,A相B相都是脉冲信号,A相B相相差90度,因此AB相属于正交信号。A相一般是与电机旋转同步的基准脉冲信号。B相是与A相 相位相差90度的脉冲信号。通过B相和A相 谁比谁超前90度,来控制电机是正传还是反转。
再次,通过电机反馈的AB相信号可以接入正交解码器,从而计算出电机的方向和位置。当前,一般不会在单板上再专门布置一个正交解码芯片,STM32和GD32的芯片的高级和通用定时器就具有相应功能。在使用定时器的正交解码功能时,要配置为编码器接口模式,具体可参考。
2.定时器接口可以处理的脉冲频率
GD32F407定时器,分为 高级定时器,通用定时器和基本定时器。其中,高级定时器和通用定时器具有正交解码功能。
2.1 当编码器为1000线时,对脉冲频率的检测要求
信号频率:
1000线编码器在电机高速旋转时,每圈会产生1000个脉冲周期。若电机转速为600RPM(每分钟600转,每秒钟10转),则每秒需处理约10000个脉冲。四倍频后,定时器每秒需解析40000个边沿信号,这对定时器的端口速度和中断响应能力提出极高要求。
相位差检测:
AB相信号通过90°相位差判断方向,要求定时器在单个脉冲周期内完成两次边沿检测(A相上升沿/下降沿、B相上升沿/下降沿)。若编码器线数为1000,脉冲周期最短仅25微秒(1s/40000 * 1000(ms)* 1000(us),4倍频),需确保定时器能在25微秒内完成4次边沿捕捉和方向判断(四倍频技术的基本原理是在一个脉冲周期内捕获四次边沿变化,从而将编码器的分辨率提高四倍)。
定时器的性能要求:
高速计数功能:定时器需支持高速计数模式,例如STM32定时器的编码器接口模式,可直接解析AB相脉冲的相位差和频率。若采用普通定时器,需通过中断方式处理边沿,但受限于中断响应时间(通常为微秒级),可能无法稳定解析高频信号。
中断响应时间:定时器中断响应时间需小于脉冲周期的1/4(四倍频下)。以600RPM为例,脉冲周期为25微秒,中断响应时间需控制在6.25微秒以内。若中断延迟过长,会导致脉冲计数丢失或方向误判。
高级/通用定时器 编码器接口模式下,是如何 根据AB相的输入进行脉冲计数的?
如下图所示,CI0和CI1一个可以看作A相,一个可以看作B相。当CI0先产生脉冲,CI1后产生脉冲。(A相先变化,B相后变化)时电机正转,计数器Counter开始计数CNT++。CI1先产生脉冲,CI0后产生脉冲。(B相先变化,A相后变化)时电机反转,计数器CNT- -。
注:上图一定要看懂,不懂的,留言提问。
3.计算过程
STM32/GD32通用定时器在编码器接口模式下,每秒可检测的脉冲数取决于定时器时钟频率、预分频器设置及编码器模式的工作原理,具体分析如下:
3.1 核心计算公式
最大脉冲检测频率 = (定时器时钟频率) / (预分频器值 + 1) / 4
• 定时器时钟频率:由MCU主频和时钟树配置决定(如STM32F103为72MHz,STM32F407可达168MHz)。
• 预分频器值:通过TIMx_PSC寄存器设置,用于降低定时器计数频率。
• 除以4:因编码器接口模式采用四倍频技术(A/B相每个周期产生4个边沿)。
3.2 典型场景计算示例
以GD32F407(主频32MHz,使用外部时钟)为例:
- 无预分频(PSC=0):
• 最大检测频率 = 32MHz / (0+1) /4 = 8MHz。
• 每秒脉冲数:8000,000个。 - 预分频=1(PSC=1):
• 定时器时钟=32MHz/(1+1)=16MHz。
• 最大检测频率=16MHz/4= 4MHz。
• 每秒脉冲数:4,000,000个。 - 预分频=7(PSC=7):
• 定时器时钟=32MHz/(7+1)=4MHz。
• 最大检测频率=4MHz/4= 4MHz。
• 每秒脉冲数:1,000,000个。
3.2关键限制因素
- GPIO响应速度:
• STM32 GPIO最大翻转速度通常为18MHz(部分高速GPIO可达50MHz以上)。
• 若编码器信号频率超过GPIO响应能力,会出现信号畸变。 - 中断延迟:
• 在编码器接口模式下,定时器自动计数,无需CPU干预。
• 若需通过中断读取计数值,中断响应时间(通常1-10μs)会降低有效检测频率。 - 信号完整性:
• 高速编码器信号需使用差分传输(如RS422)或屏蔽电缆。
• 添加硬件滤波电路(如RC低通滤波器)可抑制噪声,但会增加信号延迟。
思考 or 问题
读完本篇文章,应能回答下述问题:
1.电机编码器输出的AB相,是什么信号?AB相1000线是什么意思?
2.STM32/GD32的哪种定时器可以实现正交解码器的作用?
3.定时器通过AB相判断方向和位置,1个脉冲周期内,需要完成几次边沿捕获?
4.STM32通用定时器设置为编码器接口模式,端口每秒可以支持检测多少个脉冲?
参考
1.STM32通用定时器-脉冲计数(编码器模式)及电机测速原理
2.GD32F407Datasheet
3.GD32F4xx_User_Manual_Rev3.2.pdf