Forum: Mikrocontroller und Digitale Elektronik HX711 Module


von Andreas (Gast)


Angehängte Dateien:

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

von Sven F. (mr_sven)


Lesenswert?

Hi,

hab jetzt auch 2 Module.
Bist du da schon weiter gekommen?

Ich würde auf einen Copy&Paste Fehler des Chinesischen Herstellers 
tippen.

Gruß Sven

von Sven F. (mr_sven)


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

von Nihat Parlatan (Gast)


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

von Sven F. (mr_sven)


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

von Jörg B. (joerg-sh)


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?

von Johannes V. (j-v)


Lesenswert?

Hallo Jörg,

kannst Du eventuell einen Hinweis geben, wie man das am besten 
realisiert?
Ich habe es schon mal versucht AGND und DGND mittels eines Ferrits zu 
verbinden, hat aber kein messbares Resultat gehabt.

Besten Dank,

Johannes

von Jörg B. (joerg-sh)


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...

: Bearbeitet durch User
von Sven F. (mr_sven)


Lesenswert?

Hi,
ich will euch ja net die Stimmung versauen, aber vieleicht ist es euch 
noch nicht auf gefallen, der Chip hat nur einen Ground.

Gruß Sven

von Jörg B. (joerg-sh)


Lesenswert?

Da hast du recht Sven, ich arbeite mit anderen ADCs von TI, die haben 2 
Grounds.

Trotzdem ist es Sinnvoll die GNDs zu trennen. Der Chip wird ja digital 
angesprochen....

von Sven F. (mr_sven)


Lesenswert?

Ja, das stimmt, mir ist auch nicht klar wiso man bei dem Chip darauf 
verzichtet hat.

von Jörg B. (joerg-sh)


Lesenswert?

Man könnte sagen Low Cost Chip oder auf Deutsch... billig chip

: Bearbeitet durch User
von Jörg B. (joerg-sh)


Lesenswert?

By the way... hat jemand code für STM32 zufällig dafür, scheint ja nicht 
besonders aufwendig zu sein.... Das Arduino LIB kommt ja mit recht wenig 
Zeilen aus.

von Wolfgang A. (oszillofant)


Lesenswert?

Hallo, bin neu hier.
Ich habe nirgends etwas darüber gefunden, ob man mit dem HX711 eine 
Wägezelle auch mit dem PC auslesen kann. Es heißt zwar überall "einfache 
serielle Kommunikation", aber kann ich den HX711 auch an eine RS232 
anschließen, oder kann der nur mit µC seriell kommunizieren?

von dfd (Gast)


Lesenswert?

Wolfgang A. schrieb:
> Es heißt zwar überall "einfache
> serielle Kommunikation", aber kann ich den HX711 auch an eine RS232
> anschließen, oder kann der nur mit µC seriell kommunizieren?

seriell heißt hier SPI 
(http://de.wikipedia.org/wiki/Serial_Peripheral_Interface)

von Wolfgang A. (oszillofant)


Lesenswert?

ok - besten Dank!
Ich biete mein gestern im Kaufrausch bestelltes HX711-Modul dann gegen 
Portokosten als verspätetes Weihnachtsgeschenk an und betrachte meine 
Ausgaben für das Teil dann als Lehrgeld.

von Sven F. (mr_sven)


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

von Jörg B. (joerg-sh)


Lesenswert?

Einfacher geht es mit einem Arduino...da bekommst du die Anwendung quasi 
dazu...

von Wolfgang A. (oszillofant)


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!

von Jörg B. (joerg-sh)


Lesenswert?

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? ;)

von Wolfgang A. (oszillofant)


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 ;-)

von Jörg B. (joerg-sh)


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.

von Wolfgang A. (oszillofant)


Lesenswert?

Danke. Ich werde mich mal schlau machen, wie das mit dem Arduino laufen 
würde. Keine schlechte Idee, die Weihnachtsferien zu nutzen, um ein 
neues Kapitel der Elektronik aufzuschlagen ;-)

von Tom W. (limpbiz)


Lesenswert?

Moin, das ist ja mal ein interessanter Thread. Weiß jemand zufällig, wie 
man den HX711 mit ethersex auslesen kann ?

von Wolfgang A. (oszillofant)


Angehängte Dateien:

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!

von Jörg B. (joerg-sh)


Lesenswert?

Was soll die Wägezelle denn kosten?

Schreib mal ne mail über das mailsystem des frorums

von Johannes (Gast)


Lesenswert?

Hallo,

hat jemand vielleicht C-Beispielcode für mich für einen AVR?

Möchte das ganze ohne SPI betreiben.

Gruß
Johannes

von Sven F. (mr_sven)


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
}

von Johannes (Gast)


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?

von Johannes (Gast)


Lesenswert?

Habs mittlerweile verstanden, hat sich erledigt :-)

von Johannes (Gast)


Lesenswert?

Hi,

kann mir jemand noch sagen, wie ich die 24bit Zahl als Zweierkomplement 
in eine echte int32_t bekomme?

Da bin ich mir noch nicht sicher wie ich es machen kann.

von Henrik Haftmann (Gast)


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

von werbung (Gast)


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

von Klaus (Gast)


Lesenswert?

werbung schrieb:
> Mit 2,7Kohm Pullups hats jedenfalls nicht mehr funktioniert. Habe dann
> den Pullup auf 10KOhm vergrössert, dann ging es gerade so.

Warum Pullups bei SPI?

MfG Klaus

von Sven (Gast)


Lesenswert?

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

von Chris (Gast)


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.

von Wolfgang (Gast)


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.

von Sven F. (mr_sven)


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

von Wolfgang (Gast)


Angehängte Dateien:

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.

von SPI (Gast)


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?

von Wolfgang (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.