HX711 Module

Gast #3561230
Lesenswert?

Hallo,

ich habe mir 2 HX711 Module in China gekauft und möchte diese
am STM32F0 testen.

http://www.ebay.de/itm/380802908040?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649

Nun habe ich die Module angeschlossen und festgestellt dass die 
Schaltung
von der Referenz abweicht.
Bei den Modulen aus China ist AGND nicht verbunden,
am Anschluss AGND liegen ca. 700mV an.
Wenn man AGND und GND verbindet steigt die Stromaufname auf 5mA,
das ist viel mehr als die im Datenblatt angegebenen 1,5mA.

Beide Module scheinen soweit zu funktionieren.
Sie geben einen 24bit Wert aus, bei dem die oberen 16bit stabil
sind und die restlichen bits sich mehr oder wenige ändern.
Das sieht alles gut aus.

Allerdings liegt der digitale low Pegel auch bei 700mV.
Das sollte sicher nicht so sein.

Zum Testen habe ich am Eingang nur eine Brücke aus 4 gleichen 
Wiederständen angeschlossen.

Merkwürdig ist auch dass am Kollektor des Transistors die vollen 3V
von VCC anliegen, der Transistor kann also gar nichts regeln.

Was mache ich falsch?
Sicher bin ich nicht der Einzige der solche Module gekauft hat,
hat jemand solche Module schon mal benutzt?

Andreas
Angehängte Dateien:
#3755146
Lesenswert?

Hi,

also ich hab das Modul getestet, mit nachgerüsteter GND Brücke ist alles 
IO.

Meine Vermutung ist, dass der Layouter der die Platine designed hat, 
Geistig keine Verbindung zwischen AGND, GND und dem Ground Symbol 
herstellen konnte.

Und dann die 10 anderen Hersteller, die es in C&P Manier nachgebaut 
haben, auch nicht darüber nachgedacht haben.

Die angesprochene Stromaufnahme könnte ich mir so erklären, dass die im 
Datenblatt angegebenen Werte sich rein auf den Chip beziehen. Dann kommt 
natürlich die ganze Schaltung und die Last-Zelle hinzu.

Ansonsten habe ich es am XMega zu laufen.

Ich wollte jetzt nochmal probieren wie sich die Werte verhalten wenn ich 
von 10SPS auf 80SPS umschalte.

Gruß Sven
Gast #3872044
Lesenswert?

Hallo Sven,

ich möchte die HX711 Module als Messverstärker für Spannungen im µVolt 
Bereich verwenden.
Geht das mit diesen Modulen?
Funktionieren Deine beiden Hx711 inzwischen?
Wer hat Erfahrung mit HX711 als Messvestärker für sehr niedrige 
Spannungen?

Gruß
Nihat
#3872805
Lesenswert?

Hi,

also ich habe die beiden Module an einem ATTiny2313 mit 80SPS laufen.

Ob man damit Spannungen in µVolt Bereich messen kann, weiß ich nicht, 
muss man aus probieren.

Ich habe da jeweils eine 10Kg Messdose dran. Im Gramm Bereich ist er 
auch sehr stabil. Darunter wird es dann ein bisschen wackelig, das liegt 
aber bestimmt an den langen Messleitungen.

Gruß Sven
#3894497
Lesenswert?

Sven Fabricius schrieb:
> Meine Vermutung ist, dass der Layouter der die Platine designed hat,
> Geistig keine Verbindung zwischen AGND, GND und dem Ground Symbol
> herstellen konnte.


Das ist Quatsch, bei 24 Bit AD Wandlung macht es durchaus Sinn die 
Grounds zu trennen und über einen "Filter" zu verbinden. Von daher hat 
der Layouter schon mit gedacht.

Warum sollte der Chip Hersteller sonst wohl 2 verschiedene Grounds an 
einem Chip haben?
#3894568
Lesenswert?

Ich denke mal mit den Modulen wird man da kaum messbare Resultate 
erzielen. Da wirst du schon ein eigenes Layout machen müssen. AGnd und 
GND mit separaten Groundflächen versehen... Dafür studieren andere um 
das zu lernen. Dazu dann noch viel Berufserfahrung usw....

Du kannst mal nach Reference Layouts von anderen 24 bit adc suchen...
#3926487
Lesenswert?

Also, nunmal net gleich die Flinte ins Korn werfen.
Zum Einen ist das noch nicht mal SPI sondern einfaches Bit-Banging.
Zum Anderen ist das eine sehr gute und einfache Aufgabe um in die µC 
Welt ein zu tauchen.
Nen kleiner MAX232 und ein ATTiny2313 oder ähnliches auf ein Lochraster 
gelötet, noch 2-3 Zeilen Programmieren, fertig ist der Serial HX711 
Wandler.


Gruß Sven
#3927624
Lesenswert?

Klingt wie "Mut zum Microcontroller" - dabei wollte ich doch nur meine 
Schafe wiegen und habe für 3 Euro das falsche Teil bestellt....
Meine Elektronikkenntnisse sind auf dem Stand der 80er-Jahre. Es gab da 
Transistoren und auch schon ICs, sogar schon das erste Digitaluhr-Chip, 
aber noch keine Microcontroller und keine (privaten) Computer.
Ich bitte also um Verständnis, dass ich mich da erst mal bisschen schlau 
mache, bevor ich eine neue unabsehbare Baustelle eröffne.
Aber danke!
#3929597
Lesenswert?

Jörg B. schrieb:
> Schafe Wiegen mit einer Wägezelle??? Das wird wohl eher nichts.  Da
> musst du dann schon 4 Stück nehmen. An jeder Ecke der Plattform eine!
>
> Oder hängst du die Schafe an einen Strick? ;)

Zur Waage an sich habe ich ja noch nichts geschrieben, weil das vom 
Forumsthema wegführen würde. Hier also nur in Kürze und mit 
Entschuldigung:
Ich habe eine alte Dezimalwaage (http://www.themt.de/org-1360-49.html) 
so umgebaut, dass ein Schaf draufpasst. Über die Genauigkeit, mit der 
das Ding nach wie vor läuft, war ich selber baff; von allen digitalen 
Alternativen können da wohl nur die Profigeräte mithalten, schätze ich. 
Nur: Man muss eben Gegengewichte auflegen und dann einen Schieber 
schieben, so dass ein Zehntel des gewogenen Gewichts gegenhält. Mit der 
Ziege klappte das nach einigem Zureden ganz gut, aber Schafe sind 
unruhiger und lassen einem kaum die Zeit zum Austarieren, wenn sie denn 
überhaupt die Waage betreten. (offtopic: Wie man die Viecher da 
draufkriegt, gehört nun wirklich nicht hier her; dazu braucht es nämlich 
keinen Microcontroller, sondern ich betätige mich am besten selbst als 
Makrocontroller).
So kam mir die Idee, das Gegengewicht durch einen digitalen Aufnehmer zu 
ersetzen, um schneller ablesen zu können. Danach hatte ich noch die 
Idee, den Verlauf am besten gleich zu speichern und in aller Ruhe später 
auszuwerten.
Ich bin günstig an eine 50-Kilo-Wägezelle (YZC-516) gekommen und 
probiere nun mit dieser herum; die könnte ich wohl so reinschnallen, 
dass sie einen Messbereich bis 150kg oder 250kg abdeckt. Im Moment bin 
ich dabei, die Auslesbarkeit der Wägezelle direkt mit der Soundkarte des 
Messrechners zu testen (16 Bit, passender Spannungsbereich, geht aber 
wegen Hochpassfilter allenfalls mit gepulstem Betrieb). Dann bin ich 
eben zwischendurch über diese HX711 gestolpert.... Ich bin auch für 
einfachere Varianten offen, aber die Viecher einfach auf eine Plattform 
mit 4 Wägezellen zu stellen (gerne einer an jeder Ecke!), das kommt mir 
bislang einfach ein wenig zu banal vor - es erinnert mich zu sehr an 
diese dämlichen schrottigen Personenwaagen, die überall rumstehen ;-)
#3929875
Lesenswert?

Das ist halt das gängige, 4 Wägezellen

So geht es natürlich auch, aus Ülatzgründen würde so etwas heute aber 
schon niemand mehr bauen. Ich würde an deiner Stelle mir ein Arduino 
Mega besorgen.
Dazu noch ein 2 oder 4 Zeilen Display. Wenn du die Daten speichern 
willst noch einen sd card adapter und du hast alles was du brauchst. 
Arduino ist relativ simple und es gibt gute Unterstützung in Foren dazu.
#3935854
Lesenswert?

Also Leute, abschließender Bericht:
Die rein mechanische Variante mit Gegengewichten hat inzwischen so gut 
funktioniert (Schafe haben ohne größere Probleme die Waage betreten, auf 
Wunsch auch einzeln, und ausreichend lange stillgehalten), dass ich nun 
doch nicht an der elektronischen Variante weiterarbeite.

Inzwischen habe ich also nicht nur das HX711 herumliegen, sondern auch 
eine niegelnagelneue Wägezelle (50 kg, S-Form, sieht aus wie im Bild). 
Schade drum, aber vielleicht finde ich ja noch einen Abnehmer, oder ich 
finde später mal noch Verwendung.

In jedem Fall danke für alle Forumstips!
Angehängte Dateien:
#4058397
Lesenswert?

Hi,

bitteschön, ist aber nur der erste Modus, ggf. musst du wenn du den 
anderen Input einlesen möchtest, den BitCount anpassen.

Gruß Sven
1
#define sbi(reg, flag) reg |= (flag)
2
#define cbi(reg, flag) reg &= ~(flag)
3

4
#define PIN3_bm       0x08
5
#define PIN4_bm       0x10
6

7
#define HX711_DIR     DDRD
8
#define HX711_OUT     PORTD
9
#define HX711_IN      PIND
10
#define HX711_SCK     PIN3_bm
11
#define HX711_DT      PIN4_bm
12

13
#define HX711_READY   (!(HX711_IN & HX711_DT))
14

15
volatile uint32_t chandata;
16

17
void hx711_init(void)
18
{
19
  // Config HX711 Pins
20
  sbi(HX711_DIR, HX711_SCK); // SCK OUT
21
  cbi(HX711_DIR, HX711_DT);  // DT  IN
22
  cbi(HX711_OUT, HX711_SCK); // SCK Low
23
  sbi(HX711_OUT, HX711_DT);  // Pull-up
24
}
25

26
void hx711_read(void)
27
{
28
  // wait until HX is Ready
29
  while (!HX711_READY);
30

31
  chandata = 0;
32
  
33
  // pulse the clock pin 24 times to read the data
34
  for (uint8_t i = 0; i < 24; i++)
35
  {
36
    sbi(HX711_OUT, HX711_SCK);
37
    _delay_us(0.5);
38
    if (HX711_IN & HX711_DT)
39
    {
40
      chandata += 1;
41
    }
42
    chandata <<= 1;
43
    
44
    cbi(HX711_OUT, HX711_SCK);
45
    _delay_us(0.5);
46
  }
47
  chandata >>= 1;
48
  
49
  sbi(HX711_OUT, HX711_SCK);
50
  _delay_us(0.5);
51
  cbi(HX711_OUT, HX711_SCK);
52
  _delay_us(0.5);
53
}
Gast #4059637
Lesenswert?

Danke,

kannst du mir den Teil evtl noch erklären?

    if (HX711_IN & HX711_DT)
    {
      chandata += 1;
    }
    chandata <<= 1;

    cbi(HX711_OUT, HX711_SCK);
    _delay_us(0.5);
  }
  chandata >>= 1;

Ich kenne die Operation <<= und >>= nicht, konnte mit Google auch nichts 
finden, was passiert dort genau?

und was macht chandata+=1 ? Müsste normalerweise nicht +1 sondern das 
bit an Pos x gesetzen werden?
Gast #4870396
Lesenswert?

1
value=value<<8>>8;

Sieht kryptisch aus. Ein Compiler kann daraus machen:
1
 mov r27,r26  ;2. Byte zum MSB kopieren
2
 add r27,r27  ;Bit 7 nach Carry
3
 sbc r27,r27  ;Carry achtfach = korrekte Vorzeichenerweiterung
Oder auch:
1
 clr r27    ;MSB Null
2
 sbrc r26,7 ;bleibt Null wenn positiv
3
  dec r27   ;wird 0xFF wenn negativ
Gast #5281236
Lesenswert?

Hallo Zusammen, ist zwar schon ein älterer Thread aber ich hatte mit dem 
HX711 gerade ein Aha-Erlebnis, das ich nicht vorenthalten will:

Durch die 0,7V Ground-Offset wird der Datapin vom HX711 nur auf ca 1 V 
runtergezogen. Bei 3V UCs reicht das u.U. nicht aus um "low" sicher zu 
erkennen.
Mit 2,7Kohm Pullups hats jedenfalls nicht mehr funktioniert. Habe dann 
den Pullup auf 10KOhm vergrössert, dann ging es gerade so. : Lowpegel 
ist immer noch um ca 1V.

Oszi ist mein Freund !

Danke für die Aufmerksamkeit
Gast #5560383
Lesenswert?

Hallo Sven,

könntest Du bitte Deine Antwort ein wenig präzisieren?

>Hi, ich verstehe das Problem nicht ganz.
>Wie oben schon geschrieben haben die Layouter vergessen das Ground zu
>verbinden, deswegen habe ich bei mir überall ein Ferit drinne und gut
>ist.

>Gruß Sven

Welchen (SMD?) Ferrit hast Du verwendet ?

Wo/Wie hast Du den Ferrit denn "eingebaut" -> in Bezug auf das 
Chinesenmodul (ev. Bild)?

Danke.

Chris.
Gast #5560472
Lesenswert?

Sven schrieb:
> Wie oben schon geschrieben haben die Layouter vergessen das Ground zu
> verbinden, deswegen habe ich bei mir überall ein Ferit drinne und gut
> ist.

Wahrscheinlich haben sie ganz im Gegenteil weiter gedacht, um dem 
Anwender nicht in sein Erdungskonzept rein zu pfuschen. Der schönste 
24-Bit Wandler nützt nicht, wenn einem die Gnd-Ströme des Digitalteils 
das Analogsignal versauen.
#5561935
Lesenswert?

Moin,

um nochmal auf das Datenblatt und das darin enthaltene Referenz Design 
zu verweisen.
Der HX711 besitzt kein separaten Eingang für Digital Ground.
Was genau ich für einen Ferit eingebaut habe weiß ich nicht mehr. Die 
Dinger sind nun lange schon fest verbaut und verrichten ihre Dienste.

Der Ferrit ist zwischen AGND,E- und dem Rest der Schaltung, inklusive 
Serial Ground.

Selbst mit 80Hz abtastrate bleiben die Werte stabil.

Gruß Sven
Gast #5786615
Lesenswert?

Sven F. schrieb:
> Der Ferrit ist zwischen AGND,E- und dem Rest der Schaltung, inklusive
> Serial Ground.

Dein "Serial Gnd" ist gar nicht vernünftig angeschlossen.

Der auf J2 mit "Gnd" bezeichnete Pin geht (zumindest bei meinen Modulen, 
Kauf 2019/03) einzig an die Pins XI (14) und Rate (15) vom HX711. 
Eine Versorgung des Moduls über J2 führt im Originalzustand des Moduls 
dazu, dass das IC über die Schutzdioden der beiden Eingänge rückwärts 
versorgt wird. /J2.Gnd/ und /J1.E-/ gehören verbunden - ohne 
irgendwelchen Ferrit-Zirkus.
Angehängte Dateien:
Gast #5813324
Lesenswert?

Hallo,

ich habe zwei Fragen bzgl. dieses Moduls:

1.:
Wenn ich das ganze per SPI regeln wollte, dann würde ich doch für das 
Auslesen 3x Kommando 0xAA schicken und im Anschluss einmal Kommando 
0x01, sofern ich Kanal A mit 128 Gain nutzen will.

...bzw. wenn für den Fall, dass das MSB zuerst auf den Bus gegeben wird 
wären es die Kommandos 3x mal 0x55 und einmal 0x80.

Korrekt?

2.:
Der Mininmalwert beträgt 0x800000
Der Maximalwert beträgt 0x7FFFFF
jeweils im 2er Komplement, allerdings bei nur 24 Bit Auflösung.

Was entspricht denn nun einer gemessenen 0,0kg Gewicht?
Welche Zahlenbereiche würde ich erhalten, wenn ich die Waage belaste
Welche Zahlenbereiche würde ich erhalten, wenn ich an der Oberfläche der 
Waage ziehe, sie also negativ auslenke.

Ich würde jetzt erwarten, dass ich bei Belastung eine Repräsentation von 
0 bis 4095 erhalte und bei Zug die Dezimalwerte 4096 bis 8192, also 12 
Bit pro Auslenkung, was ja dann einer 24Bit-Komplenentärdarstellung 
entsprechen würde und eigentlich den Zahlenbereich -1 bis -4096 
repräsentiert.

Gehen diese Überlegungen in die richtige Richtung?
Gast #5813819
Lesenswert?

SPI schrieb:
> Ich würde jetzt erwarten, dass ich bei Belastung eine Repräsentation von
> 0 bis 4095 erhalte und bei Zug die Dezimalwerte 4096 bis 8192, also 12
> Bit pro Auslenkung, was ja dann einer 24Bit-Komplenentärdarstellung
> entsprechen würde und eigentlich den Zahlenbereich -1 bis -4096
> repräsentiert.
>
> Gehen diese Überlegungen in die richtige Richtung?

Wie kommst du von 24 Bit plötzlich auf zwei mal 12 Bit.

Zwei mal der Wertebereich von 12 Bit ergibt 13 Bit.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren