做程序网站需要什么代码吗,网站建设 中企动力 常州,小程序代理需要多少钱,做造价在那个网站比较好欢迎入群共同学习交流 时间记录#xff1a;2024/11/9
一、知识点记录
1、hx711 1#xff09;HX711是一款高精度压力传感器专用的24位模数转换芯片#xff0c;主要功能是将测得的微小电压信号放大到可以被微控制器读取的范围 2#xff09;工作电压2.6-5.5V 3#xff09;引…欢迎入群共同学习交流 时间记录2024/11/9
一、知识点记录
1、hx711 1HX711是一款高精度压力传感器专用的24位模数转换芯片主要功能是将测得的微小电压信号放大到可以被微控制器读取的范围 2工作电压2.6-5.5V 3引脚介绍
引脚描述VDD电源正极GND电源地SCK时钟信号引脚DT数据输入输出引脚
4压力传感器与hx711连线 E - 电源正极红线 E- - 电源负极黑线 A - 差分信号A通道绿色 A- - 差分信号A通道-白色 B - 差分信号B通道 B- - 差分信号B通道-
一般选择A通道128增益模式 5时序介绍 DT线高电平时SCK时钟线低电平等待DT线变为低电平后数据准备完毕可以进行读取重量数据一共24位ADC数据高位先读上升沿等待数据变换下降沿读取数据通道和增益根据此次周期个数决定切换通道和增益的话至少需要两个周期进行数据稳定
二、示例程序
头文件
#ifndef __HX711_H__
#define __HX711_H__#include stm32f10x.hvoid hx711Init(void);
void hx711Zero(void);
float hx711GetWeight(void);#endif
源程序
#include hx711.h/*** 使用A通道128增益模式25时钟脉冲
*/#define SCK_HIGH GPIO_SetBits(GPIOB, GPIO_Pin_9)
#define SCK_LOW GPIO_ResetBits(GPIOB, GPIO_Pin_9)
#define DT_HIGH GPIO_SetBits(GPIOB, GPIO_Pin_8)
#define DT_LOW GPIO_ResetBits(GPIOB, GPIO_Pin_8)
#define DT_READ GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_8)
#define DT_OUTMODE {GPIOB-CRH 0xFFFFFFF0; GPIOB-CRH | 0x00000003;} // 推挽输出
#define DT_INMODE {GPIOB-CRH 0xFFFFFFF0; GPIOB-CRH | 0x00000004;} // 浮空输入static int hx711Read(void);
int zero 0;
#define gapValue 404.08 // 校准参数void hx711Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin GPIO_Pin_9 | GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIO_InitStructure);
}int hx711Read(void)
{int count 0;DT_OUTMODE;DT_HIGH;SCK_LOW; // 默认初始化模式DT_INMODE;while(DT_READ); // 等待数据准备好大概100ms,10Hzfor(u8 i0;i24;i){SCK_HIGH; // 上升沿准备数据count 1;SCK_LOW; // 下降沿采集数据if(DT_READ)count | 0x01;}SCK_HIGH; // 产生25个脉冲信号标识使用A通道128增益模式SCK_LOW;count ^ 0x800000;return count;
}void hx711Zero(void)
{for(u8 i0;i7;i){zero hx711Read();}zero / 7;
}float hx711GetWeight(void)
{float weight 0.0;int tempWeight 0;for(u8 i0;i7;i){tempWeight hx711Read();}tempWeight / 7;if(tempWeight zero)weight (float)(tempWeight - zero)/gapValue;elseweight 0.0;return weight;
}