HMC5883L电子指南针(STM32F103C8T6)

本文介绍了使用HMC5883L磁场传感器、STM32微控制器和SG90舵机的电子指南针项目,详细阐述了磁力数据采集、处理和角度转换的过程,提供了关键代码和原理说明。
摘要由CSDN通过智能技术生成

一,项目简介

        项目名称:电子指南针

        硬件:HMC5883L,STM32F103C8T6,SG90舵机

        代码:https://github.com/zysampof/HMC5883L-STM32F1-.git

        欢迎留言交流


 

二,制作过程

1.项目思路

        项目分为三个步骤,一是通过HMC5883L采集磁场信息,传输到STM32内;二是STM32将角度信息传输到SG90;第三个步骤是将HMC5883L的信息转换为SG90的角度信息

  2.HMC5883L

        

 寄存器00,01,02配置如下:

    HMC5883L_WriteReg(HMC5883L_REG_CONFIG_A, 0X70);
	HMC5883L_WriteReg(HMC5883L_REG_CONFIG_B, 0X20);
	HMC5883L_WriteReg(HMC5883L_REG_MODE, 0X00);

寄存器03-08数据读取:

void HMC5883L_GetData(int16_t *GaX, int16_t *GaY, int16_t *GaZ)
{
	uint8_t DataH, DataL;								
	
	DataH = HMC5883L_ReadReg(HMC5883L_REG_OUT_X_M);		
	DataL = HMC5883L_ReadReg(HMC5883L_REG_OUT_X_L);		
	*GaX = (DataH << 8) | DataL;						
	
	DataH = HMC5883L_ReadReg(HMC5883L_REG_OUT_Z_M);		
	DataL = HMC5883L_ReadReg(HMC5883L_REG_OUT_Z_L);		
	*GaY = (DataH << 8) | DataL;						
	
	DataH = HMC5883L_ReadReg(HMC5883L_REG_OUT_Y_M);		
	DataL = HMC5883L_ReadReg(HMC5883L_REG_OUT_Y_L);		
	*GaZ = (DataH << 8) | DataL;						
}

3.SG90

代码见仓库

4.信息转换

(1)磁力数据过滤

float EMA(float rawValue, float filteredValue)
{
    return alpha * rawValue + (1 - alpha) * filteredValue;
}

原理:指数移动平均值(Exponential Moving Average,简称EMA)

(2)磁场强度转换角度

    ArcTan = (double)y / (double)x;
    Angle = atan(ArcTan)*57.3 + 90;

其中,x,y为磁场矢量在x,y轴上的投影(HMC5883L测量值)

三,感谢

 江协科技江协科技

https://github.com/uestcgaosir/Embedded-system-recruitment/tree/master

  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值