AS5600磁角度传感器开发记录

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

AS5600使用简介——(程序员版)

-----------------本文由“智御电子”提供,同时提供范例教程,以便电子爱好者交流学习。----------------例程下载地址

前言:

最近由于工作需要接触到AS5600这颗磁角度传感器,以前就对相关的磁应用感到各种高大上(例如霍尔传感器,磁流体等)。既然接触到了,就开始搜索相关资料,发现有用的资料并不多,仅限官网上发布的一些。作为程序员看完datasheet,肯定是要搞一份代码拜读一下。在这里 吐槽一下这AMS官网的揍性:手册里写了官网有ardunio的例子,一顿好找好不容易才找到,接着注册账号想下载,竟然提示没有权限下载(一脸茫然,你个卖芯片的,配套软件环境挂网上不能下载是什么鬼),功夫不负有心人,还是在好心网友的分享下找到了一些代码。特此将自己开发经过记录下来,与君共享!

开发流程:

从手册了解到AS5600这颗芯片支持IIC通信,但是输出的信号的方式还有PWM,模拟电压等多种方式。本文直接上手IIC通信。

接着直接就是设计原理图了,这部分手册都有推荐的电路,需要注意的是VDD5V和VDD3V3引脚的选择。因为本文采用的是STM32F0芯片的主控,供电电压是3V3,故选择3.3v Operation的如下电路。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lhssrjbU-1582557895504)(https://i.imgur.com/CFPveq7.jpg)]

再就是设计模块PCB,模块电路PCB打样回来,如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bV3t08H4-1582557895506)(https://i.imgur.com/YklKVed.jpg)]

本文把几个引脚都留出来,通过杜邦线跟控制板连接,连接线如下表所示。

AS5600模块STM32F0系统板
VCC3.3V
GNDGND
DIRGND
SCLPA9
SDAPA10
GPO3.3V

紧接着就是程序设计。出去对STM32硬件IIC的敬畏,我选择敬而远之,采用普通引脚软件模拟IIC的通信过程。软件模拟IIC的过程主要把握两方面:速率控制和时序控制。

速率控制就是SCL的变化速率,只要控制再AS5600允许的范围内即可。AS5600支持Fast-mode Plus模式,SCL能达到1MHz。

时序控制就是SCL和SDA变化的规则。有的芯片的IIC还是有点小异同的,所以我们需要对照手册的时序再进行模式时序。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4SYfwMM6-1582557895507)(https://i.imgur.com/y6eXOHI.jpg)]

本文首先利用CubeMX直接生成STM32F0的Keil工程代码,将PA9(SCL)和PA10(SDA)设置普通的输出引脚。需要注意的是SCL一直由主机提供,故一直都是输出模式;但是SDA为数据线,当从机传数据至主机的时候,主机需要将SDA的模式改为输入模式。代码如下

#define SDA1_IN()  IIC_SDA_GPIO_Port->MODER &= ~(0x3<<(10*2))
#define SDA1_OUT() IIC_SDA_GPIO_Port->MODER &= ~(0x3<<(10*2));IIC_SDA_GPIO_Port->MODER |= (0x1<<(10*2))

然后就是将IIC的通信协议进行分解,拆解成:

Sim_I2C1_START()、Sim_I2C1_SendByte()、Sim_I2C1_Wait_Ack()、Sim_I2C1_STOP()

最后整合成读和写两个函数,如下所示。

/**

- @brief  模拟IIC的多字节读

- @param

- @note

- @retval void

- @author 智御电子
  */
  uint8_t Sim_I2C_Read8(uint8_t moni_dev_addr, uint8_t moni_reg_addr, uint8_t moni_i2c_len, uint8_t *moni_i2c_data_buf)
  {

  Sim_I2C1_START();
  Sim_I2C1_SendByte(moni_dev_addr << 1 | I2C1_Direction_Transmitter);
  Sim_I2C1_Wait_Ack();
  Sim_I2C1_SendByte(moni_reg_addr);
  Sim_I2C1_Wait_Ack();
  //Sim_I2C1_STOP();

  Sim_I2C1_START();
  Sim_I2C1_SendByte(moni_dev_addr << 1 | I2C1_Direction_Receiver);
  Sim_I2C1_Wait_Ack();
  while (moni_i2c_len)
  {
  	if (moni_i2c_len==1) *moni_i2c_data_buf =Sim_I2C1_ReceiveByte();
  	else *moni_i2c_data_buf =Sim_I2C1_ReceiveByte_WithACK();
  	moni_i2c_data_buf++;
  	moni_i2c_len--;
  }
  Sim_I2C1_STOP();
  return 0x00;
  }

/**

- @brief  模拟IIC的多字节写

- @param

- @note   当启用check功能的时候,只能是单字节写的情况,多字接写不可启用check功能

- @retval void

- @author 智御电子
  */
  int8_t Sim_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;
  Sim_I2C1_START();
  Sim_I2C1_SendByte(moni_dev_addr << 1 | I2C1_Direction_Transmitter);
  Sim_I2C1_Wait_Ack();
  Sim_I2C1_SendByte(moni_reg_addr);
  Sim_I2C1_Wait_Ack();

  //Sim_I2C1_START();
  for (i=0; i<moni_i2c_len; i++)
  {
  	Sim_I2C1_SendByte(moni_i2c_data_buf[i]);
  	Sim_I2C1_Wait_Ack();
  }
  Sim_I2C1_STOP();	
  	return 0;
  }

下面就是开始对AS5600进行IIC的寄存器设置了。其实AS5600的设置相对来说比较简单。特别是对于360度旋转检测的应用,基本不需要设置,直接读取raw data寄存器就可以读出角度信息。但是如果对于小范围角度检测的应用场景,AS5600可以设置其实起始角度和终点角度(大于18度)来和实际的应用对应起来。这个时候就需要按照datasheet的设计步骤一步一步初始化相应的寄存器。本文需要360度检测,故不考虑这种情况。

再main函数中直接利用iic读取角度寄存器的数值,然后转化成角度,最后通过串口打印出来。

void Programe_Run(void)
{
	uint8_t dect= 0;
	dect = detectMagnet();
	printf("detectMagnet is %d\r\n",dect);
	rawdata = getRawAngle();
	printf("rawdata is %d\r\n",rawdata);
	degress = convertRawAngleToDegrees(rawdata);
	printf("degress is %f\r\n",degress);
}

将磁铁放置再芯片上面,旋转。角度信息相应产生变化,导致为止开发测试结束。

AS5600磁编码器的使用以及简单的滤波算法(arduino) 前言 AS5600磁编码器常用于电机的角位移测量,如下图为使用AS5600芯片的一款编码器。 该磁编码器支持IIC,SPI和模拟输出三种方式,具体的引脚定义如下: 阅读详情

相关推荐

AS5600磁编码器开发记录

AS5600使用简介——(程序员版) -----------------本文由“智御电子”提供,同时提供范例教程,以便电子爱好者交流学习。---------------- 前言: 最近由于工作需要接触到AS5600这颗角度传感器,以前就对相关的应用感到各种高大上(例如霍尔传感器,流体等)。既然接触到了,就开始搜索相关资料,发现有用的资料并不多,仅限官网上发布的一些。作为程序员看完d...

Monkey12300的博客 4399

AS5600中文参考数据手册

为了满足电位计制造商和用户的需求,AS5600 具有比例输出的特点,能够映对输出角度的电位计(可变电阻器)。这意味着用户采用基于AS5600 的设计代替电位计时,将无需再更改运行在单片机上的应用程序代码。AS5600 提供360 度全方位的12 位精确分辨率,能够测量任何正在使用电位计的应用的角位移,包括旋转旋钮和刻度盘。

SimpleFOC STM32实战04|STM32F103+HAI库进阶,利用AS5600编码器实现电机转速的精准测量与滤波

本文详细介绍了如何利用STM32F103和AS5600编码器实现电机转速的精准测量与滤波。通过SimpleFOC库和多种滤波算法(如滑动平均滤波和一阶低通滤波),有效降低了转速数据的波动,提升测量精度。文章还分享了动态调整滤波参数和多传感器数据融合等高级优化技巧,适用于需要高精度电机控制的场景。

weixin_28718793的博客 429

AS5600磁编码器手册.pdf

AS5600磁编码器手册.pdf

ESP32设备驱动-AS5600性旋转位置传感器

AS5600 是一款可编程的 12 位高分辨率非接触式性旋转位置传感器。 AS5600可以作为性电位器或性编码器使用,具有出色的可靠性和耐用性。 与传统电位器/编码器相比,AS5600具有显着优势:高精度、非接触式、旋转角度无限制。 所有这些优点使其适用于非接触式角度测量应用,例如机器人手臂、云台、电机闭环控制、机床轴定位。

视觉与物联智能 2503

AS5600磁编码器获取角度(IIC方式)的简单应用

AS5600是一个易于编程的旋转位置传感器,具有高分辨率的12位模拟或PWM输出。该传感器采用非接触式系统,可测量化轴上直径的绝对角度,并适用于应用于非接触式电位器的稳健设计,消除了外部杂散场的影响。AS5600的设计目的是为了满足工业标准,并通过I²C接口支持简单的用户编程,无需专门的程序员即可设置非易失性参数。默认情况下,输出表示0到360度的范围。此外,用户还可以定义一个较小的输出范围,并通过编程设置零角(起始位置)和最大值角度(停止位置)。此外,AS5600还配备了智能低功耗模式,可自动降低功

xiaobuding的博客 1万+

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

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

我的博客 1万+

AS5600使用简介

文章来源:AS5600磁编码器开发记录 前言: 最近由于工作需要接触到AS5600这颗角度传感器,以前就对相关的应用感到各种高大上(例如霍尔传感器,流体等)。既然接触到了,就开始搜索相关资料,发现有用的资料并不多,仅限官网上发布的一些。作为程序员看完datasheet,肯定是要搞一份代码拜读一下。在这里 吐槽一下这AMS官网的揍性:手册里写了官网有ardunio的例子,一顿好找好不容易才找到,接着注册账号想下载,竟然提示没有权限下载(一脸茫然,你个卖芯片的,配套软件环境挂网上不能下载是什么鬼),功夫

zhen 1万+

STM32环境下AS5048A14位旋转编码器SPI通讯调试记录——我学到的东西、遇到的问题、解决的过程

❤ 2019.3.16 事情是这样的。 在很多天以前,老师接了个项目,问我有没有意向,我谨慎的表达了我对新事物的好奇心,对新知识的求知欲,同时又委婉的表达了我的能力有限的实际情况,然后我以为事情就这么过去了,直到半个多月之前,老师又找到我,我才知道,该来的总会来的。。。 具体来说,我这次要做的事情其实很简单,就是读一个旋转编码器的度数,并且实现能设置零点的功能。 ...

ooorczgc的博客 2万+

AS5600无接触角度测量免维护设计

AS5600是一款基于霍尔效应的角度传感器,支持非接触式测量,具备12位精度和多种输出模式。其免维护、抗磨损特性适用于工业阀门、农业机械等高可靠性场景,结合零点编程与I²C配置,显著提升系统稳定性与寿命。

weixin_42602241的博客 747

AS5600在智能门锁中的实战应用案例

最近在做一个智能门锁项目,需要精确检测门把手的旋转角度来实现不同状态的切换。它的在线编辑器可以直接运行嵌入式代码,省去了搭建本地开发环境的麻烦。对于需要展示交互效果的项目,平台的一键部署也很实用。比如我把门锁的状态监测界面做成了网页版,同事扫码就能实时查看角度数据,不用再接串口调试。:使用直径6mm的径向铁,安装在门把手转轴上,与AS5600保持2-3mm间距。整个项目从原型到量产用了约3个月时间,AS5600的表现非常稳定,量产2000套没有出现传感器故障。实测发现非线性误差<0.5度。

NightshadeRaven21的博客 939

【花雕学编程】Arduino动手做(225)---将AS5600角度传感器集成到步进电机项目中

这款 AS5600 专为非接触式电位计应用而设计,其坚固的设计消除了任何均匀的外部杂散场的影响。AS5600 可以通过编程零角度(开始位置)和最大角度(停止位置)来应用于较小的范围。37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

雕爷学编程 480

AI智能棋盘采用ams AS5600实现无触旋转编码

本文介绍AS5600角度传感器在AI智能棋盘中的应用,涵盖工作原理、电路设计、软件滤波及抗干扰优化,对比传统机械方案优势,探讨其在无触旋转输入中的实践价值。

weixin_33582089的博客 620

旧硬盘改高精度旋转编码器:主轴电机+AS5600实战方案

旋转编码器是工业控制、数控机床和机器人反馈系统中的核心元件,其精度与稳定性直接决定测量与控制质量。传统光电编码器价格昂贵,而普通电位器寿命有限,难以兼顾成本与性能。角度传感器通过检测场方向变化实现非接触式角度测量,配合高精度轴承轴系,可以构建低成本、高可靠性的角位移传感方案。废旧硬盘中的流体动压轴承主轴电机具有极高的同心度和旋转平稳性,是理想的旋转机械平台。利用AS5600角度传感器芯片与硬盘轴系结合,仅需简单拆解与支架固定,即可自制出12位分辨率、绝对角度输出的旋转编码器。该方案成本极低,适用于数

weixin_29168393的博客 228

AS5600磁编码器实战指南:从硬件设计到软件滤波的完整应用方案

角度传感器是连接物理旋转运动与数字控制系统的关键元件,其核心原理是将机械角度变化转换为可被微处理器识别的电信号。在众多技术方案中,磁编码器凭借非接触式测量原理脱颖而出,它通过检测永场变化来感知角度,避免了机械磨损,显著提升了在恶劣环境下的可靠性与寿命。这一技术为电机控制、机器人关节、旋钮等需要高可靠性、低成本角度反馈的场景提供了理想解决方案。其中,AS5600作为一款集成霍尔传感器、ADC和DSP的经典磁编码器芯片,以其极简的外围电路和灵活的I2C/PWM接口,极大地简化了系统设计。在实际工程中,充分

weixin_30301449的博客 442

AS5600磁编码器实战指南:硬件设计、软件驱动与调试避坑

在嵌入式系统与电机控制领域,精确的角度测量是实现闭环控制和人机交互的基础。其核心原理在于将物理旋转量转换为可被微控制器读取的数字信号。从技术价值看,非接触式传感技术因其高可靠性和长寿命,正逐步取代传统的电位器和光电编码器。磁编码器,特别是基于霍尔效应的集成芯片,凭借其高集成度、低成本和对恶劣环境的适应性,在机器人、云台和智能旋钮等应用场景中成为热门选择。本文聚焦于AS5600这款明星磁编码器芯片,深入剖析其易用性、高分辨率及丰富的可编程功能,并结合I2C通信协议与软件滤波等工程实践,系统讲解从路设计、PC

weixin_34090562的博客 406

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

这款 AS5600 专为非接触式电位计应用而设计,其坚固的设计消除了任何均匀的外部杂散场的影响。37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。项目实验之四:通过循环扫描I2C总线上的设备地址,找到连接的AS5600设备。

雕爷学编程 477
上一篇: STM32 硬件UART接收超时检测设置
下一篇: 霍尔传感器学习使用心得
SC_Electronic
博客等级 码龄8年 15粉丝 5原创
评论 18
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值