两相编码器的驱动原理

根据A,B相的相位差,即相位的领先或落后来判断编码器转轴旋转方向,根据编码器旋转产生的脉冲来计数。
二、输出信号
1、信号序列

一般编码器输出信号除A、B两相(A、B两通道的信号序列相位差为90度)外,每转一圈还输出一个零位脉冲Z。
当主轴以顺时针方向旋转时,按下图输出脉冲,A通道信号位于B通道之前;当主轴逆时针旋转时,A通道信号则位于B通道之后。从而由此判断主轴是正转还是反转。
摘自:原创置顶 李逍遥~
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42562514/article/details/89435902

两相旋转编码器的FPGA驱动代码

//编码器驱动
//作者:杨成煜
//日期:2020/4/11
//==================defines=====================
`define SIM
module  encoder(//================System Signal================input                clk,input               rst_n,//================Interface====================input              a,input             b,output reg[31:0]  cnt
);//================parameters===================`ifndef SIM`else`endiflocalparam S_IDLE          = 5'b00001;localparam S_PLUS_CHECK    = 5'b00010;localparam S_PLUS          = 5'b00100;localparam S_MINUS_CHECK   = 5'b01000;localparam S_MINUS         = 5'b10000;//================System regs==================reg           a_t0;reg            a_t1;reg            b_t0;reg            b_t1;reg[4:0]       state;wire          a_pedge;wire            b_pedge;wire            a_nedge;wire            b_nedge;//================Main Codes===================//a,b  tempalways @(posedge clk)begina_t0 <= a;a_t1 <= a_t0;b_t0 <= b;b_t1 <= b_t0;endassign a_pedge = a_t0&(~a_t1);assign a_nedge = ~a_t0&a_t1;assign b_pedge = b_t0&(~b_t1);assign b_nedge = ~b_t0&b_t1;//state machinealways  @(posedge clk or negedge rst_n)beginif(rst_n==1'b0)state <= S_IDLE;else case(state)S_IDLE:beginif(a_pedge==1'b1)state <= S_PLUS_CHECK;else if(b_pedge==1'b1)state <= S_MINUS_CHECK;elsestate <= S_IDLE;endS_PLUS_CHECK:beginif(b_pedge==1'b1)state <= S_PLUS;else if(a_pedge==1'b1)state <= S_IDLE;elsestate <= S_PLUS_CHECK;endS_PLUS:beginstate <= S_IDLE;endS_MINUS_CHECK:beginif(a_pedge==1'b1)state <= S_MINUS;else if(b_pedge==1'b1)state <= S_IDLE;elsestate <= S_MINUS_CHECK;endS_MINUS:beginstate <= S_IDLE;enddefault:state <= S_IDLE;endcaseend//cntalways @(posedge clk or negedge rst_n)beginif(rst_n==1'b0)cnt <= 'd0;else if(state==S_PLUS)cnt <= cnt + 1'b1;else if(state==S_MINUS)cnt <= cnt - 1'b1;end
endmodule

仿真脚本

//编码器仿真脚本
//日期:2020/4/11
//作者:杨成煜
`timescale 1ns/1ns     //时间精度
`define clock_period 20    //时钟周期
module tb_encoder;  //实体名称//=====================<系统端口>=============================
reg             clk;
reg             rst_n;//=====================<外设端口>=============================
reg         a;
reg         b;
wire[31:0]  cnt;
integer     i;
integer     j;encoder encoder_inst(//================System Signal================.clk          (clk),.rst_n            (rst_n),//================Interface====================.a               (a),.b              (b),.cnt            (cnt)
);
//=====================<时钟信号>=============================
initial beginclk = 1;forever#(`clock_period/2)    clk = ~clk;
end//=====================<复位信号>=============================
initial beginrst_n = 0;#(`clock_period*20+1);rst_n = 1;
end//=====================<激励信号>=============================
initial begina = 0;#(`clock_period*20+1);//初始化for(i=0;i<20;i=i+1)begina=0;#1000;a=1;#2000;a=0;#1000;enda=0;#5000;for(i=0;i<20;i=i+1)begina=0;#2000;a=1;#2000;end
end
initial beginb = 0;#(`clock_period*20+1);for(j=0;j<20;j=j+1)beginb=0;#2000;b=1;#2000;endb=0;#5000;for(j=0;j<20;j=j+1)beginb=0;#1000;b=1;#2000;b=0;#1000;end
endendmodule

仿真波形

正转逻辑

反转逻辑

两相编码器的FPGA驱动相关推荐

  1. 两相四线步进电机的驱动方法/驱动芯片用法

    目录 一.基本概念说明: 1.电机原理: 2.步进电机概念名词: 3.驱动芯片 4.调试总结: 概述 说明:本文主要说明一下使用驱动芯片驱动两相四线步进电机. 关联关键词:如何驱动步进电机/步进电机驱 ...

  2. 【电机应用控制】——步进电机控制原理(四相五线/两相四线/细分驱动)驱动器梯形/S形加减速算法直线/圆弧插补

    目录 一.步进电机简介 二.步进电机控制原理 1.四相五线 2.两相四线 3.细分驱动 三.步进电机驱动器 四.梯形加减速算法 五.S形加减速算法 六.直线插补 七.圆弧插补 八.步进电机闭环系统(位 ...

  3. FPGA驱动旋转编码器(Verilog)

    简述 遇到问题:不知道怎么使用旋转编码器:不知道判断左旋右旋:编码器硬件消抖后还是抖动.乱跳,不符合编程预想结果. 编程思路:通过信号打拍进行信号跳变检测:当一个端口的跳变时,判断另一个端口的电平状态 ...

  4. Arduino DRV8825驱动两相步进电机

    Arduino DRV8825驱动两相步进电机 DRV8825步进电机驱动 DRV8825的特点 相对于4988的特点优势 DRV8825驱动步进电机注意事项 细分 引脚说明 Arduino配合DRV ...

  5. 两相四线步进电机与LMD18200驱动器与电机加速减速

    两相四线步进电机 1.工作功率条件 电压12V直流电流,静态电流<0.5A(测试为0.032A)功,恒压工作电流是0.7-1.1A,功率=8.4W-13.2W. 横流0.24-0.28A之间,电 ...

  6. 【接口协议】FPGA 驱动 VGA 显示实验(二)实验设计部分

    目录 实验任务 实验环境 实验设计 程序设计 VGA 时序模块 模块框图 仿真波形 顶层模块 约束文件 实验任务 利用FPGA驱动VGA实现彩条显示,分辨率为800 × 600@60Hz,分别显示三种 ...

  7. 两相步进电机和五相步进电机

    步进电机是一种离散运动的装置,它和现代数字控制技术有着本质的联系.在目前国内的数字控制系统中,步进电机的应用十分广泛.随着全数字式交流伺服系统的出现,交流伺服电机也越来越多地应用于数字控制系统中.为了 ...

  8. Y07-28D1-5010D 日本信浓步进马达 两相混合式步进电机驱动器组合

    Y07-28D1-5010D 日本信浓步进马达 上一条:日本信浓Y07-43D1-4275 3D打印机专用双轴步进电机 下一条:供应日东波峰焊专用日本信浓86步进电机 产品详情 品牌:日本东方 型号: ...

  9. 步进电机定子相数:单相/两相/三相/四相/五相结构工作原理

    步进电机定子相数:单相/两相/三相/四相/五相结构工作原理 文章目录 决定步距角的因素 单相步进电机 两相步进电机 三相步进电机 四相步进电机 五相步进电机 相数与特性:分辨率.振动.转速 当步进电机 ...

最新文章

  1. 制作模板_木模板制作流程
  2. proDAD Erazr便携版
  3. linux pxe安装mysql_搭建PXE实现自动化安装系统
  4. Linux重定向的理解
  5. 自主云服务器处理器_统信服务器操作系统 V20 欧拉版发布
  6. pdo 连接操作数据库
  7. Hibernate【3】——Service层
  8. WPF基础之体系结构
  9. Setup Factory安装及程序安装包制作教程
  10. x86 android 显卡 tablet2,随心而变 ThinkPad Tablet 2评测
  11. 中兴新支点操作系统——菜单小教程
  12. 【校招VIP 前端】电影详情模块的开发文档设计实战
  13. vue2+vant适配750设计稿
  14. C# winform 快速导入excel 到datagridview
  15. Centos文件夹目录中文变英文
  16. MySQL深翻页、MySQL跳页
  17. MATLAB几个误差参数说明
  18. jdk源码分析,Java视频全套
  19. 普林斯顿ap计算机教材,ap微积分目录[普林斯顿版]
  20. 《Android移动应用基础教程》(Android Studio)(第二版)黑马教程 课后题答案 第7章

热门文章

  1. 一线互联网技术团队管理经验谈
  2. Python与金融:为什么将Python用于金融
  3. 直击汇佳学校|中考后转轨国际学校 重大改变的他们现在如何?
  4. PowerPMAC技术培训------2、PowerPMAC产品介绍
  5. 华为融合电信云解决方案包括_华为云解决方案.ppt
  6. Android实现截屏方式
  7. Nginx多策略流量分发
  8. 美国服务器网络黑客的常用手段
  9. veins车载通信仿真框架(3)--OMNET++基础
  10. Python爬取热搜数据之炫酷可视化