为什么我的python磁强计校准代码不适用于软铁干扰?

2024-09-28 17:04:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试从我的STM32F3板上可视化磁强计校准。我通过USB发送原始的3轴(每轴16位无符号)进行读取,转换为16位有符号浮点,校准并最终在python代码中绘制。当我绘制校准的磁强计数据时,硬铁偏移似乎起作用(因为图形的中心是(0,0)),但软铁椭圆并没有变成一个圆,这让我很困惑。我是python新手,所以我认为这就是我的错误所在。我遵循方程式(6)&;(7) 来自本文{a1},下面是我的python代码和我的“校准结果”

(大小对我来说无关紧要,所以单位是原始传感器整数,而不是高斯)

任何帮助都将不胜感激

import numpy as np
import serial
import matplotlib.pyplot as plt
import time

#USB Com Port 16bit signed integer Communication 
s = serial.Serial('COM4')

magx = []
magy = []
magz = []

for i in range(0, 250):
    
    ret = s.read(6)
    magx.append(np.int16((np.uint16(ret[0]) << 8) + ret[1]))
    magy.append(np.int16((np.uint16(ret[2]) << 8) + ret[3]))
    magz.append(np.int16((np.uint16(ret[4]) << 8) + ret[5]))
    
    time.sleep(0.05)

s.close()

#Calibaration terms
Xmax = max(magx)
Xmin = min(magx)

Ymax = max(magy)
Ymin = min(magy)

Xsf = (Ymax - Ymin) / (Xmax - Xmin)
Ysf = (Xmax - Xmin) / (Ymax - Ymin) 

if Xsf < 1:
    Xsf = 1
if Ysf < 1:
    Ysf = 1

Xoff = ((Xmax - Xmin)/2 - Xmax) * Xsf
Yoff = ((Ymax - Ymin)/2 - Ymax) * Ysf

print("Xsf = ",Xsf,"Ysf = ",Ysf,"\r")
print("Xoff = ",Xoff,"Yoff = ",Yoff,"\r\r")

for i in range(0, 250):
    magx[i] = magx[i]*Xsf + Xoff
    magy[i] = magy[i]*Ysf + Yoff


plt.grid()
plt.scatter(magx, magy, marker="o",c='w',edgecolors='r')
plt.show()

"Calibrated Magnetometer Data Image"


Tags: importnpplt校准xminymaxretxmax