37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块
核心芯片:AS5600
是一款易于编程的磁性旋转位置传感器,具有高分辨率 12 位模拟或 PWM 输出。这种非接触式系统测量径向磁化同轴磁体的绝对角度。这款 AS5600 专为非接触式电位计应用而设计,其坚固的设计消除了任何均匀的外部杂散磁场的影响。行业标准的I²C接口支持用户对非易失性参数进行简单编程,无需专门的编程器。此外,该器件还实现了在所谓的“3线模式”中轻松进行启动和停止位置编程,无需编程器或数字接口。输出的默认范围是 0 到 360 度。AS5600 可以通过编程零角度(开始位置)和最大角度(停止位置)来应用于较小的范围。AS5600 还配备了智能低功耗模式功能,可自动降低功耗。
Arduino实验接线示意图
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块
项目实验之十四:通过AS5600读取电机轴的实时原始数据和角度值
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块
项目实验之十四:通过AS5600读取电机轴的实时原始数据和角度值
*/
#include <Wire.h>
#include <SimpleFOC.h>
// 使用SimpleFOC库中的低通滤波器
LowPassFilter as5600_filter(0.01);
#define AS5600_ADDRESS 0x36
#define ANGLE_REG 0x0C
void setup() {
Serial.begin(115200);
Wire.begin(); // 初始化I2C
Serial.println("完成初始化I2C,准备就绪!");
}
void loop() {
uint16_t rawAngle = readAS5600Angle();
float angle = (rawAngle * 360.0) / 4096.0;
Serial.print("原始输出: ");
Serial.print(rawAngle);
Serial.print(" - 角度: ");
Serial.println(angle);
delay(500);
}
uint16_t readAS5600Angle() {
Wire.beginTransmission(AS5600_ADDRESS);
Wire.write(ANGLE_REG);
Wire.endTransmission();
Wire.requestFrom(AS5600_ADDRESS, 2);
uint16_t angle = Wire.read() << 8 | Wire.read();
return angle;
}
实验串口返回情况
实验串口绘图器返回情况
代码的整体要点:
1、库文件导入:
#include <Wire.h>:用于I2C通信。
#include <SimpleFOC.h>:用于低通滤波。
2、定义和初始化:
LowPassFilter as5600_filter(0.01);:创建一个低通滤波器实例,用于平滑角度数据。
#define AS5600_ADDRESS 0x36:定义AS5600的I2C地址。
#define ANGLE_REG 0x0C:定义角度数据寄存器的地址。
3、设置函数:
void setup():初始化串口通信(波特率115200)和I2C通信,并打印初始化完成的消息。
4、主循环:
void loop():在主循环中,读取AS5600的原始角度数据,将其转换为角度值,并通过串口打印出来。每次循环后延迟500毫秒。
5、读取角度数据的函数:
uint16_t readAS5600Angle():这个函数负责从AS5600读取角度数据。具体步骤包括开始I2C通信、写入寄存器地址、请求数据、读取数据并返回。
这个代码的主要功能是通过I2C接口从AS5600读取原始角度数据,并将其转换为0°到360°之间的角度值,然后通过串口监视器输出。这样可以实时监控AS5600的角度数据。