1757浏览
楼主: 驴友花雕

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

[复制链接]

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 11:52:57

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

实验串口返回情况

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

要点解读
I2C初始化:使用Wire.begin()初始化I2C总线。
数据请求:使用Wire.requestFrom()直接向从机发送数据请求信号。
数据读取:使用Wire.read()获取传感器数据。
数据处理:将读取的MSB和LSB数据组合成一个16位的值,并通过低通滤波器进行处理。
串口输出:将处理后的数据通过串口输出,便于调试和验证。


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 12:11:26

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

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  项目实验之九:使用SimpleFOC库中的低通滤波器,通过串口绘图监视器
  查看手动电机轴形成的数据波形

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  4.   项目实验之九:使用SimpleFOC库中的低通滤波器,通过串口绘图监视器
  5.   查看手动电机轴形成的数据波形
  6. */
  7. #include <Wire.h>
  8. #include <SimpleFOC.h>
  9. // 使用SimpleFOC库中的低通滤波器
  10. LowPassFilter as5600_filter(0.01);
  11. void setup() {
  12.   Serial.begin(115200);
  13.   Wire.begin(); // 初始化I2C
  14. }
  15. void loop() {
  16.   uint16_t readValue = 0;
  17.   byte readArray[2];
  18.   // 通知设备即将读取数据
  19.   Wire.beginTransmission(0x36);
  20.   Wire.write(0x0C);
  21.   Wire.endTransmission(false);
  22.   // 读取数据的MSB和LSB
  23.   Wire.requestFrom(0x36, (uint8_t)2);
  24.   if (Wire.available() == 2) {
  25.     readArray[0] = Wire.read();
  26.     readArray[1] = Wire.read();
  27.     readValue = (readArray[0] << 8) | readArray[1];
  28.     float filteredValue = as5600_filter(readValue);
  29.     Serial.println(filteredValue); // 输出到串口监视器
  30.   } else {
  31.     Serial.println("Error reading data");
  32.   }
  33.   delay(100);
  34. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 12:13:07

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

实验串口返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 12:15:59

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

要点解读I2C初始化:使用Wire.begin()初始化I2C总线。数据请求:使用Wire.requestFrom()直接向从机发送数据请求信号。数据读取:使用Wire.read()获取传感器数据。数据处理:将读取的MSB和LSB数据组合成一个16位的值,并通过低通滤波器进行处理。串口输出:将处理后的数据通过串口输出,便于在串口绘图监视器中查看。
使用串口绘图监视器打开Arduino IDE。选择工具菜单中的“串口监视器”。在串口监视器窗口中,选择右下角的“绘图”模式。你将看到传感器数据的实时图形显示。

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

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 13:23:49

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

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  项目实验之十:将原始数据转换为度数并在串口绘图监视器中显示

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  4.   项目实验之十:将原始数据转换为度数并在串口绘图监视器中显示
  5. */
  6. #include <Wire.h>
  7. #include <SimpleFOC.h>
  8. // 使用SimpleFOC库中的低通滤波器
  9. LowPassFilter as5600_filter(0.01);
  10. void setup() {
  11.   Serial.begin(115200);
  12.   Wire.begin(); // 初始化I2C
  13. }
  14. void loop() {
  15.   uint16_t readValue = 0;
  16.   byte readArray[2];
  17.   // 通知设备即将读取数据
  18.   Wire.beginTransmission(0x36);
  19.   Wire.write(0x0C);
  20.   Wire.endTransmission(false);
  21.   // 读取数据的MSB和LSB
  22.   Wire.requestFrom(0x36, (uint8_t)2);
  23.   if (Wire.available() == 2) {
  24.     readArray[0] = Wire.read();
  25.     readArray[1] = Wire.read();
  26.     readValue = (readArray[0] << 8) | readArray[1];
  27.     float angle = (readValue / 4096.0) * 360.0; // 将原始数据转换为度数
  28.     float filteredAngle = as5600_filter(angle);
  29.     Serial.println(filteredAngle); // 输出到串口监视器
  30.   } else {
  31.     Serial.println("Error reading data");
  32.   }
  33.   delay(10);
  34. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 13:26:33

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

实验串口返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 13:33:38

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

要将AS5600传感器的原始数据转换为度数,可以使用以下公式:

角度(度)=(原始数据 / 4096​)×360

AS5600传感器的输出范围是0到4095,对应0到360度。

要点解读
1、数据转换:将原始数据除以4096,再乘以360,得到角度值。
2、低通滤波:对转换后的角度值进行低通滤波处理。
3、串口输出:将处理后的角度值通过串口输出,便于在串口绘图监视器中查看。

使用串口绘图监视器
1、打开Arduino IDE。
2、选择工具菜单中的“串口监视器”。
3、在串口监视器窗口中,选择右下角的“绘图”模式。
4、你将看到传感器数据的实时图形显示。

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

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 13:49:39

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

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  项目实验之十一:动态测试步进电机旋转时角度变化的波形,并在串口绘图监视器中显示

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  4.   项目实验之十一:动态测试步进电机旋转时角度变化的波形,并在串口绘图监视器中显示
  5. */
  6. #include <Wire.h>
  7. #include <SimpleFOC.h>
  8. // 使用SimpleFOC库中的低通滤波器
  9. LowPassFilter as5600_filter(0.01);
  10. void setup() {
  11.   Serial.begin(115200);
  12.   Wire.begin(); // 初始化I2C
  13. }
  14. void loop() {
  15.   uint16_t readValue = 0;
  16.   byte readArray[2];
  17.   // 通知设备即将读取数据
  18.   Wire.beginTransmission(0x36);
  19.   Wire.write(0x0C);
  20.   Wire.endTransmission(false);
  21.   // 读取数据的MSB和LSB
  22.   Wire.requestFrom(0x36, (uint8_t)2);
  23.   if (Wire.available() == 2) {
  24.     readArray[0] = Wire.read();
  25.     readArray[1] = Wire.read();
  26.     readValue = (readArray[0] << 8) | readArray[1];
  27.     float angle = (readValue / 4096.0) * 360.0; // 将原始数据转换为度数
  28.     float filteredAngle = as5600_filter(angle);
  29.     Serial.println(filteredAngle); // 输出到串口监视器
  30.   } else {
  31.     Serial.println("Error reading data");
  32.   }
  33.   delay(20);
  34. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 13:53:41

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

要点解读
I2C初始化:使用Wire.begin()初始化I2C总线。
数据请求:使用Wire.requestFrom()直接向从机发送数据请求信号。
数据读取:使用Wire.read()获取传感器数据。
数据转换:将原始数据除以4096,再乘以360,得到角度值。
低通滤波:对转换后的角度值进行低通滤波处理。
串口输出:将处理后的角度值通过串口输出,便于在串口绘图监视器中查看。

使用串口绘图监视器
打开Arduino IDE。
选择工具菜单中的“串口监视器”。
在串口监视器窗口中,选择右下角的“绘图”模式。
你将看到传感器数据的实时图形显示。

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 13:55:34

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

实验场景图  

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 14:46:59

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

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  项目实验之十二:使用AS5600传感器读取角度数据,并计算步进电机的实时转速

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  4.   项目实验之十二:使用AS5600传感器读取角度数据,并计算步进电机的实时转速
  5. */
  6. #include <Wire.h>
  7. #include <SimpleFOC.h>
  8. // 使用SimpleFOC库中的低通滤波器
  9. LowPassFilter as5600_filter(0.01);
  10. unsigned long lastTime = 0;
  11. float lastAngle = 0;
  12. float rpm = 0;
  13. void setup() {
  14.   Serial.begin(115200);
  15.   Wire.begin(); // 初始化I2C
  16. }
  17. void loop() {
  18.   uint16_t readValue = 0;
  19.   byte readArray[2];
  20.   // 通知设备即将读取数据
  21.   Wire.beginTransmission(0x36);
  22.   Wire.write(0x0C);
  23.   Wire.endTransmission(false);
  24.   // 读取数据的MSB和LSB
  25.   Wire.requestFrom(0x36, (uint8_t)2);
  26.   if (Wire.available() == 2) {
  27.     readArray[0] = Wire.read();
  28.     readArray[1] = Wire.read();
  29.     readValue = (readArray[0] << 8) | readArray[1];
  30.     float angle = (readValue / 4096.0) * 360.0; // 将原始数据转换为度数
  31.     float filteredAngle = as5600_filter(angle);
  32.     // 计算转速
  33.     unsigned long currentTime = millis();
  34.     float deltaTime = (currentTime - lastTime) / 1000.0; // 转换为秒
  35.     float deltaAngle = filteredAngle - lastAngle;
  36.     if (deltaAngle < 0) deltaAngle += 360.0; // 处理角度回绕
  37.     rpm = (deltaAngle / 360.0) / deltaTime * 60.0; // 计算RPM
  38.     // 更新上次的时间和角度
  39.     lastTime = currentTime;
  40.     lastAngle = filteredAngle;
  41.     // 输出到串口监视器
  42.     Serial.println(rpm);
  43.   } else {
  44.     Serial.println("Error reading data");
  45.   }
  46.   delay(20);
  47. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 14:49:29

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

要测量步进电机的实时转速,可以通过计算单位时间内的步数来实现。以上是一个示例代码,使用AS5600传感器读取角度数据,并计算步进电机的实时转速。这个代码会将实时转速显示在Arduino IDE的串口绘图监视器中。

要点解读
数据转换:将原始数据除以4096,再乘以360,得到角度值。
低通滤波:对转换后的角度值进行低通滤波处理。
转速计算:通过计算单位时间内的角度变化量来计算转速(RPM)。
串口输出:将实时转速通过串口输出,便于在串口绘图监视器中查看。

使用串口绘图监视器
打开Arduino IDE。
选择工具菜单中的“串口监视器”。
在串口监视器窗口中,选择右下角的“绘图”模式。
你将看到实时转速的图形显示。

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 14:50:46

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 15:12:06

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

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  项目实验之十三:测量步进电机的实时位置并在Arduino IDE的串口绘图监视器中显示

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  4.   项目实验之十三:测量步进电机的实时位置并在Arduino IDE的串口绘图监视器中显示
  5. */
  6. #include <Wire.h>
  7. #include <SimpleFOC.h>
  8. // 使用SimpleFOC库中的低通滤波器
  9. LowPassFilter as5600_filter(0.01);
  10. void setup() {
  11.   Serial.begin(115200);
  12.   Wire.begin(); // 初始化I2C
  13. }
  14. void loop() {
  15.   uint16_t readValue = 0;
  16.   byte readArray[2];
  17.   // 通知设备即将读取数据
  18.   Wire.beginTransmission(0x36);
  19.   Wire.write(0x0C);
  20.   Wire.endTransmission(false);
  21.   // 读取数据的MSB和LSB
  22.   Wire.requestFrom(0x36, (uint8_t)2);
  23.   if (Wire.available() == 2) {
  24.     readArray[0] = Wire.read();
  25.     readArray[1] = Wire.read();
  26.     readValue = (readArray[0] << 8) | readArray[1];
  27.     float angle = (readValue / 4096.0) * 360.0; // 将原始数据转换为度数
  28.     float filteredAngle = as5600_filter(angle);
  29.     Serial.println(filteredAngle); // 输出到串口监视器
  30.   } else {
  31.     Serial.println("Error reading data");
  32.   }
  33.   delay(50);
  34. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 15:13:52

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

实验串口返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 15:16:41

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

为了测量步进电机的实时位置并在Arduino IDE的串口绘图监视器中显示,可以使用AS5600传感器读取角度数据,并将其转换为度数。

要点解读
1、I2C初始化:使用Wire.begin()初始化I2C总线。
2、数据请求:使用Wire.requestFrom()直接向从机发送数据请求信号。
3、数据读取:使用Wire.read()获取传感器数据。
4、数据转换:将原始数据除以4096,再乘以360,得到角度值。
5、低通滤波:对转换后的角度值进行低通滤波处理。
6、串口输出:将处理后的角度值通过串口输出,便于在串口绘图监视器中查看。

使用串口绘图监视器
1、打开Arduino IDE。
2、选择工具菜单中的“串口监视器”。
3、在串口监视器窗口中,选择右下角的“绘图”模式。
4、你将看到传感器数据的实时图形显示。

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 15:18:24

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-24 08:33:40

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

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  项目实验之十四:通过AS5600读取电机轴的实时原始数据和角度值

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  4.   项目实验之十四:通过AS5600读取电机轴的实时原始数据和角度值
  5. */
  6. #include <Wire.h>
  7. #include <SimpleFOC.h>
  8. // 使用SimpleFOC库中的低通滤波器
  9. LowPassFilter as5600_filter(0.01);
  10. #define AS5600_ADDRESS 0x36
  11. #define ANGLE_REG 0x0C
  12. void setup() {
  13.   Serial.begin(115200);
  14.   Wire.begin(); // 初始化I2C
  15.   Serial.println("完成初始化I2C,准备就绪!");
  16. }
  17. void loop() {
  18.   uint16_t rawAngle = readAS5600Angle();
  19.   float angle = (rawAngle * 360.0) / 4096.0;
  20.   Serial.print("原始输出: ");
  21.   Serial.print(rawAngle);
  22.   Serial.print(" - 角度: ");
  23.   Serial.println(angle);
  24.   delay(500);
  25. }
  26. uint16_t readAS5600Angle() {
  27.   Wire.beginTransmission(AS5600_ADDRESS);
  28.   Wire.write(ANGLE_REG);
  29.   Wire.endTransmission();
  30.   Wire.requestFrom(AS5600_ADDRESS, 2);
  31.   uint16_t angle = Wire.read() << 8 | Wire.read();
  32.   return angle;
  33. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-24 08:40:42

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

实验串口返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-24 08:42:21

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

实验串口绘图器返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-24 08:45:07

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

代码的整体要点:
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的角度数据。

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

回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail