Arduino通过I2C驱动MT6701磁编码器并读取角度数据

Arduino通过I2C驱动MT6701磁编码器并读取角度数据


  • 📍相关篇《Arduino通过Wire库读取AS5600编码器数据》
  • ✨测试了使用STM32硬件I2C扫描其地址失败。使用软件I2C可以。

📑MT6701(基于差分霍尔的磁性角度传感器芯片)芯片特性简介

  • 🧨基于霍尔技术,0~360°绝对角度位置检测
    • 🌿3.3V~5.0V工作电压,内置EEPROM(烧写时需要保证VDD>4.5V)
    • 🌿独立输出接口: : I2C, SSI, ABZ,UVW, 模
      拟电压、PWM以及Z轴按压检测
    • 🌿支持最高转速55,000 转/分钟
    • 🌿角度输出的系统延时<5 us
    • 🌿增量ABZ输出支持1~1024脉冲/圈,任意整
      数分辨率客户可编程
    • 🌿增量UVW输出支持1~16对极,任意整数对
      极客户可编程
    • 🌿优异的抗杂散磁场干扰能力。

📙MT6701 IIC接口电路

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

  • 🔖 第八引脚注意是直接接到VCC,而不是使用电阻上拉。(其内部是有上拉电阻到VCC的)

⛳MT6701 I2C 读取角度操作

MT6701做为I2C从机的地址是b’0000110(这一地址可以通过编程改为b’1000110 )。14位绝对角度数据(2的14次方,16384)保存在0x03和0x04寄存器中,请按照如图-20所示的读取0x03和0x04的角度数据。
注意:要先读0x03再读0x04。
在这里插入图片描述

  • 🔖如果不知道MT6701芯片的I2C地址,先对编码器设备进行扫描检测。

📘Arduino I2C扫描程序


#include <Wire.h>void setup()
{// Wire.begin();Serial.begin(115200);while (!Serial);             // Leonardo: wait for serial monitorSerial.println("\nI2C Scanner");//   Wire.setSDA(8);// Wire.setSCL(9);Wire.begin();
}void loop()
{byte error, address;int nDevices;Serial.println("Scanning...");nDevices = 0;for(address = 1; address < 127; address++ ) {// The i2c_scanner uses the return value of// the Write.endTransmisstion to see if// a device did acknowledge to the address.Wire.beginTransmission(address);//从指定的地址开始向I2C从设备进行传输error = Wire.endTransmission();//停止与从机的数据传输/** error返回结果:* 0: 成功
1: 数据量超过传送缓存容纳限制
2: 传送地址时收到 NACK
3: 传送数据时收到 NACK
4: 其它错误*/if (error == 0){Serial.print("I2C device found at address 0x");if (address<16) Serial.print("0");Serial.print(address,HEX);Serial.println("  !");nDevices++;}else if (error==4) {Serial.print("Unknown error at address 0x");if (address<16) Serial.print("0");Serial.println(address,HEX);}    }if (nDevices == 0)Serial.println("No I2C devices found\n");elseSerial.println("done\n");delay(5000);           // wait 5 seconds for next scan
}
  • 🔖检测结果:
    在这里插入图片描述

📗读取原始值

#include <Arduino.h>
#include <Wire.h>const unsigned int RESOLUTION = 800;uint8_t readRegister(uint8_t address) {Wire.beginTransmission(6);Wire.write(address);Wire.endTransmission();Wire.requestFrom(6, 1);return Wire.read();
}void writeRegister(uint8_t address, uint8_t value) {Wire.beginTransmission(6);Wire.write(address);Wire.write(value);Wire.endTransmission();
}uint16_t readAbzRes() {uint16_t reg1 = readRegister(0x30) & 0x3;uint16_t reg2 = readRegister(0x31);return (reg2 | (reg1 << 8)) + 1;
}void programAbzRes(uint16_t resolution) {resolution -= 1;uint8_t reg30backup = readRegister(0x30) & 0xC;uint8_t bottom = resolution & 0xFF;uint8_t up = ((resolution >> 8) & 0x03) | reg30backup;writeRegister(0x30, up);writeRegister(0x31, bottom);writeRegister(0x09, 0xB3);writeRegister(0x0A, 0x05);delay(600);
}void setup() {Serial.begin(115200);Serial.println("Start");Wire.begin();//328PB A4:SDA   A5:SCLSerial.print("ABZ reg1: ");Serial.println(readRegister(0x30), HEX);Serial.print("ABZ reg2: ");Serial.println(readRegister(0x31), HEX);if (readAbzRes() != RESOLUTION) {programAbzRes(RESOLUTION);Serial.println("Finished, power cycle");while (true);}
}void loop() {uint16_t reg1 = readRegister(3);uint16_t reg2 = readRegister(4);uint16_t pos = reg2 >> 2 | reg1 << 6;Serial.print("Pos: ");Serial.print(pos);Serial.print("\t");float Angle = float(pos/16384.00)*360;//*360;//换算角度Serial.print("Angle: ");Serial.println(Angle, 2);delay(200);
}
  • 🔖测试打印数据:
    在这里插入图片描述

📒使用MT6701库I2C读取

  • 🌿依赖库:MT6701-arduino
    在这里插入图片描述
#include <Wire.h>
#include "MT6701.h"MT6701 encoder;void setup() {Serial.begin(115200);Wire.begin();//328p I2C: SDA:A4  ;SCL:A5encoder.initializeI2C();
}void loop() {float angle = encoder.angleRead();Serial.println(angle);delay(100);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF中DataGrid主从数据(父子数据)展示

在wpf中可以使用DataGrid控件,进行主从数据展示,也称父子数据展示。下面展示纯原生控件编码实现功能(样式自己可以根据需求进行修改)。 效果如下: 点击图标,展开和收缩可以自由的切换,也可以自己重新写一个样式,比如+,-或者类似图标的样式,都是可以的。 1.首先创建一…

spispispi

SPI C.. & C.. logic是SPI的控制逻辑&#xff0c;芯片内部进行地址锁存、数据读写等操作&#xff0c;都是由控制逻辑自动完成。控制逻辑的左边是SPI的通信引脚&#xff0c;这些引脚和主控芯片相连&#xff0c;主控芯片通过SPI协议&#xff0c;把指令和数据发送给控制逻辑&a…

多线程传参以及线程的优缺点

进程是资源分配的基本单位 线程是调度的基本单位 笼统来说&#xff0c;线程有以下优点&#xff1a; 创建一个新线程的代价要比创建一个新进程小得多 与进程之间的切换相比&#xff0c;线程之间的切换需要操作系统做的工作要少很多 线程占用的资源要比进程少很多 能充分利用多…

leetcode1448.统计二叉树中的好节点数目

1. 题目描述 题目链接 2. 解题思路 首先看一下题目的“核心”&#xff0c;什么是好节点&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。也就是说&#xff0c;我们只要知道了从根节点到该节点的所有的值&#xff0c;就可以判断该节点是…

Blender3.0 下载地址及安装教程

Blender是一款开源的3D计算机图形软件&#xff0c;广泛应用于动画制作、游戏开发、建模、渲染等领域。它提供了一套强大的工具和功能&#xff0c;让用户能够进行三维建模、动画制作和视觉效果的创作。 Blender支持多种文件格式的导入和导出&#xff0c;使用户能够与其他软件进…

《AI编程类工具之二——ModelArts》

一.简介 ModelArts是华为云推出的面向AI开发者的一站式开发平台。它旨在为用户提供从数据处理、算法开发、模型训练到模型部署的全流程解决方案。 二.功能介绍 自动化超参调整和模型评估&#xff1a;ModelArts提供了自动化的超参调整功能&#xff0c;能够根据设定的参数范围…

中国建筑模板出口供应商

随着"一带一路"倡议的深入推进,中国基建企业"走出去"的步伐正在加快。与之相应,建筑模板产品作为工程建设的重要材料,其国际化供应也愈发受到重视。在众多建筑模板生产企业中,贵港市能强优品木业有限公司以其卓越的产品质量和丰富的出口经验,成为了国内知名…

MongoDB分片部署(windows)

OS&#xff1a;win10 MongoDB&#xff1a;4.4.24 分片架构 从图中可以看出&#xff0c;分片集群中主要由三个部分组成&#xff0c;即分片服务器&#xff08; Shard &#xff09;、路由服务器 &#xff08; Mongos &#xff09;以及配置服务器&#xff08; Config Server &am…

Vision GNN: An Image is Worth Graph of Nodes

感受野&#xff1a;在卷积神经网络中,感受野(Receptive Field)是指特征图上的某个点能看到的输入图像的区域,即特征图上的点是由输入图像中感受野大小区域的计算得到的。 感受野并非越大越好&#xff0c;反而可能因为过大而过于发散梯度下降&#xff08;Gradient Descent GD&am…

C#面:介绍 Hashtable 和 Dictionary的区别

Hashtable 和 Dictionary 都是 C# 中用于存储键值对的数据结构&#xff0c; 它们之间的区别如下&#xff1a; 1. 实现方式&#xff1a; Hashtable 是基于哈希表实现的&#xff0c;而 Dictionary 是基于泛型实现的。 2. 类型安全&#xff1a; Hashtable 是非泛型的&#xf…

简介:Asp.Net Core进阶高级编程教程

课程简介目录 &#x1f680;前言一、课程背景二、课程目的三、课程特点四、课程适合人员六、最后 &#x1f680;前言 本文是《.Net Core进阶编程课程》教程专栏的导航站&#xff08;点击链接&#xff0c;跳转到专栏主页&#xff0c;欢迎订阅&#xff0c;持续更新…&#xff09…

设计模式(020)行为型之备忘录模式

备忘录模式是一种行为型设计模式&#xff0c;用于在不破坏封装性的前提下捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便之后可以将该对象恢复到之前的状态。这种模式通常用于需要记录对象状态历史、撤销操作或实现“回到过去”功能的场景。 在…

突破编程_前端_SVG(使用 svg-pan-zoom 库进行平移与缩放)

1 svg-pan-zoom 概述 svg-pan-zoom 是一个轻量级、高性能且易于使用的 JavaScript 库&#xff0c;专为增强 SVG 图像的浏览体验而设计。它提供了平移和缩放功能&#xff0c;使用户能够无缝探索大型或复杂的 SVG 图形。这个库允许用户对SVG图像进行交互操作&#xff0c;包括缩放…

企业数据模型应用:数字化转型的关键引擎

一、引言 在数字化浪潮席卷全球的今天&#xff0c;数据已经成为企业运营、决策和创新的核心要素。企业数据模型作为数据管理的核心工具&#xff0c;正逐渐成为企业数字化转型的重要引擎。本文将深入探讨企业数据模型的基本概念、应用场景、挑战与对策&#xff0c;以及其在数字…

NL2SQL基础系列(1):业界顶尖排行榜、权威测评数据集及LLM大模型(Spider vs BIRD)全面对比优劣分析[Text2SQL、Text2DSL]

NL2SQL基础系列(1)&#xff1a;业界顶尖排行榜、权威测评数据集及LLM大模型&#xff08;Spider vs BIRD&#xff09;全面对比优劣分析[Text2SQL、Text2DSL] Text-to-SQL&#xff08;或者Text2SQL&#xff09;&#xff0c;顾名思义就是把文本转化为SQL语言&#xff0c;更学术一…

数据结构——双向循环链表

目录 前言 一、链表的分类 二、双向循环链表 2.1 开辟新的节点 2.2 链表初始化 2.3 打印链表 2.4 链表的尾插 2.5 链表的头插 2.6 链表的尾删 2.7 链表的头删 2.8 查找链表 2.9 在pos位置之后插入数据 2.10 删除pos位置的数据 三、完整代码实现 四、顺序表和双向…

[lesson37]智能指针分析

智能指针分析 永恒的话题 内存泄漏(臭名昭著的bug) 动态申请堆空间&#xff0c;用完后不归还C语言中没有垃圾回收的机制指针无法控制所指堆空间的生命周期 深度的思考 我们需要什么&#xff1f; 需要一个特殊的指针指针生命周期结束时主动释放堆空间一片堆空间最多只能由一…

Qt——【若按钮点击后无反应,UI界面中已经勾选Checkable属性, 并且调用了按钮的setchecked(false), 但是页面就是不切换状态

几经排查&#xff0c;发现是按钮组的Exclusive属性造成的。Exclusive属性执行后&#xff0c; 当有一个选中&#xff0c;并且没有选择其它按钮时&#xff0c;此按钮一直为选中状态。即使执行了按钮的setchecked&#xff08;false&#xff09;。 如果QAbstractButton属于独占组&a…

【C/C++笔试练习】read函数、虚拟存储、用户态、线程特点、缺页处理、调度算法、进程优先级、锁的使用、创建进程、不用加减乘除做加法、三角形

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;read函数&#xff08;2&#xff09;虚拟存储&#xff08;3&#xff09;用户态&#xff08;4&#xff09;线程特点&#xff08;5&#xff09;缺页处理&#xff08;6&#xff09;调度算法&#xff08;7&#xff09;进程优先…

IP地址和目标端口简介

IP地址和目标端口都是网络通信中重要的概念&#xff0c;它们共同作用来确保数据能够正确地传输到目标设备。 IP地址&#xff08;Internet Protocol Address&#xff09;是互联网上每个设备的唯一标识符。它由四个数字组成&#xff0c;每个数字之间用点&#xff08;.&#xff0…