[问答]Hi3861如何使用HX711模块进行称重?

阅读量0
0
0

我想使用润和的Hi3861开发板连接HX711称重模块并进行称重,HX711称重模块已经使用过Arduino与其示例代码完成称重,我仿造Arduino的称重代码将其移植到Hi3861上,但是称重一直不成功,以下是我的Hi3861的代码

#define HX711_SCK_PIN 2
#define HX711_DT_PIN 3
#define LOW HI_GPIO_VALUE0
#define HIGH HI_GPIO_VALUE1
#include "hx711.h"

long HX711_Buffer = 0;
long Weight_Maopi = 0,Weight_Shiwu = 0;
hi_gpio_value DTval;

#define GapValue 430

//****************************************************
//GPIO初始化
//****************************************************
void HX711_Init(void)
{
    hi_gpio_set_dir(HX711_DT_PIN, HI_GPIO_DIR_IN);
    hi_gpio_set_dir(HX711_SCK_PIN, HI_GPIO_DIR_OUT);
}


//****************************************************
//获取毛皮
//****************************************************
void Get_Maopi()
{
	Weight_Maopi = HX711_Read();		
} 

//****************************************************
//获取实物重量
//****************************************************
long Get_Weight()
{
	HX711_Buffer = HX711_Read();
	Weight_Shiwu = HX711_Buffer;
	
	Weight_Shiwu = Weight_Shiwu - Weight_Maopi;				//获取称重的实物重量
	Weight_Shiwu = (long)((float)Weight_Shiwu/GapValue); 	
	return Weight_Shiwu;
}

int GetHX711_DT(){
	hi_gpio_get_input_val(HX711_DT_PIN,&DTval);
	return DTval;
}

//****************************************************
//璇诲彇HX711
//****************************************************
int32_t HX711_Read(void)
{
    int i;
    int32_t data = 0;
 
    // 等待 HX711 就绪
    while(GetHX711_DT());
 
    // 发送一个脉冲以开始转换
    hi_gpio_set_ouput_val(HX711_SCK_PIN, LOW);
    usleep(1);
    hi_gpio_set_ouput_val(HX711_SCK_PIN, HIGH);
    usleep(1);
    hi_gpio_set_ouput_val(HX711_SCK_PIN, LOW);
 
    // 读取24位数据
    for(i = 0; i < 24; i++) {
        hi_gpio_set_ouput_val(HX711_SCK_PIN, HIGH);
        usleep(1);
        data <<= 1;
        if(GetHX711_DT()) {
            data++;
        }
        hi_gpio_set_ouput_val(HX711_SCK_PIN, LOW);
        usleep(1);
    }
 
    // 恢复到默认状态
    hi_gpio_set_ouput_val(HX711_SCK_PIN, HIGH);
    usleep(1);
    hi_gpio_set_ouput_val(HX711_SCK_PIN, LOW);
 
    // 判断读数是否为负数
    if(data & 0x800000) {
        data |= 0xff000000;
    }
 
    return data;
}

PIN口用的是2和3,请问该如何使Hi3861正确配置并成功称重?
另外像是树莓派和Arduino的开发板连接电脑USB后用万用表测5V供电实际电压能到5V,但是测Hi3861的5V供电实际电压只有4.6-4.7V,请问这是什么机制,会造成什么影响吗?

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友