当前位置: 首页 > news >正文

STM32编码器接口及编码器测速模板代码

编码器是什么?

编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感 器,我们可以通过编码器测量到底位移或者速度信息。编码器从输出数据类型上 分,可以分为增量式编码器和绝对式编码器。

从编码器检测原理上来分,还可以分为光学式、磁式、感应式、电容式。常 见的是光电编码器(光学式)和霍尔编码器(磁式)。

(正交编码器简单理解就是产生上图波形的信号,其波形频率和转的速度有关,方向与相位差有关) 

编码器接口

 这张是通用定时器的结构图

编码器接口位置如图:

连接着CH1和CH2,编码器接口控制着CNT的增减,原先的时钟(CK_PSC和计数方向都被编码器接口托管)

编码器接口结构简图:

小技巧:因为如果方向是减的话,CNT值为0减1会变成65535,如果用补码表示65535就是-1 

工作模式:

 下图展现了为什么正交编码器可以抗噪声

TI1反向相当于在TI1一路的信号翻转了(通过极性选择) 

 

其实编码器接口就基本相当于一个带有方向选择的外部时钟 

代码:

(使用TIM3的CH1和CH2)

#include "stm32f10x.h"
void Encoder_Init(void)
{TIM_TimeBaseInitTypeDef TIM_TimerBaseInitStructure;TIM_ICInitTypeDef TIM_ICInitStructure;GPIO_InitTypeDef GPIO_InitStructure;TIM_ICStructInit(&TIM_ICInitStructure);//防止有不确定值,先给它一个初始值(配置输入捕获的结构体)RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//TIM_InternalClockConfig(TIM3);//内部时钟(不需要)TIM_TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//TIM_TimerBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//计数器模式,没有用因为增减由编码器接口控制了TIM_TimerBaseInitStructure.TIM_Period = 65536 - 1;//(0~65535)//满量程计数TIM_TimerBaseInitStructure.TIM_Prescaler = 1 - 1;//(0~65535)//不分频TIM_TimerBaseInitStructure.TIM_RepetitionCounter = 0;//重复计数器,只要高级定时器有TIM_TimeBaseInit(TIM3,&TIM_TimerBaseInitStructure);//初始化TIM3时基单元TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;TIM_ICInitStructure.TIM_ICFilter = 0xF;//滤波器配置TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//在极性选择里这个是不反向的意思,这里配置也可以在编码器接口配置函数配置也可以//TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//优先级用不到//TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//优先级用不到TIM_ICInit(TIM3,&TIM_ICInitStructure);TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;TIM_ICInitStructure.TIM_ICFilter = 0xF;TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;TIM_ICInit(TIM3,&TIM_ICInitStructure);//配置TIM3的编码器接口,工作模式为TI1和TI2都计数,通道1,2都不反向TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);TIM_Cmd(TIM3,ENABLE);
}
uint16_t Encoder_Get(void)//这个函数可以用定时器中断来定时读取值来实现测速的目的
{int16_t Temp;Temp = (int16_t)TIM_GetCounter(TIM3);//将获取到的CNT进行类型转换为有符号数TIM_SetCounter(TIM3,0);//CNT清零return Temp;
}

http://www.lryc.cn/news/499109.html

相关文章:

  • qt QNetworkAccessManager详解
  • 部署 Vue 前端项目到 Linux
  • 数据分析:探索数据背后的秘密与挑战
  • 文本域设置高度 加上文字限制并show出来:
  • 深入浅出:Gin框架-简介与API开发入门
  • MySQL各种锁详解
  • 海外的bug-hunters,不一样的403bypass
  • React 组件中 State 的定义、使用及正确更新方式
  • Jenkins 的HTTP Request 插件为什么不能配置Basic认证了
  • 8 Bellman Ford算法SPFA
  • nginx不允许静态文件被post请求显示405 not allowed
  • 【c++笔试强训】(第三十二篇)
  • shell脚本实战案例
  • OpenCV-图像阈值
  • lvgl9 Line(lv_line) 控件使用指南
  • 区块链概念 Web 3.0 实操
  • 【人工智能】大数据平台技术及应用
  • Scala的模式匹配(7)
  • 使用 MATLAB 绘制三维散点图:根据坐标和距离映射点的颜色和大小
  • 数仓技术hive与oracle对比(五)
  • 金融数学在股市交易中的具体应用
  • Spring6:1 概述
  • Python Selenium 各浏览器驱动下载与配置使用(详细流程)
  • C语言期末考试——重点考点
  • mongo开启慢日志及常用命令行操作、数据备份
  • Mybatis-Plus的主要API
  • 2023 年“泰迪杯”数据分析技能赛B 题企业财务数据分析与造假识别
  • 【SpringMVC】参数传递 重定向与转发 REST风格
  • 性能测试需求分析(超详细总结)
  • 显卡(Graphics Processing Unit,GPU)架构详细解读