ZHCUCC6 September   2024

 

  1.   1
  2.   说明
  3.   资源
  4.   特性
  5.   应用
  6.   6
  7. 1系统说明
    1. 1.1 主要系统规格
  8. 2系统概述
    1. 2.1 方框图
    2. 2.2 设计注意事项
    3. 2.3 主要米6体育平台手机版_好二三四
      1. 2.3.1 TMAG6180-Q1
      2. 2.3.2 MSPM0G3507
      3. 2.3.3 THVD1454
  9. 3系统设计原理
    1. 3.1 硬件设计
      1. 3.1.1 角度传感器原理图设计
      2. 3.1.2 MSPM0G3507 原理图设计
      3. 3.1.3 RS485 收发器原理图设计
      4. 3.1.4 电源和基准电压
    2. 3.2 软件设计
      1. 3.2.1 角度计算时序
      2. 3.2.2 旋转角度计算
      3. 3.2.3 旋转角度误差源和补偿
      4. 3.2.4 编码器通信接口
  10. 4硬件、软件、测试要求和测试结果
    1. 4.1 硬件要求
      1. 4.1.1 PCB 概述
      2. 4.1.2 编码器和 JTAG 接口
      3. 4.1.3 软件要求
    2. 4.2 测试设置
    3. 4.3 测试结果
      1. 4.3.1 AMR 传感器正弦和余弦输出测量
      2. 4.3.2 静态角度噪声测量
      3. 4.3.3 旋转角度精度测量
        1. 4.3.3.1 空气间隙对噪声、谐波和总角度精度的影响
      4. 4.3.4 RS485 接口和信号完整性
  11. 5设计和文档支持
    1. 5.1 设计文件
      1. 5.1.1 原理图
      2. 5.1.2 BOM
      3. 5.1.3 PCB 布局
      4. 5.1.4 Altium 工程文件
      5. 5.1.5 Gerber 文件
      6. 5.1.6 装配图
    2. 5.2 工具与软件
    3. 5.3 文档支持
    4. 5.4 支持资源
    5. 5.5 商标
  12. 6关于作者

旋转角度计算

TIDA-010947 角度计算流程图图 3-6 角度计算流程图

由于 AMR 传感器在机械旋转一周过程中会生成两个正弦和余弦周期,需要额外的检测来区分 0° 至 180° 和 180° 至 360°。因此,TMAG6180 集成了两个 X、Y 霍尔开关,这有助于使用 Q0 和 Q1 输出将角度范围从 180° 扩展到 360°。角度计算流程图如图 3-6 所示,示例代码如下:

//----------------------------------------------------------------------
//Angle calculation
//----------------------------------------------------------------------
//comp0[0] = _IQ(0)
//comp0[1] = _IQ(1)
//comp1[0] = _IQ(1)
//comp1[1] = _IQ(0)
//----------------------------------------------------------------------
    SinCosInput.SinCos.Sin = SinCosInput.SinCos.Sin - Adc16bitOffset;
    SinCosInput.SinCos.Cos = SinCosInput.SinCos.Cos - Adc16bitOffset;
//ATAN2 calculation
    DL_MathACL_startArcTan2Operation(MATHACL, &gAtanOpConfig, SinCosInput.SinCos.Sin, SinCosInput.SinCos.Cos);
    DL_MathACL_waitForOperation(MATHACL);
    SinCosOutput.PhasePU = DL_MathACL_getResultOne(MATHACL);
    angle = _IQ(0.25) - (SinCosOutput.PhasePU>>1);
// Extend to 360 deg. 90 degree ~ 0.25, 45 degree ~ 0.125, 135 ~ 0.375
    if((angle <= _IQ(0.375)) && (angle>_IQ(0.125)))
        absangle=comp0[TMAG_Q0]+angle;
    else
    {
          if (angle>_IQ(0.375))
              absangle=comp1[TMAG_Q1]+angle;
          else
              absangle=_IQ(0.5)-comp1[TMAG_Q1]+angle;
    }