2. 角度数据转换与显示

任务目标

AS5048磁编码器通过SPI返回14位原始角度数据(0~16383),本案例将其转换为直观的0~360.00°浮点数值,并通过串口以每100ms一次的频率实时输出,便于在串口监视器中观察角度变化。

硬件连接与依赖

  • 主控:Arduino Uno(或其他兼容SPI的Arduino开发板)
  • 编码器:AS5048B,SPI模式(CSN片选引脚接D10,SCK接D13,MOSI接D11,MISO接D12)
  • 库依赖:需安装 AS5048A 库(Arduino库管理器搜索“AS5048A”即可安装)

关键完整代码

#include <SPI.h>
#include <AS5048A.h>

// 创建AS5048A对象,参数为片选引脚
AS5048A encoder(10);

void setup() {
  Serial.begin(115200);
  while (!Serial); // 等待串口就绪(仅适用于原生USB板,Uno可省略)

  encoder.init();
  delay(100);
  Serial.println("AS5048 Angle Converter Ready");
}

void loop() {
  // 读取14位原始角度(0~16383)
  uint16_t rawAngle = encoder.getRawRotation();

  // 转换为0~360.00度
  float angleDeg = (rawAngle / 16383.0) * 360.0;

  // 串口输出:原始值 + 角度值
  Serial.print("Raw: ");
  Serial.print(rawAngle);
  Serial.print(" | Angle: ");
  Serial.print(angleDeg, 2); // 保留两位小数
  Serial.println(" deg");

  delay(100); // 10Hz刷新率
}

运行与验证方法

  1. 按上述引脚连接AS5048B与Arduino,确保编码器供电为3.3V~5V(模块通常带稳压)。
  2. 在Arduino IDE中安装 AS5048A 库(库管理器搜索安装)。
  3. 将代码上传至开发板,打开串口监视器,波特率设为 115200。
  4. 观察输出:串口应持续打印 Raw: xxx | Angle: xx.xx deg。

通过判定标准

  • 串口能稳定输出数据,无乱码或卡死。
  • 手动旋转编码器转轴,Angle 值在0~360.00范围内连续变化,且与旋转方向一致(顺时针增大,逆时针减小)。
  • 当转轴旋转一整圈回到起点时,角度值从接近360.00跳变回接近0.00,且 Raw 值从16383跳变到0附近,说明转换比例正确。
验证提示:若角度值跳变不连续或始终为0,请检查SPI接线(尤其是CSN片选)以及编码器供电是否正常。AS5048A库的 getRawRotation() 返回的是无符号14位原始值,无需额外校准即可直接使用。