角度传感器在与FPGA 正确配合下能够帮助工程师打造出无与伦比的机械。
自从人类发明了转轮,我们就希望了解如何通过改变精度提高转轮转动效率。在过去几个世纪,科学家和工程师已经研发了许多方法来实现此目标,期间轮- 轴系统的基本原理得到了广泛应用,从汽车、音量旋钮、各种机械形式的齿轮到简陋的手推车,几乎每种机械系统均采用了这一原理[1]。
经过多个时代的探索,人们发现让转轮高效运转的最重要因素并非转轮本身(为何不彻底改造它呢?),而是转轮的轴角。目前测量和优化轴角的最有效方法是采用角度传感器。现有许多种角度传感器都能够通过轮轴监控和改进促进轮周效率优化;但如果配合使用FPGA,您就能够取得非常显著的效果,同时能够提高众多应用中的轮轴/ 轮周效率。
在详细介绍工程师们如何最佳利用赛灵思FPGA 达到上述目的之前,先让我们简单回顾一下角度传感器的部分基本原理。目前得到广泛应用就是编码器和分解器这两类角度传感器。
编码器和分解器的类型
编码器分为增量和绝对两个基本类别。增量编码器可以监控轮轴上的两个位置,并且可以在轮轴每次经过这两个位置时产生A 或B 脉冲。独立的外部电动计数器然后从这些脉冲解读出转速和旋转方向。虽然适用于众多应用,但是增量式计数器确实存在某些不足。例如,在轮轴停转情况下,增量编码器在开始运行之前必须首先通过调回到某个指定校准点来实现自身校准。另外,增量式计数器易受到电气干扰的影响,导致发送到系统的脉冲不准确,进而造成旋转计数错误。不仅如此,许多增量编码器属于光电器件 – 如果对目标应用有影响,则无法用于辐射危险区域。
绝对编码器是监控轮轴旋转计数和方向的传感器系统。在基于绝对编码器的系统中,用户一般把转轮连接到具有电触头或光电基准的轮轴。在轮轴运行时,基于绝对编码器的系统会记录旋转和运行方向,同时产生易于转换成代码(最常见的是二进制码或格雷码)的并行数字输出。绝对编码器的优势在于只需要校准一次(一般是在工厂中校准),而无需每次使用前都校准。此外,绝对编码器一般比其它编码器更可靠。不过,绝对编码器一般很昂贵,而且它们不利于进行并行数据传输,尤其是在测量其读数的电子系统距离编码器较远情况下。
分解器就其本身而言是一种旋转变压器—— 一种输出电压与其所监控的输入轴角唯一关联的模拟器件。它是一款具有0o~360o 旋转角度的绝对位置传感器,其直接连接到轮轴并报告转速和位置。分解器与编码器相比有诸多优势。分解器非常稳健可靠,能够经受带有灰尘、油污、极端温度、振动和辐射的严酷环境。作为一种变压器,分解器可以提供信号隔离以及对电气干扰的自然共模抑制。除了这些特性之外,分解器只需要四根线就可进行角数据传输,这使其能够适用于从重工业、微型系统到航空航天工业等各种应用。
无刷分解器得到了进一步改进,其无需与转子的滑环连接。因此,这种分解器更可靠,而且使用寿命更长。
分解器采用两种方式获取与轴角相关的输出电压。在第一种方式中,如图1 所示的转子绕组由交变信号激励,而输出来自两个定子绕组。由于定子是以机械方式定位到正确角度,因此输出信号幅度是通过轴角的三角正弦和余弦关联。正弦与余弦信号均具有与原始激励信号相同的相位;仅其幅度随轮轴的旋转通过正弦与余弦进行调制。
图1 – 分解器转子激励
在第二种方式中,定子绕组由相位正交的交变信号激励。然后在转子绕组中感应电压。绕组的幅度和频率固定,但其相移随轴角变化。
分解器可以放置到需要测量角度的位置[2]。而电子装置一般指的是分解器数字转换器(RDC),可以放置到需要测量数字输出的位置。分解器的模拟输出(含有轮轴角位置信息)然后经RDC 转换成数字形式。
典型RDC 的功能
一般而言,分解器的两个输出会应用到RDC 的正弦与余弦乘法器[3]。这些乘法器结合正弦和余弦查找表以及函数构成乘法数模转换器。图2 显示了其功能。
图2 – 分解器数字转换器(RDC)方框图
暂且假设开始时递增/ 递减计数器的当前状态是一个代表试验角度(trial angle)ψ 的数值。转换器设法调整数字角度ψ,使其一直等于并跟踪所测量的模拟角度θ。
分解器的定子输出电压为:
V1= V sinωt sinθ
方程 1
V2= V sinωt cosθ
方程 2
其中θ 是分解器转子的角度。数字角度ψ 应用到余弦乘法器,其余弦乘以V1 得出下式:
V sinωt sinθ cosψ.
方程 3
数字角度ψ 另外还应用到正弦乘法器,乘以V2 得出下式:
V sinωt cosθ sinψ.
方程 4
这两个信号由误差放大器相减求得出波形的误差信号:
(V sinωt sinθcosψ – V sinωt cosθ sinψ)
方 程 5
V sinωt (sinθ cosψ- cosθ sinψ)
方程 6
根据三角恒等式,其简化为:
V sinωt [sin (θ -ψ)]
方程 7
检测器采用分解器的转子电压作为基准同步解调此AC 误差信号。这会产生与sin (θ-ψ) 成正比的DC 误差信号。
DC 误差信号馈送到积分器,其输出驱动一个由电压控制的振荡器。而VCO 会导致递增/ 递减计数器按正确方向计数,从而在一次计数中产生:
sin (θ-ψ)→0.
方程 8
当取得此结果,则:
θ -ψ→0,
方程 9
因此,
θ = ψ
方程 10
因此,计数器的数字输出ψ 代表着角度θ。锁存器可以在不中断回路跟踪情况下实现此数据向外部的传输。
此电路等效于2 型伺服回路,因为它实际上有两个积分器。一个是累计脉冲的计数器;另一个是位于检测器输出端的积分器。在具有恒定旋转速度输入的2 型伺服回路中,输出数字字连续跟随或跟踪该输入,而无需外部导出转换。
RDC 典型实例:SD-14621
SD-14621 是数据设备公司(DDC)生产的小型低成本RDC。它有两条具备可编程分辨率控制功能的信道。分辨率编程功能允许选择10、12、14 或16 位模式[4]。此功能允许低分辨率高速跟踪或者更高分辨率支持更高精度。由于其大小、成本、精度与多功能性,此转换器适用于高
性能军用、商用及位置控制系统。
器件的运行需要一个+5V 电压。转换器有两个对模拟地为±4V 电压范围的速度输出(VEL A、VEL B),可用于替代转速计。为两条信道(/BIT A 与/BIT B)提供两个内置测试输出,以指示信号丢失(LOS)。
此转换器由三大部分组成:输入前端、误差处理器和数字接口。前端对于同步器、分解器和直接输入端有所不同。电子Scott-T 用于同步器输入,分解器调节器用于分解器输入,而正弦与余弦电压跟随器用于直接输入端。这些放大器可以馈送高精度控制变压器(CT)。CT 的另一个输入是16 位数字角度ψ,其输出是两个输入之间的模拟误差角度或差分角度。CT 采用放大器、交换机、逻辑电路与电容器以查准率执行SINθ COSψ - COSθ SINψ =Sin(θ-ψ) 的三角函数计算。
与常规精密电阻器相比,这些电容器按查准率使用,以获得更高精度。另外,这些电容器(与运算放大器一起用作计算元件)进行高速采样,以消除偏移和运算放大器偏差。
DC 误差处理进行积分运算,然后得到驱动电压控制振荡器的速度电压。此VCO 与速度积分器结合在一起构成递增积分器:一种2 型伺服反馈回路。
基准振荡器
我们设计中采用的OSC-15802 功耗振荡器也是DDC 公司提供。此器件适用于RDC、同步器、LVDT 和感应式传感器应用[5]。频率与振幅输出可以分别由电容器和电阻器编程。输出频率范围介于400Hz~10kHz 之间,输出电压为7Vrms。图4 显示了器件的方框图。
图3 – SD-14620方框图(单信道)
图4 – OSC-15802基准振荡器方框图
馈送到分解器和RDC 的振荡器输出用作基准信号。
FPGA的I/O电压为3.3V,而RDC的电压为5V。我们采用电压收发器实现两个器件之间的电压兼容。
VIRTEX-5 FX30T FPGA 与RDC 接口
我们在设计中采用赛灵思Virtex®-5 FX30T FPGA [6]。FPGA 的I/O 电压为3.3V,而RDC 的电压为5V。因此我们采用电压收发器来实现这两个器件之间的电压兼容。通过赛灵思提供的GPIO IP 核与FPGA 建立内部连接,如图5 所示。
图5 – RDC与Virtex-5 FPGA的接口(单信道)
为了简单起见,图5 仅显示一条具有一个分解器接口的信道。 您可以在本文件随附的赛灵思开发板描述(XBD)文件找到RDC 的引脚详情以及FPGA 对应的专用引脚。 详情见该文件第一部分。
器件驱动程序详细说明
在本例中,F P G A 采用2 0 M H z 的外部输入时钟。此FPGA 具有一个运行频率为200MHz 的PowerPC 440 硬核。RDC 的时序图见图6 与图7。
图6 – INHIBIT时序
图7 – ENABLE时序
根据RDC 的时序图,我们开发、测试并验证了实际硬件的功能是否正确 [4]。器件驱动程序的实际编码包含在单独的XBD 文件中。根据时序图,我们生成了用于回路的所需延迟。在200MHz 运行速率下进行处理时,每个计数都对应5 纳秒的延迟。
器件驱动程序有三部分编码:RDC 初始化、控制信号的生成及从RDC 信道A 的读取、以及控制信号的生成及从RDC 信道B 的读取。RDC 初始化是设置信号方向和缺省值的阶段。例如,利用以下语句,信号方向将设置为从FPGA“输出”到RDC。
下一个语句通过写入“0x3”来设置16 位分辨率(即:拉高):
图8 为编码截屏。注:为了简化,我们仅提供一条信道的编码。
seXGpio_WriteReg(XPAR_INHIBIT_CH_A_
BASEADDR,XGPIO_DATA_OFFSET,0x01);
for(i=0;i<=5;i++); //gives delay of 25 ns
XGpio_WriteReg(XPAR_ENABLE_LSB_
CH_A_BIT_BASEADDR,XGPIO_DATA_OFFSET,0x01);
for(i=0;i<=5;i++);
XGpio_WriteReg(XPAR_INHIBIT_CH_A_
BASEADDR,XGPIO_DATA_OFFSET,0x00);
for(i=0;i<=2;i++);
XGpio_WriteReg(XPAR_ENABLE_LSB_CH_A_BIT_
BASEADDR,XGPIO_DATA_OFFSET,0x00);
for(i=0;i<=2;i++);
lsb_val=XGpio_ReadReg(XPAR_RDC_DATA_15_
TO_0_PINS_BASEADDR,XGPIO_DATA_OFFSET);
XGpio_WriteReg(XPAR_INHIBIT_CH_A_
BASEADDR,XGPIO_DATA_OFFSET,0x01);
for(i=0;i<=5;i++);
XGpio_WriteReg(XPAR_ENABLE_LSB_CH_A_BIT_
BASEADDR,XGPIO_DATA_OFFSET,0x01);
for(i=0;i<=25;i++);
XGpio_WriteReg(XPAR_INHIBIT_CH_A_
BASEADDR,XGPIO_DATA_OFFSET,0x01);
for(i=0;i<=5;i++);
XGpio_WriteReg(XPAR_ENABLE_MSB_CH_A_BIT_
BASEADDR,XGPIO_DATA_OFFSET,0x01);
for(i=0;i<=5;i++);
XGpio_WriteReg(XPAR_INHIBIT_CH_A_
BASEADDR,XGPIO_DATA_OFFSET,0x00);
for(i=0;i<=2;i++);
XGpio_WriteReg(XPAR_ENABLE_MSB_CH_A_BIT_
BASEADDR,XGPIO_DATA_OFFSET,0x00);
for(i=0;i<=2;i++);
msb_val=XGpio_ReadReg(XPAR_RDC_DATA_15_
TO_0_PINS_BASEADDR,XGPIO_DATA_OFFSET);
lsb_val=lsb_val & 0x00ff;
msb_val=msb_val & 0xff00;
rdccount_cha = msb_val | lsb_val;
XGpio_WriteReg(XPAR_INHIBIT_CH_A_
BASEADDR,XGPIO_DATA_OFFSET,0X01);
for(i=0;i<=5;i++);
XGpio_WriteReg(XPAR_ENABLE_MSB_CH_A_
BIT_BASEADDR,XGPIO_DATA_OFFSET,0x01);
for(i=0;i<=20;i++);
图8- RDC器件驱动程序编码截屏
我们已经看到,角度传感器可以帮助工程师创造更好的转轮,进而设计出众多更高效的机械装置。分解器是一种尤为有用的角度传感器,只要能够与FPGA 正确配合和控制,其就能够帮助工程师打造出无与伦比的机械装置。
参考资料
1. 数据设备公司“同步器/ 分解器转换手册”。
2. John Gasking,“ 分解器数字转换器:光电轴角编码器简单低成本替代方案” AN-263, 美国模拟器件公司
3. Walt Kester,“ 分解器数字转换器” MT-030, 美国模拟器件公司
4. 数据设备公司SD-14620 系列数据手册。
5. 数据设备公司OSC-15802 数据手册。
6. 赛灵思Virtex-5 系列简介
评论
查看更多