智能车|直流电机、编码器与驱动器---编码器

news2024/11/18 21:26:00

智能车|直流电机、编码器与驱动器---编码器

  • 编码器
    • 编码器简介
    • 编码器的工作原理
    • 四倍频采集
    • 编码器采集程序实现

编码器

编码器简介

编码器是一种将角位移或者直线位移转换成一连串电数字脉冲的一种传感器。

可以通过编码器测量电机转动的位移或者速度信息。

编码器按照工作原理,可以分为

  • 增量式编码器
    常用的编码器为增量式编码器
  • 绝对式编码器
    绝对式编码器的每一个位置对应一个确定的数字码,因此它的示值只与测量的起始和终止位置有
    关,而与测量的中间过程无关。

从编码器检测原理上来分,还可以分为

  • 光学式
  • 磁式
  • 感应式
  • 电容式

常见的是光电编码器(光学式)和霍尔编码器(磁式)。一般来说光电编码器是霍尔编码器精度的几十倍。

编码器的工作原理

光电编码器是由光码盘和光电检测装置组成。光码盘是在一定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机同轴,电动机旋转时,检测装置检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。
在这里插入图片描述
霍尔编码器是由霍尔码盘和霍尔元件组成。霍尔码盘是在一定直径的圆板上等分地布置有不同的磁极。霍尔码盘与电动机同轴,电动机旋转时,霍尔元件检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。

然后就可以通过单片机采集 AB 相的脉冲数据,根据脉冲换算即可得到电机位置数据。

四倍频采集

四倍频是通过程序提升我们的编码器的精度的一种数据处理方法,可以有效的最大化我们的编码器的精度和测量精度。

在这里插入图片描述
上图是一个我们编码器输出的波形图,正常我们一般的处理方式是通过 A 相去计数,B 相去判断目前的转动方向。具体实现比如:A 相的上升沿计数或者下降沿计数,同时在 A 相的上升沿或者下降沿来根据 B 相此时的电平状态来判断转向。

四倍频则是同时计算 AB 两相的每个跳边沿,这样子原本在 A 相计数的一个脉冲周期内就实现了四次计数,从而实现了精度的提升。

编码器采集程序实现

因为编码器输出的是标准的正交方波,所以我们可以使用单片机(STM32 STM8 51等)直接读取。在软件中的处理方法是分两种,自带编码器接口的单片机如 STM32,可以直接使用编码器硬件接口(定时器 CH1&CH2)计数,然后从对应的寄存器读出相应的数据即可。没有编码器硬件接口的单片机,可以通过外部中断接口测量,比如把编码器 A 相输出接到单片机的外部中断接口,这样就可以通过跳边沿触发中断,然后在对应的中断服务函数里面,通过 B 相的电平来确定正反转。如当 A 相来一个跳变沿的时候,如果 B 相是高电平就认为是正转,低电平就认为是反转。

void Encoder_Init_TIM4(u16 arr,u16 psc)
{
	GPIO_InitTypeDef GPIO_InitStructure; //定义一个引脚初始化的结构体  
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定义一个定时器初始化的结构体
  TIM_ICInitTypeDef TIM_ICInitStructure; //定义一个定时器编码器模式初始化的结构体
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能TIM4时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能CPIOB时钟
 
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;	//PB6、PB7
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
	GPIO_Init(GPIOB, &GPIO_InitStructure);	//根据GPIO_InitStructure的参数初始化GPIOB0

	TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值
	TIM_TimeBaseStructure.TIM_Prescaler = psc; // 预分频器 
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //选择时钟分频:不分频
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct的参数初始化定时器TIM4
	
	TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//使用编码器模式3:CH1、CH2同时计数,四分频
	TIM_ICStructInit(&TIM_ICInitStructure); //把TIM_ICInitStruct 中的每一个参数按缺省值填入
	TIM_ICInitStructure.TIM_ICFilter = 10;  //设置滤波器长度
	TIM_ICInit(TIM4, &TIM_ICInitStructure); //根TIM_ICInitStructure参数初始化定时器TIM4编码器模式

	TIM_Cmd(TIM4, ENABLE); //使能定时器4
}

//读取编码器计数
int Read_Encoder_TIM4(void)
{
	int Encoder_TIM;
	Encoder_TIM=TIM4->CNT; //读取计数
	if(Encoder_TIM>0xefff)Encoder_TIM=Encoder_TIM-0xffff; //转化计数值为有方向的值,大于0正转,小于0反转。
	                                                      //TIM4->CNT范围为0-0xffff,初值为0。
	TIM4->CNT=0; //读取完后计数清零
	return Encoder_TIM; //返回值
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/128383.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FTP多目录和多用户配置(用户隔离/虚拟目录)

FTP多目录和多用户配置(用户隔离/虚拟目录) 假设有四个部门分别是user1、user2、user3、admin。要求四个部门都有各自有独立的访问目录,且admin部门可以访问其他部门的文件但不能对其进行修改。 1、创建ftp文件→再创建LocalUser(…

【图像处理OpenCV(C++版)】——3.1几何变换之仿射变换

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快…

CSS 颜色

文章目录CSS 颜色关键字 & 十六进制 & RGBopacity 透明度RGBA 颜色CSS3 渐变线性渐变径向渐变CSS 颜色 关键字 & 十六进制 & RGB W3C十六色 opacity 透明度 语法 opacity: 数值;说明 在CSS3中,我们可以使用opacity属性来定义元素的透明度。 o…

excel排序求和:如何统计前几名数据合计 下篇

上次咱们说到一个公式SUM(LARGE(B:B,ROW(INDIRECT("1:"&H2)))),其中的ROW(INDIRECT("1:"&H2))这部分如果写成ROW(1:H2)就会报错: 原因也告诉大家了,就是ROW函数的参数只能使用单元格或单元格区域。 因此解决的办…

Java IO流 - 字节流的使用详细介绍

文章目录IO流的基本介绍字节流的使用文件字节输入流创建字节输入流每次读取一个字节每次读取一个数组一次读取全部字节文件字节输出流创建字节输出流写入文件输出流文件拷贝练习IO流的基本介绍 IO流的概述: I 表示intput,是数据从硬盘文件读入到内存的过程&#xf…

频谱分析仪关键性能指标

频谱分析仪关键性能指标 频谱分析仪作为分析仪表,其基本性能要求包含: 1. 频率方面指标: 测量频率范围:反映频谱仪测量信号范围能力; 频率分辨率:反映频谱仪分辨两个频率间隔信号的能力。 2. 幅方面度指标&#x…

银河麒麟(aarch64)安装Qt,报错main.cpp:8:5: error: unknown type name ‘MainWindow‘...

环境: 版本:银河麒麟桌面操作系统V10(SP1) 内核:Linux 5.4.18-35-generic CPU:Phytium,D2000/8 终端输入 uname -m 查看 架构 aarch64 在商店安装Qt, 安装完成后 工具-选项-kits构…

SAP ABAP——SAP简介(五)【ABAP的前世今生和未来】

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…

kali安装cobaltstrike详细教程

下载cobaltstrike-linux版本,此下载链接提供4.3,4.4,4.5三个版本https://download.csdn.net/download/weixin_59679023/87354658 xshell上传至kali,解压 unzip cobaltstrike 进入cobaltstrike目录,ls查看如下 ls 给cs的服务端teamserver和客户端start.sh执行权限 chmod …

【计算机图形学入门】笔记8:Shading 2着色(着色频率、图形管线、纹理映射)

08Shading 2着色(着色频率、图形管线、纹理映射)前置知识1.Specular Term 高光2.Ambient Term 环境光照项3.最终的成像公式2.着色频率1.Flat shading2.Gouraud shading3.Phong shading4.那么如何计算逐顶点法线?5.如何定义逐像素的法线&#…

微信小程序之后台交互--首页

目录一、后台准备1、application.yml2、generatorConfig.xml3、WxHomeController4、MinoaApplication.java二、小程序首页动态数据加载及优化1、config/app.js2、util.js3、index.wxml4、index.js5、page.wxs一、后台准备 1、application.yml spring:datasource:#type连接池类…

冰冰学习笔记:管道与共享内存

欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正。 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位…

直播榜单正式上线,超店有数让你数秒内找到热卖直播间和高转化带货达人

众所周知,国内抖音直播带货正处于火爆的状态,大部分电商商家都在抖音通过直播带货实现流量变现。那么TikTok作为国内抖音复制到海外的短视频App,是全球最火爆的App之一,被视为品牌出海的新风口。它的直播变现模式也和抖音大同小异…

ThinkPHP 路由使用

最近在使用ThinkPHP6做项目的开发,故整理了一些常用的路由使用方式, 可以方便之后的使用。 目录 引用路由门面 基础路由 快捷路由 规则表达式 静态地址 静态结合动态地址 方法设置 完全匹配 默认路由规则 设置完全匹配 路由别名 变量规则 局…

再次飙升GitHub榜首?这份“保姆级”的SpringBoot笔记,不服不行

Spring Boot 延续了 Spring 框架的核心思想 IOC 和 AOP,简化了应用的开发和部署,通过少量的代码就能创建一个独立的、产品级别的 Spring 应用。在继承了Spring 一切优点的基础上,其最大的特色就是简化了Spring 应用的集成、配置、开发&#x…

怎样提高美国独立服务器的安全性?

目前,越来越多的用户都开始使用起了美国独立服务器,而这种服务器通常都比共享服务器的安全性要高出许多,但是管理起来比较复杂。下面将为大家介绍怎样才能提高美国独立服务器的安全性,包括下面几点: 1.使用强密码 有时…

队列------数据结构

队列:Queue是一个普通的队列,Deque是一个双端队列 普通的队列:只能是队尾进,队头出; 双端队列:可以从队头进队尾出,也可以从队尾进,队头出,也可以用作一个栈; 1)下面我们来介绍一下Queue的实现方法: 在有容量限制的情况…

你是真的“C”——详解函数递归

详解函数递归运用😎前言🙌一、什么是递归🙌二、递归运用的两个必要条件🙌三、递归与迭代🙌总结撒花💞哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文…

长安链 VM Engine架构设计深度解读

VM Engine是长安链智能合约引擎的推荐选型,采用Docker容器化架构,容器内部由一个任务调度器和多个合约进程组成,实现了多合约隔离与多进程并发,支持独立部署,目前支持Golang语言合约。 1. 背景说明 自2009年11月以来&…

CUDA 冬令营1

基本概念 1.CPU的任务:为串行任务优化 2.GPU的任务:为并行任务优化 3.L4T ubuntu:基于NVIDIA Tegra芯片的ubuntu系统(linux for Tegra) 4.Tegra:继承了ARM CPU 和 NVIDIA GPU的处理器芯片 5.X86&#xff1…