Outils pour utilisateurs

Outils du site


Action disabled: media
tdethindus3distancielsoluce

Solution de TD SPI

Sujet sur tdethindus3distanciel

1.1: Le TLV5637 est un Convertisseur Numérique vers Analogique à 2 sorties analogiques synchronisées. Nous parlerons dans la suite d'un DAC (Digital Analog Converter)

1.2: Le composant supporte la communication à travers les interfaces TMS320, SPI, QSPI, and Microwire. Nous utilisons ici l'interface SPI pour communiquer avec.

1.3 Le bus SPI supporte le Full Duplex mais avec ce composant DAC il est utilisé en Simplex car le DAC ne fait que recevoir depuis le bus.

Connexion:

Broche du DAC Broche de l'Arduino
DIN MOSI
SCLK SCLK
/CS une GPIO libre
GND GND

Mode utilisable: d'après la documentation (Figure 1), le composant lit DIN lors des fronts descendants de SCLK et SCLK peut être à l'état haut ou bas (X) avant et après la transaction. Ceci indique que le composant supporte les modes SPI 1 et 2. En pratique, il faut utiliser le mode 2.

Vitesse maximum: La fréquence d'horloge maximale pour le signal d'horloge sur le bus SPI est de 20Mhz, ce qui correspond à 1.25 million d'échantillons par seconde en sortie du DAC.

Ordre des bits: Bit de poids fort d'abord (msb first), car D15 en premier sur Figure 1.

1.4: REF sert de référence de tension, elle permet de régler la plage de tension utilisable en sortie du DAC. Elle peut être soit en entrée si une référence de tension est utilisée soit en sortie si une des deux références de tension interne est utilisée.

1.5: résolution de 2mv: D'après la formule en haut de la page 10, la tension en sortie du DAC vaut $2*REF*CODE/0x1000$ (V) mais il est dit juste en dessous que les bits 0 et 1 du code 12 bits ne sont pas utilisé car le DAC est sur 10 bits seulement. La résolution correspond à la variation de tension la plus petite que l'on peut obtenir en sortie du DAC, elle correspond donc à un incrément de 4 de CODE.

Il faut donc $2*REF*4/0x1000=0.002$ (V) , donc $REF=0.002*0x1000/(2*4)=1.024$ (V). Cette tension est disponible en référence interne d'après la table en haut de la page 12, donc on choisi la combinaison REF10=01

1.6 On peut réutiliser la même formule en changeant la valeur numérique: $2*REF*4/0x1000=0.0032$ (V) implique $REF=0.0032*0x1000/(2*4)=1.6384$ (V). Cette tension n'est pas disponible en référence interne d'après la table en haut de la page 12, donc on choisi une référence externe en sélectionnant une combinaison REF10=00 ou 11 et en imposant 1.6384V sur la broche REF.


2.1

  • SPI.begin() configure l'interface de communication matérielle USART en mode SPI
  • SPI.setBitOrder(…) configure l'ordre d'envoie des bits de données (msb ou lsb first)
  • SPI.setDataMode(…) configure le mode SPI utilisé parmi 4
  • SPI.setClockDivider(…) configure un diviseur de fréquence pour générer le signal d'horloge SPI
  • SPI.beginTransaction(…) applique un réglage de configuration de type SPISettings pour la transaction suivante
  • SPI.transfer(…) transfère simultanément un octet vers et depuis le composant SPI en exploitant le caractère Full Duplex du bus SPI

2.2

DAC183.ino
SPISettings mySettings(16000, MSBFIRST, SPI_MODE2);
 
void initSPIforTLV5637(){
  SPI.begin();
  pinMode(DAC_CS, OUTPUT);
  digitalWrite(DAC_CS, HIGH); 
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode(SPI_MODE2);
  SPI.setClockDivider(SPI_CLOCK_DIV2); 
  setIntRefTLV5637(0);
}

2.3

DAC183b.ino
void send16bitsTLV5637(unsigned short int value){
  digitalWrite(DAC_CS, LOW); 
  SPI.beginTransaction(mySettings); 
  SPI.transfer(value>>8); //Send register location
  SPI.transfer(value & 0xff);  //Send value to record into register
  digitalWrite(DAC_CS, HIGH); 
}

2.4 et 2.5

Les réponses seront vues en TP

tdethindus3distancielsoluce.txt · Dernière modification : 2021/03/16 22:42 de bvandepo