​​


前言

最近在做一个使用FPGA和增量式编码器实时检测转子位置的小课题,第一次完成从硬件到软件的设计以及软硬件的联调,想做一个总结,鼓起勇气开始自己的第一次发帖。并且,在做这个课题的过程中,发现相关资料比较少,所以希望能够贡献一些自己的力量吧~如有错误还请大家批评指正!

一、原理介绍

增量式编码器与电机转子同轴安装,当电机旋转时,编码器会输出三路信号ABZ。A相信号和B相信号相位相差90°,根据两者的超前滞后关系,可以判断出电机的转动方向。Z相信号为零位信号,电机每转到该位置时会输出一个零位脉冲,可以用该位置作为参考位置来标定转子的实时位置。

本次实验使用的编码器的输出是三对差分信号A+、A-、B+、B- 、Z+、Z-,这三对信号需要经过差分处理电路,可以得到真实的三对差分信号(否则输出的是虚电),可以发现A+与A-、B+与B-、Z+与Z-都是严格的反相关系。再经过一个差分处理芯片可以输出三路信号,这样就可以给FPGA进行处理了。

二、硬件调试

为了实现差分处理,我绘制了一个简单的PCB板(也是我的第一块PCB板,非常激动)。主要设计思路是:将三对差分信号经过终端匹配电阻->滤波->上拉,之后进行差分处理芯片。一般情况下,使用较多的是AM26LS32,但是这款芯片的供电是5V,因此输出高电平也是5V,如果要给FPGA或者DSP处理的话得转换成3.3V,所以一般后面再接一个5V转3.3V的芯片,我个人觉得有些麻烦,在想:有没有可以直接3.3V供电,直接省去那个5V-3.3V的芯片。于是,在TI官网找了找,发现了一款符合条件的芯片,AM26LV32。看到数据手册第一页这句话直呼牛逼。

但是尽管如此,说实话还是不太放心,毕竟没有用过,在网上这部分的资料也比较少,直到焊完板子调试通过后才觉得没有问题。也算给大家探路了哈哈。(硬件调试也遇到了一些问题,但是这些问题与芯片无关,大家应该不会碰到)

然后分别顺时针和逆时针转动电机用示波器观察编码器的输出波形,保存了下来,A相和B相信号与之前在网上看到的基本一致,但是网上几乎没有看到关于Z相信号的图像,这次特地截了两张,大家可以看一下,可以根据它的脉宽来写testbench便于仿真。(CH1为A相脉冲,CH2为B相脉冲,CH3为Z相信号)

三、位置检测原理

假设规定角度沿着顺时针方向增加,从0°增加到360°,不论转动方向是什么,角度都是这样变化。0°就是图中箭头位置(对应编码器的零位信号)。则电机转子的实时位置计算公式如下:

其中:FPGA每检测到A相信号的一个下降沿,则K会加一;当K=2500(编码器的线数,转过一圈A相和B相都会产生2500个脉冲,本文以A相为准)时或检测到Z相信号时会自动清零。

其中:K+1是因为K是从0开始增加,如果K=2的时候实际上已经走了三个脉冲了。

【注】在实际应用中,可以使用二倍频或四倍频来提高精度。我最终使用的是二倍频,在A相信号的上升沿和下降沿都进行检测和计数为了避免累计误差。

四、程序设计

根据以上算法介绍,最重要的其实就是两个步骤:①如何判断转动方向②如何将脉冲数准确;

第一个问题,如何根据编码器的脉冲判断电机的转动方向。目前比较常见的方法:使用DSP或者STM32,检测到A相信号的下降沿时触发中断,检测此时的B相信号的电平高低,如果电平为低,则为正转;如果为高,则为反转(正反转方向每个人的定义不同,不影响,只要根据自己的需要定义就行)。针对FPGA而言,则可以检测A相信号的下降沿,将其下降沿作为触发信号,检测此时B相信号的电平高低。(这一块可以参考大佬们写的基于FPGA的边沿检测算法,有很多本质上的讲解,很佩服!感谢各位大佬!)

always @(posedge clk)
begin
phase_a_t0 <= phase_a;
phase_a_t1 <= phase_a_t0;
endassign A_down = (~phase_a_t0)&&(phase_a_t1);//检测A相信号的下降沿

仿真中发现:这个信号的脉宽是一个时钟周期。因此,可以用它的上升沿来作为触发条件来判断方向或计数。

第二个问题的解决方案其实已经在上面说差不多了,如果为了提高精度,可以在A相信号的上升沿和下降沿都进行检测以及可以避免A相信号的下降沿和Z相信号上升沿重合(用A相信号的下降沿作为触发条件去检测Z相信号的高低,重合时检测不到,这也是我使用二倍频的原因),没有检测到从而不能及时清零的问题。

五、实际运算

判断好方向和数好脉冲个数后,就得根据上面的算法计算了,可是这时候发现FPGA不擅长计算乘除法和浮点数,于是将数据通过XINTF传输给DSP让它来计算(因为用的是DSP+FPGA架构的控制板,而且计算出的位置也是为了给DSP去算别的东西,所以与其让FPGA复杂的算完传过去不如直接让DSP算)。

六、总结

1、第一次发帖,对于排版、图片等很多东西不是很懂,如有问题还请大家谅解;

2、本文如果有表述上的问题、原理上的问题等,还请大家批评指正,非常乐意和大家一起交流学习、共同进步;

3、这是我的第一篇blog,希望不是最后一篇哈哈~,谢谢大家看到这里~


基于FPGA和ABZ增量式编码器的转子位置检测相关推荐

  1. 增量式编码器c语言,增量式编码器

    机器人运行过程中,电机转动会产生各种干扰信号.通过两组电源给机器人驱动系统和控制系统供电,以消除干扰对稳定性的影响. 码盘加陀螺仪的方法在应用过程中发现陀螺仪的角度会随着机械振动发生漂移,影响定位精度 ...

  2. 增量式编码器 绝对值编码器

    机器人运行过程中,电机转动会产生各种干扰信号.通过两组电源给机器人驱动系统和控制系统供电,以消除干扰对稳定性的影响. 码盘加陀螺仪的方法在应用过程中发现陀螺仪的角度会随着机械振动发生漂移,影响定位精度 ...

  3. STM32 电机教程 26 - ST MCLIB实战之增量式编码器位置传感FOC方案

    前言 磁场定向控制又称矢量控制(FOC), 本质上为控制定子电流的幅度和相位,使之产生的磁场和转子的磁场正交,以产生最大的扭矩. PMSM的磁场定向控制框图如下图所示: 本节将基于NUCLEO-F10 ...

  4. 11旋转编码器原理_旋转编码器的原理是什么?增量式编码器和绝对式编码器有什么区别?...

    先给出结论,最重要的区别在于:增量式编码器没有记忆,断电重启必须回到参考零位,才能找到需要的位置,而绝对式编码器,有记忆,断电重启不用回到零位,即可知道目标所在的位置. 接下来细说一下,主要包含如下的 ...

  5. 增量式编码器c语言,关于增量式编码器编程指导及使用方法的介绍

    关于增量式编码器编程指导及使用方法的介绍 文章来源:http://www.kindele.com/  发布时间:2016/05/13    点击数: 在目前的编码器市场,增量式编码器主要被分为三种类型 ...

  6. 增量式编码器和绝对式编码器的介绍

    一.编码器的分类 根据检测原理,编码器可分为光学式.磁式.感应式和电容式,根据其刻度方法及信号输出形式,可分为增量式.绝对式以及混合式三种. 1.增量式编码器 增量式编码器是直接利用光电转换原理输出三 ...

  7. 增量式编码器工作原理超详细图解

    旋转编码器是由光栅盘(又叫分度码盘)和光电检测装置(又叫接收器)组成.光栅盘是在一定直径的圆板上等分地开通若干个长方形孔.由于光栅盘与电机同轴,电机旋转时,光栅盘与电机同速旋转,发光二极管垂直照射光栅 ...

  8. 增量式编码器有哪些分类?增量式编码器是如何工作的?

    编码器可以对一些信号进行编码,由此可见编码器的重要性.为增进大家对编码器的认识,本文将对增量式编码器.增量式编码器分类以及增量式编码器的工作原理予以介绍.如果你对增量式编码器或者编码器具有兴趣,不妨继 ...

  9. 增量式编码器和绝对式编码器区别

    一.编码器的分类 根据检测原理,编码器可分为光学式.磁式.感应式和电容式,根据其刻度方法及信号输出形式,可分为增量式.绝对式以及混合式三种. 1.增量式编码器 增量式编码器是直接利用光电转换原理输出三 ...

最新文章

  1. java017.Set集合
  2. python turtle画气球-micro:bit + LoRa 实现气球追踪
  3. 树莓派3b python3.6.1 SSL模块调用不起来的坑
  4. VS和matlab混合编程的推荐书籍!
  5. 数据结构之---二叉树C实现
  6. 退休后,你是因为什么还要继续工作?做原来的工作还是做新工作?
  7. 专访数据挖掘领头人韩家炜教授:不要迷信权威,做学问要秉承「三个真实」...
  8. android 渠道商,【华为怒斥渠道商】
  9. 利用公网Msf+MS17010跨网段攻击内网(不详细立马关站)
  10. live2d web笔记之一:官方SDK尝试
  11. 微信协议服务器端口,优咖对你说| 从TCP协议栈角度分析微信常用业务模型
  12. oracle 当前owner,如何在Oracle中找到对象的OWNER?
  13. 邓元鋆:AMD的方法论
  14. centos 开发套件_替代的Laravel套件开发工作流程
  15. 计算机一级程测试题,2017计算机全国一级考试选择题整理.doc
  16. 长角牛网络监听 arp欺骗
  17. C++上机实验六第2题
  18. 网站不让复制文字??教你破解复制+白嫖下载百度等各种文档
  19. 【文献阅读】翻译王军武老师的文献--《稠密气固流的连续理论现状回顾》三、第二节 气固流态化的多尺度模拟
  20. NNDL 实验七 循环神经网络(2)梯度爆炸实验

热门文章

  1. PMP备考大全:经典题库(7月第4周)
  2. 知到python课程答案-智慧树知到APPPython数据分析与数据可视化网课答案
  3. sketchb必备快捷键大全,sketch如何自定义快捷键
  4. 2.K8S部署-------- 制作CA证书
  5. CentOS 7.6 部署frps
  6. 支付宝php sdk如何使用,支付宝SDK怎么用啊?
  7. python 缩放图片_python实现按长宽比缩放图片
  8. 奇舞周刊第 424 期:Sketch 插件开发指南
  9. 提取IP地址和端口的正则表达式
  10. 【附资料】PMP证书有用吗?