【花雕学编程】Arduino动手做(225)---AS5600磁编码器 磁感应角度测量传感器模块13

在这里插入图片描述

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);

unsigned long lastTime = 0;
float lastAngle = 0;
float rpm = 0;

void setup() {
  Serial.begin(115200);
  Wire.begin(); // 初始化I2C
}

void loop() {
  uint16_t readValue = 0;
  byte readArray[2];

  // 通知设备即将读取数据
  Wire.beginTransmission(0x36);
  Wire.write(0x0C);
  Wire.endTransmission(false);

  // 读取数据的MSB和LSB
  Wire.requestFrom(0x36, (uint8_t)2);
  if (Wire.available() == 2) {
    readArray[0] = Wire.read();
    readArray[1] = Wire.read();
    readValue = (readArray[0] << 8) | readArray[1];
    float angle = (readValue / 4096.0) * 360.0; // 将原始数据转换为度数
    float filteredAngle = as5600_filter(angle);

    // 计算转速
    unsigned long currentTime = millis();
    float deltaTime = (currentTime - lastTime) / 1000.0; // 转换为秒
    float deltaAngle = filteredAngle - lastAngle;
    if (deltaAngle < 0) deltaAngle += 360.0; // 处理角度回绕
    rpm = (deltaAngle / 360.0) / deltaTime * 60.0; // 计算RPM

    // 更新上次的时间和角度
    lastTime = currentTime;
    lastAngle = filteredAngle;

    // 输出到串口监视器
    Serial.println(rpm);
  } else {
    Serial.println("Error reading data");
  }
  delay(20);
}

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

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

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值