2025年5月18日 星期日

MPU-9250 Register (AK8963)

 

🧠 MPU-9250 控制與數據暫存器

暫存器位址功能說明使用範例
MPU9250_ADDR0x68MPU-9250 的 I2C 裝置地址i2c.writeto(0x68, ...)
PWR_MGMT_10x6B電源管理:喚醒、選擇時鐘來源writeto_mem(0x68, 0x6B, b'\x00') 退出睡眠模式
ACCEL_CONFIG0x1C加速度計量程設定(±2g、4g、8g、16g)writeto_mem(0x1C, b'\x00') 設為 ±2g
GYRO_CONFIG0x1B陀螺儀量程設定(±250、500、1000、2000 dps)writeto_mem(0x1B, b'\x00') 設為 ±250 dps
ACCEL_XOUT_H0x3B加速度計 X/Y/Z 的高位元起始位址readfrom_mem(0x3B, 6) 取 6 bytes
GYRO_XOUT_H0x43陀螺儀 X/Y/Z 的高位元起始位址readfrom_mem(0x43, 6)

🔌 I2C Master 模式控制暫存器(用於驅動 AK8963)

暫存器位址功能說明
USER_CTRL0x6A控制是否啟用 I2C Master 模式
INT_PIN_CFG0x37啟用 BYPASS 模式(值設為 0x02 可讓 MCU 直接使用 AK8963)
I2C_MST_CTRL0x24設定 I2C master 時脈頻率
I2C_SLV0_ADDR0x25Slave 0 裝置地址(設為 AK8963 地址 0x0C
I2C_SLV0_REG0x26要操作的 AK8963 暫存器位址
I2C_SLV0_CTRL0x27控制讀寫啟用與長度(如 0x81 表示讀 1 byte 並啟用)
EXT_SENS_DATA_000x49讀取外部感測器資料(如 AK8963)

🧲 AK8963(磁力計)相關暫存器

暫存器位址功能說明使用範例
AK8963_ADDR0x0C磁力計的 I2C 地址writeto(0x0C, ...)
AK8963_CNTL10x0A控制測量模式(0x16 為連續模式2,100Hz,16bit)
AK8963_XOUT_L0x03磁力資料起始位址(6 bytes)
AK8963_ST10x02狀態1:bit 0 表示資料準備完成
AK8963_ST20x09狀態2:bit 3 為溢位檢查
AK8963_WHO_AM_I0x00裝置 ID,應為 0x48

✅ 實用範例:讀取磁力計資料流程

[python]
# 1. 啟用 BYPASS 模式 i2c.writeto_mem(0x68, 0x6A, b'\x00') # USER_CTRL i2c.writeto_mem(0x68, 0x37, b'\x02') # INT_PIN_CFG # 2. 設定 AK8963 為連續量測 i2c.writeto_mem(0x0C, 0x0A, b'\x16') # CNTL1 = 0x16 (100Hz, 16bit) # 3. 讀取磁力資料 status = i2c.readfrom_mem(0x0C, 0x02, 1)[0] if status & 0x01: data = i2c.readfrom_mem(0x0C, 0x03, 6) mx, my, mz = struct.unpack('<hhh', data)

沒有留言:

張貼留言