各位好友,刚接触32,做了一个电子秤,hx711的ad转换,1kg量程的重量显示小数点后两位,为啥一直跳动呢,也加入了软件滤波,还是不行。买的电子秤不都是放上去实物,数值会稳定的吗,还是ad采集要做些什么吗?
while(1)
{
a=KEY_Scan(0);
switch(a)
{
case KEY0_PRES:
Get_Maopi();
break;
case KEY1_PRES:
Get_Weightchuzhi();
delay_ms(10);
weightchuzhi=Get_Weightchuzhi();
break;
case WKUP_PRES:
Get_Maopi();
break;
default:
delay_ms(10);
}
if(t%10==0)
{
Get_Weight();
delay_ms(10);
weight=Get_Weight();
POINT_COLOR=RED;//éèÖÃ×ÖìåÎaoìé«
LCD_ShowNum(100,170, weight/10000,1,16);//ÏÔê¾êμê±ÖØá¿
LCD_ShowNum(100+8,170,weight%10000/1000,1,16);
LCD_ShowNum(100+8+8,170,weight%1000/100,1,16);
LCD_ShowNum(100+8+16+8,170,weight%100/10,1,16);
LCD_ShowNum(100+8+16+8+8,170,weight%10,1,16);
}
delay_ms(100);
t++;
if(t==10)
{
t=0;
LED0=!LED0;
}
}
}
获取重量
s32 Get_Weight(void)
{
HX711_Buffer=HX711_val_filtered();
if(HX711_Buffer > Weight_Maopi)
{
Weight_Shiwu = HX711_Buffer;
Weight_Shiwu = Weight_Shiwu - Weight_Maopi;
Weight_Shiwu = (s32)((float)Weight_Shiwu/GapValue+0.05);
delay_us(1);
}
return (Weight_Shiwu);
}
滤波
u32 HX711_val_filtered(void)
{
u32 Sam[18],tmpmax,tmpmin,sum=0,Average;
u8 i;
for(i=0;i<18;i++)
{
Sam[i]=HX711_Read();
if(i==0)
{
tmpmax=Sam[0];
tmpmin=Sam[0];
}
if(i>0)
{
if(Sam[i]>tmpmax) tmpmax=Sam[i];
if(Sam[i]<tmpmin) tmpmin=Sam[i];
}
}
for(i=0;i<18;i++)
{
if(!(Sam[i]==tmpmax||Sam[i]==tmpmin))
{ sum=sum+Sam[i];
}
}
Average=sum/(18-2);
return Average;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>