AS5047开发简介

2023-05-16

本文有麦粒电子撰写,并提供相应产品服务。

AS5047是ams公司研发的14bit精度的磁传感器,只需要一个磁铁悬于芯片上方就可以检测出相应的角度信息。针对不同的应用场景,该芯片还配置了不同的输出接口:SPI、ABI、UVW、PWM等接口。而且该芯还具有OTP一次性烧录配置的功能,一次配置永不改变。

好,话不多说,直接开干。本文选用的是AS5047P的传感器。

一、实例:SPI接口

这款芯片是利用SPI总线进行相应的配置,所以SPI接口是默认什么时候都是使能并且被使用的。所以我们第一步先调试通SPI接口,通过SPI接口能够进行芯片配置,以及传感器信号的采集。

选择电源

AS5047P支持两种电源电压,3.3V和5v模式,这两种的电路是不一样的,需要根据自己的主控电压进行选择,本文选择5V电压。
在这里插入图片描述

接着就是与主板的电气线路连接。本文选择的是ardunio主板进行读写控制。

ASM5047PArdunio
MOSI11
MISO12
SCK13
SS10
V55V
GNDGND

接着就是去查看datasheet中查看SPI的读写时序是怎样的。(说一句,一定要从官网下载最新的芯片手册,最新手册会对错误的地方进行勘误。)

SPI配置没什么难点,特点的是AMS给读\写控制命令中加入了一个PARC位的校验和R/W位的填充。

从下图可知PARC是一种偶校验。顾名思义就是在14-0 bit的数据中填充数值1的个数,保证整个16bit数据中数值1的个数位偶数,以此来保证数据传输过程的可靠性。如果操作者没有正确填充正确的PARC位,5047的 ERRFL寄存器会显示Parity error,并且会导致无法读出正确的SPI数据。

在这里插入图片描述

接着再了解下读时序。如下图所示,挺简单,第一个字送地址,数据在下一个时钟是送到主机,其实本文要说的就是这个14bit和15bit 的填充。举例子说明:比如读地址0X0016(‭ 0000 0000 ‭0001 1000‬‬)寄存器。因为是读操作,所以14bit位要填入1即(0100 0000 ‭0001 1000‬),然后1的个数位3个偶数,所以15bit填充1(1100 0000 ‭0001 1000‬)。这个样实际需要发送的地址为(0XC018)。

在第二个时钟周期返回的数据中,也是带有PARD和EF位的填充的,这个我们在用这些数据的时候,记得去掉这些位的填充即可。

uint16_t AMS5047x::Read_Register(uint16_t AddRegister)
{	
        uint16_t result=0,AddRegister_Command=0;
		byte ReadByte=0;
		//填充校验位、读位
		AddRegister_Command = Command_Add(AddRegister,1);
		
		byte lowbyte = AddRegister_Command & 0x00ff;
        byte highbyte = (AddRegister_Command >> 8);
		
        digitalWrite(CSn, LOW);
        SPI.transfer(highbyte); // first byte in
        result = SPI.transfer(lowbyte); // first byte out
        digitalWrite(CSn, HIGH);
        delayMicroseconds(10);
        
		digitalWrite(CSn, LOW);
        int bytesToRead = 2;
        while (bytesToRead-- > 0) {
                // shift the first byte left, then get the second byte:
                result = result << 8;
                ReadByte = SPI.transfer(0x00);
                // combine the byte with the previous one:
                result = result | ReadByte;
        }
        // take the chip select high to de-select:
        digitalWrite(CSn, HIGH);
		//删除填充位
		result = Command_Del(result);		
        return(result);
}

在这里插入图片描述
SPI写操作跟读操作差不多,就是先写地址,在写数据(如下图所示),同样的,注意 写命令和数据的校验填充即可。
在这里插入图片描述
[

完成读写的函数之后,就可以读取AS5047的数据了。将磁铁放置在芯片上面。然后读取角度数据。

uint32_t Get_Angle(void)
{
	uint32_t result=0;
	result = read_register(_angleunc);  
	return result;
}

以上就是一些简答的读取实验。值得注意的是用SPI读取的数据,是绝对角度数据,也是14bit精度的。

实验结果如下图所示
在这里插入图片描述

下篇我们开始将PWM接口的读写,未完待续。。。。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AS5047开发简介 的相关文章

  • GNU makefile入门——刚开坑,没有干货

    一个完整的makefile文件包含5个部分的内容 xff1a 显示规则 xff0c 隐含规则 xff0c 变量和指示符 xff0c 注释 显示规则 xff1a 包括目标 xff1a 依赖规则 命令 隐含规则 xff1a make根据目标文件
  • Renesas CS+ for ca cx入门(一)

    这是一篇关于Renesas的CS 43 for ca xff08 以下简称CA xff09 的入门简介 xff0c 在网上关于这个IDE的使用方法比较少人讲述 xff0c 兴许使用的人比较少吧 另一个类似的IDE是CS 43 for cc
  • 单片机——按键扫描

    按键扫描 xff0c 我想应该是比较简单的单片机应用了 xff0c 但是有时候看起来简单的东西反而不好写 本文拿大部分人觉得简单的按键扫描聊聊我工作至今对于软件结构的理解 嗯 xff0c 对的 xff0c 是结构 xff0c 不是架构 xf
  • keil的错误: Error: Encountered an improper argument 的解决方法

    将附件中的文件下载然后放到keil一下的安装目录中即可C Keil v5 UV4 xff0c 选择替换即可 文件链接 xff1a http download csdn net download ma57457 10118005 官方说的是支
  • 嵌入式软件没有层次感的原因

    因为软件是一个人写的 xff01 xff01 xff01
  • 博客网站转移

    我的博客会慢慢的转移到新的网站上 xff0c 新的地址为oopsrtos com xff0c 新博客会对arm 体系结果做更深入的探讨 xff0c 主要是关于实时操作系统内核开发的研究 最近在研究FPU xff0c 从内核层解释在操作系统中
  • keil工程中找不到头文件的可能原因

    今天用keil写一个串口调试程序 xff0c 编译工程时 xff0c 总是找不到type h头文件 xff0c 而该文件又是必须的 于是 xff0c 重新看设置 xff0c 头文件路径已经包含到工程里了 xff0c 头文件也已经添加到工程里
  • 在NAND FLASH上建立YAFFS2文件系统

    在NAND FLASH上建立YAFFS2文件系统 xff08 一 xff09 By on 2006 07 22 经过了半个多月的努力 xff0c 终于搞定nandflash的mtd驱动和上层的yaffs2文件系统 这半个多月来几乎每天都要和
  • 个人学习笔记-矩阵的四则运算

    目录 1 矩阵的四则运算1 1 矩阵的乘法运算1 2矩阵的加法运算1 3矩阵的减法运算 2 接口测试输出结果 1 矩阵的四则运算 1 1 矩阵的乘法运算 span class token comment 矩阵乘法 C语言实现分解步骤 xff
  • 单片机通信接口:UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB

    参考资料 xff1a 这些单片机接口 xff0c 一定要熟悉 xff1a UART I2C SPI TTL RS232 RS422 RS485 CAN USB SD卡 秒懂所有USB接口类型 xff0c USB接口大全 1 UART UAR
  • PCB中走线与电流的关系

    参考资料 xff1a 超强整理 xff01 PCB设计之电流与线宽有八种关系 1 前言 PCB的载流能力取决与以下因素 xff1a 线宽 线厚 xff08 铜箔厚度 xff09 容许温升 PCB走线越宽 xff0c 载流能力越大 但走线宽度
  • Visual Studio各版本集成的Visual C++版本对应关系

    Visual Studio版本集成的Visual C 43 43 版本对应关系如下 xff1a Visual Studio 6 xff1a vc6 Visual Studio 2003 xff1a vc7 Visual Studio 200
  • 字节序—字节内部的位序

    Big endian machine It thinks the first byte it reads is the biggest Little endian machine It thinks the first byte it re
  • 嵌入式常用模块之——环形队列(1)

    简单聊聊对我实现方式的介绍代码部分完整代码 简单聊聊 在嵌入式开发时候 xff0c 有很对模块是经常会使用到的 从这篇文字开始 xff0c 将我觉得一些常用的模块逐一做一个整理 梳理一下自己的思路 xff0c 也顺便方便大家 xff0c 如
  • Python实现isbn查询书籍详细信息

    如有错误 xff0c 请疯狂打脸没关系 xff0c 希望能够指出来 0 开始的开始 一直想做一个图书漂流软件 xff0c 最近入手 xff08 入坑 xff09 了微信小程序 xff0c 添加图书时需要用到isbn查询书籍信息的API xf
  • Ubuntu 安装 ROS 详细教程

    最近需要用ROS控制一个小车底盘 xff0c 然后发现不会了 所以写一篇博客记录一下 xff0c 以便以后查阅 OS xff1a Ubuntu 20 04 ROS xff1a noetic 1 设置Ubuntu的软件和更新 在搜索框输入so
  • roscore报错: ‘ascii’ codec can’t decode byte 0xe6 in position 13: ordinal not in range(128)

    零 问题描述 使用ROS是 xff0c 执行roscore报一下错误 xff1a ascii codec can t decode byte 0xe6 in position 13 ordinal not in range 128 The
  • Ubuntu16.04网络连接正常但浏览器无网络

    ubuntu xff0c google浏览器突然不能上网了 xff0c 经过一番折腾 xff0c 终于解决了问题 xff0c 在此记录一下 开始如下图 xff1a 然而 ping 一下百度 xff0c 是可以 ping 通的 xff0c 说
  • CMake学习(二) —— 生成链接库

    除使用 add executable 生成可执行文件外 xff0c 还可以使用 add library 生成链接库 一 Linux的链接库 首先讲一下 linux 的链接库 xff0c 就是一些函数代码的二进制形式 xff0c 有动态与静态
  • iperf3 使用指南

    iperf3的参数 xff1a s表示做服务器 c表示做客户端 t 表示表示发送时间 i 表示间隔多久报告一次 u 表示UDP xff0c 不加表示tcp R 表示服务器发客户端收 xff0c 不加默认客户端发 xff0c 服务器收 f 表

随机推荐