chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

基于STM32F103驅(qū)動AS5600讀取磁體旋轉(zhuǎn)的模擬量/角度數(shù)據(jù)

jf_88434166 ? 來源:jf_88434166 ? 作者:jf_88434166 ? 2025-11-30 15:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、AS5600簡介

AS5600 是一款易于編程的磁性旋轉(zhuǎn)位置傳感器,具有高分辨率 12 位模擬或 PWM 輸出。該非接觸式系統(tǒng)可測量徑向磁化同軸磁體的絕對角度。AS5600 專為非接觸式電位器應用而設計,其堅固的設計可消除任何均勻外部雜散磁場的影響。 I2C 接口支持用戶輕松編程非易失性參數(shù),無需專用編程器。默認情況下,輸出范圍為 0 至 360 度。也可以通過編程零角度(起始位置)和最大角度(停止位置)來定義更小的輸出范圍。
AS5600 還配備了智能低功耗模式功能,可自動降低功耗。輸入引腳 (DIR) 可根據(jù)旋轉(zhuǎn)方向選擇輸出極性。如果 DIR 接地,則輸出值會隨著順時針旋轉(zhuǎn)而增大。如果 DIR 連接到 VDD,則輸出值會隨著逆時針旋轉(zhuǎn)而增大。
特性
非接觸式角度測量
可編程最大角度從 18° 到 360°
12位DAC輸出分辨率
輸出方式:I2C接口 / PWM / 模擬輸出
7位I2C地址:0x36(地址不可配置)

二、引腳說明

VDD5V5V 模式下的正電壓供電
VDD3V33.3V 模式下的正電壓電源
OUT模擬/PWM輸出
GND
PGO編程選項(內(nèi)部上拉,連接到 GND = 編程選項 B)
SDAI2C 數(shù)據(jù)
SCLI2C 時鐘
DIR方向極性(GND = 值順時針增加,VDD = 值逆時針增加)

PGO引腳說明:
PGO=高電平(懸空/VDD):AS5600處于正常工作模式,僅讀取角度數(shù)據(jù)。
PGO=低電平(GND):進入編程模式,允許配置零位、最大角度等參數(shù)。

DIR 引腳控制磁鐵旋轉(zhuǎn)方向。如果 DIR 連接到 GND (DIR = 0),則從頂部順時針旋轉(zhuǎn)將產(chǎn)生計算角度的增量。如果 DIR 引腳連接到 VDD (DIR = 1),則計算的角度將逆時針旋轉(zhuǎn)。

三、功能框圖和數(shù)據(jù)的讀寫

寫數(shù)據(jù)

讀數(shù)據(jù)

指定地址讀數(shù)據(jù)

四、寄存器說明


常用寄存器有:
CONF(0x07 / 0x08):配置寄存器

RAW ANGLE(0x0C / 0x0D):未縮放/未處理的原始角度數(shù)據(jù),12-bit。

ANGLE(0x0E / 0x0F):已縮放/處理后的角度寄存器,12-bit。

RAW和ANGLE寄存器的區(qū)別:RAW 是芯片內(nèi)部直接計算得到的無縮放角度;ANGLE 是按 ZPOS/MPOS/MANG(如有編程)以及濾波/死區(qū)后的輸出值。

STATUS(0x0B):狀態(tài)寄存器,包含磁鐵檢測位(Magnet Detected,MD)、Magnet Low/High(ML/MH)等位,判斷是否檢測到合適的磁場(MD=1 表示檢測到磁鐵)。

AGC(0x1A):自動增益控制,表示放大倍數(shù),5V 下范圍 0..255,3.3V 下 0..128??捎脕硌a償因溫度變化、IC 與磁體之間的氣隙以及磁體性能下降而導致的磁場強度變化。為了獲得最穩(wěn)健的性能,增益值應位于其范圍的中間。
典型的徑向磁鐵感應氣隙在 0.5 mm 到 3 mm 之間,這取決于所選的磁體。更大、更強的磁鐵允許更大的氣隙。以 AGC 值為指導,通過調(diào)整磁體和 AS5600 之間的距離,使 AGC 值位于其范圍的中心,可以找到最佳氣隙。當使用直徑為 0.25mm 的磁體時,參考磁體的旋轉(zhuǎn)軸從封裝中心的最大允許位移為 6 mm。

MAGNITUDE(0x1B / 0x1C):用于判斷磁場強弱與是否飽和/過弱。

BURN(0xFF):寫 0x40 到 0xFF 可做永久寫入/OTP,慎重,寫入次數(shù)有限。
Burn_Angle 命令 (ZPOS, MPOS):主機微控制器可以使用 BURN_ANGLE 命令對 ZPOS 和 MPOS 進行永久編程。要執(zhí)行 BURN_ANGLE 命令,請將值 0x80 寫入寄存器 0x??FF。BURN_ANGLE 命令最多可執(zhí)行 3 次。ZMCO 顯示 ZPOS 和 MPOS 已永久寫入的次數(shù)。此命令僅在檢測到磁鐵存在 (MD = 1) 時執(zhí)行。
Burn_Setting 命令 (MANG, CONFIG):主微控制器可以使用 BURN_SETTING 命令永久寫入 MANG 和 CONFIG。要執(zhí)行 BURN_SETTING 命令,請將值 0x40 寫入寄存器 0x??FF。只有在 ZPOS 和 MPOS 從未被永久寫入 (ZMCO = 00) 的情況下,才能寫入 MANG。BURN_SETTING 命令只能執(zhí)行一次。

五、數(shù)據(jù)的換算公式

角度(deg) = raw / 4096.0 * 360.0。raw 為 0..4095(12-bit),即每 LSB ≈ 360/4096 = 0.087890625°。

MCU ADC(12-bit)電壓換算:V = ADC_raw / 4095.0 * Vref。其中, ADC_raw為OUT引腳輸出的模擬量,Vref為接的供電電壓。

六、STM32F103驅(qū)動AS5600獲取數(shù)據(jù)

準備工作

STM32F103C8T6開發(fā)板,OLED顯示屏,AS5600磁編碼器模塊,磁鐵等。

接線說明

STM32F103C8T6AS5600
3.3VVCC
GNDGND
PB10SCL
PB11SDA
PA0OUT
PB8OLED-SCL
PB9OLED-SDA

代碼示例

AS5600.c

#include "as5600.h"
#include "oled.h"

void AS5600_Init(void)
{
	MyI2C_Init();
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
	
	ADC_InitTypeDef ADC_InitStructure;
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;
	ADC_InitStructure.ADC_NbrOfChannel = 1;
	ADC_Init(ADC1, &ADC_InitStructure);
	
	ADC_Cmd(ADC1, ENABLE);
	
	ADC_ResetCalibration(ADC1);
	while (ADC_GetResetCalibrationStatus(ADC1) == SET);
	ADC_StartCalibration(ADC1);
	while (ADC_GetCalibrationStatus(ADC1) == SET);
}

void AS5600_WriteData(uint8_t Wordaddress, uint8_t Data)
{
	MyI2C_Start();
	MyI2C_SendByte(AS5600_ADDR);
	MyI2C_ReceiveAck();
	MyI2C_SendByte(Wordaddress);
	MyI2C_ReceiveAck();
	
	MyI2C_SendByte(Data);
	MyI2C_ReceiveAck();
	MyI2C_Stop();
}

uint32_t AS5600_ReadData(uint8_t Wordaddress)
{
	uint8_t Data;
	
	MyI2C_Start();
	MyI2C_SendByte(AS5600_ADDR);
	MyI2C_ReceiveAck();
	MyI2C_SendByte(Wordaddress);
	MyI2C_ReceiveAck();
	
	MyI2C_Start();
	MyI2C_SendByte(AS5600_ADDR | 0x01);
	MyI2C_ReceiveAck();
	Data = MyI2C_ReceiveByte();
	MyI2C_SendAck(1);
	MyI2C_Stop();
	
	return Data;
}

uint16_t AS5600_ReadRawAngle(void)	//獲取原始數(shù)值
{
    uint8_t hi = (uint8_t)AS5600_ReadData(AS5600_RAW_HI_REG);
    uint8_t lo = (uint8_t)AS5600_ReadData(AS5600_RAW_LO_REG);
    uint16_t val = ((uint16_t)hi < < 8) | (uint16_t)lo;
    val &= 0x0FFF;   
    return val;      
}

uint16_t AS5600_ADC_ReadRaw(void)  //獲取ADC數(shù)值
{
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);
	while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
	return ADC_GetConversionValue(ADC1);
}

float AS5600_ReadVolatge(uint16_t Vol)  //獲取電壓值
{
	float Volatge;
	Volatge = (float)Vol / 4095 * 3.3;
	return Volatge;
}

float AS5600_RawToDegree(uint16_t angle)  //獲取角度
{
	return ((float)angle) * 360.0f / 4096.0f;
}

main.c

#include "stm32f10x.h"                  // Device header
#include "delay.h"  
#include "Delay.h"
#include "AS5600.h"
#include "OLED.h"

uint16_t rawAngle;
uint16_t adcRaw;
float  adcVolt, angleDeg;
char tmp[16];

int main(void)
{ 
    OLED_Init();
    AS5600_Init();
	OLED_ShowString(1,1,"RAW: ");
	OLED_ShowString(2,1,"ADC: ");
	OLED_ShowString(3,1,"Vol: 0.00V");
	OLED_ShowString(4,1,"ANG: 000.0");

	while(1)
	{
		rawAngle = AS5600_ReadRawAngle();  //角度原始數(shù)值
		adcRaw = AS5600_ADC_ReadRaw();	   //ADC模擬量
		adcVolt = AS5600_ReadVolatge(adcRaw);	//電壓值
		angleDeg = AS5600_RawToDegree(rawAngle);  //角度:0-360°
		
		OLED_ShowNum(1,6,rawAngle,4);
		
		OLED_ShowNum(2,6,adcRaw,4);
		
		OLED_ShowNum(3, 6, adcVolt, 1);
		OLED_ShowNum(3, 8, (uint16_t)(adcVolt * 100) % 100, 2);

        OLED_ShowNum(4, 6, angleDeg, 3);
		OLED_ShowNum(4, 10, (uint16_t)(angleDeg * 1000) % 1000, 1);
		
		Delay_ms(50);
	}
}

效果展示


將磁鐵固定在電機上,讓電機轉(zhuǎn)動。

注意事項

  1. AGC 與磁鐵擺放:把磁鐵放到合適的間隙(典型 0.5–3 mm),并用 AGC 值把距離調(diào)到居中(3.3V 下 AGC 0..128,目標約中間值)。如果 AGC 很小或很大,說明磁場太弱或太強。
  2. 程序?qū)?OTP(Burn)非常謹慎:write 0x40 to 0xFF 會永久寫入,次數(shù)有限。務必在確認無誤后再做。
  3. 濾波設定:默認有 slow/fast filter,能在精度與響應間做折中;如果需要高速動態(tài)測量請降低慢濾波系數(shù)/調(diào)整 FTH。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32F103
    +關(guān)注

    關(guān)注

    34

    文章

    494

    瀏覽量

    67624
  • 位置傳感器
    +關(guān)注

    關(guān)注

    3

    文章

    306

    瀏覽量

    28621
  • AS5600
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    12506
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    AS5600 AS5600-ASOT AS5600-ASOM 非接觸式磁性位置傳感器

    使用電位計的應用的角位移,包括旋轉(zhuǎn)旋鈕和刻度盤。通過將AS5600與低成本兩極磁鐵配對,設計工程師能以與使用中檔電位計類似的成本部署角度測量系統(tǒng),這都得益于該設備極具吸引力的性價比。AS560
    發(fā)表于 11-05 13:56

    AS5600開發(fā)記錄

    AS5600這顆磁角度傳感器,以前就對相關(guān)的磁應用感到各種高大上(例如霍爾傳感器,磁流體等)。既然接觸到了,就開始搜索相關(guān)資料,發(fā)現(xiàn)有用的資料并不多,僅限官網(wǎng)上發(fā)布的一些。作為程序員看完datashe...
    發(fā)表于 08-27 07:32

    如何讀取stm32f103外部的數(shù)據(jù)?

    如何讀取stm32f103外部的數(shù)據(jù)?
    發(fā)表于 12-09 07:48

    如何用STM32F103模擬IIC去讀取陀螺儀/加速度/角度數(shù)據(jù)?

    如何用STM32F103模擬IIC去讀取陀螺儀/加速度/角度數(shù)據(jù)?
    發(fā)表于 12-14 07:28

    STM32讀取MPU6050角度數(shù)據(jù)的方法

    STM32讀取MPU6050角度數(shù)據(jù)OLED顯示 STM32F103C8T6讀取陀螺儀MPU6050的
    發(fā)表于 02-10 06:33

    基于stm32f103的mpu6050自帶的dmp數(shù)據(jù)讀取實驗程序

    基于stm32f103的mpu6050自帶的dmp數(shù)據(jù)讀取實驗程序
    發(fā)表于 12-08 15:54 ?273次下載

    基于stm32f103數(shù)據(jù)采集

    基于stm32f103數(shù)據(jù)采集,將0-3.3v的電壓轉(zhuǎn)換成數(shù)字量
    發(fā)表于 05-06 16:43 ?53次下載

    STM32F103使用總結(jié)

    STM32F103使用總結(jié)
    發(fā)表于 10-24 10:22 ?154次下載

    stm32f103移植

    stm32f103移植
    發(fā)表于 10-27 09:03 ?43次下載
    <b class='flag-5'>stm32f103</b>移植

    STM32F103教程之STM32F103單片機的使用心得資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是STM32F103教程之STM32F103單片機的使用心得資料免費下載目前很火的設計STM32教程。
    發(fā)表于 09-26 08:00 ?259次下載

    PLC如何讀取模擬量數(shù)據(jù)

    PLC的基本單元是不能直接讀取模擬量數(shù)據(jù)的,本身沒有模擬量輸入接口必須通過擴展的AD模塊才能讀取。AD模塊的作用就是把
    的頭像 發(fā)表于 11-02 09:42 ?1.3w次閱讀
    PLC如何<b class='flag-5'>讀取</b><b class='flag-5'>模擬量</b>的<b class='flag-5'>數(shù)據(jù)</b>

    STM32F103 模擬IIC時序

    STM32F103 模擬IIC時序
    發(fā)表于 11-25 09:51 ?35次下載
    <b class='flag-5'>STM32F103</b>  <b class='flag-5'>模擬</b>IIC時序

    STM32F103:內(nèi)部Flash模擬EEPROM

    內(nèi)部Flash模擬EEPROM一、原因由于STM32F103系列的單片機內(nèi)部Flash的擦寫次數(shù)僅有10k次,如果遇到想要存儲又多變,又需要掉電保存的數(shù)據(jù),就顯得有點捉襟見肘了。我決定利用單片機
    發(fā)表于 12-02 11:36 ?35次下載
    <b class='flag-5'>STM32F103</b>:內(nèi)部Flash<b class='flag-5'>模擬</b>EEPROM

    基于STM32F103的DAC8411驅(qū)動程序

    基于STM32F103的DAC8411驅(qū)動程序,親測可用,歡迎大家一起交流
    發(fā)表于 08-28 11:21 ?25次下載

    RT-Thread文檔_Keil 模擬STM32F103 上手指南

    RT-Thread文檔_Keil 模擬STM32F103 上手指南
    發(fā)表于 02-22 18:22 ?4次下載
    RT-Thread文檔_Keil <b class='flag-5'>模擬</b>器 <b class='flag-5'>STM32F103</b> 上手指南