Input Analogico SPI: gli integrati MCP300x

Da raspibo.
Jump to navigation Jump to search

Proviamo ora a collegare un integrato della serie MCP300x all'interfaccia SPI master del Raspberry PI.

L'esempio si riferisce al MCP3008 (venduto per esempio da Adafruit). E' un convertitore Analogico Digitale a 8 canali con 10 bit di precisione.

Occorre caricare il driver come descritto nella pagina Collegare dispositivi SPI.

Per collegare un MCP3008 come unita' SPI 0 occorre collegare i fili come segue: Rpi-mcp3008.png

Se il pin 10 del MCP3008 viene collegato al pin 24 del Raspberry PI l'unità verrà riconosciuta come /dev/spi0.0, se invece viene collegata al pin 26 del Raspberry PI sarà /dev/spi0.1. E' possibile collegare due MCP3008 per avere 16 ingressi analogici mettendo in parallelo gli altri pin verso il Raspberry PI tranne il pin 10.

VREF (pin 15) e' la tensione di riferimento. I valori di tensione che verranno misurati saranno compresi tra 0 (AGND) e VREF. La conversione fra il valore numerico a 10 bit e la tensione e':

VIN = (valore_letto * VREF) / 1024.

Se si collega il pin 15 in parallelo al pin 16, pertanto alla tensione di 3.3v la conversione sara':

   0 -> 0V
   1 -> 0.00322V
   2 -> 0.00645V
...
1023 -> 3.29678V

il passo di campionamento e' di 3.2mV.

Se si vuole una precisione maggiore (restringendo il range) occorre un circuito che fornisca al pin 15 una tensione precisa. Io propongo il seguente (che fa uso dell'integrato LM385-1.2Z, uno zener di precisione a 1.235V): Mcp3008vref.png

in questo modo i valori analogici saranno fra 0 e 1.235V

   0 -> 0V
   1 -> 0.00121V
   2 -> 0.00242V
...
1023 -> 1.23379V

il passo di campionamento sarà di circa 1mV. E' una precisione sufficiente per poter misurare le correnti con il sensore ... oppure per misurare le temperature con il sensore LM35.