单片机编码器经典测试

合集下载

编码器使用教程与测速原理

编码器使用教程与测速原理

编码器使用教程与测速原理我们将通过这篇教程与大家一起学习编码器的原理,并介绍一些实用的技术。

1.编码器概述编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器,我们可以通过编码器测量到底位移或者速度信息。

编码器从输出数据类型上分,可以分为增量式编码器和绝对式编码器。

从编码器检测原理上来分,还可以分为光学式、磁式、感应式、电容式。

常见的是光电编码器(光学式)和霍尔编码器(磁式)。

2.编码器原理光电编码器是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。

光电编码器是由光码盘和光电检测装置组成。

光码盘是在一定直径的圆板上等分地开通若干个长方形孔。

由于光电码盘与电动机同轴,电动机旋转时,检测装置检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。

霍尔编码器是一种通过磁电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。

霍尔编码器是由霍尔码盘和霍尔元件组成。

霍尔码盘是在一定直径的圆板上等分地布置有不同的磁极。

霍尔码盘与电动机同轴,电动机旋转时,霍尔元件检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。

可以看到两种原理的编码器目的都是获取AB相输出的方波信号,其使用方法也是一样,下面是一个简单的示意图。

3.编码器接线说明具体到我们的编码器电机,我们可以看看电机编码器的实物。

这是一款增量式输出的霍尔编码器。

编码器有AB相输出,所以不仅可以测速,还可以辨别转向。

根据上图的接线说明可以看到,我们只需给编码器电源5V供电,在电机转动的时候即可通过AB相输出方波信号。

编码器自带了上拉电阻,所以无需外部上拉,可以直接连接到单片机IO读取。

4.编码器软件四倍频技术下面我们说一下编码器倍频的原理。

为了提高大家下面学习的兴趣,我们先明确,这是一项实用的技术,可以真正地把编码器的精度提升4倍。

作用可类比于单反相机的光学变焦,而并非牺牲清晰度来放大图像的数码变焦。

基于STM32单片机的增量式编码器模拟装置设计

基于STM32单片机的增量式编码器模拟装置设计

码器旋转角位移 。在单 位时间内对信号 A或 B进行计数 累加 ,
可 得 到 当 前 角 速 度 。 增 量 式 编 码 器 只 有 正 转 和 反 转 两 个 旋 转 方
号落后端 口 A信 号 9 O 。 。当端 口 A信号输出 N步时 , 端 口 Z输
出 复位 有 效 信 号 。检 测 装 置 通 过 捕 获 相 位 信 号 的个 数 和频 率 计 算 得 到 当前 的相 位 和 速 度 值 。
2 系 统硬 件 设计
一 二腓 二 I 耋 I ~ 一 I
Ke y wor ds : i n c r e me nt al en c od er , S TM32 F4 0 7, s er i a l comm u n i c a t i o n

些 自动 化 设 备 的 开 发 调 试 过 程 需 要 相 位 和 速 度 信 号 , 通
其中 , N表示编码器步长 , T安 装 增 量 式 编 码 器 对 机 械 传 动 机 构 的相 位 和 速 度 进 行 精 确获 取 。搭 建 模 拟 现 场 的机 械 传 动装 置需 要较 高 成 本 ,费 时 费 力, 且模拟装置参数固定 , 不能有效模拟并适应各种场合。
本 文 在 增 量 式 编 码 器 信 号 发 生 原 理 深 入 研 究 的基 础 上 , 以 S T M3 2单 片 机 为 控 制 核 心 , 利用单 片机控制方式 灵活 、 响 应 速
关键词 : 增 量 式编 码 器 , S T M 3 2 F 4 0 7 , 串行 通 信
Ab s t r ac t
I n or d er t o i mpr o v e t he d ebu g e fi c i e nc y of a u t omat i o n pr odu c t s , a n i n cr emen t al e nc o der a na l o g de vi c e i s d es i gne d i n t hi s pap er . Mi c r o ch i p p r o ce s s e r S TM32 i s us e d a 8 t h e c o nt r o l k er ne 1 . pa r a me t er s ar e s e t t h r o ugh s e r i al c om mun i c a t i on wi t h PC. 1 O P0 r t s of t h e M i cr oc hi p Pr oc e s s er a r e u s ed t o si mu l a t e t h e s i gn a l s o f i n c r e me n t a l en co de r a n al og. E xp er i men t r e s ul t s

51单片机检测光电旋转编码器每周实际脉冲数

51单片机检测光电旋转编码器每周实际脉冲数

程序代码/**************************************************************** **** 文件名: main.c** 创建人: 飘扬** 日期: 2006.10.04** 修改人:** 日期:** 描述: 本程序使用伟纳300A型实验板,来检测光电旋转编码器的实际每周** 输出脉冲数。

程序中,定时器0用于8位数码管动态扫描定时,时间** 为1ms(12MHZ晶振)。

定时器1工作于模式1,计数器方式,直接测量** 接在T1脚的脉冲个数。

外部中断0,工作于边沿触发方式,接在旋转** 编码器的Z信号输出上,用于检测编码器完整旋转一周。

8位数码管,** 接成动态扫描,接在P0和P2口。

左4位,用来显示上一周的实际脉冲** 数,右4位,用来显示当前周的脉冲数。

**** 实际使用,感觉效果还可以。

程序准确的测量出某牌光电旋转编码** 器(400脉冲),实际工作时,双路信号输出脉冲数量不等,及脉冲** 数与标称值的误差情况。

**** 本程序的显示部分,直接修改于伟纳提供的数码管显示1-8例程。

**----------------------------------------------------------------*/#include <reg51.h>#include <intrins.h>unsigned char data dis_digit;unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 30x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, offunsigned char data dis_buf[8];unsigned char data dis_index;unsigned int counter1,counter2; //左右计数器数值void main(){P0 = 0xff;P2 = 0xff;TMOD = 0x51; //定时器0工作在模式1定时器方式,定时器1工作在模式1计数器方式TH0 = 0xFC;TL0 = 0x17;TH1 = 0;TL1 = 0;IE = 0x83; //开定时器0中断和外部中断0IT0 = 1; //外部中断0为边沿触发方式//显示初始化counter1=0; //右测显示的本周当前脉冲数counter2=0; //左测显示的上一周脉冲数dis_digit = 0xfe;dis_index = 0;TR0 = 1;//主程序TR1 = 1;while(1){counter1=(TH1*0xff)+TL1;dis_buf[0] = dis_code[0x0a];dis_buf[1] = dis_code[counter2/100];dis_buf[2] = dis_code[(counter2%100)/10];dis_buf[3] = dis_code[counter2%10];dis_buf[4] = dis_code[0x0a];dis_buf[5] = dis_code[counter1/100];dis_buf[6] = dis_code[(counter1%100)/10];dis_buf[7] = dis_code[counter1%10];}}//外部中断0void int0() interrupt 0{TL1=0;TH1=0;counter2=counter1;}void timer0() interrupt 1// 定时器0中断服务程序, 用于数码管的动态扫描// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量// dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时, // 选通P2.0口数码管// dis_buf --- 显于缓冲区基地址{TH0 = 0xFC;TL0 = 0x17;P2 = 0xff; // 先关闭所有数码管P0 = dis_buf[dis_index]; // 显示代码传送到P0口P2 = dis_digit; //dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管dis_index++; //dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描}。

基于51单片机的光电编码器测速

基于51单片机的光电编码器测速

摘要光电编码器是高精度位置控制系统常用的一种位移检测传感器。

在位置控制系统中,由于电机既可能正转,也可能反转,所以要对与其相连的编码器输出的脉冲进行计数,要求相应的计数器既能实现加计数,又能实现减计数,即进行可逆计数。

其计数的方法有多种,包括纯粹的软件计数和硬件计数。

文中分别对这两种常用的计数方法进行了分析,对其优缺点进行了对比,最后提出了一种新的计数方法,利用80C51单片机内部的计数器实现对光电编码器输出脉冲的加减可逆计数,既节省了硬件资源,又能得到较高的计数频率。

本设计就是由单片机STC89C52RC芯片,光电编码器和1602液晶为核心,辅以必要的电路,构成了一个基于51单片机的光电编码器测速器。

该系统有两个控制按键,分别用于控制每秒的转速和每分钟的转速,并将速度用1602液晶显示出来。

该测速器测速精准,具有实时检测的功能,操作简单。

关键词:光电编码器,51单片机,C语言,1602液晶目录一、设计任务与要求 (3)1.1 设计任务 (3)1.2 设计要求 (3)二、方案总体设计 (4)2.1 方案一 (4)2.2 方案二 (4)2.3 系统采用方案 (4)三、硬件设计 (6)3.1 单片机最小系统 (6)3.2 液晶显示模块 (6)3.3 系统电源 (7)3.4光电编码器电路 (7)3.5 整体电路 (8)四、软件设计 (9)4.1 keil软件介绍 (9)4.2 系统程序流程 (9)五、仿真与实现 (11)5.1 proteus软件介绍 (11)5.2 仿真过程 (11)5.3 实物制作与调试 (12)5.4 使用说明 (13)六、总结 (14)6.1 设计总结 (14)6.2 经验总结 (14)七、参考文献 (15)一、设计任务与要求1.1 设计任务1).对更多小器件的了解2).巩固51单片机和C语言的知识,熟悉单片机和C语言的实际操作运用3).掌握仿真软件的运用和原理图的绘制4).加深焊接的技巧,提高焊接的能力5).熟悉调试方法和技巧,提高解决实际问题的能力6).熟悉设计报告的编写过程1.2 设计要求1).两个按键控制显示每分钟和每秒钟的功能2).74LS74辅助光电编码器测转向3).光电编码器输出脉冲计数4).1602液晶显示转速二、方案总体设计设计一个基于51单片机的光电编码器测测速。

基于单片机的四位BCD编码器电路设计

基于单片机的四位BCD编码器电路设计

基于单片机的四位BCD编码器电路设计1 引言BCD码又称二/十进制码,即二进制编码的十进制码,在设计、测试数字电路硬件过程或是面对带有BCD码接口的集成电路时,常常希望方便、快速地产生BCD码来完成当前的工作,检验硬件电路的正确性,例如锁相频率合成集成电路MC145163P带有4位BCD编码接口,用于设置环路N分频器,通过本文介绍而制作完成后的BCD发生器可以提供4位BCD编码输出,方便地控制每位BCD输出,可以快速地得到BCD编码而完成测试或输出BCD编码接到集成电路的BCD编码接口,无需频繁跳线。

另外,BCD编码有8421码、2421码、余3码等多种形式,本文以常见的8421码为例介绍电路的实现和程序的编写。

如果对程序略加修改则可以很方便地实现其他类型的编码方式(如2421码)。

本电路以AT89C2051为核心设计了4×4的矩阵键盘(S0-S15),这样只需在键盘上按下相应的按键(S0-S9)即可以产生一个对应(十进制0-9)的BCD码,通过设置切换按键(S10-S13)可以随意地控制4位中任意的一位,期间用数码管实时地显示当前BCD码对应的十进制数。

电路功能和特点:4位BCD编码输出,利用单片机口线可以扩展位数。

改变软件中键号0-键号9(即S0-S9对应功能)的程序可以实现其他编码形式(如2421码)。

参见软件部分。

电路以常用的8421码为例,并有数码显示出对应的十进制数(也可以省略)。

完整的4×4的矩阵键盘扫描执行程序,可以移植到其他应用电路中。

BCD编码由锁存器实现信号锁存,并引出接口,方便连接其他电路。

“位”控制和0-9编码输出互不影响,直接按下功能键就可以得到需要的BCD 编码输出和“位数”选择。

2 电路框图电路原理图如图1所示。

3 电路分析AT89C2051的P1口组成4×4矩阵键盘(S0-S15),其中P1.0-P1.3作为行线,P1.4-P1.7作为列线,设计键盘扫描程序可以达到预先设想的功能(见软件设计部分)。

单片机编码器编程实例 -回复

单片机编码器编程实例 -回复

单片机编码器编程实例-回复“单片机编码器编程实例”编码器是一种常用的输入设备,广泛应用于各种电子设备中。

在单片机编程中,编码器常被用于控制和监测电机运动、旋转角度的测量以及用户界面交互等方面。

本文将以编码器编程为主题,一步一步介绍如何在单片机中实现编码器的功能。

第一步:了解编码器的基本原理和工作方式编码器是一种将旋转运动转化为电信号的设备。

常见的编码器有旋转编码器和线性编码器两种。

旋转编码器通常由一对光电传感器和一个带有刻度盘的旋转轴组成。

当旋转轴旋转时,光电传感器会感知到刻度盘的变化,并将其转化为电信号输出。

线性编码器则是通过传感器感知物体的移动,并将其转化为电信号输出。

第二步:了解编码器的输出类型和工作原理编码器的输出类型有两种,一种是增量式编码器,另一种是绝对式编码器。

增量式编码器通常输出两路信号,一路表示方向(A相信号),另一路表示旋转角度(B相信号)。

绝对式编码器则输出更多的信号,可以精确表示旋转位置或线性位移。

第三步:选择合适的编码器类型和接口在单片机编程中,通常会选择增量式编码器,因为其相对简单且较为常用。

选择适合的编码器接口是编程前必须考虑的因素之一。

常见的编码器接口有两种:脉冲计数接口和磁编码接口。

对于脉冲计数接口,编码器输出的脉冲信号通过单片机的IO口进行读取;对于磁编码接口,编码器输出的信号可以通过SPI、I2C等通信协议进行读取。

第四步:编写初始化函数在进行编码器编程之前,首先需要编写初始化函数,对编码器进行初始化设置。

初始化函数主要包括设置IO口的输入输出方向、使能编码器等操作。

第五步:编写中断服务函数编码器的工作是通过中断来实现的。

当编码器发生旋转或位移时,会产生相应的中断信号,通过中断服务函数来处理这些信号。

中断服务函数主要包括读取编码器的脉冲信号、计算旋转角度或位移,以及对应的控制逻辑。

第六步:编写主程序逻辑在编写主程序逻辑时,可以根据需要选择编码器的工作模式和功能。

基于单片机的旋转编码器鉴相方法

基于单片机的旋转编码器鉴相方法

! 旋转编码器简介 !"! 旋 转 编 码 器 的 分 类
根据结 构和 工作原 理不 同 "编 码器可 以分 为光电 式 编 码器 %电磁式 编码 器和机 械接 触式 编码器 $ 其中 "光电 式编码器由于具有较高的精度!抗干扰能力强!接口简 单!使 用方便 等特 点得到 了广 泛应 用 $ 根据测量的参数不同"编码器又可分为旋转式和直 线式编码器$ 旋转式编码器用于测量转角转速"直线式 编码器用于直线位移!运动速度的精密测量$ 旋转编码器又可分为增量式编码器和绝对式编码
读 取 ! !" 点 电 平
图 +
编码器周期内输出波形的 / 种组合
方法 #去掉繁 琐的 判断与 比较#使 得运 行时间 大大 缩短# 从而提高响应速 度" 组成地址的方法是& 设 " 次变化进行 ) 次鉴 相 # 第 # 次 变 化 前 #!!" 电 平 值 分 别 记 为 ! # ! "#
缓冲区满1 电平有变化1
处理点的相位情况根据开始采样检测的时刻不同在种不同的组合情况若两点产生波形的组合不在下列种情况中则表明由于外部干扰或抖动产生了异常的波形通常把这种波形称为毛刺依据单片机工作方式通常有以下两种鉴相方法查询法单片机的45点通过循环采样读取点电平来判断当前旋钮是否旋转以及旋转的方向所示的判断表中行表示当前点电平值组合列表示上一次变化前点电平值组合检测到发生次电平变化即可进行鉴相需要指出的是若两点电平相比上次均发生了变化则无法进行判断这说明检测时遗漏了脉冲或产生了毛刺为了保证采样电平时没有脉冲遗漏对采样频率要求比较高通常需要保证在编码器以最快速度旋次以上的采样以便可以比较最近次的电平去除因为其他外界条件变化产生的抖动试验表明对于常用的编码器采样的时间间隔约为次判断具有倍频的效果但是由于毛刺的存在在不要求倍频的场合通常采用多次检测判断来识别毛刺以增强判断的可靠性通过设立两个缓冲区用来分别存储两点的电平值分别存入各自缓冲区中当检测到电平变化发生通过分别比对正

编码器 实验报告

编码器 实验报告

编码器实验报告编码器实验报告引言编码器是一种重要的数字电路设备,用于将输入的信息转换为特定的编码形式。

在现代科技发展中,编码器广泛应用于通信、计算机、电子设备等领域。

本实验旨在通过设计和实现一个简单的编码器电路,深入了解编码器的原理和应用。

实验目的1. 了解编码器的基本原理和分类;2. 学习编码器的设计方法和实现技巧;3. 掌握编码器的应用场景和使用方法。

实验原理编码器是一种多对一的数字电路设备,通过对输入信号进行编码,将多个输入状态映射为唯一的输出状态。

常见的编码器有优先编码器、旋转编码器、格雷码编码器等。

1. 优先编码器优先编码器是一种将多个输入状态按照优先级进行编码的设备。

当多个输入同时有效时,只有优先级最高的输入被编码输出。

优先编码器常用于优先级译码器和多路选择器中。

2. 旋转编码器旋转编码器是一种通过旋转操作来改变输出状态的设备。

它通常由一个旋转轮和两个感应器组成,感应器用于检测旋转轮的方向和速度。

旋转编码器常用于旋钮、鼠标滚轮等设备中。

3. 格雷码编码器格雷码编码器是一种将二进制输入信号转换为格雷码输出信号的设备。

格雷码是一种特殊的二进制编码形式,相邻的两个码字只有一位不同,避免了二进制编码中的多位错误。

格雷码编码器常用于数字显示器、光电编码器等设备中。

实验过程本实验以优先编码器为例,设计和实现一个4输入优先编码器电路。

1. 确定输入和输出端口根据实验要求,我们需要设计一个4输入优先编码器,因此需要确定4个输入端口和1个输出端口。

2. 绘制逻辑电路图根据优先编码器的原理,我们可以绘制出如下的逻辑电路图:(图略)3. 确定逻辑门类型根据逻辑电路图,我们可以确定每个逻辑门的类型。

在本实验中,我们选择使用与门和或门。

4. 搭建电路实验平台根据逻辑电路图,我们可以搭建实验平台,连接逻辑门和输入输出端口。

5. 进行实验测试将不同输入信号输入到优先编码器中,观察输出信号的变化。

测试不同输入组合下的编码输出结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ex67.c
//用LED数码管显示计数器T0的计数值 #include<reg51.h> //包 含51单片机寄存器定义的头文件 sbit S=P3^2 ; //将S位定义为P3.2引脚 unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 码表 unsigned char x; /****************************************************************** 函数功能: 延时约0.6ms ********************************************************************/ void delay(void) {
{
x--; //编码器反转在数码管上显示数字减少
if(x==0)
//设置的最小值
x=100;
//如果最小后 在重新赋值
}
//如果到
第 2 页
delay();
delay();
delay();
delay();
P2=0xff;
P0=0xff;
delay();
delay();
delay();
delay();
}
/******************************************* 函数功能:主函数 ******************************************/ void main(void)
unsigned char j; for(j=0;j<200;j++) ;
}
//段
/******************************************************************
函数功能:显示计数次数的子程序
入口参数:x
********************************************************************/
void Display(unsigned char x)
{
P2=0xbf;
//P3.6引脚输出低电平,DS6点亮
P0=Tab[x/10]; //显示十位
delay();
delay();
delay();
delay();
P2=0x7f;
//P3.7引脚输出低电平,DS7点亮
P0=Tab[x%10]; //显示个位
void int0(void) interrupt 0 using 0 //外中断0的中断编号为0
{
x++;
//编码器正转态在数码管显示数字增加
if(x==100) //设置的最大值 可以自己修改
x=0;
最大值清0
}
void int1(void) interrupt 2 using 2 //外部中断1 的中断编号 2
{ EA=1; //开放总中断 EX0=1; //外中断0 中断控制位 1 允许外部中断0 中断 0 禁止我不中断0中断 EX1=1; //外中断1 中断控制位 1 允许外部中断1 中断,0禁止外部1中断。 IT0=1; // 外部中断0 触发方式 控制位 0-低电平触发 1选择负跳变来触发外中断 IT1=1; // 外部中断1 触发方式 控制位 0-低电平触发 1选择负跳变来触发外中断
x=0;
while(1) Display(x);
第 1 页
ex67.c
}
/**************************************************************
函数功能:外中断T0的中断服务程序
**************************************************************/
相关文档
最新文档