FOC系列(三)----AS5600磁编码器

news2025/1/22 20:55:59

一、 关于AS5600

1.1 芯片内部框图和引脚功能介绍

   具体的内容大家可以查看数据手册:AS5600数据手册,在这里只是对一下重要的地方进行说明。
   系统框图如下:
在这里插入图片描述
   电源设计选项,我在设计时选择的是第二种电源方案,但是采用此方案,一定要将VDD5V和VDD3V3接在一起。
在这里插入图片描述
   下图是引脚的说明,AS5600可以将测得的角度信息通过IIC或者OUT口读取:
在这里插入图片描述
  后续会有对PGO口和OUT口的介绍。

1.2 IIC总线

在这里插入图片描述
在这里插入图片描述
   上图是IIC的时序图以及各时序的时间,其中关于的时序的时间一定要保证符合要求,否则将导致无法读写数据,所以为了保证能正常使用IIC,建议还是使用IO口模拟的IIC。
   AS5600有两个地址,一个是从地址(0x36);另一个是寄存器地址,在读写事件中确定往哪里读写。地址这个东西也很好理解,你给某个人家送快递,你得知道这户人家在哪栋楼(从地址),住在这栋楼的第几层(寄存器地址),这样清楚知道后才会把东西交到正确的人手上;找到错误的地址,你就无法把东西交给正确的人。关于IIC的地址会在STM32系列博客中进行细致的讲解,大家可以订阅我的专栏,不久就能更新到IIC的知识了。
   有一些特殊的寄存器: ANGLE, RAW ANGLE 和MAGNITUDE 寄存器,它们在读取时禁止地址指针的自动增加,因此重新读取这些寄存器不需要I²C写命令来重新加载地址指针。注意:对指针的这种特殊处理仅在地址指针设置为寄存器的高字节时有效。
  只有当总线不忙时(因为有时候一个IIC上不光挂一个器件,可能并联多个IIC器件,所以在某一时刻可能存在某个器件正在读写数据,即总线忙;当某个器件结束读写,总线不忙了,才可以读写这个器件),才可以开始数据传输。在数据传输过程中,当SCL高时,数据线必须保持稳定(这也是为什么IIC必须要加上拉电阻的原因)。当SCL高时,数据线的变化被解释为START或STOP条件。
  下面就是一些总线空闲、起始、停止、数据传输、应答的介绍,这些算是IIC的基础内容,在这就不再进行详细介绍了。

1.3 AS5600从模式

1.3.1 写模式

在这里插入图片描述
   在起始条件之后,主机发送从地址(0x36),再接一个读写指令(0–写;1–读);AS5600确认是从地址正确,会返回一个应答(A)。紧接着主机再发送寄存器地址,如果AS5600确认寄存器地址正确,则返回应答(A);之后主机开始发送要写入的数据,AS5600从寄存器地址开始,地址指针会自动增加,将数据写入对应的寄存器中。注意:无论寄存器地址是否正确,在每传输一个字节之后都会自增。

1.3.2 读模式

在这里插入图片描述
  和写模式差不多,从地址+1(读),AS5600返回一个应答(A),然后,AS5600开始从地址指针指向的寄存器地址开始传输数据。如果在开始读事务之前没有写地址指针,那么读到的第一个地址就是存储在地址指针中的最后一个地址。AS5600必须收到一个不确认(NACK)来结束读事假。
   这个地方很奇怪,数据手册的格式里面没有说在哪写寄存器地址,但是这又是必须的,我没太看明白这个地方。

1.3.2 用地址指针重新加载读取数据

在这里插入图片描述
   这个才是正确的读操作的格式,后面的读取数据都是使用这个模式。

1.4 寄存器

1.4.1 配置寄存器

在这里插入图片描述
   ZMOC:表示了ZPOS和MPOS被永久写入的次数
   ZPOS、MPOS、MANG :这些寄存器用于配置起始位置(ZPOS)和停止位置(MPOS)或更窄角度范围的最大角度(MANG)。角度范围必须大于18度。在角范围变窄的情况下,分辨率不会缩放到变窄的范围。
   CONF:
在这里插入图片描述

1.4.2 输出寄存器

在这里插入图片描述
   RAW ANGLE寄存器包含未缩放和未修改的角度。缩放后的输出值在ANGLE寄存器中可用。
  

1.4.3 状态寄存器

在这里插入图片描述
   STATUS:
在这里插入图片描述
  AGC:AS5600在闭环中使用自动增益控制来补偿由于温度变化,IC和磁铁之间的气隙以及磁铁退化而引起的磁场强度变化。AGC寄存器表示增益。为了获得最稳健的性能,增益值应该位于其范围的中心。物理系统的气隙可通过调节来达到此值。
  MAGNITUDE:表示内部CORDIC的幅度值

1.4.4 Burn指令

在这里插入图片描述
   Burn_Angle Command (ZPOS, MPOS):主控制器可以用BURN_ANGLE命令对ZPOS和MPOS进行永久编程。要执行BURN_ANGLE命令,请将值0x80写入寄存器0xFF。BURN_ANGLE命令最多可以执行3次。ZMCO显示了ZPOS和MPOS被永久写入的次数。该命令只能在检测到磁铁存在的情况下执行(MD = 1)。
  Burn_Setting Command (MANG, CONFIG):主控制器可以使用BURN_SETTING命令执行MANG和CONFIG的永久写入。要执行BURN_SETTING命令,将值0x40写入寄存器0xFF。只有当ZPOS和MPOS从未被永久写入(ZMCO = 00)时,才可以写入MANG。BURN_ SETTING命令只能执行一次。

二、 代码实现

   目前使用的IIC读取寄存器的值,来获取角度等信息,所以对OUT口读取数据不再介绍,后续如果使用到的话会再次更新该博客。
  目前使用的是模拟IIC读取数据,下面是有关模拟IIC实现读取角度的代码:
   IIC读命令:

uint8_t I2C_Read8(uint8_t moni_dev_addr, uint8_t moni_reg_addr, uint8_t moni_i2c_len, uint8_t *moni_i2c_data_buf)
{

	I2C1_START();
	I2C1_SendByte(moni_dev_addr << 1 | I2C1_Direction_Transmitter);
	I2C1_Wait_Ack();
	I2C1_SendByte(moni_reg_addr);
	I2C1_Wait_Ack();
	//Sim_I2C1_STOP();
	
	I2C1_START();
	I2C1_SendByte(moni_dev_addr << 1 | I2C1_Direction_Receiver);
	I2C1_Wait_Ack();
	while (moni_i2c_len)
	{
		if (moni_i2c_len==1) *moni_i2c_data_buf =I2C1_ReceiveByte();
		else *moni_i2c_data_buf =I2C1_ReceiveByte_WithACK();
		moni_i2c_data_buf++;
		moni_i2c_len--;
	}
	I2C1_STOP();
	return 0x00;
}

   IIC写命令:

int8_t I2C1_Write8(uint8_t moni_dev_addr, uint8_t moni_reg_addr, uint8_t moni_i2c_len, uint8_t *moni_i2c_data_buf)
{
	uint8_t i;
	I2C1_START();
	I2C1_SendByte(moni_dev_addr << 1 | I2C1_Direction_Transmitter);
	I2C1_Wait_Ack();
	I2C1_SendByte(moni_reg_addr);
	I2C1_Wait_Ack();
	
	//Sim_I2C1_START();
	for (i=0; i<moni_i2c_len; i++)
	{
		I2C1_SendByte(moni_i2c_data_buf[i]);
		I2C1_Wait_Ack();
	}
	I2C1_STOP();	
		return 0;
}

   读取两个字节:

uint16_t readTwoBytes(uint8_t in_adr_hi, uint8_t in_adr_lo)
{
  uint16_t retVal = -1;
  uint8_t low=0,high=0;
	
  /* Read Low Byte */
	low = readOneByte(in_adr_lo);
  /* Read High Byte */  
  high = readOneByte(in_adr_hi);
  
	//printf("high:%d,low:%d  ",high,low);
  retVal = high << 8;
  retVal = retVal | low;
  //printf("retVal:%d\r\n",retVal);
  return retVal;
}

   读取单个字节:

uint8_t readOneByte(uint8_t in_adr)
{
  	uint8_t retVal = -1;
	I2C_Read8(AS5600_Address,in_adr,1,&retVal);
	I2C1_NOP;
  return retVal;
}

   IIC获取原始角度:

int16_t getRawAngle(void)
{
  return readTwoBytes(_raw_ang_hi, _raw_ang_lo);
}

   原始角度信息转换为真实角度:

float convertRawAngleToDegrees(int16_t newAngle)
{
  /* Raw data reports 0 - 4095 segments, which is 0.087 of a degree */    
  float retVal = newAngle * 0.087;
  return retVal;
}

  效果展示:
在这里插入图片描述
  原理图和PCB:
在这里插入图片描述
在这里插入图片描述

二、往期回顾

FOC系列(一)----DRV8301芯片的学习
FOC系列(二)----继续学习DRV8301芯片

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

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

相关文章

基于Django+Tensorflow卷积神经网络鸟类识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介系统概述系统功能核心技术系统架构系统优势 二、功能三、系统四. 总结  总结 一项目简介 介绍一个基于DjangoTensorflow卷积神经网络鸟类识别系统是一个非…

NoSQL大数据存储技术思考题及参考答案

思考题及参考答案 第1章 绪论 1. NoSQL和关系型数据库在设计目标上有何主要区别&#xff1f; (1)关系数据库 优势&#xff1a;以完善的关系代数理论作为基础&#xff0c;具有数据模型、完整性约束和事务的强一致性等特点&#xff0c;借助索引机制可以实现高效的查询&#xf…

前五年—中国十大科技进展新闻(2012年—2017年)

前五年—中国十大科技进展新闻&#xff08;2012-2017&#xff09; 2017年中国十大科技进展新闻1. 我国科学家利用化学物质合成完整活性染色体2. 国产水下滑翔机下潜6329米刷新世界纪录3. 世界首台超越早期经典计算机的光量子计算机诞生4. 国产大型客机C919首飞5. 我国首次海域天…

SQL HAVING 子句详解:在 GROUP BY 中更灵活的条件筛选

SQL HAVING子句 HAVING子句被添加到SQL中&#xff0c;因为WHERE关键字不能与聚合函数一起使用。 HAVING语法 SELECT column_name(s) FROM table_name WHERE condition GROUP BY column_name(s) HAVING condition ORDER BY column_name(s);演示数据库 以下是Northwind示例数…

【BUG合集】(一)①数据库存1/0,请求结果返回true和false;②sql查数据库能查,但mybatis查为空;③data64图片存储为异常;

前言 最近&#xff0c;在工作上接手的任务中&#xff0c;各种 bug 问题出现&#xff0c;在解决的同时也可以记录一下。因此&#xff0c;觉得可以出个记录 bug 合集。方便后来者碰到类似情况&#xff0c;可以作为一个参考进行解决。 文章题目就包含当前文章内容中所遇到的三个 b…

立刻解决缺少msvcp140_1.dll解决方法,msvcp140_1.dll修复指南

在日常使用电脑的过程中&#xff0c;我们有时会遇到由于某些重要的DLL文件缺失而导致的程序无法正常启动的问题。很多用户可能都经历过由于缺少msvcp140_1.dll导致应用程序无法运行的情况。本文将为你提供解决msvcp140_1.dll缺失问题的详尽方法&#xff0c;附带对每种方法优点和…

配置自动化部署Jenkins和Gitea

配置自动化部署 这里使用的是JenkinsGitea 如果不知道怎么安装Jenkins和Gitea可以参考下面文章 https://blog.csdn.net/weixin_46533577/article/details/134644144 我的另一篇文章 介绍 前端 先说下自己的情况&#xff0c;因为自己服务器原因&#xff0c;使用的服务器内…

滴滴打车崩了!全过程

滴滴发布致歉10元补偿券&#xff0c;文末可领取 。 事情发生于 2023年11月27日晚~28日中午&#xff0c;滴滴打车服务出现大面积故障&#xff0c;登上微博热搜。 许多用户在使用滴滴出行时遇到了无法叫车、订单异常等问题&#xff0c;导致大量用户滞留在外&#xff0c;出行受阻…

极速整理文件!Python自动化办公新利器

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 当涉及到自动化办公和文件整理&#xff0c;Python确实是一个强大的工具。在这篇博客文章中&#xff0c;我将深入探讨《极速整理文件&#xff01;Python自动化办公新利器》这个话题&#xff0c;并提供更加丰富和全…

基于单片机智能电子密码锁设计

**单片机设计介绍&#xff0c;基于单片机智能电子密码锁设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能电子密码锁设计是一种利用单片机&#xff08;如Arduino、Raspberry Pi等&#xff09;和相关电子元件来…

【鲁班猫创意大赛2期】基于鲁班猫的幼儿Al监督系统

【鲁班猫创意大赛2期】基于鲁班猫的幼儿Al监督系统 作品介绍 本作品名称为“基于鲁班猫的幼儿 Al 学习助手”&#xff08;系统总体框图如下图&#xff09;&#xff0c;作品应用群体为幼儿群体&#xff0c;主要功能&#xff1a;通过实时坐姿检测&#xff0c;防止坐姿不端正导致…

基于BP神经网络的手写体数字识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 filename dir(images\*.bmp); %图像文件格式 load BP.matfilename dir(test\*.bmp); …

深入理解堆排序:建堆、排序与优化

引言 在计算机科学中&#xff0c;堆排序是一种高效的排序算法&#xff0c;利用堆的数据结构特性进行排序。本文将深入探讨堆排序的原理、实现过程&#xff0c;并介绍一种优化方法&#xff0c;以帮助读者更好地理解和运用这一经典算法 目录 堆排序简介 1.1 什么是堆排序&#x…

【精选】VulnHub red 超详细过程思路

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

k8s-daemonset、job、cronjob控制器 6

Daemonset控制器&#xff08;一个节点部署一个&#xff09; 、 创建Daemonset控制器 控制节点上不能进行部署&#xff0c;有污点 解决方式&#xff1a; 扩容节点&#xff0c;token值过期的解决方法&#xff1a; 回收pod job控制器 需要使用perl镜像&#xff0c;仓库没有&…

PyQt基础_009_ 按钮类控件QSlider

基本功能 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *class SliderDemo(QWidget):def __init__(self, parentNone):super(SliderDemo, self).__init__(parent)self.setWindowTitle("QSlider 例子") self.resize…

优雅测试代码:使用Go实现高效单元测试!

简介 日常开发中, 测试是不能缺少的. Go 标准库中有一个叫做 testing 的测试框架, 可以用于单元测试和性能测试. 它是和命令 go test 集成使用的. 测试文件是以后缀 _test.go 命名的, 通常和被测试的文件放在同一个包中. 单元测试 单元测试的格式形如: func TestAbs(t *t…

Stable Diffusion绘画系列【6】:东方美学作品

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…

速记:一个保险丝检测电路

一个保险丝检测电路 保险丝熔断&#xff1a;红灯亮 保险丝正常&#xff1a;绿灯亮 同样的&#xff0c;仿真中的指示灯可以换成其他指示器件。

谨慎Apache-Zookeeper-3.5.5以后在CentOS7.X安装的坑

目录 前言 一、现场还原 二、问题诊断 三、问题原因 总结 前言 最近由于项目需要&#xff0c;在服务器上需要搭建Hbase完全分布式集群环境。开发环境&#xff0c;采用的是最小节点的方式进行搭建&#xff08;即3个节点的模式&#xff09;。资源环境列表如下&#xff1a; 序号…