Travailler avec la puce chinoise ADC Hx711

La raison de la rédaction de cet article est le désir de traiter le convertisseur ADC sigma delta 24 bits basé sur la puce Hx711. Le convertisseur lui-même est assemblé sous la forme d'un module prêt à l'emploi selon le circuit de commutation recommandé par le constructeur (????). Il y a des commentaires sur le fonctionnement de ce module sur ce site Web dans le blog d'Andrey Gerasimenko "ADC NX711 de 3,3V - ne croyez pas la documentation chinoise et pas seulement ..." .

Pour tester ce module, un circuit basé sur le microcontrôleur ATmega16, le module ADC, le LCD BC1602 à deux lignes, sur la base du contrôleur HD44780, quatre boutons ont été assemblés. Comme environnement de développement, nous avons utilisé le programme Code Vision AVR, version 1.25.9 professional, AVR Studio 4, Version 4.09.0.338, le programmeur USB AVR JTAG, qui permet non seulement de programmer le cristal, mais aussi de suivre pas à pas, si nécessaire, l'exécution du programme dans le microcontrôleur, presque en temps réel.



Une cellule de pesée de fabrication chinoise avec une limite de poids maximale de 40 kg a été choisie comme source de signal pour l'ADC. et unité d'insertion de capteur standard. Il convient de noter que l'utilisation d'unités d'intégration «natives» vous permet d'obtenir toutes les données de sortie postulées à partir d'une jauge de contrainte à point unique, modèle CZL A6. Ainsi, les jauges de contrainte de type Single Point, lorsque vous utilisez la taille spécifiée dans les spécifications techniques de la plate-forme pour l'emplacement de la charge pesée, sont conçues de sorte que le signal de déséquilibre de la jauge de contrainte ne dépend pas de la position de la charge sur la plate-forme. Ce sont les propriétés MÉCANIQUES du corps du capteur: les dimensions géométriques, l'emplacement des films collés de jauge de contrainte, en particulier la découpe «osseuse» au milieu du corps du capteur, la taille de la plate-forme qui affecte le couple appliqué au corps du capteur détermine cette indépendance.



Eh bien, la dernière source est "GOST 29329-92. Balances pour pesage statique. Exigences techniques générales. " Ce GOST définit les propriétés des instruments de mesure de poids. Il est également important de travailler avec le programme de bureau EXCEL. J'utilise EXCEL 2003 XP3. Cela vous permet de traiter rapidement les résultats à l'aide de méthodes prêtes à l'emploi.

J'espère que toutes les informations nécessaires pour répéter mes expériences seront pleinement données.

Maintenant, le programme lui-même que j'utilise pour travailler avec le module. Le programme est axé sur CHECK, et à peine directement, c'est-à-dire sans modifications, il peut être appliqué pour certains besoins appliqués. Bien que, comme on dit, "en fonction de l'endroit où appliquer".

Le programme lui-même est une structure de blocs. Il se compose de 4 routines et de la cinquième principale principale. Le premier sous-programme: ReadCount, lit les données du module ADC et les génère dans la variable Count.

CreatInput, génère un tableau d'entrée de données de conversion à partir de 32 valeurs.

CreatOutput, génère un tableau de sortie de données de conversion ADC en organisant une moyenne mobile avec une taille de fenêtre de 16 données.

Keys, un programme simple pour répondre aux frappes.

Voilà donc tout. Les variables sont globalement toutes globales, d'autant plus que les méga ressources sont autorisées.



Le programme principal commence par créer le tableau d'entrée CreatInput, puis les données d'entrée sont filtrées à l'aide de la méthode de la moyenne mobile. La sélection de ce filtre est basée sur les éléments suivants. Lorsque le programme est en cours d'exécution, les données affichées changent de valeur dans une plage assez large. J'ai pris les valeurs de l'ADC sans effort sur la plate-forme et tabulé. Les valeurs ont été obtenues en utilisant le débogueur JATAG USB dans l'environnement AVR Studio.



Dans le fichier Excel «Acquisition de données», dans l'onglet «Moyenne mobile», le résultat du filtrage des données d'entrée fluctuantes InputBuff (plage d'oscillation 436 unités) avec une fenêtre de moyenne à intervalles de 3,12,16 est affiché. Le résultat est affiché dans les cellules A37-A40. D'où on voit que la plus efficace, dans ce cas, est une moyenne mobile avec une fenêtre de 16 échantillons.

Les graphiques construits le montrent clairement. Les données sont prises à partir d'un contrôleur de travail, arrêté au moment de la transition vers la procédure d'affichage des données. Des exemples illustratifs d'une telle capture de données sont montrés sur les images.



Aucune méthode de filtrage des données, grâce à l'utilisation de divers filtres numériques, ne pourrait en aucun cas «apprivoiser» les fluctuations d'entrée. Si vous regardez le graphique des données d'entrée, la distribution gaussienne ici ne «sent» même pas. Comme confirmé par l'utilisateur Nikopol_86 dans le blog "... ne croyez pas la documentation chinoise"

Nikopol_86 5 février 2019 à 09:27 0


Pour être honnête, il a suffisamment de bruit à tous les rapports. J'ai fait quelques recherches sur la densité de distribution des codes ADC émis avec des circuits d'entrée court-circuités, et donc il y a une propagation jusqu'à 1000 1_5V et nifiga n'est pas une loi de distribution normale, ce qui suggère que le câblage de la carte est en difficulté, ou avec l'ADC, ou tous pris ensemble . J'ai également remarqué qu'il n'a pas non plus de stabilisation de la température et que la plage de températures de fonctionnement revendiquée ne correspond pas à la réalité. Ne serait-ce que parce que lorsque vous connectez une jauge de contrainte de 5 kg à l'ADC, la modification de la température dans la pièce de 1 degré prendra les lectures de 2 grammes, et si vous chauffez le microcircuit avec votre doigt, les lectures s'envolent à 5-7 grammes. En général, j'ai conclu par moi-même que seul un distributeur de nourriture pour chat peut être fabriqué sur cet appareil,où la précision dans un arrêt de tramway sera plus que suffisante. Et hélas, les solutions normales ne sont pas bon marché, car vous devez utiliser des ADC de haute qualité AO ou T1.

Comme vous pouvez le constater, les conclusions ont été confirmées. C'est vrai, la même chose est vraie:
jushabrauser le 4 février 2019 à 12 h 52.
Avec un rapport signal / bruit <1, cela n'aidera jamais.
Même avec un circuit en pont.

Par conséquent, dans des conditions normales (sans mathématiques et / ou circuits spéciaux), au moins 8 bits de poids faible donnent un non-sens (le plus probable).

24 morceaux chinois honnêtes pour 350 roubles? Ne le dites pas à mes pantoufles.
Si le fer lui-même "ment" - que pouvez-vous faire?
Ici, même un filtre non linéaire du troisième ordre n'aidera pas, car les données source ne sont pas un gâteau.

C'est à partir de cet endroit que j'ai voulu voir de quoi ce module est capable dans la composition des gammes. La recherche sur le réseau de problèmes avec la gigue des derniers bits de l'ADC, a conduit au forum kazus.ru/forums/showthread.php?t=105320&page=4. Voici toute une discussion sur la stabilisation des lectures. Cependant, aucune des méthodes mathématiques proposées n'a «calmé» les données d'entrée que je reçois. Du «hardware» lui-même, pour stabiliser les lectures, il a été introduit: la connexion de la masse numérique et analogique, ainsi que le court-circuit de l'entrée B à la masse. Nous avons utilisé un blindage complet et alimenté le module à partir d'une batterie 6v (suivie d'un stabilisateur 7805) séparément des circuits du contrôleur. Il n'y a aucun résultat, les données d'entrée oscillent ...

Donc, la 24ème catégorie «propre» ne peut pas être obtenue et la raison ici me semble être un m / circuit de mauvaise qualité. Vous devez donc réduire la plage de conversion résultante. Pour cela, dans le programme ReadCount, une ligne a été introduite avec la division des données par 100. 100 est un peu moins de 2 à 8 degrés. À. La conversion AD est disponible en 16 bits. Cependant, même une telle limitation n'a pas rendu le témoignage fiable. Et la raison ici est les propriétés de la jauge de contrainte.

Ainsi, après avoir appliqué le processus d'étalonnage (reliant la valeur de l'ADC et le poids sur la plate-forme), le poids est affiché en grammes. Il affiche 500 grammes comme le nombre 500, un kg comme 1000. Le prix de la division est de 1 gramme. Ceux. nous obtenons avec un capteur de 40 kg 40 000 divisions. Selon les données techniques de la cellule de pesée, on ne peut obtenir du capteur que 3000 divisions (symbole C3 au nom du capteur). Le prix de la division devrait donc être (40000/3000) = 13,3 grammes. Cependant, selon GOST 29329, la métrologie des poids ne fonctionne pas avec le nombre 3. Les chiffres doivent être utilisés:

2.1.3 La valeur de l'échelle d'étalonnage (e), le prix de division de l'échelle (d) et la résolution d'échantillonnage (dd) en unités de masse doivent être sélectionnés parmi les suivants: 1X10a; 2X10a; 5X10a, où a est un entier positif, négatif ou zéro.

À. le prix de division pour ce capteur, garanti par le fabricant 10 grammes. Autrement dit, le format de sortie doit être de 0,0x kg. où x = 1,2,3, ... .0. Essayons de faire le prix de division de 5 grammes. Les actions programmatiques pertinentes sont répertoriées. Après une telle restriction, nous «prélevons» sur le capteur 40 000/5 = 8 000 divisions, soit 2,6 fois plus que ce qui est permis. Après ces hypothèses, les échelles résultantes fonctionnent assez régulièrement.

La remarque ci-dessus sur la cellule de charge appliquée et sa «résolution» ne nous permet pas d'affirmer de manière concluante que ce module ne peut pas produire une conversion 24 bits. Cependant, j'ai testé ce capteur pour un fonctionnement avec une résolution de 1 gramme, sur un autre appareil, avec un convertisseur AD différent. Sur cet appareil, le fonctionnement du capteur et la conversion peuvent être considérés comme satisfaisants, car la fluctuation de poids n'était pas supérieure à 3 grammes.

Qu'est-ce qui ne permet pas l'utilisation de cet ADC dans le commerce? Eh bien, la première chose et la plus importante est la dépendance de la mesure sur la température. Deuxièmement, en utilisant les opérations de division et de multiplication intégrées à ATMEGA, en particulier pour 8 bits, il est difficile d'étalonner les balances sur toute la plage de poids dans ces conditions. Il convient de garder à l'esprit que le programme ne réagit en aucune façon à la surcharge du capteur.

Comment surmonter ces inconvénients. Tout d'abord, entrez le capteur de température et ajustez la lecture du poids à partir de la valeur de température. Ce qui est assez compliqué. «Moins cher» consiste à introduire l'option d'étalonnage, pour différentes charges et en fonction de l'erreur causée par la température, étalonner le poids utilisé dans le travail.

Le second est plus difficile. Remplacer la procédure de multiplication et de division par des opérations tabulaires et de cisaillement. Je pense que c'est la meilleure façon d'utiliser ce module dans la pratique de la construction de poids.

Pour compléter la description des exigences de création d'un programme de balances, il est nécessaire d'utiliser le "Programme d'étalonnage métrologique (certification) des balances" joint à chaque balance.

Conclusion:La création d'échelles à base de m / s Hx711 est possible sous réserve de toutes les exigences métrologiques des échelles. L'introduction de corrections pour la dépendance en température de la conversion doit être prévue dans une procédure distincte. L'utilisation d'un module avec une résolution de plus de 16 bits nécessite une approche et un contrôle séparés.

Source: https://habr.com/ru/post/undefined/


All Articles