用FPGA做正交解码

发布时间:2023-12-25  

非常适合用逻辑来实现正交解码的功能。

本文引用地址:

正交信号是两个相位差为90度的信号。它们在机械系统中用于确定轴的运动(或旋转)。

这是一个向前移动几步的轴。

如果对脉冲计数,则可以说轴移动了3步。
如果计算边缘,则可以说轴移动了12步。这就是我们在此页面上所做的。

现在,轴向后移动了相同的量。

因此,想法是通过查看边缘和水平,我们可以确定运动的方向和距离。
这是一个示例,其中轴向前移动10步,然后向后移动7步。

它们在哪里使用?

  • 在机械手轴中,用于反馈控制。
  • 用旋钮确定用户输入。
  • 在电脑鼠标中,确定运动方向。

如果您打开机械鼠标,则会看到以下内容。

有两个光学正交编码器,每个编码器由开槽轮,光发射器和一对光电探测器制成。
鼠标包括负责正交解码和串行/ PS2接口的IC。由于创建正交解码器(在中)比串行或PS2接口要容易得多,因此我们修改了鼠标,并用四缓冲器施密特触发器输入IC替换了原始IC。

我们使用CD4093,每个NAND门的输入连接在一起形成反相器。
现在,鼠标输出正交编码信号!

正交解码器

我们要实现一个根据正交信号递增或递减的计数器。我们假设有一个比正交信号快的“过采样时钟”(在此页面中称为“ clk”)。
控制计数器的硬件电路非常简单。

这是轴向前移动的波形,计数器会递增。

该电路有时称为“ 4x解码器”,因为它会计算正交输入的所有跃迁。
在verilog HDL中,这为我们提供了:

module quad(clk, quadA, quadB, count);
input clk, quadA, quadB;
output [7:0] count; 
reg quadA_delayed, quadB_delayed;
always @(posedge clk) quadA_delayed <= quadA;
always @(posedge clk) quadB_delayed <= quadB; 
wire count_enable = quadA ^ quadA_delayed ^ quadB ^ quadB_delayed;
wire count_direction = quadA ^ quadB_delayed; 
reg [7:0] count;
always @(posedge clk)begin
  if(count_enable)
  begin
    if(count_direction) count<=count+1; 
    else count<=count-1;
  endend endmodule

实际生活中的电路

先前的电路假定“ quadX”输入与“ clk”时钟同步。在大多数情况下,“ quadX”信号与时钟不同步。经典解决方案是每个输入使用2个额外的D触发器,以避免将亚稳性引入计数器。

module quad(clk, quadA, quadB, count);
input clk, quadA, quadB;
output [7:0] count; 
reg [2:0] quadA_delayed, quadB_delayed;
always @(posedge clk) quadA_delayed <= {quadA_delayed[1:0], quadA};
always @(posedge clk) quadB_delayed <= {quadB_delayed[1:0], quadB}; 
wire count_enable = quadA_delayed[1] ^ quadA_delayed[2] ^ quadB_delayed[1] ^ quadB_delayed[2];
wire count_direction = quadA_delayed[1] ^ quadB_delayed[2]; 
reg [7:0] count;
always @(posedge clk)begin
  if(count_enable)
  begin
    if(count_direction) count<=count+1; 
    else count<=count-1;
  endend endmodule

总之,创建正交解码器/计数器所需的硬件很少。FPGA可以容纳多个轴,因此可以同时跟踪多个轴。

文章来源于:电子产品世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    PLC编程语言的国际标准 和C语言的区别;  PLC编程语言是工业控制领域内用于编写PLC程序的语言,旨在实现对工业设备和生产流程的自动化控制和监测。PLC编程语言包含多种语言类型,如图形化编程语言......
    PLC梯形图编程语言的种类和特点;  PLC梯形图编程语言是一种用于编写自动化应用程序的编程语言。它的名称来自梯形图的形状,每个梯形代表一个逻辑功能块。梯形图编程语言是一种图形化编程语言,具有......
    PLC编程语言的类型和具有哪些特点;  PLC编程语言是工业控制领域内用于编写PLC程序的语言,旨在实现对工业设备和生产流程的自动化控制和监测。PLC编程语言包含多种语言类型,如图形化编程语言、文本化编程语言......
    环境使客户可以利用单一的代码库来为 Agilex FPGA 编程,在多个架构上都达到原生高级语言的性能。” 新型的 IA-840F 提供各种企业级的功能特点与性能,包括: §  对英特尔 oneAPI 统一软件编程......
    PLC指令表编程语言的特点和编写步骤;  PLC指令表编程语言是一种低级别的编程语言,使用符号和指令来控制程序的运行。它主要是用于编写PLC程序,实现工业自动化控制。该语言包含了一组指令,如逻......
    PLC编程语言的表达方式 如何进行相互转换;  PLC编程语言是工业控制领域内用于编写PLC程序的语言,旨在实现对工业设备和生产流程的自动化控制和监测。PLC编程语言包含多种语言类型,如图形化编程语言......
    界面,由于PC机的强大功能,因此与其一起组成的运动控制器功能最强,但其工作稳定性、可靠性较差。 运动控制卡通过PCI插槽将控制卡插在PC的主机上;利用高级编程语言C++、C#、VB、VB.NET......
    五种支持plc编程的语言有哪些;PLC的软件编程语言与一般计算机语言相比,具有明显的特点,它既不同于高级语言,也不同于一般的汇编语言,且要满足易于编写和调试的要求。 早期的PLC仅支持梯形图编程语言和指令表编程语言......
    plc编程语言主要有哪三种;  plc编程语言主要有哪三种   PLC有五种标准化编程语言   1、PLC有五种标准化编程语言顺序功能图(SFC)、梯形图(LD)、功能模块图(FBD)三种图形化语言......
    plc编程是什么 plc编程语言;  plc编程是什么   PLC编程是指通过PLC编程软件,使用PLC编程语言(如Ladder Diagram、Function Block Diagram......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>