AS5048A讲解

news/2024/11/28 11:42:59/

编码器角度读取流程:
一、初始化SPI。
注意这里需要初始化SPI读写位16位,平时的例程,正点原子,或者野火均是8位,需要修改下位数

void SPI1_Init(void)
{	 GPIO_InitTypeDef  GPIO_InitStructure;SPI_InitTypeDef  SPI_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//ʹÄÜGPIOBʱÖÓRCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);//ʹÄÜSPI1ʱÖÓ//GPIOFB3,4,5³õʼ»¯ÉèÖÃGPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//PB3~5¸´Óù¦ÄÜÊä³ö	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//¸´Óù¦ÄÜGPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//ÍÆÍìÊä³öGPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_SPI1); //PB3¸´ÓÃΪ SPI1GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_SPI1); //PB4¸´ÓÃΪ SPI1GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_SPI1); //PB5¸´ÓÃΪ SPI1//ÕâÀïÖ»Õë¶ÔSPI¿Ú³õʼ»¯RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,ENABLE);//¸´Î»SPI1RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,DISABLE);//Í£Ö¹¸´Î»SPI1SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //ÉèÖÃSPIµ¥Ïò»òÕßË«ÏòµÄÊý¾Ýģʽ:SPIÉèÖÃΪ˫ÏßË«ÏòÈ«Ë«¹¤SPI_InitStructure.SPI_Mode = SPI_Mode_Master;		//ÉèÖÃSPI¹¤×÷ģʽ:ÉèÖÃΪÖ÷SPISPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;		//ÉèÖÃSPIµÄÊý¾Ý´óС:SPI·¢ËͽÓÊÕ8λ֡½á¹¹SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;		//´®ÐÐͬ²½Ê±ÖӵĿÕÏÐ״̬Ϊ¸ßµçƽSPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;	//´®ÐÐͬ²½Ê±Öӵĵڶþ¸öÌø±äÑØ£¨ÉÏÉý»òϽµ£©Êý¾Ý±»²ÉÑùSPI_InitStructure.SPI_NSS = SPI_NSS_Soft;		//NSSÐźÅÓÉÓ²¼þ£¨NSS¹Ü½Å£©»¹ÊÇÈí¼þ£¨Ê¹ÓÃSSI룩¹ÜÀí:ÄÚ²¿NSSÐźÅÓÐSSIλ¿ØÖÆSPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;		//¶¨Ò岨ÌØÂÊÔ¤·ÖƵµÄÖµ:²¨ÌØÂÊÔ¤·ÖƵֵΪ256SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;	//Ö¸¶¨Êý¾Ý´«Êä´ÓMSBλ»¹ÊÇLSBλ¿ªÊ¼:Êý¾Ý´«Êä´ÓMSBλ¿ªÊ¼SPI_InitStructure.SPI_CRCPolynomial = 15;	//CRCÖµ¼ÆËãµÄ¶àÏîʽSPI_Init(SPI1, &SPI_InitStructure);  //¸ù¾ÝSPI_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèSPIx¼Ä´æÆ÷SPI_Cmd(SPI1, ENABLE); //ʹÄÜSPIÍâÉèSPI1_ReadWriteByte(0xffff);//Æô¶¯´«Êä		 
}   
//SPI1ËÙ¶ÈÉèÖú¯Êý
//SPIËÙ¶È=fAPB2/·ÖƵϵÊý
//@ref SPI_BaudRate_Prescaler:SPI_BaudRatePrescaler_2~SPI_BaudRatePrescaler_256  
//fAPB2ʱÖÓÒ»°ãΪ84Mhz£º
void SPI1_SetSpeed(u8 SPI_BaudRatePrescaler)
{assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));//ÅжÏÓÐЧÐÔSPI1->CR1&=0XFFC7;//λ3-5ÇåÁ㣬ÓÃÀ´ÉèÖò¨ÌØÂÊSPI1->CR1|=SPI_BaudRatePrescaler;	//ÉèÖÃSPI1ËÙ¶È SPI_Cmd(SPI1,ENABLE); //ʹÄÜSPI1
} 
//SPI1 ¶Áдһ¸ö×Ö½Ú
//TxData:ҪдÈëµÄ×Ö½Ú
//·µ»ØÖµ:¶ÁÈ¡µ½µÄ×Ö½Ú
u16 SPI1_ReadWriteByte(u16 TxData)
{		 			 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){}//µÈ´ý·¢ËÍÇø¿Õ  SPI_I2S_SendData(SPI1, TxData); //ͨ¹ýÍâÉèSPIx·¢ËÍÒ»¸öbyte  Êý¾Ýwhile (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){} //µÈ´ý½ÓÊÕÍêÒ»¸öbyte  return SPI_I2S_ReceiveData(SPI1); //·µ»Øͨ¹ýSPIx×î½ü½ÓÊÕµÄÊý¾Ý	}

这是SPI的初始化

u16 SPI_AS5048A_Read(u16 TxData)
{u16 data;GPIO_ResetBits(GPIOA,GPIO_Pin_4);SPI1_ReadWriteByte(TxData);GPIO_SetBits(GPIOA,GPIO_Pin_4);CPU_TS_Tmr_Delay_US(10);GPIO_ResetBits(GPIOA,GPIO_Pin_4);data = SPI1_ReadWriteByte(0xc000);GPIO_SetBits(GPIOA,GPIO_Pin_4);data = data & 0x3fff;return data;
}

这是读写,直接调用SPI_AS5048A_Read(0xffff)就是读出来角度数据,根据寄存器应该是从0x3fff这个地址读取,这个地址进行校验等处理后就变成了0xffff,当然,这个函数是读写函数,也可以简化一点,因为我们需要从AS5048获取数据,所以从ANGLE寄存器读取数据就可以了所以可以写成这样:

u16 SPI_AS5048A_Read(void)
{u16 data;GPIO_ResetBits(GPIOA,GPIO_Pin_4);data = SPI1_ReadWriteByte(0xffff);GPIO_SetBits(GPIOA,GPIO_Pin_4);data = data & 0x3fff;return data;
}as5600_adc = SPI_AS5048A_Read();			angle = (float)(as5600_adc) / (float)16384 * 360.0f;

这样就可以都到角度了,为什么&0x3fff,因为是14位的,SPI历程直接参考整点原子就行


http://www.ppmy.cn/news/358127.html

相关文章

图像检索公开数据集

搜集了许多CBIR的数据集,后续还会有添加。 INRIA Holidays INRIA Holidays dataset,Herve Jegou等人使用的数据集,该数据集是他们研究所经常度假时拍的图片(风景为主),一共1491张图,500张query…

基于SOA海鸥优化算法的二阶时滞系统PID控制器最优参数计算matlab仿真

目录 1.算法仿真效果 2.MATLAB核心程序 3.算法涉及理论知识概要 4.完整MATLAB 1.算法仿真效果 matlab2022a仿真结果如下: 2.MATLAB核心程序 ......................................................................... %%参数设置 Umax0.9500;%最大隶属度值…

KT404A芯片使用手册_2.方案说明

2. 方案说明 芯片选用的是SOC方案,集成了一个16位的MCU,以及一个专门针对音频解码的aDSP,采用硬解码的方式,更加保证了系统的稳定性和音质。小巧的封装尺寸更加满足嵌入其它产品的需求 2.1 参数说明 名称 参数 MP3文件格式 1、…

a4纸尺寸在html中是多大,a4纸尺寸是多少厘米(各种标准纸张大小)

a4纸尺寸是多少厘米(各种标准纸张大小)最标准的各种纸张尺寸,比如A0\A1\A2\A3\A4的各种尺寸都有记录。 a4纸尺寸是多少厘米(各种标准纸张大百思特网小) A0=1189*841 A1=841*594 A2=594*420 A3=420*297 A4=297*210 单位是毫米 国家规定的开本尺寸是采用的国际标准系列,现已定入…

新唐M480系列单片机写入dataflash数据

因为项目第一次接触新唐的单片机,其大部分功能和开发环境和STM32是相似或者一样的,所以很多操作可以借鉴STM32的开发方式。也有很多操作细节不太一样,这篇博客主要是记录我在开发过程中所遇到的问题。 Nutovon单片机的Dataflash的读写操作 这…

高压功率放大器ATA4051VS高压功率放大器HSA4051

一、企业背景: Aigtek是一家来自中国的专业从事测量仪器研发、生产和销售的高科技企业。公司主要研发和生产功率放大器、功率放大器模块、功率信号源、计量校准源等产品。核心团队主要是来自西安交通大学及西北工业大学的专家教授等联合组成研发团队,目前…

AT24C01/AT24C02系列EEPROM芯片单片机读写驱动程序

一、概述 EEPROM是嵌入式开发中比较常用的芯片,用来保存参数及掉电记忆的数据等,最常用的是ATMEL的AT24Cxx系列的IIC接口,也有其他厂家的如罗姆Rohm的BR24Gxx系列、ST的M24Cxx系列等。该系列芯片容量不等,如AT24C01即为1kbit&…

立创EDA极速入门(1)——熟悉PCB和立创EDA基本操作

立创EDA链接:国产嘉立创EDA - 一个用心为中国人定制的电路板开发平台 目标,一个上午熟悉PCB,学会立创EDA使用,并画出一个PCB 目录 基本操作 账号注册和打开编译器 新建工程 熟悉PCB 熟悉原理图的重要部分 直插与贴片的区别…