AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上

雨飞工作室 2025-10-24 07:00
AS5600是一款易于编程的磁式转动位置传感器,可提供12位高分辨率模拟或PWM输出。该非接触式传感器可测量径向充磁磁铁的绝对转动角度。AS5600专为非接触式电位器应用而设计,其可靠的设计能够消除任何外部同质杂散磁场的影响。用户可通过行业标准的I²C接口轻松编程非易失性寄存器,无需专用编程器。即使在没有编程器或数字接口的情况下,也可通过“3线模式”轻松实现起始位置和和停止位置的编程。默认输出范围是0至360°。通过编程零角度(起始位置)和最大角度(停止位置),可以将AS5600应用于更小的角度范围。AS5600还具有一智能的低功耗模式,可自动降低功耗。需要注意的是,磁铁和磁编码器的最大距离不应超过1mm。
AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图1

STM32F373C的芯片

AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图2

搭配的磁编码器

AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图3

官网的:

AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图4

官网资料:

https://pan.baidu.com/share/init?surl=Mh2O3kjxmiBXRPXie9F6-wi3op

电路图:

AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图5

嘉立创上面的板子

AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图6

芯片的引脚

VDD5V、VDD3V3:电源输入。

OUT:模拟电压/PWM输出口,如果输出模拟电压,其上限为VDD电源电压,下限为GND,以比例线性绝对值形式输出角度对应的电压值;如果输出PWM,其输出的角度值由PWM脉冲宽度表示。

GND:地。

PGO:模式选择:模式A:用I2C读取角度(PGO悬空);模式B:用OUT引脚读取角度(PGO接GND)

SDA、SCL:I2C接口(需外部上拉)。

DIR:旋转方向(连GND:顺时针数值增加,连VDD:顺时针数值减小)

AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图7

供电情况

5V模式:当电源输入为5V时,其内部LDO输出的3.3V不能为其他I2C设备供电,且3.3V需要一个1uF电容;

3.3V模式:当电源输入为3.3V时,需要将VDD5V和VDD3V3连接到一起,如果需要OTP编程,VDD3.3V还需一个10uF电容。


所有资料:

AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图8

AS5600支持Fast-mode Plus模式,SCL能达到1MHz。

https://blog.csdn.net/SC_Electronic/article/details/86105409https://github.com/capella-ben/microPython_AS5600L

AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图9

https://github.com/sgall17a/AS5600
AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图10

芯片框图,注意供电和控制以及输出

AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图11

I2C的时序

AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图12

数据读

AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图13

数据写

AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图14

角度输出

高低位和数据的地址:

int _raw_ang_hi = 0x0c;int _raw_ang_lo = 0x0d;int _ams5600_Address = 0x36//I2C地址

读取字节的函数:读取AS5600的角度数据。

int readOneByte(int in_adr){    int retVal = -1;    Wire.beginTransmission(_ams5600_Address); //开始传输    Wire.write(in_adr); //需要读的地址    Wire.endTransmission();    Wire.requestFrom(_ams5600_Address, 1); //从5600处获取数据    while(Wire.available() == 0); //等待I2C总线停止占用(传输结束)    retVal = Wire.read(); //读到的数据    return retVal;}

角度数据是10bit的,要高位和低位,然后组合起来。

word readTwoBytes(int in_adr_hi, int in_adr_lo){    word retVal = -1;   /* 先读取低位 */      Wire.beginTransmission(_ams5600_Address);      Wire.write(in_adr_lo);     Wire.endTransmission();      Wire.requestFrom(_ams5600_Address, 1);      while(Wire.available() == 0);      int low = Wire.read();   /* 再读取高位 */        Wire.beginTransmission(_ams5600_Address);      Wire.write(in_adr_hi);      Wire.endTransmission();      Wire.requestFrom(_ams5600_Address, 1);      while(Wire.available() == 0);      word high = Wire.read();    high = high << 8//高位数据左移      retVal = high | low; //高位数据左移动8位之后,和低位数据或   //或计算就是尽量等于1,任何一边有1就是1      return retVal;}

读取两个数值组合后就是一个磁编码器数据,10bit;

根据角度划分,360/4096=0.087度,精度达到0.1度。


在主函数中,用串口打印的方式来输出数据:

int val = getRawAngle()*0.087;//获取10bit数值,转成实际角度   Serial.println(val);   //delay(10);   digitalWrite(OUTPORT,HIGH);   delayMicroseconds(400);   digitalWrite(OUTPORT,LOW);   delay(3);
整个AS5600的源代码:
#include "Wire.h"#define OUTPORT 8  //ver2int _raw_ang_hi = 0x0c;int _raw_ang_lo = 0x0d;int _ams5600_Address = 0x36;void setup() {Serial.begin(115200); Wire.begin(); pinMode(OUTPORT,OUTPUT);}
void loop() {   //Serial.println(String(convertRawAngleToDegrees(getRawAngle()),DEC));   int val = getRawAngle()*0.087;   Serial.println(val);   //delay(10);   digitalWrite(OUTPORT,HIGH);   delayMicroseconds(400);   digitalWrite(OUTPORT,LOW);   delay(3);}
float convertRawAngleToDegrees(word newAngle){  //Raw data reports 0-4095 segments, which is 0.087 of a degreefloat retVal = newAngle * 0.087;  return retVal;}
word getRawAngle(){  return readTwoBytes(_raw_ang_hi, _raw_ang_lo);}
int readOneByte(int in_adr){  int retVal = -1;  Wire.beginTransmission(_ams5600_Address);  Wire.write(in_adr);  Wire.endTransmission();  Wire.requestFrom(_ams5600_Address, 1);  while(Wire.available() == 0);  retVal = Wire.read();  return retVal;}
word readTwoBytes(int in_adr_hi, int in_adr_lo){  word retVal = -1;  /* Read Low Byte */  Wire.beginTransmission(_ams5600_Address);  Wire.write(in_adr_lo);  Wire.endTransmission();  Wire.requestFrom(_ams5600_Address, 1);  while(Wire.available() == 0);  int low = Wire.read();  /* Read High Byte */    Wire.beginTransmission(_ams5600_Address);  Wire.write(in_adr_hi);  Wire.endTransmission();  Wire.requestFrom(_ams5600_Address, 1);  while(Wire.available() == 0);  word high = Wire.read();  high = high << 8;  retVal = high | low;  return retVal;}

串口绘图:

AS5600:12位可编程的磁式转动位置传感器,可用在无人机云台上图15

以上代码来自:

https://blog.csdn.net/u012388993/article/details/113590623


声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。 
云台 传感器 无人机
more
vivo 入局手持云台相机赛道,首款产品预计明年发布
【前沿】手机+伸缩云台相机一体化?荣耀机器人手机公布
G12遥控器连接C20云台教程演示
SKYDROID C01新品上市:超清EIS电子图像增稳云台!
新机:魅族22再次延期;Find X9Pro搭载7500mAh电池;华为WATCH5新配色开售;传vivo明年发布手持云台相机
OPPO也要做手持云台相机,对标大疆,计划2026年内发布;手机厂商海报小字引发热议,魅族高管回应;曝顶级AI大牛加入阿里通义
手机云台战事再起:影石凶猛,浩瀚围困
vivo X300 Pro搭载LYT-828云台级主摄,全球首发
Copyright © 2025 成都区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号