基于STM32F103——XGZP6847D压力传感器+串口打印

2023-05-16

基于STM32F103—XGZP6847D压力传感器+串口打印

  • 基本介绍
    • 概述
    • 产品特点
    • 引脚的连接 (IIC通信)
    • 名称含义的介绍
    • I2C通信协议 (设备地址是 `0x6D`)
    • 寄存器描述
  • 工作模式
    • 寄存器
      • Reg0x30(测量命令寄存器)
      • Reg0xA5
      • Reg0xA6
    • 模式说明
      • 组合数据采集模式
      • 休眠数据采集模式
  • 代码编写
    • 等待模式可读
    • 读取压力值
    • 读取温度值
    • 主程序
  • 最终效果

基本介绍

概述

XGZP6847D 型压力传感器尺寸小、易安装,广泛用于医疗电子、汽车电子、消费电子、运动健身器材、
物联网等领域

产品特点

在这里插入图片描述

引脚的连接 (IIC通信)

在这里插入图片描述

名称含义的介绍

在这里插入图片描述

I2C通信协议 (设备地址是 0x6D)

在这里插入图片描述

寄存器描述

在这里插入图片描述

工作模式

寄存器

Reg0x30(测量命令寄存器)

  • Measurement_control<2:0>(工作模式)
  • 010b,组合采集模式(一次温度采集后立即进行一次传感器压力信号采集)。
  • 011b,休眠工作模式(定期的执行一次组合采集模式,间隔时间由‘sleep_time’决定)
  • Sleep_time<7:4>: 0001:62.5ms, 0010:125ms … 1111: 1s, 0000:无意义。(仅在休眠工作模式下有效)
  • Sco:数据采集完成标志位。1, 开始数据采集;0,采集结束(休眠工作模式除外)。

Reg0xA5

  • Aout_config<7:4>:模拟输出配置(建议保留默认配置)
  • LDO_config:内部 LDO 配置。0,配置成 1.8V;1,配置成 3.6V
  • Unipolar:0,ADC 原始数据以有符号数格式输出;1: ADC 原始数据以无符号格式输出。(仅当‘Data_out_control’=1 有效)
  • Data_out_control:0,输出校准数据;1,输出 ADC 原始数据(默认配置为 0)
  • Diag_on:0,关闭诊断功能;1,开启诊断功能(默认开启)

Reg0xA6

  • Input Swap:在传感器内部交换差分信号极性。
  • Gain_P<5:3>:采集传感器信号时 PGA 增益,000:增益=1X。001:增益=2X。010:增益=4X。011:增益=8X。100: 增益=16X。101:增益=32X。110: 增益=64X。111:增益=128X。
  • OSR_P<2:0>:采集传感器信号时的过采样,000:1024X, 001:2048X, 010:4096X, 011:8192X,100:256X, 101:512X, 110:16384X, 111:32768X。

模式说明

组合数据采集模式

在这里插入图片描述

休眠数据采集模式

在这里插入图片描述

代码编写

  • 这里我是选择 组合采集模式

    • Measurement_control<2:0>(工作模式) 设置为010b
  • 组合模式读取数据按照如下指令顺序进行操作(其他模式参考 0x30 寄存器定义相应调整即可):

    • 1、发送指令 0x0A(即 00001010)到 0x30 寄存器进行一次温度采集,一次压力数据采集。
    • 2、读取 0x30 寄存器地址,若 Sco 位为 0 代表采集结束,可以读取数据, 否则等待延迟 20ms 读取。
    • 3、读取 0x06、0x07、0x08 三个寄存器地址数据构成 24 位 AD 值(压力数据 AD 值),读取 0x09、0x0A
      两个寄存器地址数据构成 16 位 AD 值(温度数据 AD 值)。

等待模式可读

/**
 *	描述: XGZP6847模块等待可读压力和温度
 *	参数: 无
 * 	返回: 0:可读 1:不可读
 */
unsigned char xgzp6847_wait(void)
{
	unsigned char ack, data, status;

	/* 设置组合数据采集模式 */
	ack = xgzp6847_write_byte(0x30, 0x0A);
	if (ack)
	{
		return 1;
	}

	ack = xgzp6847_read_byte(0x30, &data);
	if (ack)
	{
		return 1;
	}
	
	/* 若 Sco 位为 0 代表采集结束 否则等待延迟 20ms 读取 */
	status = data & 0x08;
	if (status)
	{
		delay_ms(20);
	}	

	return 0;	
}

读取压力值

/**
 *	描述: XGZP6847模块读取压力
 *	参数: 无
 * 	返回: 读取到的压力(Pa)
 */
int xgzp6847_read_pressure(void)
{

	int pressure = 0;
	unsigned char pressure_H, pressure_M, pressure_L;
	
	xgzp6847_read_byte(DATA_MSB_ADDR, &pressure_H);	/* <23:16> */
	xgzp6847_read_byte(DATA_CSB_ADDR, &pressure_M);	/* <15:8> */
	xgzp6847_read_byte(DATA_LSB_ADDR, &pressure_L);	/* <7:0> */

	pressure |= (unsigned int)pressure_H << 16;
	pressure |= (unsigned int)pressure_M << 8;
	pressure |= (unsigned int)pressure_L << 0;

	
	/* 超过 8388606 为负压值 */
	if (pressure > 8388608)	//0x800000
	{
		pressure = (pressure - 16777216) / 64;
	}
	else
	{
		pressure = pressure / 64;
	}
	
	return pressure;	//单位为 Pa
}

读取温度值

/**
 *	描述: XGZP6847模块读取温度
 *	参数: 无
 * 	返回: 读取到的温度
 */
short xgzp6847_read_temperature(void)
{
	unsigned char temperature_H, temperature_L;
	unsigned short temperature = 0;

	xgzp6847_read_byte(TEMP_MSB_ADDR, &temperature_H);	/* <15:8> */
	xgzp6847_read_byte(TEMP_LSB_ADDR, &temperature_L);	/* <7:0> */

	temperature |= (unsigned short)temperature_H << 8;
	temperature |= temperature_L << 0;

	if (temperature > 32786)	//0x8000
	{
		temperature = (temperature - 65536) / 256;
	}
	else
	{
		temperature = temperature / 256;
	}
	
	return temperature;	/* °C */

}

主程序

/**
 *	描述: 读取压力和温度 并串口输出
 *	参数: 无
 *	返回: 无	 
 */
void xgzp6847_handler(void)
{
	int pressure = 0;
	short temperature = 0;

	pressure    = xgzp6847_read_pressure();
	temperature = xgzp6847_read_temperature();

	printf("pressure: %6d  temperature:%3d\r\n", pressure, temperature);	
}


int main()
{
	usart1_init(115200);	//串口1初始化   用于输出
	xgzp6847_init();

	while(1)
	{
		if (xgzp6847_wait())
		{
			continue;
		}
		xgzp6847_handler();	
		delay_ms(100);	/* 只是防止打印太快我看不清 */
	}  
}

最终效果

print("需要代码 +meQQ 844797079")

在这里插入图片描述

如果觉得这篇文章对你有用。欢迎大家点赞、评论哈哈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于STM32F103——XGZP6847D压力传感器+串口打印 的相关文章

  • kubectl管理与项目的完整周期

    目录 一 kubectl管理二 项目的完整周期2 1 创建项目2 2 项目的发布2 3 更新版本2 4 版本回滚2 5 删除资源 一 kubectl管理 Kubectl是管理k8s集群的命令行工具 xff0c 通过生成的json格式传递给a
  • 学习记录:Ubuntu系统安装远程控制软件teamviewer

    一 teamviewer安装包下载 1 下载官方地址 xff1a https www teamviewer cn cn download linux 2 百度网盘下载地址 xff1a 链接 xff1a https pan baidu com
  • 结构体的内存对齐

    之前我们都知道int类型大小是4个字节 xff0c char类型为1个字节 xff0c double为8个字节等等 但是结构体是由很多类型组成的 xff0c 那么它的大小是多少呢 xff1f 是所有类型相加之和还是另有算法 xff1f 接下
  • (linux-x86-arm)银河麒麟V10安装ToDesk远程控制

    摘要 xff08 linux x86 xff09 银河麒麟V10安装ToDesk远程控制 xff08 类似向日葵 xff0c 但是不限速 xff09 xff0c 同理UOS和其他操作系统操作一样 原文地址 xff1a xff08 linux
  • ftp550权限问题

    很多人在使用别人服务器上传ftp的时候都是没什么问题的 xff0c 但是如果遇到了自己或公司内部的服务器就可能出现ftp权限550的问题 问题 xff1a 为什么会出现550 xff1f 因为你的权限出现问题 xff0c 可能的问题就是服务
  • ABAQUS几何非线性问题:薄板大变形(如何定义材料方向)

    ABAQUS几何非线性问题 xff1a 薄板大变形 在本案例中 xff0c 笔者将从几何非线性角度分析一个线性材料的薄板在发生大尺度变形情况下的非线性问题 另外向大家简单介绍ABAQUS在求解非线性问题时所采用的方法 xff0c 以及分析步
  • you-get库、you-get 下载视频失败

    报错描述 xff1a 正常输入指令下载视频 xff0c 终端提示 some thiing went wrong 排查错误 xff1a 1 排查python环境版本过低 xff0c 截止目前you get 支持Python 3 7 4 or
  • Kafka性能测试工具

    简介 Kafka本身自带了性能测试的脚本 xff0c 可以测试发送端和消费端的速度 xff0c 分别为 xff1a kafka producer perf test sh kafka consumer perf test sh 这两个脚本可
  • 如何在 Windows 安装轻量级虚拟机工具 Multipass

    文章目录 背景下载安装启动 Multipass1 点击菜单栏 Multipass 启动2 桌面右小角右键点击 Multipass 图标 xff0c 点击 Open Shell3 等待虚拟机安装完毕4 测试外网连通 相关命令1 查看 Mult
  • 社区版 IntelliJ IDEA 如何创建Spring boot项目

    背景 社区版的 IntelliJ IDEA 虽然没有 Spring initializr 插件 xff0c 但是官方仍然提供了一个友好方式给予我们快捷的创建Spring boot项目 创建过程 1 打开在线的 spring initiali
  • PyFlink 安装和使用

    环境准备 1 操作系统 Ubuntu 20 04 笔者使用 Multipass 安装 Ubuntu 虚拟机 参考 xff1a 如何在 MacOS 安装轻量级虚拟机工具 Multipass 如何在 Windows 安装轻量级虚拟机工具 Mul
  • Flink CDC 系列(7)—— 从 MySQL 到 ElasticSearch

    Flink CDC 系列文章 xff1a Flink CDC 系列 xff08 1 xff09 什么是 Flink CDC Flink CDC 系列 xff08 2 xff09 Flink CDC 源码编译 Flink CDC 系列 xff
  • Apache Doris 系列: 基础篇-Flink SQL写入Doris

    简介 本文介绍 Flink SQL如何流式写入 Apache Doris xff0c 分为一下几个部分 xff1a Flink Doris connectorDoris FE 节点配置Flink SQL 写 Doris Flink Dori
  • Apache Doris 系列: 基础篇-单独更新一列

    数据模型选择 数据表使用 Aggregate 聚合模型 需要更新的字段使用关键字 REPLACE IF NOT NULL 举例 建表 span class token keyword CREATE span span class token
  • SeaweedFS学习笔记:调优

    文章目录 1 使用 LevelDB 作为索引的存储2 预先分配volume file的磁盘空间3 提高写并发4 提供读并发5 增加更多的硬盘驱动器6 提高用户打开文件的限制数7 内存消耗7 1 内存中的索引7 2 并发读 8 当网络不稳定时
  • 树莓派3b+简单入门

    树莓派3B 43 简单入门 panday 博客园 树莓派3B 43 远程登录详细配置方法 落晓o的博客 CSDN博客 树莓派ssh配置 1 外观和基本情况 树莓派3b 43 开箱测试 树莓派3B 43 开箱测试 树莓派入门教程 微雪课堂 刚
  • SeaweedFS学习笔记:Volume 管理

    在一个大型的集群中 xff0c 增加 下线 替换Volume服务器都是很常见的操作 这些操作会带来volume副本的丢失 xff0c 或者Volume副本数量的不平衡 1 修复丢失的Volume 当某个Volume server挂掉时 xf
  • SeaweedFS学习笔记:S3-API

    文章目录 1 实现机制2 支持更多的桶2 1 Volume的最大size调小2 2 限制Volume的增长速度 3 启动S3 gateway服务4 通过s3cmd操作SeaweedFS4 1 s3cmd的安装4 2 配置4 3 s3cmd使
  • C语言:利用顺序栈判断一个字符是否为回文

    C语言 xff0c 利用顺序栈判断一个字符是否为回文 include span class token generics function span class token punctuation lt span stdio span cl
  • 解决在window中远程连接Linux下的MySQL

    前言 在实际开发中 xff0c 我们连接数据库肯定是远程连接的 xff0c 那这是如何设置的呢 xff0c 让我们来探究一下 文章目录 前言1 问题2 确认网络3 关闭防火墙或者开放端口4 修改Linux下的配置5 测试总结 准备条件 xf

随机推荐