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刷新率
}
运行与验证方法
- 按上述引脚连接AS5048B与Arduino,确保编码器供电为3.3V~5V(模块通常带稳压)。
- 在Arduino IDE中安装
AS5048A库(库管理器搜索安装)。 - 将代码上传至开发板,打开串口监视器,波特率设为 115200。
- 观察输出:串口应持续打印
Raw: xxx | Angle: xx.xx deg。
通过判定标准
- 串口能稳定输出数据,无乱码或卡死。
- 手动旋转编码器转轴,
Angle值在0~360.00范围内连续变化,且与旋转方向一致(顺时针增大,逆时针减小)。 - 当转轴旋转一整圈回到起点时,角度值从接近360.00跳变回接近0.00,且
Raw值从16383跳变到0附近,说明转换比例正确。
验证提示:若角度值跳变不连续或始终为0,请检查SPI接线(尤其是CSN片选)以及编码器供电是否正常。AS5048A库的
getRawRotation() 返回的是无符号14位原始值,无需额外校准即可直接使用。