Multiplexage d’ADC sur Arduino

Envoyé par le 7 Jan 2013

Les cartes Arduino sont idéales pour s’initier à la programmation, ou bien réaliser simplement de petits projets d’électronique. Elles disposent d’I/O numériques, de sorties numériques PWM ainsi que d’entrées analogiques, les ADCs. Cependant, dans certains cas, la carte étudiée n’a pas un nombre suffisant d’entrées ou de sorties. Au lieu de monter en gamme de matériel ou tout simplement de doubler le microcontrôleur, nous allons voir qu’il est possible de contourner ce problème. Pour le prix d’une sortie numérique du microcontôleur, nous pourrons doubler le nombre d’entrées analogiques.

Par exemple, supposons que nous avons besoin de 32 entrées analogiques alors qu’au maximum, les cartes Arduino n’en proposent que 16. Nous allons utiliser des multiplexeurs externes 1:2 afin de pouvoir connecter 2 informations analogiques sur une seule entrée ADC de l’Arduino. Il faut donc un multiplexeur par ADC dans notre cas. Les entrées de commande des multiplexeurs ont juste besoin d’être reliées ensemble sur une sortie numérique du microcontrôleur. Voici un schéma de la réalisation hardware :

Au niveau software, pour scanner les entrées, on va procéder 16 par 16. On fixe d’abord une  valeur pour la commande des multiplexeurs, puis on scanne les 16 entrées qui sont disponibles. Il suffit ensuite de changer la commande des multiplexeurs et de scanner encore les 16 ADCs. On a alors parcouru les 32 entrées. Voici le code correspondant au multiplexage d’une entrée :

int sensorPin = A0;	// sélectionne l'ADC
int muxPin = 22;	// sélectionne le pin de commande des mux
int sensorValue = 0; 	// variable pour stocker la valeur de l'ADC
int mux = 0;

void setup() {
	pinMode(muxPin, OUTPUT);
}

void loop() {
	sensorValue = analogRead(sensorPin); // on lit l'ADC

	if(mux==0){
		// commandes pour la première entrée
	}
	else{
		// commandes pour la seconde entrée
	}

	mux =  1 - mux; // on change d'état le pin de commande mux
	digitalWrite(muxPin, mux);
	delay(10);
}

L’opération est bien entendu 2 fois plus longue que pour 16 entrées, mais ce temps peut être négligeable selon l’application. Il est aussi possible de multiplier les entrées analogiques par 3 ou 4 en utilisant des multiplexeurs 1:3 ou 1:4, mais le temps de scan sera multiplié d’autant.

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *