jeudi 14 octobre 2021

ADS1256 : ADC Hautes Performances


ADS1256 : ADC Hautes Performances

 

Cet article présente un ADC (Analog to Digital Converter) hautes performances : l'ADS1256 :

  • 8 canaux (ou 4 en différentiel)
  • 24 bits
  • ±0.0010% maxi de non linéarité
  • bruit : 27nV
  • bus SPI
  • 30KSPS : 30000 échantillons par seconde
  • PGA : Amplificateur à Gain Programmable (1 à 64)

Ce convertisseur est un petit monstre dont il conviendrait d'exploiter au mieux les possibilités car son prix est conséquent : 15€.

AliExpress

On peut reprocher à cette carte d'être livrée avec des connecteur mâles déjà soudés sur la carte, ce qui oblige à utiliser des fils DUPONT femelles pour le raccordement. Ce n'est pas le cas de celle-ci :

Avec ce modèle on pourra souder les broches sous la carte et enficher ou souder celle-ci sur un PCB, pour une réalisation plus professionnelle.

Pour mon usage personnel, les 24bits de résolution de cet ADC sont franchement overkill, mais sa vitesse d'échantillonnage importante est un atout indéniable.

Texas Instruments a à son catalogue une foule d'ADCs SPI plus ou moins performants, mais celui-ci a un avantage incontestable : sa disponibilité sous forme de module.

Contrairement à l'ADS1115, on trouve assez peu d'informations sur le WEB concernant l'utilisation de l'ADS1256 avec un ARDUINO. Cela justifie bien un petit effort de ma part.

1. Le câblage

C'est un module SPI, donc il aura besoin d'un peu plus de broches qu'un classique ADS1115 I2C :

2. La librairie

Il faut installer la librairie suivante :

https://github.com/adienakhmad/ADS1256

Elle n'est pas installable depuis l'IDE. Il faudra l'installer en téléchargeant le fichier ZIP, et le décompresser dans le répertoire libraries de l'IDE.

On peut également l'installer avec git :

git clone https://github.com/adienakhmad/ADS1256

3. Testons

Chargeons l'exemple ADS1256_Efficient_Input_Cycling

Cet exemple implémente une mesure différentielle, c'est à dire que la mesure est effectuée entre deux canaux, ce qui réduit le nombre d'entrées possibles, 4 au lieu de 8.

A remarquer : l'ADS115 4 canaux est aussi capable de faire de la mesure différentielle, sur 2 entrées.

ATTENTION : l'ADS1256 possède un buffer d'entrée qui permet d'augmenter l'impédance d'entrée. Il peut être configuré grâce au bit BUFEN du registre de status. En fonction de la configuration, il ne faut pas dépasser une certaine tension d'entrée :

  • BUFEN = 0 la tension d'alimentation
  • BUFEN = 1 la tension d'alimentation moins 2V :

Par défaut BUFEN = 0.

De plus, la tension de référence de l'ADS1256 est de 2.5V. Au delà l'ADC saturera.

Appliquons une petite tension continue entre AIN0 et AIN1.

Le moniteur série devrait afficher ceci :

1.2943882942    -0.0000190735    -0.0000441074    -0.0000452995
1.2945414733    -0.0000226498    -0.0000381470    -0.0000512600
1.2944860458    -0.0000208616    -0.0000476837    -0.0000542402

La stabilité de la mesure différentielle est bien meilleure que ce que j'ai pu observer avec un ADS1115.

4. Conclusion

Cet ADC est à réserver à des applications exigeantes.

4.1. Mesures de précision

Avec son échantillonnage sur 24bits il a une résolution nettement supérieure à un ARDUINO (10bits), un ADS1115 ou un INA226 (16bits).

Pour information la résolution en pourcentage d'un ADC se calcule ainsi :

Pourcentage = 1 / 2^Résolution * 100

  • 10bits : 0.1%
  • 16bits : 0,0015%
  • 24bits : 0,000006%

Ce pourcentage représente le poids d'un bit par rapport à la pleine échelle, tout comme pour un multimètre. Il ne faut pas confondre résolution et précision.

Dans le cas d'un multimètre ayant une résolution de 2000 points, une différence de 1 point dans la mesure représente 0.5% de la pleine échelle, mais sa précision réelle peut aller jusqu'à 3%.

Dans le cas de l'ADS1256, une différence d'un point dans la mesure représente :

Résolution en volts = 3V / 2^Résolution = 3V / 2^24 =180nV

Bien entendu, pour obtenir la véritable précision de l'ADC, il faut ajouter la non linéarité : ±0.0010% maxi dans le cas de l'ADS1256, et également le bruit : 27nV.

4.2. Mesures de signaux rapides

Avec sa vitesse d'acquisition de 30KSPS il sera possible de mesurer des signaux de fréquence relativement élevée, ou des transitions rapides, par exemple mesurer les pointes de consommation d'un microcontrôleur, à l'aide d'une résistance shunt.

Un ADS1115, en comparaison, a une fréquence d'échantillonnage de 860SPS, 35 fois inférieure.

L'ADS1256 n'est pas tout à fait assez rapide pour faire des mesures en audio. Une fréquence d'échantillonnage supérieure à 40KHz serait préférable, mais avec ses 30KSPS, il se défend bien tout de même.

Seul l'ADC d'un gros microcontrôleur, un STM32 par exemple, fera mieux : 

STM32 : l'ADC

4.3. Analyse de signaux

Concernant ce point, il ne faut pas rêver. Avec un ARDUINO, et ses 2Ko de mémoire RAM, il sera difficile d'analyser quoi que ce soit, mis à part faire une moyenne sur un certain nombre d'échantillons ou déterminer la valeur maximale ou minimale d'une tension.

Un ESP32 sera certainement plus adapté pour faire des analyses plus poussées.

4.4. Mesure de tensions élevées

Pour mesurer des tensions supérieures à 3V, il est indispensable d'utiliser un pont diviseur à résistances sur les entrées de l'ADS1256.

On trouve couramment des résistances de précision à 0.1%.

4.5. Mesure de signaux faibles

Son PGA (gain programmable de 1 à 64) est capable d'amplifier les signaux à mesurer. Il sera possible par exemple de mesurer des signaux de 3V / 64 = 47mV à pleine échelle, tout en conservant la précision de 24bits.

Il n'est pas interdit de lui adjoindre un amplificateur d'instrumentation si l'on désire mesurer des signaux plus faibles.

 

Cordialement

Henri