ZHCUC00 May   2024

 

  1.   1
  2.   说明
  3.   资源
  4.   特性
  5.   应用
  6.   设计图像
  7. 1系统说明
    1. 1.1 主要系统规格
  8. 2系统概述
    1. 2.1 方框图
    2. 2.2 设计注意事项
    3. 2.3 主要米6体育平台手机版_好二三四
  9. 3系统设计原理
    1. 3.1 硬件设计
    2. 3.2 软件设计
      1. 3.2.1 TMAG5170 SPI 帧
        1. 3.2.1.1 32 位帧中的串行数据
        2. 3.2.1.2 串行数据输出 32 位帧
      2. 3.2.2 TMAG5170 寄存器配置
      3. 3.2.3 SPI 和转换启动时序
      4. 3.2.4 线性位置计算
  10. 4硬件、软件、测试要求和测试结果
    1. 4.1 硬件
      1. 4.1.1 PCB 概述
      2. 4.1.2 MCU 接口连接器
    2. 4.2 测试设置
    3. 4.3 测试结果
      1. 4.3.1 磁体 Z 和 X 场测量
      2. 4.3.2 线性位置测量
      3. 4.3.3 SPI 信号测量
  11. 5设计和文档支持
    1. 5.1 设计文件
      1. 5.1.1 原理图
      2. 5.1.2 BOM
      3. 5.1.3 PCB 布局
        1. 5.1.3.1 布局图
        2. 5.1.3.2 布局指南
    2. 5.2 工具与软件
    3. 5.3 文档支持
    4. 5.4 支持资源
    5. 5.5 商标
  12. 6作者简介

线性位置计算

在每个中断服务例程中,四个等距间隔 TMAG5170 的线性位置是按照图 3-7 中的流程图以 4kHz 速率采样率计算的。

TIDA-060045 简化的位置计算流程图图 3-7 简化的位置计算流程图

读取四个 TMAG5170 的 Z 轴和 X 轴数据。如果这些 Z 轴幅度都不超过最小场强,则表示移动磁体超出范围。否则,会识别 Z 轴上幅度最大的 TMAG5170。可以使用一个迟滞来避免在两个相邻的 TMAG5170 之间的切换。当感应磁体位置位于两个相邻 TMAG5170 之间的中心时,就会发生这种情况,因此两个 TMAG5170 测量到相似的 Z 轴磁场强度。

仅针对 Z 轴磁场强度最高的 TMAG5170 继续进行角度计算。

在第一步中,在系统校准期间校正 Z 轴的失调电压和增益。然后,根据方程式 1,使用校准后的 Z 轴和 X 轴的 atan2 函数计算相对于 TMAG5170 的霍尔效应元件 X 位置的角度。

方程式 1. Angledegnum=180°πatanZnum,Xnum

在第二步中,根据方程式 2 计算线性位置。根据 TMAG5170 数量,还会添加相应的线性位置偏移。

方程式 2. LinPoscmnum=Angledegnum90°1.25cm+num2.5cm+RefOffsetcm

在第三步中,由于离轴测量而产生的误差将使用 X 轴的绝对幅度进行补偿,并使用在系统校准期间根据方程式 3 确定的补偿因数。

方程式 3. LinPoscmnum=LinPoscmnum+absXnumCompFactorcmmT

下面显示了用于在参考设计中计算线性位置的源代码。

//-------------------------------------------------------
// Angle calculation
//-------------------------------------------------------
// z_max_num
// 0: Out of range (Z-field too small)
// 3: TMAG5170[0] has highest Z-field
// 5: TMAG5170[1] has highest Z-field
// 7: TMAG5170[2] has highest Z-field
// 9: TMAG5170[3] has highest Z-field
//-------------------------------------------------------
void calcLinPos(int16_t zmax_num_index)
{
    float       tnom;
    float       tdenom;

    PositionRead.LinPosRef_cm = LC415LinPos_cm;             // Absolute linear position reference
    if (zmax_num_index==0)                                  // Magnet is out of range
    {
        PositionRead.LinPos_cm = 0;                         // Measured absolute linear position
        PositionRead.LinPosError_cm = 0;                    // Measured position error
    }
    else
    {
        // Gain and offset compensated Z-axis     
        tnom = TMAGS_ARRAY[(zmax_num_index-3)/2].Z_mT-PositionCalc.OffsetZ_mT[(zmax_num_index-3)/2];    
        tnom =  tnom*PositionCalc.GainComp[(zmax_num_index-3)/2];                                                              
        tdenom = TMAGS_ARRAY[(zmax_num_index-3)/2].X_mT; 	// X-axis
        PositionRead.Angle_deg = (180/3.1415)*atan2f(tdenom,tnom);
        PositionRead.LinPos_cm = PositionRead.Angle_deg/90*PositionCalc.DistanceTMAG5170_cm/2;
        PositionRead.LinPos_cm += PositionCalc.DistanceTMAG5170_cm * ((zmax_num_index-3)/2);
        PositionRead.LinPos_cm += -PositionCalc.RefOffset_cm;

        // Nonlinear position error compensation using X-field
        PositionRead.LinPos_cm += PositionCalc.PosXfieldComp * abs(TMAGS_ARRAY[(zmax_num_index-3)/2].X_mT);
        // calculate position error versus reference
        PositionRead.LinPosError_cm = PositionRead.LinPos_cm - PositionRead.LinPosRef_cm;
    }
}

有关角度和线性位置计算算法的更多信息,请参阅应用报告实现更高系统角度检测精度线性位置应用的磁体选择(修订版 A)