STM32 软件I2C方式读取MT6701磁编码器获取角度例程

STM32 软件I2C方式读取MT6701磁编码器获取角度例程


  • 📍相关篇《STM32 软件I2C方式读取AS5600磁编码器获取角度例程》
  • 🌿《Arduino通过I2C驱动MT6701磁编码器并读取角度数据》
  • 🔰MT6701芯片和AS5600从软件读取对比,只是读取的寄存器和访问的设备地址不同而已,所以稍作修改即可实现通用一个驱动模板。

📙MT6701 IIC接口电路

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

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

⛳MT6701 I2C 读取角度操作

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

⛳注意事项

  • ✨在MT6701芯片和径向磁铁一定要保持稳定的空间距离,一旦空间距离有较大的变化,在读取MT6701芯片寄存器数据就可能出现最大值情况。在检测时,芯片和径向磁铁轴向和径向都需要相对稳定。
    在这里插入图片描述
  • ⚡在采用硬件I2C时,注意速率最好选择400KHz,在测试过程中,速率设置100KHz,反而扫描不到设备地址。

📗读取代码实现部分

//函数:u8 MT6701_ReadOneByte(u8 ReadAddr)
//功能:从MT6701模块读取一个字节的数据
//参数:ReadAddr    要读取的地址
//返回:读取到的数据
static u8 MT6701_ReadOneByte(u8 ReadAddr)
{                  u8 temp=0;                                                                                   IIC_Start();  IIC_Send_Byte((0x06<<1)|0x00);       //IIC_Wait_Ack(); IIC_Send_Byte(ReadAddr);   //IIC_Wait_Ack();        IIC_Start();              IIC_Send_Byte((0x06<<1)|0x01);           //           IIC_Wait_Ack();     temp=IIC_Read_Byte(0);           IIC_Stop();//       return temp;
}
//读2个字节数据,获取原始角度
u16 MT6701_ReadTwoByte(u8 higher,u8 lower)
{u16 TwoByte_Data = 0;u16 hi_Data = 0,lo_Data = 0;//Read the first byte (higher address)hi_Data = MT6701_ReadOneByte(higher);//Read the second byte (lower address)lo_Data = MT6701_ReadOneByte(lower);//Combine the two bytes into a single 16-bit valueTwoByte_Data  = (uint16_t)(lo_Data>> 2);TwoByte_Data |= ((uint16_t)hi_Data << 6);//Return the 16-bit valuereturn TwoByte_Data;
}

在这里插入图片描述

  • 📝main函数代码
int main(void)
{u16 i = 0;u16 raw_num = 0;float Angle = 0.0f;u8 addr = 0;u8 ack;u8 read = 0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2delay_init(); //延时函数初始化uart_init(115200);	//串口初始化为115200printf("MT6701 test\r\n");printf("Scanning I2C bus:\r\n");LED_Init();	//初始化与LED连接的硬件接口IIC_Init();for(addr = 0 ; addr < 255 ; addr++) {IIC_Start();IIC_Send_Byte(addr);	//ack = IIC_Wait_Ack();if(ack == 0 && (read % 2 == 0)) {printf("write addr = 0x%x\r\n", addr);read++;} else if(ack == 0 && read % 2 == 1) {printf("read addr = 0x%x\r\n", addr);read++;}IIC_Stop();}//for(i=0x00;i<0xFF;i++)// {//	IIC_Start();//	IIC_Send_Byte(i);//	if(IIC_ACK_Read()==1)//	{//	printf("%x\r\n",i);//	count=1;//	}//	IIC_Stop();//	delay_ms(1);// }// if(count==0) printf("No IIC device found!\r\n");// count=0;while(1) {delay_ms(10);if(++i > 100) {raw_num = MT6701_ReadTwoByte(0x03, 0x04); //读取两个寄存器的值Angle = (float)(raw_num / 16384.0f) * 360.0f ; //对寄存器值进行处理得到角度值printf("MT6701 Raw_num:%d,Angle:%.1f \r\n", raw_num, Angle);LED0 = !LED0; //提示系统正在运行i = 0;}}
}

📚驱动测试代码

链接:https://pan.baidu.com/s/1YRTLFoUJvrdWfcs6dL-qdg?pwd=fsif 
提取码:fsif

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

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

相关文章

LeetCode 409—— 最长回文串

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 要想组成回文串&#xff0c;那么只有最中间的字符可以是奇数个&#xff0c;其余字符都必须是偶数个。 所以&#xff0c;我们先遍历一遍字符串&#xff0c;统计出每个字符出现的次数。 然后如果某个字符出现了偶…

xcode c++项目设置运行时参数

在 Xcode 项目中&#xff0c;你可以通过配置 scheme 来指定在运行时传递的参数。以下是在 Xcode 中设置运行时参数的步骤&#xff1a; 打开 Xcode&#xff0c;并打开你的项目。在 Xcode 菜单栏中&#xff0c;选择 "Product" -> "Scheme" -> "E…

滤波器笔记(杂乱)

线性相位是时间平移&#xff0c;相位不失真 零、基础知识 1、用相量表示正弦量 https://zhuanlan.zhihu.com/p/345546880 https://www.zhihu.com/question/347763932/answer/1103938667 A s i n ( ω t θ ) ⇔ A e j θ ⇔ A ∠ θ Asin(\omega t\theta) {\Leftrightarrow…

[沫忘录]MySQL索引

[沫忘录]MySQL索引 索引概述 优点 提高数据检索效率&#xff0c;降低数据库IO成本通过索引对数据进行排序&#xff0c;降低数据排序成本&#xff0c;降低CPU消耗 缺点 索引会占用一定空间当更新数据时&#xff0c;也需更新索引数据&#xff0c;这会降低数据的更新效率 索引…

Visual Studio 2019 社区版下载

一、网址 https://learn.microsoft.com/zh-cn/visualstudio/releases/2019/release-notes#start-window 二、选择这个即可

负载均衡原理、算法与实现方式

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、什么是负载均衡 2、负载均衡的应用场…

科技驱动未来,提升AI算力,GPU扩展正当时

要说这两年最火的科技是什么&#xff1f;我想“AI人工智能”肯定是最有资格上榜的&#xff0c;尤其ChatGPT推出后迅速在社交媒体上走红&#xff0c;短短5天&#xff0c;注册用户数就超过100万&#xff0c;2023年一月末&#xff0c;ChatGPT的月活用户更是突破1亿&#xff0c;成为…

QQ怎么远程控制自己的电脑

QQ怎么远程控制自己的电脑 在日常生活和工作中&#xff0c;我们有时可能需要在不同的地点远程控制自己的电脑。QQ作为一款广受欢迎的即时通讯软件&#xff0c;提供了远程桌面功能&#xff0c;使得用户可以轻松实现对自己电脑的远程控制。下面就来介绍一下如何使用QQ远程控制自…

深度学习 Lecture 7 迁移学习、精确率、召回率和F1评分

一、迁移学习&#xff08;Transfer learning) 用来自不同任务的数据来帮助我解决当前任务。 场景&#xff1a;比如现在我想要识别从0到9度手写数字&#xff0c;但是我没有那么多手写数字的带标签数据。我可以找到一个很大的数据集&#xff0c;比如有一百万张图片的猫、狗、汽…

HCIA--综合实验(超详细)

要求&#xff1a; 1. 使用172.16.0.0/16划分网络 2.使用ospf协议合理规划区域保证更新安全 3.加快收敛速度 4. r1为DR没有BDR 5.PC2&#xff0c;3&#xff0c;4&#xff0c;5自动获取IP地址&#xff1b;PC1为外网&#xff0c;PC要求可用互相访问 6.r7为运营商&#xff0c;只能配…

【Windows10】Anaconda3安装+pytorch+tensorflow+pycharm

文章目录 一、下载anaconda0.双击下载的文件1. 选择All users2. 安装路径3. 勾选环境变量和安装python4.安装完成5.添加环境变量6.测试是否安装成功 二、安装pytorch&#xff08;先看四&#xff01;先检查一下自己电脑是不是只能安装GPU版的1.查看conda图形化界面2.在安装pytor…

Adobe AE(After Effects)2020下载地址及安装教程

Adobe After Effects是一款专业级别的视觉效果和动态图形处理软件&#xff0c;由Adobe Systems开发。它被广泛用于电影、电视节目、广告和其他多媒体项目的制作。 After Effects提供了强大的合成和特效功能&#xff0c;可以让用户创建出令人惊艳的动态图形和视觉效果。用户可以…