首页 > 其他分享 >HX711 的数值换算:以Excel表格为工具

HX711 的数值换算:以Excel表格为工具

时间:2024-09-12 22:15:55浏览次数:8  
标签:表格 Weight HX711 Excel long 传感器 DT Shiwu

步骤 0 :获取已知数据

首先,需要得到几个已知条件:

1. 首先是HX711电路的两个电阻的阻值 R1, R2:目的是算出激励电压。

2. 然后是你手上拉力传感器的量程A(kg),拉力传感器的灵敏度(mV/V)

3. 其他HX711编程确定的参数(一般默认),如放大倍数为128倍,数值精度为24位。

下面以

  • HX711电路R1=15kΩ,R2=20kΩ; 
  • 500 kg量程,1.2mV/V的拉力传感器
  • 放大倍数:128倍,数值精度:24位

的已知条件进行如下计算:

 

步骤 1 :如何计算传感器激励电压

HX711 可以在产生 VAVDD 和 AGND 电压,即 711 模块上的 E+ 和 E- 电压。该电压通过 VAVDD=VBG(R1 +R2 )/R2 计算。VBG 为模块儿基准电压 1.25v,R1 = 15K ,R2 = 20K。 因此得出 VAVDD = 2.917V

(为了降低功耗,该电压只在采样时刻才有输出, 因此用万用表读取的值可能低于 4.3v ,因为万用表测量的是有效值。 )

 

步骤 2 :如何计算 AD 输出最大值

在 2.917 V 的供电电压下 500Kg 的传感器最大输出电压是 2.917v*1.2mv/V = 3.5 mV
经过 128 倍放大后,最大电压为 3.5 mV*128 = 448mV
经过 AD 转换后输出的24bit数字值最大为:(448mV/ 2.917V ) *(2^ 24)≈2576980

(注:257万,已知uint16_t 数值最大为65535, 因此不能用16位储存该数字)

 

步骤 3 :程序中数据如何转换

程序中通过HX711_Buffer = HX711_Read(); 获取当前采样的 AD 值,最大 2147483 ,存放在 long 型变量 HX711_Buffer 中,因 long 型变量计算速率和存放空间占用资源太多,固除以100 ,缩放为 int 型,便于后续计算。

Weight_Shiwu = HX711_Buffer/100;

Weight_Shiwu 最大为 25769 。

 

步骤 4 :如何将 AD 值反向转换为重力值。

假设重力为 x Kg ( x<500Kg ) , 测量出来的 AD 值为 y

对于满量程 500Kg,单片机得到最终的数字为25769,那么对于 x kg,其对应的数字就是 (x/500)*25769 = x * 51.54

所以 y = 51.54 x

因此得出 x = (y /51.54) Kg  = (y / 51.54)*1000 g

所以得出程序中计算公式

Weight_Shiwu = (unsigned int)((float)(Weight_Shiwu/51.54)*1000+0.05); //+0.05 是为了四舍五入百分位
特别注意:
因为不同的传感器斜率特性曲线不一样,因此,每一个传感器需要矫正这里的 51.54 这个除数。当发现测出来的重量偏大时,增加该数值。如果测试出来的重量偏小时,减小改数值。因传感器线性斜率不同而定。每个传感器都要校准。如果传感器测量值偏大,则需改大该数值,若传感器测量值偏小,则需改小该数值。

 

 

参考代码:以Arduino为例

/////以下为函数声明  
extern unsigned long HX711_Read(void);
extern long Get_Weight();
///变量定义
float Weight = 0;
int HX711_SCK =2;   ///     作为输出口
int HX711_DT= 3;    ///     作为输入口
long HX711_Buffer = 0;
long Weight_Maopi = 0, Weight_Shiwu = 0;
 #define GapValue 405       ///该值需校准 每个传感器都有所不同

void setup()
{  
 //初始化HX711的两个io口       
pinMode(HX711_SCK, OUTPUT);  ///SCK 为输出口 ---输出脉冲
pinMode(HX711_DT, INPUT); ///  DT为输入口  ---读取数据

 Serial.begin(9600);
 Serial.print("Welcome to use!\n");
 delay(3000);    ///延时3秒  
 //获取毛皮重量
 Weight_Maopi = HX711_Read(); 
}
 void loop()    ///  一直循环{}内容  ----- 同while(1){xxx}
{
 Weight = Get_Weight();  //计算放在传感器上的重物重量
 Serial.print(float(Weight/1000),3);  //串口显示重量,3意为保留三位小数
 Serial.print(" kg\n"); //显示单位
 Serial.print("\n");  //显示单位
 delay(2000);  //延时2s 两秒读取一次传感器所受压力
}
 //称重函数
long Get_Weight()
{
 HX711_Buffer = HX711_Read();    ///读取此时的传感器输出值
 Weight_Shiwu = HX711_Buffer;     ///将传感器的输出值储存
 Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取实物的AD采样数值。
 Weight_Shiwu = (long)((float)Weight_Shiwu/GapValue);    //AD值转换为重量(g)
 return Weight_Shiwu; 
}
unsigned long HX711_Read(void) //选择芯片工作方式并进行数据读取
{
 unsigned long count;   ///储存输出值  
 unsigned char i;     
   ////high--高电平 1  low--低电平 0  
 digitalWrite(HX711_DT, HIGH);   ////  digitalWrite作用: DT=1;
 delayMicroseconds(1); ////延时 1微秒  
 digitalWrite(HX711_SCK, LOW);  ////  digitalWrite作用: SCK=0;
 delayMicroseconds(1);   ////延时 1微秒  
 count=0; 
  while(digitalRead(HX711_DT));    //当DT的值为1时,开始ad转换
  for(i=0;i<24;i++)   ///24个脉冲,对应读取24位数值
 { 
   digitalWrite(HX711_SCK, HIGH);  ////  digitalWrite作用: SCK=0;
                                /// 利用 SCK从0--1 ,发送一次脉冲,读取数值
  delayMicroseconds(1);  ////延时 1微秒  
  count=count<<1;    ///用于移位存储24位二进制数值
  digitalWrite(HX711_SCK, LOW);   //// digitalWrite作用: SCK=0;为下次脉冲做准备
 delayMicroseconds(1);
   if(digitalRead(HX711_DT))    ///若DT值为1,对应count输出值也为1
   count++; 
 } 
  digitalWrite(HX711_SCK, HIGH);    ///再来一次上升沿 选择工作方式  128增益
 count ^= 0x800000;   //按位异或  不同则为1   0^0=0; 1^0=1;
///对应二进制  1000 0000 0000 0000 0000 0000  作用为将最高位取反,其他位保留原值
 delayMicroseconds(1);
 digitalWrite(HX711_SCK, LOW);      /// SCK=0;     
 delayMicroseconds(1);  ////延时 1微秒  
 return(count);     ///返回传感器读取值
}

对于51、stm32等单片机的程序,只需做出简单修改就可。

如主要为 修改延时函数 ,端口高低电平。 stm32 加上端口初始化(可配置 推挽输出)

标签:表格,Weight,HX711,Excel,long,传感器,DT,Shiwu
From: https://www.cnblogs.com/FBsharl/p/18411201

相关文章

  • 面对后台管理系统,全是表格类型的页面,如何快速开发
    项目开始当我们拿到设计稿或者原型图时,看到如下图展示的页面。我们就要想如何能够减少工作量,做出可复用的组件。既然每个页面都长得差不多,那我们观察可以发现,这个页面分成四个部分,【搜索部分、新增部分、表格展示部分、分页部分】由于本人使用的vue3+ts+element-plus+s......
  • 不升级 POI 版本,如何生成符合新版标准的Excel 2007文件
    开心一刻记得小时候,家里丢了钱,是我拿的,可爸妈却一口咬定是弟弟拿的爸爸把弟弟打的遍体鳞伤,弟弟气愤的斜视着我我不敢直视弟弟,目光转向爸爸说到:爸爸,你看他,好像还不服问题描述项目基于POI4.1.2生成Excel2007文件,已经对接了很多客户,也稳定运行了好几年了;就在前两天,对接......
  • SortableTableView:Android 表格视图库
    在Android应用开发中,提供用户交云和数据展示的功能是非常重要的。SortableTableView是一个开源的Android库,它提供了一个简单的TableView组件以及一个更高级的可排序TableView,允许开发者实现复杂的表格视图和数据排序功能。文章目录......
  • WPS表格/文字/演示教程零基础全套网盘资源分享
    随着互联网和计算机的普及,办公软件越来越流行。不管是职场打工人还是学生党,基本上都要接触或使用办公软件。常用的办公软件有Office与WPS,今天我们一起来聊聊后者。WPS相对来说是比较容易上手的办公软件,尤其是对于有一定计算机基础的用户。通过观看视频教程和动手操作,可以较快......
  • python读取Excel表格内容
    importpandasaspdio=r'C:\Users\lijj1\Downloads\OSS.xlsx'#绝对路径。PS:跟当前脚本在同一目录下用相对路径,否则用绝对路径。data=pd.read_excel(io,sheet_name='工作表1')#指定读取第一个sheetprint(data.head(2))#读取前2行column_data=data.loc[:,'对应域......
  • Excel数据清洗工具:提高数据处理效率的利器
    Excel数据清洗工具:提高数据处理效率的利器引言在当今的数据驱动时代,数据的质量直接影响着分析结果的可靠性和有效性。然而,在实际工作中,我们常常会遇到数据中的各种问题,如重复记录、缺失值、格式不一致等。为了解决这些问题,一款名为“Excel数据清洗工具”的应用程序应运而......
  • 【大数据】如何读取多个Excel文件并计算列数据的最大求和值
    导语:在数据分析和处理中,我们经常需要从多个Excel文件中提取数据并进行计算。本文将带您通过一个实用的Python教程,学习如何读取D盘目录下特定文件夹内的多个Excel文件,并计算特定列数据的最大求和值。文章目录一、准备工作二、教程步骤1.导入必要的库2.设置文件路径3.......
  • HTML/CSS/JS学习笔记 Day4(HTML--C3 表格)
    跟着该视频学习,记录笔记:【黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程】https://www.bilibili.com/video/BV14J4114768?p=12&vd_source=04ee94ad3f2168d7d5252c857a2bf358Day4 内容梳理:目录HTML3.0表格3.1表格标签(1)语法基本标签......
  • Excel--常用办公技巧
     一、常用快捷键:Ctrl+F查找内容,Ctrl+H替换内容Ctrl+N新建文件,Ctrl+P/F2(+Fn)打印预览Ctrl+Z 撤销操作,Ctrl+Y 恢复操作Ctrl+1,打开单元格格式对话框Ctrl+2/B字体加粗Ctrl+3/I字体倾斜Ctrl+4/U添加下划线Ctrl+5添加删除线Ctrl+9,快速隐藏行(选中列则快速隐藏全部工作表......
  • Excel--统计类函数,COUNT函数、COUNTA函数、COUNTBLANK函数、COUNTIF函数、COUNTIFS函
    目录 COUNT函数COUNTA函数COUNTBLANK函数COUNTIF函数COUNTIFS函数SUM函数SUMIF函数SUMIFS函数AVERAGE函数AVERAGEIFS函数COUNT函数计算指定区域内中含数据的单元格的个数,结果返回包含数字单元格的数目!只能计算包含数字的单元格COUNTA函数计算指定区域内所......