使用STM32 HAL库编写AS5600编码器程序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

STM32 HAL库 AS5600编码器程序


前言

提示:这里可以添加本文要记录的大概内容:

AS5600磁性旋转位置编码器是一款可编程、12位高分辨率、非接触式的设备,具有卓越的可靠性和耐久性。这个旋转位置传感器提供没有旋转角度限制。AS5600位置编码器可以通过I (2)C接口或通过OUT引脚输出PWM波/模拟波。典型应用电机闭环控制,机器人手臂,三脚架头,和工业机器控制。


提示:以下是本篇文章正文内容,下面案例可供参考

一、引脚及接线

在这里插入图片图一描述
图一 AS5600芯片引脚图
图二 引脚定义
VDD5V为5V供电,VDD3V3为3.3V供电,只需接一个电源。OUT引脚是模拟输出,随着电机的转动,OUT引脚会从0-3.3V来会变化,只需用单片机ADC引脚检测电压值即可判断电机位置。本文介绍如何获取通过数字方式读取AS5600的角度值。

图三 接线图

二、代码

1.as5600.c文件

代码如下(示例):

#include "AS5600.h"




unsigned char write_reg(unsigned char reg, unsigned char value)
{
	return HAL_I2C_Mem_Write(&hi2c1, Slave_Addr, reg, I2C_MEMADD_SIZE_8BIT, &value, 1, 50);
}

unsigned char write_regs(unsigned char reg, unsigned char *value, unsigned char len)
{
	return HAL_I2C_Mem_Write(&hi2c1, Slave_Addr, reg, I2C_MEMADD_SIZE_8BIT, value, len, 50);
}

unsigned char read_reg(unsigned char reg, unsigned char* buf, unsigned short len)
{
	return HAL_I2C_Mem_Read(&hi2c1, Slave_Addr, reg, I2C_MEMADD_SIZE_8BIT, buf, len, 50);
}



float i2c_AS5600_get_angle(void)
{   float angle_d;
	int16_t in_angle;
    uint8_t temp[2]={0,0};
		read_reg( Angle_Hight_Register_Addr, temp, 2);
    //printf("%d  %d\n",temp[0],temp[1]);
    in_angle = ((int16_t)temp[0] <<8) | (temp[1]);
    angle_d = (float)in_angle * cpr / 4096;
		//printf("angle=%.2f\n",angle_d);

		return angle_d;
	//angle_d为弧度制,范围在0-6.28	
}

2.as5600.h文件

#ifndef __AS5600_H__
#define __AS5600_H__

#include "main.h"
#include <stdio.h>
#define PI					3.14159265358979f
#define cpr (float)(2.0f*PI)
#define Slave_Addr                0x36<<1//设备从地址
#define Write_Bit                 0	   //写标记	
#define Read_Bit                  1    //读标记
#define Angle_Hight_Register_Addr 0x0C //寄存器高位地址
#define Angle_Low_Register_Addr   0x0D //寄存器低位地址
extern I2C_HandleTypeDef hi2c1;
unsigned char read_reg(unsigned char reg, unsigned char* buf, unsigned short len);
float i2c_AS5600_get_angle(void);
unsigned char write_reg(unsigned char reg, unsigned char value);
#endif
---

# 总结
相比模拟IIC,代码很简单,已经经过验证,另外,程序使用的STM32的IIC1。
物联沃分享整理
物联沃-IOTWORD物联网 » 使用STM32 HAL库编写AS5600编码器程序

发表评论