驴友花雕 发表于 2024-8-24 09:07:14

【花雕学编程】Arduino动手做(225)---AS5600磁编码传感器

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器12bit高精度模块
项目实验之十五:转动42步进电机主轴从AS5600读取实时位置和速度值

实验开源代码

/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器12bit高精度模块
项目实验之十五:转动42步进电机主轴从AS5600读取实时位置和速度值
*/

#include <Wire.h>
#include <AS5600.h>
#include <SimpleFOC.h>

// 使用SimpleFOC库中的低通滤波器
LowPassFilter as5600_filter(0.01);
#define AS5600_ADDRESS 0x36
#define ANGLE_REG 0x0C

AS5600 encoder;

void setup() {
Serial.begin(115200);
Wire.begin(); // 初始化I2C
Serial.println("完成初始化I2C,准备就绪!");
}

void loop() {
// 读取位置
uint16_t position = encoder.getCumulativePosition();
float angle = fmod(position * 0.08789, 360.0);// 将位置值转换为角度(0.08789度/LSB)

// 计算速度
static float last_angle = 0;
static unsigned long last_time = 0;
unsigned long current_time = millis();
float delta_time = (current_time - last_time) / 1000.0; // 转换为秒
float speed = (angle - last_angle) / delta_time; // 角速度,单位为度/秒

// 打印位置和速度
Serial.print("角度= ");
Serial.print(angle);
Serial.print(" 度, 速度= ");
Serial.print(speed);
Serial.println(" 度/秒");

// 更新上一次的角度和时间
last_angle = angle;
last_time = current_time;

delay(500); // 延迟500毫秒
}

驴友花雕 发表于 2024-8-24 09:09:55

【花雕学编程】Arduino动手做(225)---AS5600磁编码传感器

实验串口返回情况



实验串口绘图器返回情况





驴友花雕 发表于 2024-8-24 09:11:17

【花雕学编程】Arduino动手做(225)---AS5600磁编码传感器




驴友花雕 发表于 2024-8-24 10:23:47

【花雕学编程】Arduino动手做(225)---AS5600磁编码传感器

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器12bit高精度模块
项目实验之十六:转动电机轴,从AS5600读取原始数据,并计算角度、速度和位置

实验开源代码

/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器12bit高精度模块
项目实验之十六:转动电机轴,从AS5600读取原始数据,并计算角度、速度和位置
*/

#include <Wire.h>
#include <AS5600.h>
#include <SimpleFOC.h>

// 使用SimpleFOC库中的低通滤波器
LowPassFilter as5600_filter(0.01);
#define AS5600_ADDRESS 0x36
#define ANGLE_REG 0x0C

AS5600 encoder;

void setup() {
Serial.begin(115200);
Wire.begin(); // 初始化I2C
Serial.println("完成初始化I2C,准备就绪!");
}

void loop() {
// 读取原始位置
uint16_t rawPosition = readAS5600Angle();
float angle = (rawPosition * 360.0) / 4096.0; // 将原始数据转换为角度

// 计算速度
static float last_angle = 0;
static unsigned long last_time = 0;
unsigned long current_time = millis();
float delta_time = (current_time - last_time) / 1000.0; // 转换为秒
float speed = (angle - last_angle) / delta_time; // 角速度,单位为度/秒

// 打印原始位置、角度和速度
Serial.print("原始位置: ");
Serial.print(rawPosition);
Serial.print(" - 角度: ");
Serial.print(angle);
Serial.print(" 度, 速度: ");
Serial.print(speed);
Serial.println(" 度/秒");

// 更新上一次的角度和时间
last_angle = angle;
last_time = current_time;

delay(500); // 延迟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;
}


驴友花雕 发表于 2024-8-24 10:27:56

【花雕学编程】Arduino动手做(225)---AS5600磁编码传感器

实验串口返回情况



实验串口绘图器返回情况



驴友花雕 发表于 2024-8-24 10:30:49

【花雕学编程】Arduino动手做(225)---AS5600磁编码传感器

实验串口绘图器返回情况




驴友花雕 发表于 2024-8-24 10:32:12

【花雕学编程】Arduino动手做(225)---AS5600磁编码传感器

本帖最后由 驴友花雕 于 2024-8-24 10:39 编辑

实验串口绘图器返回情况



代码要点:
[*]初始化和设置:

[*]包含必要的库文件。
[*]定义AS5600的I2C地址和角度寄存器地址。
[*]初始化串口通信和I2C通信。
[*]主循环:

[*]读取AS5600的原始位置数据。
[*]将原始数据转换为角度值。
[*]计算角速度(度/秒)。
[*]打印原始位置、角度和速度。
[*]更新上一次的角度和时间。
[*]读取角度数据的函数:从AS5600读取两个字节的角度数据,并将其合并为一个16位的原始角度数据。


驴友花雕 发表于 2024-8-24 10:34:52

【花雕学编程】Arduino动手做(225)---AS5600磁编码传感器

实验场景图




页: 1 2 3 [4]
查看完整版本: 【花雕学编程】Arduino动手做(225)---AS5600磁编码传感器