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

一、 关于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芯片

### 回答1: instaspin-foc和instaspin-motion是两个被德州仪器公司(TI)推出的专业运动控制软件包。其中instaspin-foc主要用于控制电机的运转,而instaspin-motion则涉及控制整个系统的运动,并支持多种类型的控制器和编码器。 instaspin-foc软件包提供了一种简单且高效的方法来控制交流电机的转速和位置。它能够自动调整电机的转矩和速度,并且可以应用于多种不同的电机类型,从无传感器的电机到光学或磁性编码器修辞感器的电机。 instaspin-motion软件包由四个部分组成,分别为:控制电机驱动器、读取编码器反馈、控制运动路径和确定运动参数。它支持多种类型的编码器,例如:光学、磁性、霍尔和电感式编码器等,并允许通过使用TI的控制器来执行高级运动控制。 对于使用instaspin-foc和instaspin-motion软件包的用户,本指南提供了详细的指导和教程,以帮助他们快速掌握这两个软件包的使用方法。通过实例和操作步骤的讲解,用户能够清晰地了解每个软件包的功能和特点,快速理解其工作原理和操作流程,进而灵活地应用于不同的场景中,以满足其动力控制和运动控制的需求。 ### 回答2: InstaSPIN-FOC和InstaSPIN-MOTION用户指南是伟大的资源,可以帮助用户轻松地使用Texas Instruments(TI)设计的MCS™电机控制器。 InstaSPIN-FOC是一种基于磁场定向的矢量控制技术,可用于控制交流电机,包括永磁同步电机(PMSM)和感应电动机(IM)。它的设计目的是简化控制器开发流程,并加速系统性能的调整和优化。与之类似,InstaSPIN-MOTION是一种基于运动控制的技术,可用于控制各种类型的电机,包括直流电机、步进电机和伺服电机等。它具有自动调谐功能,可以快速地适应仪表和工业应用中的变化电气负载。用户指南提供了大量的资料,包括如何设置驱动器、如何使用代码和如何解决问题的详细说明。此外,用户指南还提供了示例代码、使用步骤和设计要点等方面的详细信息,以支持用户更高效地开发MCS™电机控制器。总之,InstaSPIN-FOC和InstaSPIN-MOTION用户指南是非常有价值的指南,对于需要从事电机控制器设计的工程师和技术人员是一个重要的参考资料。 ### 回答3: 随着电机控制技术的不断发展,Texas Instrument公司推出了两款电机控制软件,分别是instaspin-foc和instaspin-motion。这两款软件都是由TI公司推出的一款基于闭环控制的电机算法。 instaspin-foc是一个用于感应电机的高级动画和控制器。它提供了一个良好的性能和高效的控制,允许工程师通过现有的基础硬件来实现感应电机控制,包括使用直接转换量测量DC电机驱动器。instaspin-foc提供了更快的开发周期和更少时间的工程师在调试和测试时。 instaspin-motion是一种综合性电机控制软件,它提供了许多丰富的特性和功能,包括磁场定位,流量观测,动态扭矩控制等等。instaspin-motion为开发人员提供了一个简单易用的平台,他们可以通过该软件轻松地开发和定制符合他们控制要求的应用程序。开发人员只需要选择所需控制方法,然后设置相应的参数,该软件即可自动完成剩余的工作,从而提高了开发效率。 instaspin-foc和instaspin-motion都是成熟的电机控制软件,能够在半导体和制造行业中广泛应用。这两款软件都有详细的使用指南,可以帮助开发人员轻松入门,快速上手使用。同时,开发人员也可以通过TI公司提供的技术支持、工具和社区来获取帮助和分享经验。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

致虚守静~归根复命

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值