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

在这里插入图片描述

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十五:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
核心芯片:AS5600
是一款易于编程的磁性旋转位置传感器,具有高分辨率 12 位模拟或 PWM 输出。这种非接触式系统测量径向磁化同轴磁体的绝对角度。这款 AS5600 专为非接触式电位计应用而设计,其坚固的设计消除了任何均匀的外部杂散磁场的影响。行业标准的I²C接口支持用户对非易失性参数进行简单编程,无需专门的编程器。此外,该器件还实现了在所谓的“3线模式”中轻松进行启动和停止位置编程,无需编程器或数字接口。输出的默认范围是 0 到 360 度。AS5600 可以通过编程零角度(开始位置)和最大角度(停止位置)来应用于较小的范围。AS5600 还配备了智能低功耗模式功能,可自动降低功耗。

在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:AS5600磁编码器 磁感应角度测量传感器 12bit高精度模块
项目实验之二:将AS5600角度传感器集成到电机项目中

实验开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十四:AS5600磁编码器 磁感应角度测量传感器  12bit高精度模块
  项目实验之二:将AS5600角度传感器集成到电机项目中
*/

#include "AS5600.h"
#include "Wire.h"

AS5600 as5600;  //默认情况下使用Wire

//不同变量的声明

int positionZero;
const int buttonPin = 2;  //按钮的引脚号
int buttonState = 0;      //用于读取按钮状态的变量


void setup() {
  //初始化串行端口并设置串行通信的波特率
  Serial.begin(115200);

  Wire.begin();

  //使用内部上拉将按钮初始化为输入
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.println("文件路径信息:");

  Serial.println(__FILE__);
  Serial.println(" ");


  //显示AS5600库的版本
  Serial.print("AS5600库的版本: ");
  Serial.println(AS5600_LIB_VERSION);


  as5600.begin(4);                         //这条线初始化AS5600传感器
  as5600.setDirection(AS5600_CLOCK_WISE);  //确定传感器的旋转方向

  //检查连接
  int b = as5600.isConnected();
  Serial.print("已连接: ");
  Serial.println(b);
  delay(5000);

  //设置零位置
  positionZero = as5600.rawAngle();
}

void loop() {
  //读取按钮状态
  buttonState = digitalRead(buttonPin);
  if (buttonState == LOW) {
    positionZero = as5600.rawAngle();
  }

  //显示相对于零点和定义方向的角度值
  Serial.print("点角值:");
  Serial.print("\t");

  //该代码行从AS5600传感器读取调整后的角度并将其显示在监视器上,
  //这可能有助于跟踪或调试。
  Serial.println(as5600.readAngle());


  //显示零的值
  Serial.print("零->位置的总值");
  //命令serial.print(“\t”);在代码中,Arduino在串行端口上发送一个制表符(由\t表示)
  Serial.print("\t");
  Serial.println(positionZero);


  //使用AS5600传感器测量角位置
  //并以度为单位显示角度值
  conversion_de_angle();

  Serial.println("  ");
  Serial.println("  ");
  delay(3000);
}

conversion_de_angle函数:

void conversion_de_angle() {

  //这行代码允许通过减去参考位置来计算相对角度
  //测量的原始角度,这提供了更显著的角度测量
  //在预定义的参考位置。
  int angleBrut = as5600.rawAngle() - positionZero;  //减去零位置
  if (angleBrut < 0) angleBrut += 4096;  //管理溢出
  float angleBrutEnDegres = angleBrut * 0.088;  //转换为度
  Serial.print("读取角度值为: ");
  Serial.println(angleBrutEnDegres);
}

实验串口返回情况

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

实验场景图

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

驴友花雕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值