用stm32单片机写程序驱动hx711,输出的AD值一直在增加,请问如何解决

2019-07-14 18:51发布

STM32单片机写程序驱动hx711,无论传感器上是否放重物,输出的AD值一直在增加,我用的是单片机内部时钟,配置为8MHz,程序如下:
uint32_t HX711_Read(void)  //读HX711芯片输出的数据。
{
        uint32_t val = 0;
        uint8_t i = 0;

        GPIO_SetBits(GPIOA,ADDO);    //DOUT=1
        GPIO_ResetBits(GPIOA,ADSK);    //SCK=0
        while(GPIO_ReadInputDataBit(GPIOA,ADDO));   //等待DOUT=0  
        delay_us(1);
        for(i=0;i<24;i++)
        {
                GPIO_SetBits(GPIOA,ADSK);    //SCK=1
                val=val<<1;
                delay_us(1);  
                GPIO_ResetBits(GPIOA,ADSK);    //SCK=0
                if(GPIO_ReadInputDataBit(GPIOA,ADDO)) val++;   //DOUT=1
            delay_us(1);
        }
        GPIO_SetBits(GPIOA,ADSK);//25次脉冲
        val = val^0x800000;
        delay_us(1);
        GPIO_ResetBits(GPIOA,ADSK);
        delay_us(1);  
        return val;  
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
艾夫乙
2019-07-15 06:23
我就用了一个滑动滤波函数,得到的Huadong_filter()直接用于计算重量了,读取滤波后的ad值就是一直增加,程序如下:
void Huadong_BUFInit(void)
{
        uint8_t j;
        for(j=0;j<N;j++)
        {
                BUF[j] = HX711_Read();
                SUM+=BUF[j];
        }
}  

long double Huadong_filter(void) //滑动均值滤波法的函数。
{
        uint32_t temp=0,max=0,min=0;
        uint8_t j;
        temp = HX711_Read();
        SUM = SUM+temp-BUF[M];//添加一个最新值,去掉一个最老值
        BUF[M]=temp;//将最老值替换成最新值
        M++;
        if(M == N)
        {
                M=0;
        }
        max=BUF[0];
        min=BUF[0];
        for(j=0;j<N;j++)
        {
                if(max<BUF[j])       
                {
                        max=BUF[j];//找出当前数组中的最大值
                }
                if(min>BUF[j])
                {
                        min=BUF[j];//找出当前数组中的最小值
                }
        }
       
        return (SUM-max-min)/(N-2);
}

一周热门 更多>