1758浏览
楼主: 驴友花雕

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

[复制链接]

驴友花雕  中级技神
 楼主|

发表于 2024-8-24 09:07:14

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

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

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  4.   项目实验之十五:转动42步进电机主轴从AS5600读取实时位置和速度值
  5. */
  6. #include <Wire.h>
  7. #include <AS5600.h>
  8. #include <SimpleFOC.h>
  9. // 使用SimpleFOC库中的低通滤波器
  10. LowPassFilter as5600_filter(0.01);
  11. #define AS5600_ADDRESS 0x36
  12. #define ANGLE_REG 0x0C
  13. AS5600 encoder;
  14. void setup() {
  15.   Serial.begin(115200);
  16.   Wire.begin(); // 初始化I2C
  17.   Serial.println("完成初始化I2C,准备就绪!");
  18. }
  19. void loop() {
  20.   // 读取位置
  21.   uint16_t position = encoder.getCumulativePosition();
  22.   float angle = fmod(position * 0.08789, 360.0);// 将位置值转换为角度(0.08789度/LSB)
  23.   // 计算速度
  24.   static float last_angle = 0;
  25.   static unsigned long last_time = 0;
  26.   unsigned long current_time = millis();
  27.   float delta_time = (current_time - last_time) / 1000.0; // 转换为秒
  28.   float speed = (angle - last_angle) / delta_time; // 角速度,单位为度/秒
  29.   // 打印位置和速度
  30.   Serial.print("角度= ");
  31.   Serial.print(angle);
  32.   Serial.print(" 度, 速度= ");
  33.   Serial.print(speed);
  34.   Serial.println(" 度/秒");
  35.   // 更新上一次的角度和时间
  36.   last_angle = angle;
  37.   last_time = current_time;
  38.   delay(500); // 延迟500毫秒
  39. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-24 09:09:55

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

实验串口返回情况

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

实验串口绘图器返回情况

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



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-24 09:11:17

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-24 10:23:47

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

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

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  4.   项目实验之十六:转动电机轴,从AS5600读取原始数据,并计算角度、速度和位置
  5. */
  6. #include <Wire.h>
  7. #include <AS5600.h>
  8. #include <SimpleFOC.h>
  9. // 使用SimpleFOC库中的低通滤波器
  10. LowPassFilter as5600_filter(0.01);
  11. #define AS5600_ADDRESS 0x36
  12. #define ANGLE_REG 0x0C
  13. AS5600 encoder;
  14. void setup() {
  15.   Serial.begin(115200);
  16.   Wire.begin(); // 初始化I2C
  17.   Serial.println("完成初始化I2C,准备就绪!");
  18. }
  19. void loop() {
  20.   // 读取原始位置
  21.   uint16_t rawPosition = readAS5600Angle();
  22.   float angle = (rawPosition * 360.0) / 4096.0; // 将原始数据转换为角度
  23.   // 计算速度
  24.   static float last_angle = 0;
  25.   static unsigned long last_time = 0;
  26.   unsigned long current_time = millis();
  27.   float delta_time = (current_time - last_time) / 1000.0; // 转换为秒
  28.   float speed = (angle - last_angle) / delta_time; // 角速度,单位为度/秒
  29.   // 打印原始位置、角度和速度
  30.   Serial.print("原始位置: ");
  31.   Serial.print(rawPosition);
  32.   Serial.print(" - 角度: ");
  33.   Serial.print(angle);
  34.   Serial.print(" 度, 速度: ");
  35.   Serial.print(speed);
  36.   Serial.println(" 度/秒");
  37.   // 更新上一次的角度和时间
  38.   last_angle = angle;
  39.   last_time = current_time;
  40.   delay(500); // 延迟500毫秒
  41. }
  42. uint16_t readAS5600Angle() {
  43.   Wire.beginTransmission(AS5600_ADDRESS);
  44.   Wire.write(ANGLE_REG);
  45.   Wire.endTransmission();
  46.   Wire.requestFrom(AS5600_ADDRESS, 2);
  47.   uint16_t angle = Wire.read() << 8 | Wire.read();
  48.   return angle;
  49. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-24 10:27:56

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

实验串口返回情况

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

实验串口绘图器返回情况

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-24 10:30:49

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

实验串口绘图器返回情况

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-24 10:32:12

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

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

实验串口绘图器返回情况

【花雕学编程】Arduino动手做(225)---AS5600磁编码传感器图2
【花雕学编程】Arduino动手做(225)---AS5600磁编码传感器图1
代码要点:
  • 初始化和设置:

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

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



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-24 10:34:52

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

实验场景图

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

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

使用道具 举报

1234
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail