OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 26990|回复: 54

关于HX711电子秤的问题求助

[复制链接]

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
发表于 2016-8-30 11:14:01 | 显示全部楼层 |阅读模式
10金钱
最近在做一款电子秤,用的是HX711芯片,主控是STM32F103VET6, 电子秤模块.png ,称重原理图是这样的,我只写了一个HX711的驱动程序,读出来的值一直为16777215,即2^24,不管怎么改变压力传感器,一直都是这个数值,这个好像是最大值了,不知道问题出在哪了。E+E-的电压接近3.3V,和芯片的供电电压接近了。。所以是这个最大值吗,请教一下做过这个东西的人,提供一下解决办法,还是我的思路有问题了

最佳答案

查看完整内容[请看2#楼]

问题解决!!第一:上午测得时候,接线应该是有误的,下午准确测量过了原理电子秤上的各个线之后正确接线。 第二:程序有部分问题。DOUT应为输入,全部无误程序如下: [mw_shl_code=c,true]void HX711_Init(void) //3õê¼»ˉHX711¶Ë¿ú { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-8-30 11:14:02 | 显示全部楼层
问题解决!!第一:上午测得时候,接线应该是有误的,下午准确测量过了原理电子秤上的各个线之后正确接线。
第二:程序有部分问题。DOUT应为输入,全部无误程序如下:

[mw_shl_code=c,true]void HX711_Init(void)        //3õê¼»ˉHX711¶Ë¿ú
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;         //SCK
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;         //DOUT
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;           
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //
GPIO_Init(GPIOB, &GPIO_InitStructure);         //
}


unsigned long Read_HX711(void)  //¶áHX711D¾Æ¬êä3öêy¾Y
{
unsigned long val = 0;
unsigned char i = 0;

GPIO_SetBits(GPIOB,GPIO_Pin_5);           //DOUT=1
GPIO_ResetBits(GPIOB,GPIO_Pin_6);           //SCK=0
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5));   //μè′yDOUT=0  
DelayUs(1);
for(i=0;i<24;i++)
{
GPIO_SetBits(GPIOB,GPIO_Pin_6);           //SCK=1
val=val<<1;
DelayUs(1);  
GPIO_ResetBits(GPIOB,GPIO_Pin_6);           //SCK=0
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5))   //DOUT=1
val++;
DelayUs(1);
}
GPIO_SetBits(GPIOB,GPIO_Pin_6);
val = val^0x800000;
DelayUs(1);
GPIO_ResetBits(GPIOB,GPIO_Pin_6);
DelayUs(1);  
return val;        
}
[/mw_shl_code]

现在可以读取到不同的AD采集值了,下一步就是转换成重量
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11545
金钱
11545
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-8-30 11:44:38 | 显示全部楼层

E+、E-,没说错吗?

回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-8-30 11:55:28 | 显示全部楼层
xuande 发表于 2016-8-30 11:44
E+、E-,没说错吗?

没有呀,这个接的不就是AVDD的电压吗,这个是压力传感器的电压,不对吗
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11545
金钱
11545
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-8-30 13:42:19 | 显示全部楼层

断开传感器,用电阻做分压,让芯片去测。

回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-11-30
在线时间
2 小时
发表于 2016-8-30 14:08:32 | 显示全部楼层
做的是测多重的 这个传感器的AD精度24位  特别灵敏 不好调
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-8-30 14:49:32 | 显示全部楼层
xuande 发表于 2016-8-30 13:42
断开传感器,用电阻做分压,让芯片去测。

我好像知道问题所在了,断掉传感器再看串口数据,变成2^23,接上也是2^23了,传感器根本没起到作用,计算了一下,这个AVDD应该有4.3V,万用表测出来比这个低一点,为3.4V,这两个电压都低于传感器的激励电压5V,所以传感器没工作,是不是这个原因?
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-8-30 15:04:28 | 显示全部楼层
但好像又不对,这个传感器是我从另外一个秤上拆的,接在那个秤上可以工作,测得工作的输入电压为3.3V,信号对地电压为1.4V,怎么转接到HX711上就不行了,驱动代码如下
[mw_shl_code=c,true]unsigned long ReadCount(void)
{
    unsigned long Count;
    unsigned char i;

//        RCC->APB2ENR |= 1<<3;
//    GPIOB->CRL &= 0X00ffffff;
//    GPIOB->CRL |= 0X003000000;  
       
        GPIO_InitTypeDef  GPIO_InitStructure;
               
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);       

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
       
   
    ADSK = 0;    //SCK=0
    Count = 0;
    while(ADDO);
    for (i = 0; i < 24; i++)
    {
        ADSK = 1;
        Count = Count << 1;
        ADSK = 0;
        if(ADDO) Count++;
    }
    ADSK = 1;
    Count = Count ^ 0x800000;
    ADSK = 0;
    return(Count);
}[/mw_shl_code]

串口打印的话就一句:                printf("DATA:%lu\r\n",ReadCount());
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-8-30 15:05:44 | 显示全部楼层
zailushang 发表于 2016-8-30 14:08
做的是测多重的 这个传感器的AD精度24位  特别灵敏 不好调

30KG的,我现在就是这个传感器的数据好像都读不到
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-8-30 15:09:39 | 显示全部楼层
传感器.jpg 补充一下,传感器是那种电阻应变式压力传感器,
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2016-8-13
在线时间
21 小时
发表于 2016-8-31 15:02:32 | 显示全部楼层
楼主,我用的是4个50kg的,请问怎样转换称重量?而且我用上述程序获取的值是val值是7583411,后三位一直在变化,求赐教
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-8-31 16:22:50 | 显示全部楼层
hyxhyx 发表于 2016-8-31 15:02
楼主,我用的是4个50kg的,请问怎样转换称重量?而且我用上述程序获取的值是val值是7583411,后三位一直在 ...

我也卡在这在。。应该还需要一个滤波算法,数据不稳定,转换我也不知道,网上那些好像不行
回复

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2016-6-29
在线时间
58 小时
发表于 2016-8-31 16:35:33 | 显示全部楼层
hyxhyx 发表于 2016-8-31 15:02
楼主,我用的是4个50kg的,请问怎样转换称重量?而且我用上述程序获取的值是val值是7583411,后三位一直在 ...

处理数据的时候有个参数吧,read完之后要除以那个数,得到具体的质量,每个传感器不一样的,要校准。
回复

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2016-6-29
在线时间
58 小时
发表于 2016-8-31 16:36:52 | 显示全部楼层
comprends 发表于 2016-8-31 16:22
我也卡在这在。。应该还需要一个滤波算法,数据不稳定,转换我也不知道,网上那些好像不行

不知道你选的精度是多少的压力传感器,应该不需要滤波吧。。。
回复

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2016-6-29
在线时间
58 小时
发表于 2016-8-31 16:40:58 | 显示全部楼层
hyxhyx 发表于 2016-8-31 15:02
楼主,我用的是4个50kg的,请问怎样转换称重量?而且我用上述程序获取的值是val值是7583411,后三位一直在 ...

因为不同传感器特性曲线不一样,read之后除以那个常数之后如果重量跟实际的比偏大,就 加大,反之就减小。
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-8-31 17:31:38 | 显示全部楼层
Clivia 发表于 2016-8-31 16:40
因为不同传感器特性曲线不一样,read之后除以那个常数之后如果重量跟实际的比偏大,就 加大,反之就减小 ...

你是指这个吗?Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/4.30+0.05);,改这个4.3?我获得的数据与0x800000进行异或,后再按这个处理的话差的很多,按他写的那个思路算。。完全是错的,http://bbs.elecfans.com/jishu_521207_1_1.html。我用的是30KG的传感器,异或后的数据为7个数,比如说:8167473,这种数据;如果我不进行异或,得到的是个二进制补码,就是6个数,如:203018。如果说这个数据是线性变化的话,我0G的时候读一个AD值,1g的时候再读一个,依次读下去,应该会有个大概的函数曲线,但这样的话,精度很差,而且读取的数据后三位变化比较大,经常是我空盘的时候,后三位数据可以从1-100的变化,加砝码也是一样的变,不知道怎么处理,现在加了一个例子里的滤波函数,效果稍微有一点,但误差有+-10g,太差了,这个应该是能精确计算的,就是不知道是怎么弄
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-8-31 17:37:15 | 显示全部楼层
而且不知道为什么,读这个数据的时候,数据不是一个稳定的小范围,而是一直递增,后三位增个100左右再递减,如果我要取这些的平均值的话应该怎么算呢?
回复

使用道具 举报

4

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-3-21
在线时间
12 小时
发表于 2016-8-31 19:25:11 | 显示全部楼层
波动是很正常的,24位ADC有效位数只能达到21位。
很多时候电子秤的精度取决于传感器的精度,毕竟传感器理想上是线性的
回复

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2016-6-29
在线时间
58 小时
发表于 2016-9-1 11:34:41 | 显示全部楼层
comprends 发表于 2016-8-31 17:31
你是指这个吗?Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/4.30+0.05);,改这个4.3?我获得的数 ...

[mw_shl_code=c,true]u32 dHX711_Read(void)        //&#212;&#246;ò&#230;128
{
        unsigned long dcount;
        unsigned char i;
          dHX711_DOUT=1;
        delay_us(1);       
          dHX711_SCK=0;
          dcount=0;
          while(dHX711_DOUT);
          for(i=0;i<24;i++)
        {
                  dHX711_SCK=1;
                  dcount=dcount<<1;
                delay_us(1);
                dHX711_SCK=0;
                  if(dHX711_DOUT)
                        dcount++;
                delay_us(1);
        }
        dHX711_SCK=1;
    dcount=dcount^0x800000;//μú25&#184;&#246;&#194;&#246;3&#229;&#207;&#194;&#189;μ&#209;&#216;à′ê±£&#172;×a&#187;&#187;êy&#190;Y
        delay_us(1);
        dHX711_SCK=0;  
        return(dcount);
}[/mw_shl_code]
这个是我用的读取传感器的代码,读取之后的数据再除以参数。重要的是你测重量需要的是变化量,也就是上电以后测一个数据,然后放上物体之后再减去这个数,至于误差肯定会有的,因为你传感器精度也不会那么高。你30kg的传感器,每g的电压波动大概是0.16mv,不知道传感器能不能达到这个精度。
回复

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2016-6-29
在线时间
58 小时
发表于 2016-9-1 11:40:26 | 显示全部楼层
comprends 发表于 2016-8-31 17:31
你是指这个吗?Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/4.30+0.05);,改这个4.3?我获得的数 ...

滤波你是怎么做的啊?能发来看下吗?之前一直没考虑过这个,因为我用起来感觉波动可以接受。因为用的150kg的传感器,而且对精度要求只到小数点后一位就好。
回复

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2016-6-29
在线时间
58 小时
发表于 2016-9-1 11:41:22 | 显示全部楼层
comprends 发表于 2016-8-31 17:37
而且不知道为什么,读这个数据的时候,数据不是一个稳定的小范围,而是一直递增,后三位增个100左右再递减 ...

你这个情况就不对了,能把你读数据的代码贴一下吗
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2016-8-13
在线时间
21 小时
发表于 2016-9-1 13:49:02 | 显示全部楼层
Clivia 发表于 2016-9-1 11:40
滤波你是怎么做的啊?能发来看下吗?之前一直没考虑过这个,因为我用起来感觉波动可以接受。因为用的150k ...

可以提供一下您的称重公式吗?
回复

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2016-6-29
在线时间
58 小时
发表于 2016-9-1 13:58:23 | 显示全部楼层
hyxhyx 发表于 2016-9-1 13:49
可以提供一下您的称重公式吗?

dWeight_Shiwu = dWeight_Shiwu - dWeight_Maopi;                       
       
dWeight_Shiwu = (u32)((float)dWeight_Shiwu/GapValue);        

这个dWeight_Shiwu是用前边那个read函数读出来的。
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2016-8-13
在线时间
21 小时
发表于 2016-9-1 14:11:18 | 显示全部楼层
Clivia 发表于 2016-9-1 13:58
dWeight_Shiwu = dWeight_Shiwu - dWeight_Maopi;                       
       
dWeight_Shiwu = (u32)((float)dWeight_Shiwu/G ...

再次冒昧问一下 dWeight_Maopi,GapValue这两个变量是如何取得?是根据传感器算的吗?
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-9-1 14:14:31 | 显示全部楼层
Clivia 发表于 2016-9-1 13:58
dWeight_Shiwu = dWeight_Shiwu - dWeight_Maopi;                       
       
dWeight_Shiwu = (u32)((float)dWeight_Shiwu/G ...

你这个GapValue就是那个系数吗,读数据的代码是一样的。
[mw_shl_code=c,true]unsigned long Read_HX711(void)  //&#182;áHX711D&#190;&#198;&#172;ê&#228;3&#246;êy&#190;Y
{
unsigned long val = 0;
unsigned char i = 0;

GPIO_SetBits(GPIOB,GPIO_Pin_5);           //DOUT=1
GPIO_ResetBits(GPIOB,GPIO_Pin_6);           //SCK=0
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5));   //μè′yDOUT=0  
DelayUs(1);
for(i=0;i<24;i++)
{
GPIO_SetBits(GPIOB,GPIO_Pin_6);           //SCK=1
val=val<<1;
DelayUs(1);  
GPIO_ResetBits(GPIOB,GPIO_Pin_6);           //SCK=0
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5))   //DOUT=1
val++;
DelayUs(1);
}
GPIO_SetBits(GPIOB,GPIO_Pin_6);
val = val^0x800000;
DelayUs(1);
GPIO_ResetBits(GPIOB,GPIO_Pin_6);
DelayUs(1);  
return val;        
} [/mw_shl_code]
回复

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2016-6-29
在线时间
58 小时
发表于 2016-9-1 14:17:09 | 显示全部楼层
hyxhyx 发表于 2016-9-1 14:11
再次冒昧问一下 dWeight_Maopi,GapValue这两个变量是如何取得?是根据传感器算的吗?

weight是读传感器读出来的(前边发的read函数),gapvalue是常数,根据传感器不懂校准的
回复

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2016-6-29
在线时间
58 小时
发表于 2016-9-1 14:18:14 | 显示全部楼层
comprends 发表于 2016-9-1 14:14
你这个GapValue就是那个系数吗,读数据的代码是一样的。
[mw_shl_code=c,true]unsigned long Read_HX711 ...

是的,那估计咱们两个用起来效果应该差不多,你要是想精确到g的话就只能换小量程的传感器了感觉,,,或者换精度高的
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-9-1 14:21:07 | 显示全部楼层
Clivia 发表于 2016-9-1 14:18
是的,那估计咱们两个用起来效果应该差不多,你要是想精确到g的话就只能换小量程的传感器了感觉,,,或 ...

我还在调试,可以提供你一个滤波函数,效果还可以
[mw_shl_code=c,true]float Filter(u32 j) {
  int i;
  float filter_sum = 0;
  filter_buf[FILTER_N - 1] = j;
  if(((filter_buf[FILTER_N - 1] - filter_buf[FILTER_N - 2]) > FILTER_A) || ((filter_buf[FILTER_N - 2] - filter_buf[FILTER_N - 1]) > FILTER_A))
  {  
    for(i = 0; i < FILTER_N - 1; i++) {        //
    filter_buf = filter_buf[i + 1];                                 //μYí&#198;&#198;&#189;&#190;ù&#194;&#203;2¨(&#187;&#172;&#182;ˉ&#198;&#189;&#190;ù&#194;&#203;2¨&#203;&#227;·¨)
    filter_sum += filter_buf;                                                         //
  }
   filter_buf[FILTER_N - 2]=filter_sum / (FILTER_N - 1);
   return (filter_sum / (FILTER_N - 1));
  }
  else
        return filter_buf[FILTER_N - 2];
}[/mw_shl_code]

就是一个限幅滤波+递推平均滤波
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-9-1 14:22:26 | 显示全部楼层
Clivia 发表于 2016-9-1 14:18
是的,那估计咱们两个用起来效果应该差不多,你要是想精确到g的话就只能换小量程的传感器了感觉,,,或 ...

这个传感器是我从一个秤上拆下来的。。原来的秤可以精确到小数点后三位,精度应该没问题,就是这个转换算法的问题
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2016-8-13
在线时间
21 小时
发表于 2016-9-1 15:51:11 | 显示全部楼层
Clivia 发表于 2016-9-1 14:17
weight是读传感器读出来的(前边发的read函数),gapvalue是常数,根据传感器不懂校准的

我用3.3v提供芯片电压,重量为200kg,用万用表测得E+的电压为3.2v(这里的3.2v应该是按照http://bbs.elecfans.com/jishu_521207_1_1.html给出的计算公式计算的VAVDD的值),但是按照上面介绍的方法求得的计算体重的公式不对呀,您能介绍一下您的gapvalue值是如何获取的吗?而且我用的驱动程序和您的一样,读出的数是7585120
回复

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2016-6-29
在线时间
58 小时
发表于 2016-9-1 16:20:02 | 显示全部楼层
hyxhyx 发表于 2016-9-1 15:51
我用3.3v提供芯片电压,重量为200kg,用万用表测得E+的电压为3.2v(这里的3.2v应该是按照http://bbs.elec ...

不知道你说的计算不对是哪里不对,那个常数是你多次测试出来的。你说的读数是初始的数据吗?你放上重物之后呢?差值多少
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2016-8-13
在线时间
21 小时
发表于 2016-9-1 16:39:08 | 显示全部楼层
Clivia 发表于 2016-9-1 16:20
不知道你说的计算不对是哪里不对,那个常数是你多次测试出来的。你说的读数是初始的数据吗?你放上重物之 ...

指的是GapValue变量值不正确,我按照上面网址介绍的方法计算出来的值再带入dWeight_Shiwu = (u32)((float)dWeight_Shiwu/GapValue)公式后得到的数值不对,所以想问一下您这个数值是怎么计算的?

7585120这个常数是从 weigh2 = Read_HX711()函数中直接读取的。
回复

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2016-6-29
在线时间
58 小时
发表于 2016-9-1 17:15:16 | 显示全部楼层
hyxhyx 发表于 2016-9-1 16:39
指的是GapValue变量值不正确,我按照上面网址介绍的方法计算出来的值再带入dWeight_Shiwu = (u32)((float ...

GapValue你先试试100,然后重量不是用当前read到的数减去 初始状态的数得出来的吗
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-9-2 09:37:39 | 显示全部楼层
Clivia 发表于 2016-9-1 17:15
GapValue你先试试100,然后重量不是用当前read到的数减去 初始状态的数得出来的吗

感觉这个精确度太难调了,我现在调的波动为+-5g,想精确到1g都办不到,有好的调整办法吗。        b = (float)((a-offset)/COEFFICIENT)*100/100 ;我的称重公式,a为获取到的read值,offset为空盘的read值,COEFEICIENT为比例系数
回复

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2016-6-29
在线时间
58 小时
发表于 2016-9-2 14:20:18 | 显示全部楼层
comprends 发表于 2016-9-2 09:37
感觉这个精确度太难调了,我现在调的波动为+-5g,想精确到1g都办不到,有好的调整办法吗。        b = (float)(( ...

是波动很大还是说精度不够呢?如果是波动很大的话那就应该是传感器的数据有波动,估计就只能用算法弥补了。如果只是精度的话那你看下你的空盘质量 测得时候是怎么测的。
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-9-2 16:02:41 | 显示全部楼层
Clivia 发表于 2016-9-2 14:20
是波动很大还是说精度不够呢?如果是波动很大的话那就应该是传感器的数据有波动,估计就只能用算法弥补了 ...

调的差不多了,看了下国家标准,应该是属于范围内的误差了
回复

使用道具 举报

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2011-9-15
在线时间
9 小时
发表于 2016-10-12 09:21:34 | 显示全部楼层
comprends 发表于 2016-8-30 11:14
问题解决!!第一:上午测得时候,接线应该是有误的,下午准确测量过了原理电子秤上的各个线之后正确接线。 ...

您好!能说明一下4个传感器是怎么组成全桥的吗?谢谢!现在不太会接线!
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-10-18 14:38:59 | 显示全部楼层
wx837078933 发表于 2016-10-12 09:21
您好!能说明一下4个传感器是怎么组成全桥的吗?谢谢!现在不太会接线!

= =不太懂。。我也是刚做的
回复

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2025-3-26
在线时间
3 小时
发表于 2016-10-19 14:17:45 | 显示全部楼层
comprends 发表于 2016-8-31 17:31
你是指这个吗?Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/4.30+0.05);,改这个4.3?我获得的数 ...

最近也在玩这个,我测出的数值在6849954~9285428这个范围的数值正常吗?
回复

使用道具 举报

11

主题

179

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1103
金钱
1103
注册时间
2016-7-19
在线时间
168 小时
发表于 2016-11-21 13:17:30 | 显示全部楼层
你好,请问你的Hx711是买的模块吗?我现在买了一个模块是要求5V左右提供电工作电压,但看芯片手册有个要求:数字电源(DVDD)应使用与 MCU 芯片相同的的数字供电电源。那如果用STM32可以吗
回复

使用道具 举报

11

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2016-3-27
在线时间
83 小时
 楼主| 发表于 2016-11-23 11:03:16 | 显示全部楼层
还是看不穿 发表于 2016-11-21 13:17
你好,请问你的Hx711是买的模块吗?我现在买了一个模块是要求5V左右提供电工作电压,但看芯片手册有个要求 ...

我是用的芯片。自己画的外围电路
回复

使用道具 举报

11

主题

179

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1103
金钱
1103
注册时间
2016-7-19
在线时间
168 小时
发表于 2016-11-24 14:49:53 | 显示全部楼层
comprends 发表于 2016-11-23 11:03
我是用的芯片。自己画的外围电路

哦哦,好厉害呀。
回复

使用道具 举报

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2018-4-8
在线时间
26 小时
发表于 2018-4-8 11:46:43 | 显示全部楼层
请问一下你的正确接线是怎么接的?我的接法是E+红线E-黑线A+绿线A-白线,程序SCK设置为推挽输出,DOUT设置为浮空输入,但是读取出来的数值一直为8388608
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-4-10
在线时间
4 小时
发表于 2018-4-18 22:53:42 | 显示全部楼层
comprends 发表于 2016-9-2 16:02
调的差不多了,看了下国家标准,应该是属于范围内的误差了

项目代码可以发一份吗,楼主。
1186071310@qq.com
谢谢楼主了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-5-5
在线时间
0 小时
发表于 2018-5-5 14:07:51 | 显示全部楼层
comprends 发表于 2016-11-23 11:03
我是用的芯片。自己画的外围电路

楼主,代码能发我一份吗
1129225784@qq.com
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2016-10-25
在线时间
4 小时
发表于 2018-6-27 09:40:01 | 显示全部楼层
楼主可以把代码发我下么。1107766500@qq.com
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2018-8-2
在线时间
1 小时
发表于 2018-8-2 09:52:55 | 显示全部楼层
楼主可以把代码发我一下吗,拜托,急用!2652944708@qq.com
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2018-8-9
在线时间
0 小时
发表于 2018-8-9 16:27:49 | 显示全部楼层
求大大发完整的驱动程序代码给我可以吗~麻烦了!!
2334424402@qq.com
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2018-9-4
在线时间
0 小时
发表于 2018-9-4 11:27:41 | 显示全部楼层
请问楼主  我想用HX711接STM32 做高精度测重可以吗?我要测量的东西很重,能达到十吨,但同时要求精度高
回复

使用道具 举报

10

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
金钱
362
注册时间
2018-5-14
在线时间
46 小时
发表于 2018-9-30 15:56:13 | 显示全部楼层
求份程序源码 最近也在学习这方面541608371@qq.com
行至水穷处 坐看云起时
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 16:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表