1756浏览
楼主: 驴友花雕

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

[复制链接]

驴友花雕  中级技神
 楼主|

发表于 2024-8-22 15:50:59

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

在42步进电机底部,用胶水黏住一个径向磁铁

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-22 15:53:40

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

效果是这样的

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-22 15:56:18

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

可以开始做实验了

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-22 17:12:17

【花雕学编程】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. #define AS5600_I2C_ADDRESS 0x36
  8. void setup() {
  9.   Serial.begin(9600);
  10.   Wire.begin();
  11.   Serial.println("42步进电机准备就绪!AS5600开始测量角度");
  12. }
  13. void loop() {
  14.   //向AS5600请求2字节的数据
  15.   Wire.beginTransmission(AS5600_I2C_ADDRESS);
  16.   //角度值的注册地址
  17.   Wire.write(0x0E);
  18.   Wire.endTransmission();
  19.   Wire.requestFrom(AS5600_I2C_ADDRESS, 2);
  20.   //从AS5600读取角度值
  21.   int angleValue = (Wire.read() << 8) | Wire.read();
  22.   //将寄存器值转换为度数
  23.   float angle = (float)angleValue * 0.08789;
  24.   //打印角度到串行监视器
  25.   Serial.print("角度=");
  26.   Serial.print(angle);
  27.   Serial.println("度");
  28.   delay(2000);
  29. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-22 17:18:39

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

实验串口返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-22 17:23:26

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

实验场景图

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 07:08:40

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

本帖最后由 驴友花雕 于 2024-8-23 07:13 编辑

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十四:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  项目实验之四:通过循环扫描I2C总线上的设备地址,找到连接的AS5600设备

实验开源代码
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十四:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  4.   项目实验之四:通过循环扫描I2C总线上的设备地址,找到连接的AS5600设备
  5. */
  6. #include <SimpleFOC.h>
  7. #include <Wire.h>
  8. void setup() {
  9.   Serial.begin(115200);
  10.   Wire.begin(); // 初始化I2C
  11.   for (int i = 0; i < 127; i++) {
  12.     Wire.beginTransmission(i);
  13.     if (Wire.endTransmission() == 0) {
  14.       Serial.print("AS5600的IIC设备地址为");
  15.       Serial.print("0x");
  16.       Serial.println(i, HEX);
  17.     }
  18.   }
  19. }
  20. void loop() {}
复制代码





回复

使用道具 举报

驴友花雕  中级技神
 楼主|

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

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

实验串口返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 07:33:53

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

搜索安装SimpleFOC库
  1、打开 https://github.com/
  2、搜索:SimpleFOC
  3、下载:https://github.com/simplefoc/Arduino-FOC-drivers
  4、安装:SimpleFOC库

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 07:39:32

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 07:46:16

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

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

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 08:58:48

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

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

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  4.   项目实验之五:手动旋转步进电机轴,实时读取AS5600原始数据
  5. */
  6. #include <SimpleFOC.h>
  7. #include <Wire.h>
  8. uint16_t readValue = 0;
  9. byte readArray[2];
  10. void setup() {
  11.   Serial.begin(115200);
  12.   Wire.begin(); // 初始化I2C
  13.   // 通知设备即将读取数据
  14.   Wire.beginTransmission(0x36);
  15.   Wire.write(0x0C);
  16.   Wire.endTransmission(false);
  17.   Serial.println("42步进电机准备就绪!手动旋转电机轴,准备读取数据");
  18. }
  19. void loop() {
  20.   // 读取数据的MSB和LSB
  21.   Wire.requestFrom(0x36, (uint8_t)2);
  22.   for (byte i = 0; i < 2; i++) {
  23.     readArray[i] = Wire.read();
  24.   }
  25.   // 根据传感器架构组合LSB和MSB寄存器的使用位
  26.   readValue = readArray[0] * 256 + readArray[1];
  27.   Serial.print("实时读取AS5600原始数据为");
  28.   Serial.println(readValue);
  29.   delay(1000);
  30. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 09:00:54

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

实验串口返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 09:47:23

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

居然通过手动,调到了0位置

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 10:11:18

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

方案之二,主要删掉了setup函数中的begintransmission()等函数。

这个函数主要用于开启传输,但是requestFrom函数本身就会向从机发送数据请求信号。

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  项目实验之六:无begintransmission()函数,简化读取AS5600原始数据

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  4.   项目实验之六:无begintransmission()函数,简化读取AS5600原始数据
  5. */
  6. #include <SimpleFOC.h>
  7. #include <Wire.h>
  8. uint16_t readValue = 0;
  9. byte readArray[2];
  10. void setup() {
  11.   Serial.begin(115200);
  12.   Wire.begin(); // 初始化I2C
  13.   Serial.println("完成初始化I2C,手动旋转电机轴,开始读取数据");
  14. }
  15. void loop() {
  16.   // 读取数据的MSB和LSB
  17.   Wire.requestFrom(0x36, (uint8_t)2);
  18.   for (byte i = 0; i < 2; i++) {
  19.     readArray[i] = Wire.read();
  20.   }
  21.   // 根据传感器架构组合LSB和MSB寄存器的使用位
  22.   readValue = readArray[0] * 256 + readArray[1];
  23.   Serial.print("方案之二读取原始数据=");
  24.   Serial.println(readValue);
  25.   delay(1000);
  26. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 10:14:23

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

实验串口返回情况

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 11:13:05

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

要点解读
1、库的正确使用:确保使用正确的库和函数。Arduino Uno的Wire库不支持传入多个参数来初始化I2C。
2、I2C初始化:使用Wire.begin()初始化I2C总线。
3、数据请求:使用Wire.requestFrom()直接向从机发送数据请求信号。
4、数据读取:使用Wire.read()获取传感器数据。
5、数据处理:将读取的MSB和LSB数据组合成一个16位的值,并通过串口输出,便于调试和验证。


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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 11:15:32

【花雕学编程】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. LowPassFilter as5600_filter(0.01); // 使用SimpleFOC库中的低通滤波器
  9. void setup() {
  10.   Serial.begin(115200);
  11.   Wire.begin(); // 初始化I2C
  12.   Serial.println("完成初始化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 filteredValue = as5600_filter(readValue);
  28.     Serial.print("低通滤波后的数据=");
  29.     Serial.println(filteredValue);
  30.   } else {
  31.     Serial.println("读取数据时出错!");
  32.   }
  33.   delay(1000);
  34. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 11:24:53

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

实验串口返回情况

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

要点解读
避免类重定义:确保自定义类名称与库中的类名称不冲突。
使用库中的类:如果库中已有合适的类,可以直接使用,避免重复定义。
I2C初始化:使用Wire.begin()初始化I2C总线。
数据请求:使用Wire.requestFrom()直接向从机发送数据请求信号。
数据处理:将读取的MSB和LSB数据组合成一个16位的值,并通过低通滤波器进行处理,最后通过串口输出,便于调试和验证。


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 11:27:17

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

本帖最后由 驴友花雕 于 2024-8-23 11:28 编辑

一阶滤波算法的原理
一阶滤波,又叫一阶惯性滤波,或一阶低通滤波。是使用软件编程实现普通硬件RC低通滤波器的功能。

一阶低通滤波的算法公式为:

                         Y(n)=αX(n) + (1-α)Y(n-1)

  式中:α=滤波系数;X(n)=本次采样值;Y(n-1)=上次滤波输出值;Y(n)=本次滤波输出值。

一阶低通滤波法采用本次采样值与上次滤波输出值进行加权,得到有效滤波值,使得输出对输入有反馈作用。

滤波系数越大,则更快达到目标开度,灵敏度越高,但曲线平滑性较差,滤波结果越不稳定;同样的滤波系数越小,则更慢达到目标开度,但曲线更加平滑,且稳定,但灵敏度较低。

因此在实际标定过程中,我们需要根据实际情况,平衡灵敏度和稳定性,来确定最终的滤波系数。
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-8-23 11:50:39

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

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  项目实验之八:使用Baize_FOC代码的示例,确保正确读取AS5600传感器的数据,
  并进行低通滤波处理,是一个用于无刷电机驱动的开源项目

实验开源代码


  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十五:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  4.   项目实验之八:使用Baize_FOC代码的示例,确保正确读取AS5600传感器的数据,
  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.   Serial.println("已完成初始化I2C,Baize_FOC准备就绪");
  15. }
  16. void loop() {
  17.   uint16_t readValue = 0;
  18.   byte readArray[2];
  19.   // 通知设备即将读取数据
  20.   Wire.beginTransmission(0x36);
  21.   Wire.write(0x0C);
  22.   Wire.endTransmission(false);
  23.   // 读取数据的MSB和LSB
  24.   Wire.requestFrom(0x36, (uint8_t)2);
  25.   if (Wire.available() == 2) {
  26.     readArray[0] = Wire.read();
  27.     readArray[1] = Wire.read();
  28.     readValue = (readArray[0] << 8) | readArray[1];
  29.     float filteredValue = as5600_filter(readValue);
  30.     Serial.print("AS5600原始数据=");
  31.     Serial.println(filteredValue);
  32.   } else {
  33.     Serial.println("Error reading data");
  34.   }
  35.   delay(1000);
  36. }
复制代码


回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail