当前位置: 首页 > wzjs >正文

知名营销类网站国家企业信用信息公示系统官网 2

知名营销类网站,国家企业信用信息公示系统官网 2,怎样免费做网站推广,网站设计优秀作品简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…

简介

本篇文章的代码已经上传到了github上面,开源代码
作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。

参考资料

QMC5883L磁场传感器驱动

QMC5883L磁力计介绍(硬件+软件)(附STM32程序~~~)

移植

这个具体的文件在路径Core/Src/Hardware/Magnetic/QMC5883下面,里面也有对应的说明文件

更改底层通信

你需要更改下面的这些函数, 也就是常规的底层通信,替换成你的IIC驱动函数。这里我使用的是软件IIC,具体的文件在Core/Src/Conmunication/IIC_moni路径下,这个路径下面还有具体的说明和使用文件

uint8_t QMC5883L_ReadOneReg(uint8_t RegAddr, uint8_t *pData){
uint8_t ret = 0;
#if QMC_HARD==1//硬件I2C#else//软件I2C
ret = iic[QMC5883_IIC].ReadReg(QMC5883_IIC, (QMC5883L_CHIPID << 1 | 0), (RegAddr), pData, 1);
#endif
return ret;
}uint8_t QMC5883L_ReadMultReg(uint8_t RegAddr, uint8_t RegNum, uint8_t DataBuff[]){
uint8_t ret = 0;
#if QMC_HARD==1//硬件I2C#else//软件I2C
ret = iic[QMC5883_IIC].ReadReg(QMC5883_IIC, (QMC5883L_CHIPID << 1 | 0), RegAddr, DataBuff, RegNum);
#endif
return ret;
}uint8_t QMC5883L_WriteOneReg(uint8_t RegAddr,uint8_t data){
uint8_t ret = 0;
#if QMC_HARD==1//硬件I2C#else//软件I2C
ret = iic[QMC5883_IIC].WriteReg(QMC5883_IIC, (QMC5883L_CHIPID << 1 | 0), RegAddr, &data, 1);
#endif
return ret;
}

更改初始化函数

因为我是用的软件IIC所以iic_attach需要重新指定引脚和下标QMC5883_IIC

uint8_t QMC5883L_init(void){
#if QMC_HARD==1//硬件I2C#else//软件I2Ciic_attach(QMC5883_IIC,QMC5883L_I2C_SCL_Port,QMC5883L_I2C_SCL_Pin,QMC5883L_I2C_SDA_Port,QMC5883L_I2C_SDA_Pin,QMC_HARD);
#endifu8 tempreg;if(QMC5883L_ReadOneReg(QMC5883L_CHIPID, &tempreg) == FALSE){printf("QMC5883L初始化失败,读取芯片ID失败\r\n");return FALSE;}if(tempreg != QMC5883L_ID){printf("QMC5883L初始化失败,无效的ID:0x%X\r\n", tempreg);return FALSE;}printf("QMC5883L初始化成功,ID:0x%X\r\n", tempreg);QMC5883L_WriteOneReg(QMC5883L_CONTROL2_REG, 0X80);			//复位,要延时一定时间delay_ms(100);QMC5883L_WriteOneReg(QMC5883L_SET_RESET_PERIOD, 0X01);		//复位后必须写入0x01,否则温度为0,磁场数据也不对QMC5883L_SetMode(QMC5883L_MODE_CONTINUOUS, QMC5883L_ODR_50HZ, QMC5883L_RNG_2G, QMC5883L_OSR_64);//设置工作模式return 1;
}

同时你也可以替换QMC5883L_SetMode的参数替换各种不同的控制模式,具体定义在qmc5883.h中, 而对于这些模式分别有什么作用,具体看芯片手册的最后几页,都有详细的说明,我也上传到了我的仓库当中

//QMC5883L工作模式
typedef enum
{QMC5883L_MODE_STANDBY		=	0x00,	//待机模式QMC5883L_MODE_CONTINUOUS	=	0x01,	//连续工作模式
}QMC5883L_MODE;//QMC5883L输出速率
typedef enum
{QMC5883L_ODR_10HZ			=	0x00,	//10HzQMC5883L_ODR_50HZ			=	0x01,	//50HzQMC5883L_ODR_100HZ			=	0x02,	//100HzQMC5883L_ODR_200HZ			=	0x03,	//200Hz
}QMC5883L_ODR;//QMC5883L测量范围
typedef enum
{QMC5883L_RNG_2G				=	0x00,	//2GQMC5883L_RNG_8G				=	0x01,	//8G
}QMC5883L_RNG;//QMC5883L过采样
typedef enum
{QMC5883L_OSR_512			=	0x00,	//512QMC5883L_OSR_256			=	0x01,	//256QMC5883L_OSR_128			=	0x02,	//128QMC5883L_OSR_64				=	0x03,	//64
}QMC5883L_OSR;

使用

后续就不用太纠结了,可以直接使用我声明在qmc5883.c文件下的一个结构体变量qmc5883

QMC5883L_HANDLE qmc5883 = {0,0,0,QMC5883L_init,QMC5883_GetData,QMC5883L_GetTemper
};

在路劲Core/Src/Hardware/use.c下有使用示例:
只需要三个函数 init(), getYaw(), getTemp()即可获取全部的参数

// todo QMC5883
#include "Magnetic/QMC5883/qmc5883.h"
void use_qmc5883(void){qmc5883.init();for(;;){printf("qmc:%d, %d\r\n", qmc5883.getYaw(), qmc5883.getTemp());HAL_Delay(10);}
}

不过还有具体的计算函数,我并没有对原始的数据进行滤波,仅仅是根据原始数据求了一个反三角函数而已,但是即便如此采集的数据依然不错,数据范围为 [0, 360],0和360度的边界会直接跳变int16_t QMC5883_GetData(void){

int16_t QMC5883_GetData(void){int16_t X, Y,Z;QMC5883L_GetMagneticData(&X, &Y, &Z);qmc5883.yaw = (atan2(Y,X) * (180 / 3.14159265) + 180);return qmc5883.yaw;
}

文章转载自:

http://W3FKkvoC.mjgxL.cn
http://kmPvLllS.mjgxL.cn
http://qn0I6vDd.mjgxL.cn
http://AezvMqav.mjgxL.cn
http://TiXdjUAz.mjgxL.cn
http://nZxfSg79.mjgxL.cn
http://0EfVzRdp.mjgxL.cn
http://Xmi2Cgzw.mjgxL.cn
http://kldVRDUW.mjgxL.cn
http://tWwWTSHU.mjgxL.cn
http://If0UnAMT.mjgxL.cn
http://TKuGDeYS.mjgxL.cn
http://5VJzqtct.mjgxL.cn
http://QpHzOGlo.mjgxL.cn
http://z99KWnYj.mjgxL.cn
http://TXTpvgsz.mjgxL.cn
http://cpSWOoVm.mjgxL.cn
http://lkLfUUnS.mjgxL.cn
http://MaIv7kCo.mjgxL.cn
http://S1hSvTLH.mjgxL.cn
http://0VAt1c2A.mjgxL.cn
http://eqjEsYA2.mjgxL.cn
http://9XWEf61z.mjgxL.cn
http://HUji5mSc.mjgxL.cn
http://G5ojDyOi.mjgxL.cn
http://zI0KX1mW.mjgxL.cn
http://BII43lhS.mjgxL.cn
http://EyBjDUMP.mjgxL.cn
http://lBLfmIxN.mjgxL.cn
http://GIUm9iAq.mjgxL.cn
http://www.dtcms.com/wzjs/682227.html

相关文章:

  • 做水果网站弄个什么名字做外贸网站卖什么东西好
  • 网站建站建设首选上海黔文信息科技有限公司2wordpress相册代码
  • 恒佳企划网站建设qq免费申请账号
  • 哈尔滨网站建站模板wordpress默认页面
  • 智慧团建登录网站入口企业策划公司
  • 重庆制作网站怎么选中英切换的网站咋做
  • 建网站需要哪些步骤舞台灯光网站建设公司
  • 浙江省城乡建设厅网站首页百度网站推广费用
  • 网站建设捌金手指花总十六排名前50名免费的网站
  • 网站会员推广功能wordpress 4.5.4 漏洞
  • 地产公司网站建设方案wordpress wordcloud
  • 如何 建设一个网站广州白云网站建设公司
  • 网站打不开dns修改吗网站流量功能更怎么做
  • 都江堰网站开发js面向对象网站开发
  • 咚咚抢网站怎么做的html网页游戏制作
  • 佛山网站建设公司88网站建设营销制作设计
  • 关于1-6月网站建设工作通报模板网站修改教程视频
  • 本地网站搭建流程保定网站制作费用
  • 网站开发工程师有证书考试吗网页的开发流程
  • 大型网站建设哪里济南兴田德润实惠吗东莞广告公司东莞网站建设
  • 老外的网站怎么做小程序可做网站吗
  • 群晖做自己的电影网站哈尔滨网站如何制作
  • 新遵义长清区seo网络优化软件
  • c 做网站织梦技术网站模版
  • 沈阳网站设计价格深圳网站建设送域名
  • 类似百科式的网站建设深圳网站程序开发制作
  • 深圳外贸网站定制企业vi设计的基本要素
  • 中英文网站是怎么做的安徽省建设工程信息网实名制
  • 三亚制作网站深圳有没有什么网站
  • 网站做su什么意思工信部网站备案管理系统