在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。如果有实验通过的,还请告知原因,灰常感谢!

最新文章

  1. Linux命令学习总结:date命令
  2. 【dom4j】解析xml为map
  3. Java数据结构之线性表
  4. 新浪微博的OAuth2认证过程
  5. C# Net MVC 大文件下载几种方式、支持速度限制、资源占用小
  6. DOS批处理中对含有特殊字符的文件名的处理方法
  7. LOJ #2731. 「JOISC 2016 Day 1」棋盘游戏(dp)
  8. wifi的主动扫描和被动扫描
  9. cuda 配置要点
  10. Python:import 与__import__()
  11. jvm加载类的7个步骤
  12. unsafe关键字
  13. zookeeper Error contacting service 解决
  14. docker安装后启动出现错误
  15. 【BZOJ】3140: [Hnoi2013]消毒
  16. hashMap tableSizeFor 实现原理
  17. java几个easy出错的小程序
  18. SPSS-非参数检验—两独立样本检验 案例解析
  19. Spring Security构建Rest服务-1000-使用SpringSocial开发第三方登录之大白话OAuth协议
  20. asp.net 下载文件几种方式

热门文章

  1. Android -- Annotation(注解)原理详解及常见框架应用
  2. Java使用递归找出某目录下的所有子目录以及子文件
  3. JDBC的使用流程
  4. 利用 Forcing InnoDB Recovery 特性解决 MySQL 重启失败的问题
  5. c++中关于值对象与其指针以及const值对象与其指针的问题详细介绍
  6. framework7+node+mongo项目
  7. PROFINET如何实现实时性
  8. cookie方法封装及cookie缺点分析
  9. Winform 使用DotNetBar 根据菜单加载TabControl
  10. 想成为Java高级工程师的看过来