在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.配置定时器(选择编码器接口模式)

 void Encoder_Config()
 {
     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
     TIM_ICInitTypeDef TIM_ICInitStructure;
     GPIO_InitTypeDef GPIO_InitStructure;

     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
     GPIO_Init(GPIOE,&GPIO_InitStructure);
     GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_TIM1);
     GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_TIM1);

     RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
     TIM_DeInit(TIM1);
     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;            //单倍模式
     TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;
     TIM_TimeBaseStructure.TIM_Period = *;                      //计数周期
     TIM_TimeBaseStructure.TIM_Prescaler = ;                        //时钟分频
     TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
     TIM_ICStructInit(&TIM_ICInitStructure);
     TIM_ICInitStructure.TIM_ICFilter = ;                            //滤波,0表示不滤波
     TIM_ICInit(TIM1,&TIM_ICInitStructure);
     TIM_EncoderInterfaceConfig(TIM1,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);
     //设置定时器工作在编码器接口模式。
     TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
     TIM_ClearITPendingBit(TIM1,TIM_IT_Update);
     TIM_ClearFlag(TIM1,TIM_FLAG_Update);
     TIM_SetCounter(TIM1,);                                    //设置计数初值
     TIM_Cmd(TIM1,ENABLE);
 }

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

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

  1. STM32f103 定时器之编码器接口模式

    背景 买了个Arduino的旋转编码器模块,配合STM32定时器的编码器模式实现了旋转角度以及圈数的计数.这种旋转编码器我能想到的实际应用场景暂时只有实体音量旋钮,鼠标的滚轮等,所以只实现了计数.阅读 ...

  2. STM32 TIM 编码器模式采集编码器信号

    layout: post tags: [STM32] comments: true 文章目录 @[toc] 什么是正交解码? 编码器接口模式 标准库接口 TIM_TimeBaseInitTypeDef ...

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

    stm32的swd接口的烧写协议是否公开的呢? 需要用一台好的示波器来抓才能有足够的存储深度,保证你能够过滤掉那个该死的50clock. 按照Arm的手册,每次转换发送方都需要一个TNR---但是我观 ...

  4. STM32正交编码器驱动电机

    1.编码器原理        什么是正交?如果两个信号相位相差90度,则这两个信号称为正交.由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向. 这里使用了TI12模式,例如当T1上升 ...

  5. 基于STM32旋转编码器

    ..\..\SYSTEM\usart\usart.c(1): error:  #5: cannot open source input file "sys.h": No such ...

  6. STM32—TIMx实现编码器四倍频

    文章目录 一.储备知识 二.TIMx的编码器模式介绍 1.计数边沿设置 2.选择极性和使能 3.使能 4.计数方向 三.代码部分 一.储备知识 通过STM32的定时器编码器接口模式对编码器进行四倍频, ...

  7. 解决STM32 I2C接口死锁在BUSY状态的方法讨论

    关于STM32的I2C接口死锁在BUSY状态无法恢复的现象,网上已有很多讨论,看早几年比较老的贴子,有人提到复位MCU也无法恢复.只有断电才行的状况,那可是相当严重的问题.类似复位也无法恢复的情况是存 ...

  8. STM32 HAL库学习系列第5篇 定时器TIM---编码器接口模式配置

    cube基本配置,外设开启编码器,串口2 可能大家在设置的时候有这个错误 错误:error:  #20: identifier "TIM_ICPOLARITY_BOTHEDGE" ...

  9. Stm32高级定时器(四)

    Stm32高级定时器(四) 1 编码器接口模式 1.1 编码器原理 什么是正交?如果两个信号相位相差90度,则这两个信号称为正交.由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向.根 ...

随机推荐

  1. JS里引用CSS属性时候的命名

        如果JS代码中设置<p>元素的另一个CSS属性font-family.这个属性的获取方式与color属性略有不同,因为 font和family之间的连字符与JS中减法操作符相同,J ...

  2. 回到顶端的jquery

    现在的淘宝啊,京东啊,各种网站都有一个功能,有一个按钮,在页面最顶端的时候不会显示,当往下拉到一定的时候会出现.点击他会直接跳到页面的顶端.代码如下: html代码: <div id=" ...

  3. Java 设计模式(四)-工厂方法模式 (FactoryMethod Pattern)

    1     概念定义 1.1   定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 1.2   类型 创建类模式 2     原理特征 2.1   类 ...

  4. 【外文翻译】 为什么我要写 getters 和setters

    原文作者: Shamik Mitra 原文链接:https://dzone.com/articles/why-should-i-write-getters-and-setters 当我开始我的java ...

  5. java写文件读写操作(IO流,字节流)

    package copyfile; import java.io.*; public class copy { public static void main(String[] args) throw ...

  6. Swift try try! try?使用和区别

    Swift try try! try?使用和区别 一.异常处理try catch的使用 1. swift异常处理 历史由来 Swift1.0版本 Cocoa Touch 的 NSError ,Swif ...

  7. hdu2389二分图之Hopcroft Karp算法

    You're giving a party in the garden of your villa by the sea. The party is a huge success, and every ...

  8. Power Pivot表属性无法切换回表预览模式的问题

    近期Office365用户升级后解决了在Power Pivot中输入中文的问题,但是同时也带来了一个新的问题就是表属性窗口默认为“查询编辑器”模式,且无法切换回“表预览”模式. 本文和您分享在这种情况 ...

  9. Oracle 12C 新特性之表分区带 异步全局索引异步维护(一次add、truncate、drop、spilt、merge多个分区)

    实验准备:-- 创建实验表CREATE TABLE p_andy(ID number(10), NAME varchar2(40))PARTITION BY RANGE (id)(PARTITION ...

  10. 进制转换,杭电0j-2031

    进制转换,杭电0j-2031原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=2031 [Problem Description] 输入一个十进制数N,将它 ...