eagler8 发表于 2019-7-29 12:05:28

模块采用24位高精度的A/D转换器芯片hx711,是一款专为高精度电子称而设计的, 具有两路模拟通道输入, 内部集成128倍增益可编程放大器。输入电路可配置为 提供桥压的电桥式(如压力、称重)传感器模式 是一款理想的高精度低成本采样前端模块。采样hx711 24位ad芯片,双通道 差分输入。全贴片 机器焊接,带金属屏蔽,配送直、弯两种插针,满足各种安装焊接方式,板上使用了2个47uF的胆电容,用料很足,内置上拉电阻,且预留CPU焊接位置,很适合自己二次开发各种各样的传感器相关应用。

eagler8 发表于 2019-7-29 12:08:20

模块电原理图

eagler8 发表于 2019-7-29 13:10:01

模块主要特点
● 带金属屏蔽,强抗干扰,预留cpu(STC15F104)位置,可自行升级二次开发。
● 两路可选择差分输入
● 片内低噪声可编程放大器,可选增益为32、64 和128
● 片内稳压电路可直接向外部传感器和芯片内A/D 转换器提供电源
● 片内时钟振荡器无需任何外接器件,必要时也可使用外接晶振或时钟
● 上电自动复位电路
● 简单的数字控制和串口通讯:所有控制由管脚输入,芯片内寄存器无需编程
● 可选择10Hz 或80Hz 的输出数据速率
● 同步抑制50Hz 和60Hz 的电源干扰
● 耗电量(含稳压电源电路):
典型工作电流:< 1.7mA, 断电电流:< 1μA
● 工作电压范围:2.6 ~ 5.5V
● 工作温度范围:-20 ~ +85℃

eagler8 发表于 2019-7-29 14:29:26

模块检测方法
1,初步快速判断:断开模块所有连线,仅仅给模块供电5v(就是vcc接+5v,gnd接地),然后把模块的ck端口对地短接,然后再去测 out+对地电压,应该4.5v左右,接着测DO/RX端口对地电压,应该0v左右,如果电压都符合,说明模块99%正常。
2,完整测试判断:使用测试电路图搭个电路,给单片机烧入测试程序,然后用串口线连接电脑,在电脑上运行串口助手,就可以接收到测试电路发出来的读数报告,读数正常,表明模块正常。

eagler8 发表于 2019-7-29 19:46:42

eagler8 发表于 2019-7-29 19:55:45

eagler8 发表于 2019-7-29 19:57:29

eagler8 发表于 2019-7-30 12:56:24

实验准备接线时,才发现收来的四个称重传感器中,有一个只有二根线(其它3个都是3根接线),看来要搞不定了:'( :'( :'(

eagler8 发表于 2019-7-30 12:57:42

HX711.h头文件

#ifndef HX711_h
#define HX711_h

#include "Arduino.h"

class Hx711
{
private:
      int DOUT;//定义数据引脚
      int SCK;//定义时钟引脚

      float scale;//定义比例系数
      long offset;//定义补偿值
public:
      Hx711(int IO_DOUT,int IO_SCK);//构造函数
      void setScale(float IO_scale);//设置比例系数
      void setOffset(long IO_offset);//设置补偿值

      long getValue();//采集一次ADC值
      long getAverageValue(char IO_times);//采集ADC平均值
      float getWeight(char IO_times);//得出重量值
};

#endif

eagler8 发表于 2019-7-30 13:00:16

HX711.cpp 文件

#include "HX711.h"

#include "Arduino.h"

//int DOUT;//定义数据引脚
//int SCK;//定义时钟引脚

//float scale;//定义比例系数
//long offset;//定义补偿值
//int times;//定义采集次数

Hx711::Hx711(int IO_DOUT,int IO_SCK)//构造函数
{
        DOUT = IO_DOUT;
        SCK = IO_SCK;
        pinMode(SCK, OUTPUT);//设置IO口工作方式
        pinMode(DOUT, INPUT);

}

void Hx711::setScale(float IO_scale)//设置比例系数
{
        scale = IO_scale;
}

void Hx711::setOffset(long IO_offset)//设置补偿值
{
        offset = IO_offset;
}

long Hx711::getValue()//采集一次ADC值
{
        unsigned long Count;
        unsigned char i;
        digitalWrite(SCK,LOW);
        Count = 0;
        while(digitalRead(DOUT) == 1);//低电平时数据可以输出
        for(i=0;i<24;i++)//循环读取数据
        {
                digitalWrite(SCK,HIGH);
                Count = Count<<1;
                digitalWrite(SCK,LOW);
                if(digitalRead(DOUT) == 1) Count++;//最低位置1
        }
        digitalWrite(SCK,HIGH);
        Count = Count^0x800000;//最高位置0
        digitalWrite(SCK,LOW);//128增益
        return Count;
}

long Hx711::getAverageValue(char IO_times)//采集ADC平均值
{
        long sum=0;
        char i;
        for(i=0;i<IO_times;i++)
        {
                sum += getValue();
        }
        return sum/IO_times;

}

float Hx711::getWeight(char IO_times)//得出重量值
{
        long temp;
        temp = getAverageValue(IO_times) - offset;
        return (float)temp/scale;
}

eagler8 发表于 2019-7-30 13:11:04

eagler8 发表于 2019-7-30 13:15:49


实验没有通过,一直卡在HX711库上,编译无法通过.......

eagler8 发表于 2019-7-30 14:13:49

/*
【Arduino】66种传感器模块系列实验(73)
实验七十三:人体秤50kg称重传感器模块(电阻应变半桥式)
*/

#include <HX711.h>

HX711 hx(9, 10);

void setup() {
Serial.begin(9600);
}

void loop()
{
double sum = 0;
for (int i = 0; i < 10; i++)
sum += hx.read();
Serial.println(sum/10);
delay(3000);
}

eagler8 发表于 2019-7-30 14:16:06

eagler8 发表于 2019-7-30 14:30:52

页: 82 83 84 85 86 87 88 89 90 91 [92] 93 94 95 96 97 98 99 100 101
查看完整版本: 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)