STM32伺服编码器接口

在STM32的高级定时器和一般定时器中有Encoder interface mode(编码器接口),TI1和TI2分别对应TIM_CH1 和TIM_CH2 通道。

一、计数规则如下:

表55的是编码器不同的信号下计数方向。

1.仅在TI1边沿计数:上升沿触发时,若对应TI2为低电平,则计数器向下计数;对应为高电平,则向上计数。如下图,在1和2处,TI1的上升沿对应TI2为低电平,所以计数器向上计数;同样的,在3处则相反。

2.在TI1和TI2边沿计数:若TI1、TI2上升沿捕捉时,TI1上升边沿对应TI2位于低电平,则向上计数;TI2上升边沿对应TI1高电平,向上计数,所以为双倍。

二、功能配置

1.设置I/O口(启动时钟,工作在定时器模式下,无上拉)

2.配置定时器(选择编码器接口模式)

 1 void Encoder_Config()
 2 {
 3     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
 4     TIM_ICInitTypeDef TIM_ICInitStructure;
 5     GPIO_InitTypeDef GPIO_InitStructure;
 6
 7     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11;
 8     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 9     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
10     GPIO_Init(GPIOE,&GPIO_InitStructure);
11     GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_TIM1);
12     GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_TIM1);
13
14     RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
15     TIM_DeInit(TIM1);
16     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;            //单倍模式
17     TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;
18     TIM_TimeBaseStructure.TIM_Period = 500*4;                      //计数周期
19     TIM_TimeBaseStructure.TIM_Prescaler = 0;                        //时钟分频
20     TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
21     TIM_ICStructInit(&TIM_ICInitStructure);
22     TIM_ICInitStructure.TIM_ICFilter = 0;                            //滤波,0表示不滤波
23     TIM_ICInit(TIM1,&TIM_ICInitStructure);
24     TIM_EncoderInterfaceConfig(TIM1,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);
25     //设置定时器工作在编码器接口模式。
26     TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
27     TIM_ClearITPendingBit(TIM1,TIM_IT_Update);
28     TIM_ClearFlag(TIM1,TIM_FLAG_Update);
29     TIM_SetCounter(TIM1,0);                                    //设置计数初值
30     TIM_Cmd(TIM1,ENABLE);
31 }

实验中采用的是E6A2-cwz5c编码器,分辨率为500/r, 定时器为TI1和TI2双边沿计数,最终计数始终保持为2000,理论值应为1000。如果有实验通过的,还请告知原因,灰常感谢!

时间: 2024-10-08 19:38:33

STM32伺服编码器接口的相关文章

stm32的swd接口的烧写协议是否公开的呢?

stm32的swd接口的烧写协议是否公开的呢? 需要用一台好的示波器来抓才能有足够的存储深度,保证你能够过滤掉那个该死的50clock. 按照Arm的手册,每次转换发送方都需要一个TNR---但是我观察JLINK的波形却没有那个该死的TNR. 手册中说异步SWD需要,同步不需要----或者相反,但是我没有找到关于同步异步的描述. 姑且不管他,反正目前忽略掉TNR就能够读到该死IDR. 另外JLINK的复位时序很奇怪,大致是 70clk High,0xe79e(注意,SWD是LSB First),

STM32正交编码器驱动电机

1.编码器原理        什么是正交?如果两个信号相位相差90度,则这两个信号称为正交.由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向. 这里使用了TI12模式,例如当T1上升沿,T2在低电平时:T1下降沿,T2在高电平时,向上计数,这样的好处是当有毛刺产生的时候,会自动+1 -1过滤掉毛刺. 2.编码器的中断 由于编码器是基于定时器的,所以编码器的中断实际上就是定时器的中断.也就是说定时器是每隔一定时间加一个数(或减一个数 ),当数到达预设值时就产生中断,而编码器是每一

[转]STM32正交编码器驱动电机

1.编码器原理       什么是正交?如果两个信号相位相差90度,则这两个信号称为正交.由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向. 这里使用了TI12模式,例如当T1上升沿,T2在低电平时:T1下降沿,T2在高电平时,向上计数,这样的好处是当有毛刺产生的时候,会自动+1 -1过滤掉毛刺. 2.编码器的中断 由于编码器是基于定时器的,所以编码器的中断实际上就是定时器的中断.也就是说定时器是每隔一定时间加一个数(或减一个数 ),当数到达预设值时就产生中断,而编码器是每一个

基于STM32旋转编码器

..\..\SYSTEM\usart\usart.c(1): error:  #5: cannot open source input file "sys.h": No such file or directory #include "..\sys\sys.h"这样就能够找到路径了 再次编译出现了问题 ..\..\SYSTEM\usart\..\sys\sys.h(3): error:  #5: cannot open source input file "

[原创] STM32 定时器TIMx 编码器应用 函数 TIM_EncoderInterfaceConfig 分析

今天把STM32 定时器输入作为 编码器接口相关的 函数   TIM_EncoderInterfaceConfig ,好好分析了一遍 因为网上不少人对这个函数有问题 1 void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode, 2 uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity) 3 { 4 uint16_t tmpsmcr = 0; 5 uint

Stm32高级定时器(四)

Stm32高级定时器(四) 1 编码器接口模式 1.1 编码器原理 什么是正交?如果两个信号相位相差90度,则这两个信号称为正交.由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向.根据每个信号脉冲数量的多少及整个编码轮的周长就可以算出当前行走的距离.如果再加上定时器的话还可以计算出速度. 增量式旋转编码器通过内部两个光敏接受管转化其角度码盘的时序和相位关系,得到其角度码盘角度位移量增加(正方向)或减少(负方向). A,B两点对应两个光敏接受管,A,B两点间距为 S2 ,码盘的光

转载:百为STM32开发板教程之十一——NOR FLASH

转载:http://bbs.21ic.com/icview-586199-1-1.html 百为STM32开发板教程之十一——NOR FLASH 参考文档:百为stm32开发板光盘\st官方参考资料\Application notes\AN2784 Using the high-density STM32F10xxx FSMC peripheral to drive external memories.pdf百为stm32开发板光盘\芯片数据手册\M29W128G.pdf百为stm32开发板光盘

STM32学习笔记——SPI串行通讯(向原子哥学习)

一.SPI  简介 SPI是 Serial Peripheral interface 的缩写,就是串行外围设备接口.SPI 接口主要应用在  EEPROM, FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,STM32 有 SPI 接口.下面是 SPI 的内部简明图:

【免费资源】最新stm32系列视频教程

星创客STM32系列教程之一单片机基础&GPIO 星创客STM32系列教程正式上线,为我们带来系列讲解的是华清远见星创客的金牌讲师David.通过这一系列的教程学习,可以帮助我们更好的认识嵌入式,打好基础.第一节课,我们将学习的是单片机基础和GPIO相关的知识. [课程目标] 掌握单片机原理.GPIO相关知识. [STM32系列教程适用对象] 1.具备c语言基础: 2.具备数字电路基础: 3.具备模拟电路基础: 4.想要对单片机有一定了解的学员 [视频一:http://www.superedu.