STM32控制编码器电机实现【速度闭环控制】与【位置闭环控制】2222

本文解释了STM32中编码器信号如何通过定时器和滤波器处理,利用上升沿和下降沿确定转动方向,并讨论了单/双边沿计数对计数值的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其他补充
1、TIx: 定时器连接通道的信号。如TI1,指TIMx _CH1接入的信号。
2、 TIXFPx:指来自定时器通道X,经滤波器连接至比较通道x的信号。
3、相对信号的电平: 编码器接入STM32的是两条数量相同但相位不同的信号,得知此时捕捉的边沿(上升或下降),再得知此刻相对信号的电平,正是为了确定编码器的转动方向。

#include "systick.h"
unsigned int Timing_delay;
void SysTick_Configration(void)
{
    while(SysTick_Config(72));
    SysTick->CTRL &=~(1<<0);//Եʼۯ۳ژҕ֨ʱǷ disable
}
void Delay_us(unsigned int n)
{
    Timing_delay=n;
    SysTick->CTRL |=(1<<0);//ߪǴ֨ʱǷ
    while(Timing_delay);
    SysTick->CTRL &=~(1<<0);
}
void delay_us(unsigned int n)
{
    Timing_delay=n;
    SysTick->CTRL |=(1<<0);//ߪǴ֨ʱǷ
    while(Timing_delay);
    SysTick->CTRL &=~(1<<0);
}

void delay_ms(unsigned int k)
{
    while(k--)
    {
        delay_us(1000);
    }
}

在参考手册上有这样的一个图,其中的相对信号的电平很难理解。运用编码器计数方向的图来对照比较,终于找出了其中的规则。

我们都知道编码器转动一圈输出脉冲,而输出的脉冲数量取决于编码器的线数。如线数为500,则A\B转动一圈各输出脉冲500,但是存在相位差,通常相位差为90。根据输出信号的相位差来对比,我们就可以分析编码器转动的方向。

以编码器信号“正向输入”为例,编码器的输入信号A、B分别连接TI1、TI2,脉冲计数值为CNT。按照有效边沿为TI1进行计数,也就是指,观察A的边沿变化。


位置1:
A为上升沿,因而TI1产生上升沿,经滤波后成为TI1FP1信号,即“TI1FP1=上升”。
而此时相对信号的电平,从正向输出的脉冲图中可以看出,也就是B,为低。按照参考手册,此时计数器应“向上计数”,此时CNT+1。
位置2:
A为下降沿,而B的信号为“高”,同样是“向上计数”,CNT+1。
位置3:
完成一个脉冲周期后同位置1,A/B信号相对情况不变,持续保持正向,故持续向上计数。

从这我们也可以看出,在采取单边沿计数时,虽然编码器只产生了一次脉冲,但是STM32的编码器模式下的计数器记2次,也就是计数值=编码器实际脉冲*2。

按照手册的规则进行同样推演,最终参考手册的这个表传达的意思总结如下:
1、计数器向上计数,则编码器正向转动;向下计数则反向。(前提:不改变信号极性)
2、单边沿计数时(无论在TI1/TI2),计数值=编码器实际脉冲 * 2。
双边沿计数时,计数值=编码器实际脉冲 * 4。

其他补充
1、TIx: 定时器连接通道的信号。如TI1,指TIMx _CH1接入的信号。
2、 TIXFPx:指来自定时器通道X,经滤波器连接至比较通道x的信号。
3、相对信号的电平: 编码器接入STM32的是两条数量相同但相位不同的信号,得知此时捕捉的边沿(上升或下降),再得知此刻相对信号的电平,正是为了确定编码器的转动方向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值