物联网实战--驱动篇之(八)磁编码器(AS5600)

目录

一、AS5600磁编码简介

二、AS5600使用


一、AS5600磁编码简介

AS5600是一款性价比极高的磁编码传感器,一般用于电机转动位置的记录,一般采用IIC通讯,也可以用模拟信号获取转动角度,具体资料在这里。AS5600-ASOM_(ams(艾迈斯半导体))AS5600-ASOM中文资料_价格_PDF手册-立创电子商城

需要注意的是,跟磁编码器配套的磁铁需要径向磁铁,安装距离最好不要超过1mm,自己可以买模块回来测试。参考这个https://item.taobao.com/item.htm?_u=cpfmfmge199&id=670417151484&spm=a1z09.2.0.0.67002e8dP6iCuJ

二、AS5600使用

AS5600采用IIC通讯,使用起来比较简单,主要还是硬件方面自己要安装好,其IIC的器件地址是0x36,读取角度值的寄存器地址是0x0E和0x0F,如果只是单纯的使用,AS5600并不需要什么软件方面的配置,直接读取就行了。

下面是头文件的定义:

在这里,我们主要是为了可以记录多圈的位置,所以定义了比较多的变量,其中angle_value是当前的角度值,last_angle是上一次的角度值,rounds是圈数,刚开始为0,postion是绝对位置,下面先看下具体读取函数:

cpp 复制代码
/*		
================================================================================
描述 : 初始化
输入 : 
输出 : 
================================================================================
*/ 
void drv_as5600_init(As5600WorkStruct *as5600, GPIO_TypeDef* port_sda, u32 pin_sda, GPIO_TypeDef* port_scl, u32 pin_scl)
{
  I2cDriverStruct *pIic=&as5600->tag_iic;
  pIic->port_sda=port_sda;
  pIic->pin_sda=pin_sda;
  pIic->port_scl=port_scl;
  pIic->pin_scl=pin_scl;
  
  IIC_GPIOInit(pIic);  
}


/*		
================================================================================
描述 : 字节读取
输入 : 
输出 : 
================================================================================
*/ 
u8 drv_as5600_read_byte(As5600WorkStruct *as5600, u8 dev_addr, u8 reg_addr)
{
	I2cDriverStruct *pIic=&as5600->tag_iic;
  
	IIC_Start(pIic);
	IIC_WriteByte(pIic, dev_addr);
	IIC_WaitAck(pIic);
	IIC_WriteByte(pIic, reg_addr );
	IIC_WaitAck(pIic);  
  
	IIC_Start(pIic);
	IIC_WriteByte(pIic, dev_addr|0x01); 
  IIC_WaitAck(pIic);  
	u8 temp=IIC_ReadByte(pIic);
	IIC_NAck(pIic);
	IIC_Stop(pIic);
  return temp;  
}

跟其它的IIC设备差不多的流程,下面是角度读取:

cpp 复制代码
/*		
================================================================================
描述 : 角度读取
输入 : 
输出 : 
================================================================================
*/ 
u16 drv_as5600_read_angle(As5600WorkStruct *as5600)
{
  u16 value=0;
  u8 dev_addr=AS5600_ADDR;
  value=drv_as5600_read_byte(as5600, dev_addr, 0x0E);
  value<<=8;
  value|=drv_as5600_read_byte(as5600, dev_addr, 0x0F);
//  debug("as5600 value=%d\n", value);
  as5600->angle_value=value;
  if(value<1000 && as5600->last_angle>3000)
  {
    as5600->rounds++;
  }
  else if(value>3000 && as5600->last_angle<1000)
  {
    as5600->rounds--;
  }
  as5600->postion=as5600->rounds*4096+value;
  as5600->last_angle=value;
  return value;
}

过程就是连续读取0x0E和0x0F寄存器的内容,然后把本次数据跟上一次数据作对比,判断是增加一圈还是减少一圈,从而进行位置的累加计算。

应用层使用的时候就是初始化+读取就行了。

驱动程序:https://download.csdn.net/download/ypp240124016/89124293

本项目的交流QQ群:701889554

相关推荐
SystickInt1 小时前
32 RTC实时时钟-独立定时器
stm32·单片机·嵌入式硬件
三佛科技-187366133971 小时前
智能豆芽机单片机方案开发
单片机·嵌入式硬件
凯禾瑞华养老实训室1 小时前
产教融合新抓手:智慧健康养老服务与管理实训室报价及人才培育路径
大数据·人工智能·物联网·ar·vr·智慧健康养老服务与管理
就是蠢啊2 小时前
51单片机——ADC数模转换实验
单片机·嵌入式硬件·51单片机
Deepoch2 小时前
中国具身智能三大路径:极限挑战、柔性操作、普惠赋能,竞合共生
大数据·人工智能·物联网·机器人·具身模型·deepoc
学习路上_write3 小时前
stm32板子mpu6050读取的器件ID一直是0xFF
stm32·单片机·嵌入式硬件
亿道电子Emdoor4 小时前
【Arm】MDK查看语句的执行累积时间和次数
stm32·单片机·物联网
Tel199253080044 小时前
CCD相机同步外触发拍照抓拍识别高速脉冲计数器信号采集模块
单片机·数码相机·物联网·自动化·工业自动化·仪器仪表
l3538o675734 小时前
国产POE降压恒压芯片方案选型:48v-52v输入转5v-12v/1-3A电源芯片
人工智能·科技·单片机·嵌入式硬件·电脑·智能家居
v先v关v住v获v取4 小时前
建筑材料上楼搬运机结构设计cad3张+三维图+设计说明书
科技·单片机·51单片机