发布日期:2022-04-26 点击率:64
下载 PDF 版
作者:K. Robert Bate,
Allegro MicroSystems, LLC
无论是工业自动化和机器人技术,还是电动助力转向和电机位置传感,许多应用都需要监测旋转轴(以轴上或离轴排列形式)的角度。
在设计中使用磁体时,磁场输入在整个旋转范围很可能不均匀,它存在固有误差。这些磁场输入误差会导致系统内的测量误差。线性化能减少这些输入误差。
A1332 和A1335 可采用的谐波线性化能以最多 15 种修正谐波的形式应用线性化,利用快速傅立叶变换 (FFT) 可确定它们的相位和振幅,根据磁体在角度传感器 IC 周围的一次旋转产生的数据可完成 FFT。通过使用 Allegro 提供的软件计算系数,并对片内 EEPROM 进行编程,可使用这种技术。本应用说明介绍了,当 Allegro 提供的软件不够灵活或要使用定制软件时,客户能使用的功能和处理流程。
所有软件都是在使用 .NET 4.0 的 Microsoft Visual Studio 2010 环境下开发的。请为您要使用的器件下载命令库 (C#/.NET),并添加到其所含的 3 个 DLL 的项目参考中。
首先,关闭所有后线性化算法处理;这包括零点偏移、后线性化旋转 (RO)、短行程反转 (IV) 和旋转晶片位元 (RD)。预线性化调节可保持开启,如 ORATE 设置、IIR 过滤器 (FI) 和预线性化旋转 (LR)。
沿角度增加的位置移动编码器。如果角度传感器 IC 的输出未相应增大,可设置 LR 位元以反转角度传感器 IC 输出的反向,或在校准时沿反方向转动编码器,在此情况下,可能需要设置后线性化旋转位元 (RO)。参阅《A1332/ A1335 编程参考》了解更多详情。
最佳收集方法是按间距相等的步数旋转目标,这样产生的数据点数量就是 2 的幂数。通常,32 或 64 个间距均匀的数据点就足够了。如果不能实现,可收集数据点,然后必须按下节介绍的方法预处理数据。
另一种收集所需数据点的方法是多次旋转目标,然后按预定义的间隔收集数据。当收集到足够的数据点覆盖目标的整个旋转范围时,接下来必须按下节介绍的方法预处理数据。
如果收集的数据点数量不是 2 的幂数,或者收集的数据点间距不等,必须调整数据点数组的长度并/或使它们间距相等。要对数据执行此操作,可调用 ResizePointArray 例程。
参数 x 是编码器数值的数组,参数 y 是在该编码器数值中收集的器件读数。参数 newSize 是重新调整的数组大小。如果参数 x 设置为空,则假设已按从 0 开始至 360 结束的相等间距收集数值 y。如果参数 x 不是空,则需要在调整数组大小前,为输入数组排序。
double[] ResizePointArray(double[] x, double[] y, int newSize)
此例程会在输入数组上执行三次样条插值,以采用所需的数据点数量,生成间距相等的数组。
数据收集完毕,并形成长度为 2 的幂数的数组后,就可以计算谐波系数了。要计算谐波系数,可调用 CalculateHarmonicLinearCoefficients 例程。
HarmonicCoefficients[] CalculateHarmonicLinearCoefficients (double[] points, out bool pointError)
其输入是已收集的角度数组。此例程会执行 FFT,并会返回系数数组和一个警告标记。当一个或多个输入角比例程计算的角度大 20 度时,需要设置点误差警告标记。
以一个包含 8 个输入项的数组为例,例程计算的角度应为 [0, 45, 90, 135, 180, 225, 270, 315]。如果输入数组是 [0, 45, 90, 135, 180, 204, 270, 315],则例程会设置 pointError,因为第 6 个输入项的误差超过 20 度。
当所有谐波系数已计算完毕后,必须选择所需的谐波。通常,计算例程生成的谐波数量会超过器件能支持的谐波数量,所以,必须选择一些算法以选择相关的谐波。
使用谐波的数量还取决于所用的器件种类和功能。A1332 的谐波最大数量是 15,但如果使用最大值,一些可编程的功能会使用默认值,如短行程设置和特定的 I2C 与 SPI 设置。不使用默认值时,这些可编程功能的谐波最大数量是 9。A1335 的谐波最大数量是 11,但要达到此数量,一些可编程功能会使用默认值,如短行程设置。不使用默认值时,这些可编程功能的谐波最大数量是 8。
最简单的算法是按照所需的谐波数量选择第一个谐波。这种方法很简单,它选择的谐波不会对输出产生显著的影响。
Allegro A1335 的示例编程器目前使用的算法是选择振幅大于 0.3 的谐波。需要注意的是,当前软件的一个限制是在所选谐波之间只能跳过 4 个谐波。如果跳过的谐波超过 4 个,还需要选择最后一个选定谐波和所需谐波之间的所有谐波。
谐波选择完毕后,可调用例程 GenerateHarmonicLinearizationDevicevalues 生成要写入器件的数值。
HarmonicDevicevalues[] GenerateHarmonicLinearizationDevicevalues (HarmonicCoefficients[] coefficients)
谐波系数传递到此例程中,它会返回器件编程所需的一组数值。此例程抛出的唯一异常是在所选系数之间跳过 4 个以上谐波系数的情形。
要对器件进行谐波线性化编程,必须设置 HL 标记,必须将 HAR_MAX 字段设置为要使用的系数数量,同时必须编写 HARMONIC_PHASE_n、ADV_n 和 HARMONIC_AMPLITUDE_n 字段。
using System;
using Allegro.ASEK;
namespace HarmonicLinearizationExample
{
public class HarmonicLinearizationExample
{
public HarmonicLinearizationExample()
{
}
public void ProgramHarmonicLinearization(string filePath, ASEK asekProgrammer)
{
try
{
HarmonicCoefficients[] hc;
bool pointError = false;
double[] points = null;
string fieldBuffer = File.ReadAllText(filePath);
string line;
List
此文件包含一个角度值列表。如果有两个数值被逗号隔开,则第一个数值是编码器角度,第二个数值是器件角度。行可以是空白的,如果它们以 # 打头,则可将其视为注释。
角度输入文件实例:
329.59
354.81
6.832
13.566
17.592
20.228
22.638
24.638
25.956
27.454
28.77
30.054
30.966
包含两列时:
0,123
22.5,145.5
45,168
67.5,190.5
90,213
112.5,235.5
135,258
157.5,280.5
180,303
202.5,325.5
225,348
247.5,10.5
270,33
292.5,55.5
315,78
337.5,100.5
下一篇: PLC、DCS、FCS三大控
上一篇: 索尔维全系列Solef?PV