0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

电机控制基础3——定时器编码器模式使用与转速计算

码农爱学习 来源:码农爱学习 作者:码农爱学习 2021-08-30 17:26 次阅读

上篇介绍了定时器捕获输入脉冲的原理,那种方式是根据捕获的原理,手动切换上升沿与下降沿捕获,计算脉冲宽度的过程原理比较清晰,但编程操作起来比较麻烦。

对于电机测速用到的正交编码器,测速时需要捕获2路脉冲,如果使用上一篇介绍的方法,编程就较为复杂。还好单片机的通用定时器具有专门的正交编码器接口,只需配置相应的寄存器,就可实现编码器输入的上下沿自动捕获与计数,非常便于编码器的测速。

下面就来介绍下定时器的编码器模式的使用:

1 正反转计数原理示例

编码器模式下,计数器的计数方向代表的电机的正转与反转,计数的大小代表了转速的大小。

如下图,电机正转时,编码器的通道A(TI1)的信号超前通道B,计数器向上计数,反转时,通道A的信号滞后,向下计数。

pYYBAGD1h8uANRcpAADGZTY2jto184.png

设置信号的极性反相,可以使向下计数代表电机正转。 pYYBAGD1h8yAK37zAADMFtGqpgU094.png

2 定时器编码器模式配置

STM32 芯片为例,其内部有专门用来采集增量式编码器方波信号的接口,这些接口实际上是STM32 定时器的其中一种功能。不过编码器接口功能只有高级定时器TIM1、TIM8 和通用定时器的TIM2~TIM5 才有。

poYBAGD1h8yASOHSAABThnF_A_Q810.png

正交编码器有两路正交的输入信号(关于正交编码的介绍,可查看之前的文章:编码器计数原理与电机测速原理——多图解析),根据实际需要,可以设置只捕获某个通道的上升沿或下降沿,也可以设置同时捕获两个通道的上升沿与下降沿,这样就可以提高编码器的计数精度,实现倍频。

poYBAGD1h86AGQl5AAHT3hSvsRU643.png

编码器模式的配置实际上是通过配置SMCR寄存器和CCER寄存器来实现。

2.1 SMCR寄存器配置触发模式

SMCR即从模式控制寄存器(slave mode control register),查阅STM32F4的参考手册,可以找到类似如下信息,现在我们只需关注SMS这几位:

pYYBAGD1h8-ALsBCAAAfFpmZIBA157.png

  • 位 15 ETP:外部触发极性 (External trigger polarity)

  • 位 14 ECE:外部时钟使能 (External clock enable)

  • 位 13:12 ETPS:外部触发预分频器 (External trigger prescaler)

  • 位 11:8 ETF[3:0]:外部触发滤波器 (External trigger filter)

  • 位 7 MSM:主/从模式 (Master/Slave mode)

  • 位 6:4 TS:触发选择 (Trigger selection)

  • 位 3 保留,必须保持复位值

  • 位 2:0 SMS:从模式选择 (Slave mode selection)

    • 000:禁止从模式––如果 CEN =“1”,预分频器时钟直接由内部时钟提供。

    • 001:编码器模式 1––计数器根据 TI1FP1 电平在 TI2FP2 边沿 递增/递减计数。

    • 010:编码器模式 2––计数器根据 TI2FP2 电平在 TI1FP1 边沿 递增/递减计数。

    • 011:编码器模式 3––计数器在 TI1FP1 和 TI2FP2 的边沿计数,计数的方向取决于另外一个信号的电平。

    • 100:复位模式––在出现所选触发输入 (TRGI) 上升沿时,重新初始化计数器并生成一个寄存器更新事件。

    • 101:门控模式––触发输入 (TRGI) 为高电平时使能计数器时钟。只要触发输入变为低电平,计数器立即停止计数(但不复位)。计数器的启动和停止都是受控的。

    • 110:触发模式––触发信号 TRGI 出现上升沿时启动计数器(但不复位)。只控制计数器的启动。

    • 111:外部时钟模式 1––由所选触发信号 (TRGI) 的上升沿提供计数器时钟。

上面的SMCR寄存器介绍中,关于TI1、TI2等的函数:

TI1TI2对应编码器的A、B两相输入信号。

TI1FP1TI2FP2 是进行输入滤波器和极性选择后 TI1 和 TI2 的信号,如果不进行滤波和反相,则 TI1FP1=TI1,TI2FP2=TI2。

从上面的SMCR寄存器的功能介绍可知,选择编码器接口模式时:

如果计数器仅在 TI2 边沿处计数,在 TIMx_SMCR 寄存器中写入 SMS=001

如果计数器仅在 TI1 边沿处计数,写入 SMS=010

如果计数器在 TI1 和 TI2 边沿处均计数,则写入 SMS=011

定时器的编码器模式根据两个输入的信号转换序列,产生计数脉冲方向信号。根据该信号转换序列,计数器相应递增或递减计数,同时硬件对 TIMx_CR1 寄存器的DIR位进行相应修改。任何输入(TI1 或 TI2)发生信号转换时,都会计算 DIR 位。

2.2 CCER寄存器配置极性

通过编程 TIMx_CCER 寄存器的 CC1P 和 CC2P 位,可以选择 TI1 和 TI2 极性。实际上就是设置TIxFP1 是否与TIx反相,来设置正转时是向下计数还是向下计数

pYYBAGD1h8-APBX7AAAqgbJouDE651.png

  • 位 15、11、7、3 CCxNP:捕获 /比较x 输出极性 (Capture/Comparex output Polarity)

  • 位 14、10、6、2 保留,必须保持复位值

  • 位 13、9、5、1 CCxP:捕获 /比较x 输出极性 (Capture/Comparex output Polarity)。

    • 00:非反相/上升沿触发电路对 TIxFP1 上升沿敏感(在复位模式、外部时钟模式或触发模式下执行捕获或触发操作), TIxFP1 未反相 (在门控模式或编码器模式下执行触发操作)。

    • 01:反相/下降沿触发 电路对 TIxFP1 下降沿敏感 (在复位模式、外部时钟模式或触发模式下执行捕获或触发操作), TIxFP1 反相 (在门控模式或编码器模式下执行触发操作)。

    • 10:保留,不使用此配置。

    • 11:非反相/上升沿和下降沿均触发 电路对 TIxFP1 上升沿和下降沿都敏感(在复位模式、外部时钟模式或触发模式下执行捕获或触发操作),TIxFP1 未反相(在门控模式下执行触发操作)。编码器模式下不得使用此配置!!!

    • 0:OCx 高电平有效

    • 1:OCx低电平有效

    • CCx 通道配置为输出:

    • CCx 通道配置为输入

      CCxNP/CCxP 位可针对触发或捕获操作选择 TI1FP1 和 TI2FP1 的极性。

  • 位 12、8、4、0 CCxE:捕获 /比较 x 输出使能 (Capture/Comparex output enable)

注:在编码器模式下,极性的作用是设置TIxFP1 是否反相,不要被”上升沿敏感“误导为是只捕获上升沿信号!

”上升沿敏感“是在非编码器模式下的功能。所以,编码模式下,只能配置为0001

另一方面来看,编码器模式下,只能通过SMCR的模式设置倍频,要么是2倍频,要么是4倍频,貌似不能设置1倍频(只对1个通道的上升沿或下降沿计数)。

2.3 CCMR寄存器配滤波参数

如果需要,通过配置CCMR寄存器的IC1F与IC2F,还可以对编码器输入信号进行滤波配置:

poYBAGD1h9CAGztaAABGDNkRr5A684.png

这些寄存器的说明在上篇文章已有介绍,这里不再展开。

3 计数方向对照表解读

编码器模式下,计数器的计数方向(递增计数还是递减计数)会根据增量编码器的速度和方向自动进行修改,因此,其计数值始终表示编码器的位置。计数方向对应于所连传感器的旋转方向。下表汇总了可能的组合(假设 TI1 和 TI2 不同时切换)。

poYBAGD1h9KAFx7SAAFO9hveg4A411.png

注:STM32 的编码器接口在计数的时候,并不是单纯采集某一通道信号的上升沿或下降沿,而是需要综合另一个通道信号的电平。(通俗的讲就是,使用编码器接口时,编码器的两个输入通道A与通道B都需要进行电路连接!!!,虽然你设置了仅在某一个通道上计数,但这个通道的计数时机需要参考另一路通道的信号)表中“相反信号的电平”指的就是在计数的时候所参考的另一个通道信号的电平,这些电平决定了计数器的计数方向。

3.1 仅在TI1处计数

这里的仅在TI1处计数,就是仅统计编码器的通道A的信号跳变,先以电机正转为例:

注:以下的介绍中,“通道A“代表TI1,“通道B“代表TI2。

3.1.1 电机正转(向上计数)

假定电机正转时,编码的通道A的信号比通道B提前1/4个周期(也即相位提前90度),在通道A的上升沿与下降沿均计数(如下图TI1波形中的绿色和红色箭头),因为计数的方向代表的电机转动的方向,所以,在正转的情况下:

  • 通道A上升沿,通道B为低电平,向上计数,代表电机正转

  • 通道A下降沿,通道B为高电平,向上计数,代表电机正转

pYYBAGD1h9OAEx3KAAJhXG1DgCA568.png

3.1.2 电机反转(向下计数)

反转的情况,编码的通道A的信号比通道B滞后1/4个周期:

  • 通道A下降沿,通道B为低电平,向上计数,代表电机反转

  • 通道A上升沿,通道B为高电平,向上计数,代表电机反转

pYYBAGD1h9WAGl2uAAIg4g1WsLs637.png

3.2 仅在TI2处计数

仅在TI2处计数,就是仅统计编码器的通道B的信号跳变,同样可以分为正转和反转两种情况,具体的对应关系参考上面的”仅在TI1处计数“自行分析,实际上通道A与通道B从自身来说功能是等价的。

3.3 在TI1与TI2处均计数

在TI1与TI2处均计数,就是讲编码器的通道A与通道B的信号均统计并进行计数,这样可以提高计数频率,实现倍频。

这里还以电机正转为例*

观察下图,编码器在开始阶段可依次捕获到:通道A上升沿、通道B上升沿、通道A下降沿、通道B下降沿,所以有:

  • 通道A上升沿,通道B为低电平,向上计数,代表电机正转

  • 通道B上升沿,通道A为高电平,向上计数,代表电机正转

  • 通道A下降沿,通道B为高电平,向上计数,代表电机正转

  • 通道B下降沿,通道A为高电平,向上计数,代表电机正转

poYBAGD1h9aAa1WQAAKMTTsmhrc747.png

4 编程实现

4.1 定时器编码器模式配置

这里使用的通用定时器中的 TIM4,配置定时器最基础的功能就是要配置时基,使用输入功能还要配置定时器的GPIO输入通道

#define ENCODER_TIM_PSC 0     /*计数器分频*/
#define ENCODER_TIM_PERIOD 65535  /*计数器最大值*/
#define CNT_INIT 0         /*计数器初值*/

void TIM4_ENCODER_Init(void)           
{
GPIO_InitTypeDef GPIO_InitStruct;      /*GPIO*/
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct; /*时基*/
TIM_ICInitTypeDef TIM_ICInitStruct;     /*输入通道*/
 
 /*GPIO初始化*/  
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); /*使能GPIO时钟 AHB1*/          
GPIO_StructInit(&GPIO_InitStruct);    
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;    /*复用功能*/
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz; /*速度100MHz*/
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; 
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;    
GPIO_Init(GPIOB, &GPIO_InitStruct);

GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_TIM4);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_TIM4);

/*时基初始化*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);  /*使能定时器时钟 APB1*/
TIM_DeInit(TIM4); 
TIM_TimeBaseStructInit(&TIM_TimeBaseStruct);  
TIM_TimeBaseStruct.TIM_Prescaler = ENCODER_TIM_PSC;    /*预分频 */    
TIM_TimeBaseStruct.TIM_Period = ENCODER_TIM_PERIOD;    /*周期(重装载值)*/
TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;   
TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up; /*连续向上计数模式*/ 
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStruct);

/*编码器模式配置:同时捕获通道1与通道2(即4倍频),极性均为Rising*/
TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12,TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
TIM_ICStructInit(&TIM_ICInitStruct);    
TIM_ICInitStruct.TIM_ICFilter = 0;  /*输入通道的滤波参数*/
TIM_ICInit(TIM4, &TIM_ICInitStruct); /*输入通道初始化*/
TIM_SetCounter(TIM4, CNT_INIT);   /*CNT设初值*/
TIM_ClearFlag(TIM4,TIM_IT_Update);  /*中断标志清0*/
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); /*中断使能*/
TIM_Cmd(TIM4,ENABLE);        /*使能CR寄存器*/
}

这里将定时器的计数溢出值设为65535,即TIM4的计数最大值(TIM4为16位计数器)。目的是避免计数器溢出,简化后续的速度计算方式(计数器器若溢出,在计算转速时,还要将溢出的次数考虑进去)。

编码器模式设置为TIM_EncoderMode_TI12,即两路信号均计数,实现4倍频。

编码器两个输入的极性均设置为TIM_ICPolarity_Rising,即极性不反相。

这里编码器模式的设置,调用了TIM_EncoderInterfaceConfig()函数,其内部即是对相关的寄存器进行配置:

void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode, uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity)
{
uint16_t tmpsmcr = 0;
uint16_t tmpccmr1 = 0;
uint16_t tmpccer = 0;
 
/* Check the parameters */
assert_param(IS_TIM_LIST2_PERIPH(TIMx));
assert_param(IS_TIM_ENCODER_MODE(TIM_EncoderMode));
assert_param(IS_TIM_IC_POLARITY(TIM_IC1Polarity));
assert_param(IS_TIM_IC_POLARITY(TIM_IC2Polarity));

tmpsmcr = TIMx->SMCR;/* Get the TIMx SMCR register value */
tmpccmr1 = TIMx->CCMR1; /* Get the TIMx CCMR1 register value */
tmpccer = TIMx->CCER;/* Get the TIMx CCER register value */
tmpsmcr &= (uint16_t)~TIM_SMCR_SMS;/* Set the encoder Mode */
tmpsmcr |= TIM_EncoderMode;

/* Select the Capture Compare 1 and the Capture Compare 2 as input */
tmpccmr1 &= ((uint16_t)~TIM_CCMR1_CC1S) & ((uint16_t)~TIM_CCMR1_CC2S);
tmpccmr1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0;

/* Set the TI1 and the TI2 Polarities */
tmpccer &= ((uint16_t)~TIM_CCER_CC1P) & ((uint16_t)~TIM_CCER_CC2P);
tmpccer |= (uint16_t)(TIM_IC1Polarity | (uint16_t)(TIM_IC2Polarity << (uint16_t)4));

TIMx->SMCR = tmpsmcr; /* 配置数据写入 SMCR 寄存器 */
TIMx->CCMR1 = tmpccmr1; /* 配置数据写入 CCMR1 寄存器 */
TIMx->CCER = tmpccer; /* 配置数据写入 CCER 寄存器 */
}

4.2 电机转轴转速计算

这里使用一款直流减速电机:

  • 减速比是34(即电机转轴转1圈,电机本身要转34圈)

  • 电机转一圈的物理脉冲数是11

所以,电机转轴转1圈时,可以产生的物理脉冲为34*11=374个,又由于编码器器模式实现了4倍频计数,所以,电机转轴转1圈时,定时器可以计数374×4=1496个。

对于转速的计算,这里使用M法测速(M法测速的具体原理参考之前的文章:http://www.elecfans.com/d/1639052.html),即统计固定时间间隔内的编码器的脉冲数,来计算速度值。

,单位为:转/秒

  • C:编码器单圈总脉冲数

  • 每次的统计时间(单位为秒)

  • :该时间内统计到的编码器脉冲数

比如,对于本次实验的电机,转轴转1圈时,定时器计数1496个,即C=1496个,对应程序中的TOTAL_RESOLUTION。T0可以选择100ms,即0.1s。

程序编写如下,这里通过另外一个定时器7来实现每100ms调用一次calc_motor_rotate_speed()函数来进行转速的实时计算,每次使用read_encoder()读取编码器器的值后,都将计数值CNT设为初始值0,重新开始计数,这样就可以保证每次读到的都是上个100ms的计数值。

另外,这里通过将CNT的uint32类型的计数值, 转为int16类型,就可以利用正负来区分上个100ms电机整体的转动方向(正转CNT从0向上计数,转为int16还是正值;反转CNT从0向下计数,会溢出,转为int16就为负数)。

#define ENCODER_RESOLUTION 11  /*编码器一圈的物理脉冲数*/
#define ENCODER_MULTIPLE 4    /*编码器倍频,通过定时器的编码器模式设置*/
#define MOTOR_REDUCTION_RATIO 34 /*电机的减速比*/
/*电机转一圈总的脉冲数(定时器能读到的脉冲数) = 编码器物理脉冲数*编码器倍频*电机减速比 */
#define TOTAL_RESOLUTION ( ENCODER_RESOLUTION*ENCODER_MULTIPLE*MOTOR_REDUCTION_RATIO )

// 读取定时器计数值
static int read_encoder(void)
{
int encoderNum = 0;
encoderNum = (int)((int16_t)(TIM4->CNT)); /*CNT为uint32, 转为int16*/
TIM_SetCounter(TIM4, CNT_INIT);/*CNT设初值*/

return encoderNum;
}

//计算电机转速(被另一个定时器每100ms调用1次)
void calc_motor_rotate_speed()
{
int encoderNum = 0;
float rotateSpeed = 0;

/*读取编码器的值,正负代表旋转方向*/
encoderNum = read_encoder();
/* 转速(1秒钟转多少圈)=单位时间内的计数值/总分辨率*时间系数 */
rotateSpeed = (float)encoderNum/TOTAL_RESOLUTION*10;

printf("encoder: %d\t speed:%.2f rps\r\n",encoderNum,rotateSpeed);
}

5 实验演示

通过串口发送指令,控制另外一个定时器产生指定占空比的PWM来控制电机进行恒速转动,然后测试编码器读到的速度值。

(串口指令用到了字符串切割和串口接收不定长字符的功能,可参考之前的文章:与 中的部分内容,PWM的产生可参考:)

视频中,串口打印的encoder为100ms内读到的编码器器的计数值,正负号代表正反转,speed为根据编码器的计数值计算的电机输出轴的转速,单位为圈每秒。

首先是全速正反转,转速接近5圈每秒。

然后通过调整pwm,使得电机转轴转速接近1圈每秒,由于转1圈的脉冲理论上有1496个,现在是每100ms读一次,所以能读到149个左右,符合理论值。

视频演示:https://www.bilibili.com/video/BV13p4y1h7F9

20210307224431.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6035

    文章

    44554

    浏览量

    634660
  • 电机控制
    +关注

    关注

    3534

    文章

    1876

    浏览量

    268750
  • 编码器
    +关注

    关注

    45

    文章

    3638

    浏览量

    134428
  • 定时器
    +关注

    关注

    23

    文章

    3246

    浏览量

    114721
收藏 人收藏

    评论

    相关推荐

    使用STM32的编码器接口对接增量式编码器控制电机进行很低速的转动时,需要如何进行电机转速的测量?

    使用STM32的编码器接口对接增量式编码器控制电机进行很低速的转动时,需要如何进行电机转速的测量
    发表于 04-30 06:05

    电机控制基础之定时器编码器模式使用与转速计算

    上篇电机控制基础——定时器捕获单输入脉冲原理介绍了定时器捕获输入脉冲的原理,那种方式是根据捕获的原理,手动切换上升沿与下降沿捕获,计算脉冲宽
    发表于 06-29 07:15

    定时器编码器AB相电机测速( 补充)精选资料下载

    TIM编码器AB相电机测速定时器编码器AB相电机测速1、四倍频2、算法应用定时器
    发表于 07-09 06:45

    编码器模式的实现

    编码器模式的实现编码器模式默认使用定时器的通道1和通道2,通道3和通道4不能使用。以下为
    发表于 08-16 08:12

    关于定时器编码器的应用

    实验目的:刚开始接触关机电机检测领域,准备探索关于定时器编码器的应用,用来检测脉冲数,从而进行转速的检测。使用芯片:STM32F407使用平台:STM32Cube IDE1、使用
    发表于 08-19 07:32

    怎样去使用STM32定时器编码器模式

    STM32F103-定时器编码器模式和高级定时器输出互补的PWM信号刚使用STM32时使用输入捕获中断的方式计算
    发表于 01-14 08:02

    定时器编码器模式分析

    回顾上一章节学习了PWM生成,刚好买的元器件也都到了。测试下代码,完美运行。这不又趁着周末,进行下一个环节—定时器编码器模式。目的是为下一步PID控制做准备。遇到的问题周末学习
    发表于 01-14 08:08

    电机控制知识——定时器编码器模式的使用

    产生的物理脉冲为34*11=374个,又由于编码器模式实现了4倍频计数,所以,电机转轴转1圈时,定时器可以计数374×4=1496个。对于
    发表于 03-05 07:00

    电机控制基础——定时器基础知识与PWM输出原理

    单片机开发中,电机控制定时器有着密不可分的关系,无论是直流电机,步进电机还是舵机,都会用到定时器
    发表于 11-30 14:21 38次下载
    <b class='flag-5'>电机</b><b class='flag-5'>控制</b>基础——<b class='flag-5'>定时器</b>基础知识与PWM输出原理

    STM32F103-定时器编码器模式和高级定时器输出互补的PWM信号

    STM32F103-定时器编码器模式和高级定时器输出互补的PWM信号刚使用STM32时使用输入捕获中断的方式计算
    发表于 01-14 12:53 11次下载
    STM32F103-<b class='flag-5'>定时器</b><b class='flag-5'>编码器</b><b class='flag-5'>模式</b>和高级<b class='flag-5'>定时器</b>输出互补的PWM信号

    STM32F407定时器编码器模式简介

    STM32F407定时器编码器模式
    发表于 03-31 17:14 8655次阅读
    STM32F407<b class='flag-5'>定时器</b><b class='flag-5'>编码器</b><b class='flag-5'>模式</b>简介

    详解stm32定时器编码器模式

    增量式编码器在实际应用中还是很常见。stm32的定时器带的也有编码器模式。所用的编码器是有ABZ三相,其中ab相是用来计数,z相输出零点信号
    的头像 发表于 01-19 09:14 9137次阅读
    详解stm32<b class='flag-5'>定时器</b>的<b class='flag-5'>编码器</b><b class='flag-5'>模式</b>

    永磁同步电机FOC控制之STM32定时器关于编码器模式的应用

    最近开始研究和学习关于永磁同步电机和BLDC电机的FOC控制,但是目前在应用圈子上看来,大多的都是使用的ST的电机库,这就让我很不 爽,我觉得如此基础以及重要的算法不应该拿来就用,因
    发表于 03-15 11:33 1次下载
    永磁同步<b class='flag-5'>电机</b>FOC<b class='flag-5'>控制</b>之STM32<b class='flag-5'>定时器</b>关于<b class='flag-5'>编码器</b><b class='flag-5'>模式</b>的应用

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

    ,作为TB6612的输入,控制电机进行调速; 定时器2(TIM2):读取编码器的波形; 定时器3
    发表于 05-06 09:26 4次下载
    STM32<b class='flag-5'>控制</b><b class='flag-5'>编码器</b><b class='flag-5'>电机</b>实现速度与位置闭环<b class='flag-5'>控制</b>

    STM32CubeMx定时器编码器模式基本使用方法

    增量式编码器在实际应用中还是很常见。stm32的定时器带的也有编码器模式。所用的编码器是有ABZ三相,其中ab相是用来计数,z相输出零点信号
    发表于 06-01 14:36 5736次阅读
    STM32CubeMx<b class='flag-5'>定时器</b><b class='flag-5'>编码器</b><b class='flag-5'>模式</b>基本使用方法