打印
[其他]

[经验] 基于HMC5883L的电子指南针

[复制链接]
8075|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cr315|  楼主 | 2021-7-12 15:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
四天前我已经发了一篇关于使用MM32开发板做电子指南针的帖子,那篇帖子内容不够详细。我现在把内容再细说一下。我把程序又调试修改了一些,现在把改进的程序也给大家分享一下。先来张图片看看效果。
这些照片是将传感器放在不同位置时读取的方位角度情况,由于传感器放置的不够水平精度有些小误差。

使用特权

评论回复
沙发
cr315|  楼主 | 2021-7-12 15:15 | 只看该作者
下面再说说编写程序方面的事
我使用的是MDK510版本的编译器

1.HMC5883L的底层程序是我移植厂家给的底层程序,我在I2C方面做了部分的改动。读取HMC5883L传感器的读取函数中要注意寄存器的地址和读出来的数据所存放的缓冲器大小及位置
void read_hmc5883l(void)//¶ÁÈ¡
{
        IIC_Write(HMC5883L_Addr,0x00,0x14);   //ÅäÖüĴæÆ÷A£º²ÉÑùƽ¾ùÊý1 Êä³öËÙÂÊ75Hz Õý³£²âÁ¿
        IIC_Write(HMC5883L_Addr,0x01,0x20);   //ÅäÖüĴæÆ÷B£ºÔöÒæ¿ØÖÆ
        IIC_Write(HMC5883L_Addr,0x02,0x00);   //ģʽ¼Ä´æÆ÷£ºÁ¬Ðø²âÁ¿Ä£Ê½
      
        Delayms(5);

        IIC_Read(HMC5883L_Addr,0x03,8);//OUT_X_L_A
        IIC_Read(HMC5883L_Addr,0x04,8);//OUT_X_H_A

        IIC_Read(HMC5883L_Addr,0x07,8);//OUT_Y_L_A
        IIC_Read(HMC5883L_Addr,0x08,8);//OUT_Y_H_A
        IF(x>0x7fff)x-=0xffff;         
        if(y>0x7fff)y-=0xffff;      
        if(z>0x7fff)z-=0xffff;      
                x=IIC_buf[0] << 8 | IIC_buf[1]; //Combine MSB and LSB of X Data output register
    y=IIC_buf[2] << 8 | IIC_buf[3]; //Combine MSB and LSB of Y Data output register
                z=IIC_buf[4] << 8 | IIC_buf[5]; //Combine MSB and LSB of Z Data output register
    angLEDot= atan2((double)y,(double)x) * (180 / 3.14159265) + 180; // angle in degrees
               
}      

使用特权

评论回复
板凳
cr315|  楼主 | 2021-7-12 15:17 | 只看该作者
2.关于显示坐标与角度方位情况的函数操作

        if((angledot < 22.5) || (angledot > 337.5 ))
                {
            LCD_ShowString(170,290,200,16,16,"         ");
                        LCD_ShowString(170,290,200,16,16,"South");  
                }                       
      
    if((angledot> 22.5) && (angledot < 67.5 ))
                {
                                LCD_ShowString(170,290,200,16,16,"         ");
                        LCD_ShowString(170,290,200,16,16,"South-West");
                }
    if((angledot > 67.5) && (angledot < 112.5 ))
                {
                                LCD_ShowString(170,290,200,16,16,"         ");
      LCD_ShowString(170,290,200,16,16,"West");
                }
          if((angledot > 112.5) && (angledot < 157.5 ))
                {
                                LCD_ShowString(170,290,200,16,16,"         ");
       LCD_ShowString(170,290,200,16,16,"North-West");
                }
    if((angledot > 157.5) && (angledot < 202.5 ))
                {
                                LCD_ShowString(170,290,200,16,16,"         ");
       LCD_ShowString(170,290,200,16,16,"North");
                }
    if((angledot> 202.5) && (angledot < 247.5 ))
                {
                                LCD_ShowString(170,290,200,16,16,"         ");
                         LCD_ShowString(170,290,200,16,16,"NorthEast");
                }
    if((angledot > 247.5) && (angledot < 292.5 ))
                {
                                LCD_ShowString(170,290,200,16,16,"         ");
      LCD_ShowString(170,290,200,16,16,"East");
                }
    if((angledot > 292.5) && (angledot < 337.5 ))
                {
                                LCD_ShowString(170,290,200,16,16,"         ");
                        LCD_ShowString(170,290,200,16,16,"SouthEast");
                }      

使用特权

评论回复
地板
cr315|  楼主 | 2021-7-12 15:18 | 只看该作者
本帖最后由 cr315 于 2021-7-12 15:19 编辑

在显示新的位置字符串时需要将显示的上一位置的字符串清除掉,我这里是让显示空格的方式来清除上次显示的字符串。
3.在方位识别方面还可以将角度分的更细致,在这里我只分了八个方位角。由于使用的是杜邦线连接的传感器,所以也会是数据受到影响。
IMG_20160910_091054.jpg (538 KB, 下载次数: 20)







IMG_20160910_091100.jpg (628.66 KB, 下载次数: 23)







IMG_20160910_091120.jpg (471.06 KB, 下载次数: 24)







截图00.jpg (23.49 KB, 下载次数: 24)









使用特权

评论回复
5
foxsbig| | 2021-7-14 11:42 | 只看该作者
指南针,不是要有个针指着南的么?

使用特权

评论回复
6
单片小菜| | 2021-7-14 15:13 | 只看该作者
看不见指南针的指针,在哪里呢?

使用特权

评论回复
7
自己造声卡| | 2021-7-14 17:01 | 只看该作者
没有看见指南针的表针。

使用特权

评论回复
8
aspoke| | 2021-8-8 21:48 | 只看该作者
hmc5883l库文件吗     

使用特权

评论回复
9
232321122| | 2021-8-8 21:48 | 只看该作者
电子罗盘HMC5883L和HMC5983哪个更好

使用特权

评论回复
10
ghuca| | 2021-8-8 21:48 | 只看该作者
hmc5883l的引脚 怎么连接

使用特权

评论回复
11
soodesyt| | 2021-8-8 21:48 | 只看该作者
  HMC5883L 的角度算法公式是怎样的?  

使用特权

评论回复
12
mnynt121| | 2021-8-8 21:48 | 只看该作者
怎样修改HMC5883L的默认IIC地址

使用特权

评论回复
13
plsbackup| | 2021-8-8 21:48 | 只看该作者
用过HMC5883L这个传感器?  

使用特权

评论回复
14
kmzuaz| | 2021-8-8 21:49 | 只看该作者
HMC5883L是怎么校正的呢  

使用特权

评论回复
15
qiufengsd| | 2021-8-8 21:49 | 只看该作者
HMC5883L磁阻传感器如何接收地磁场信息?

使用特权

评论回复
16
sdCAD| | 2021-8-8 21:49 | 只看该作者
怎样使用MPU6050连接HMC5883L

使用特权

评论回复
17
fengm| | 2021-8-8 21:49 | 只看该作者
hmc5883l 与adxl345哪个好

使用特权

评论回复
18
huquanz711| | 2021-8-10 18:30 | 只看该作者
还不错,谢谢分享。

使用特权

评论回复
19
sesefadou| | 2021-8-11 17:17 | 只看该作者
HMC5883L和HMC5983哪个更好

使用特权

评论回复
20
earlmax| | 2021-8-11 17:17 | 只看该作者
hmc5883L各方向角度不均匀  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1197

主题

3021

帖子

0

粉丝