登录
|
立即注册
|
使用QQ帐号登录
论坛
>
51单片机
发帖
|
对基于hx711的电子秤实现单片机程序进行改进
看3543
|
回3
|
收藏
楼主
ID:315567
只看他
2019-5-15 19:53
最近使用了基于hx711的电子秤进行小实验,我是直接从淘宝上买的现成的模块。从卖家那里得到的程序,发现根本不能直接用,我前后买了两个,发现不同的传感器使用的参数的不一样的。网上买的现成的测量模块主要由双桥组成的应变片和hx711 24位A/D转换器组成,基本的思路是:通过电桥不稳定,输出不同的电压,得到不同的重量。也就是说,对于整个模块来说,1克的重量对应1个A/D输出。由此我发现,不同的模块,A/D输出是不一样的。我也参考了了很多网上有关程序的分析,发现都是理论分析,但是一用到实物中根本不太合适。因此,我通过写这一个小帖子,用一点小技巧更快对基于hx711电子秤的实现。
首先,
必须记住一点:实际重量与hx711输出值成正比
。那么首先写一个程序子程序实现不同重量下A/D输出的具体值,我做实验是采用的是不放东西上去时记下当前A/D的输出值x1,接着放一个标准重量为y1克的物体,记下当前A/D输出值x2。接着就可以粗略计算出重量与A/D输出值的线性关系,即:G=(d-x1)/(x2-x1/y1)。其中(G为实际的重量,单位为克,d为hx711的输出值)。那么再写一个程序,根据
重量与A/D输出值的线性关系,只要根据hx711实际输出值就可以知道物体实际的重量。另外,如果还有一点误差,根据实际情况,调整x1会得到更好的效果。
这是我最近做小项目时用到的一点点小技巧,可能存在一些不合理的地方,请大家多多包涵。具体实现代码,看附件的文本的文档。
单片机源程序如下:
代码:
#include "HX711.h"
#include "HX711.h"
#include “reg52.h”
sbit HX711_DOUT=P3^1;
sbit HX711_SCK=P3^0;
//****************************************************
//延时函数
//****************************************************
void Delay__hx711_us(void)
{
_nop_();
_nop_();
}
//****************************************************
//读取HX711
//****************************************************
//返回值为实际重量
int get_Weight(void) //增益128
{
long count;
unsigned char i;
float weight=0;
HX711_DOUT=1;
Delay__hx711_us();
HX711_SCK=0;
count=0;
// while(HX711_DOUT);
for(i=0;i<24;i++)
{
HX711_SCK=1;
count=count<<1;
HX711_SCK=0;
if(HX711_DOUT)
count++;
}
HX711_SCK=1;
Delay__hx711_us();
HX711_SCK=0;
weight=((long)(count-47625))/129; //式子中的参数根据实际测试参数进行调整,获取方法参照另外一个文档。count对应帖子中的d,47625对应x1,129对应(x2-x1/y1)。参数不合 //适时一般通过调整x1,可以完成微调。
return(weight);
}
所有资料51hei提供下载:
基于hx711电子秤改进代码.rar
(1.16 KB)
(下载次数: 49, 2019-5-15 19:53 上传)
下载积分: 黑币 -5
沙发
ID:328014
只看他
2019-5-17 03:30
好资料,51黑有你更精彩!!!
板凳
ID:217539
只看他
2019-7-11 09:34
啥玩意,感觉被蒙蔽了
地板
ID:282651
只看他
2019-7-18 11:29
一直不明白count的值是怎么来的,有什么意义,希望可以解答,谢谢
51黑电子论坛
Powered by
Discuz!
X3.1
首页
|
标准版
|
触屏版
|
电脑版