Outils pour utilisateurs

Outils du site

Traductions de cette page:

votre temps local: :: ()

heure officielle (en France) : ::(TZ:)

Heure UTC client: :: Offset client: s - delai: ms - - timeZone: Heure UTC: ::

Panneau latéral

  • Corrélateurs
  • Bruits inhérent au numérique : bruit de phase, gigue, stabilité temporelle des circuits numériques
  • Compteur à intervalle de temps
  • Détection synchrone
  • Choix ADC/DAC pour applications TF
  • Mesure Sphi(f) et sigma_y(tau)
  • Servo controls (Liens fibrés, …)
  • Manipulation d'objets et fréquences (atomes froids, spectral hole burning, ions ….)
  • Datations « officielles »
  • Compteurs, avec et sans temps morts.
  • Logiciel / Pilotes
  • IP cores (FPGA)
  • Chipscope
fr:dds

Ceci est une ancienne révision du document !


Direct Digital Synthesizer

Les “Direct Digital Synthesizers” (DDS) sont des synthétiseurs qui peuvent générer des formes d'ondes arbitraires à diverses fréquences à partir d'une fréquence de référence fixe.

le principe de fonctionnement d'un DDS

les applications DDS

les différents mode de programmation

Exemple de développement autour d'un DDS l'AD9959

Exemple de programme en C écrit dans le microcontrôleur MSP430F169

initialisation et chargement des registres CSR et CFTW0:

    int  CSR_ADDRESS = 0x00;   AD9959 CSR adresss Byte
    int CSR_NUM_BYTE = 0x01;   CSR nombre d'octet du registre
    long CSR0 = 0x10;          AD9959 du channel 0 MSB first SPI par défaut
       
    int  FTW_ADDRESS = 0x04;   AD9959 FTW adresss Byte
    int FTW_NUM_BYTE = 0x04;   FTW nombre d'octet du registre
    long FTW0 = 0x28F5C28F;    frequence en hex fout x2^32/fclock
       

dans le main:

    P4OUT = 0x40;          AD9959 master reset bit de validation du MSP430
    P4OUT = 0x00;          AD9959 master set   bit de validation du MSP430
    
    write_serial_port(CSR_ADDRESS, CSR0, CSR_NUM_BYTE);
    P5OUT = 0x40;          I/O update du DDS bit de validation du MSP430 
    P5OUT = 0x00;          I/O update du DDS bit de validation du MSP430  
    
    write_serial_port(FTW_ADDRESS, FTW0, FTW_NUM_BYTE);
    P5OUT = 0x40;          I/O update du DDS bit de validation du MSP430 
    P5OUT = 0x00;          I/O update du DDS bit de validation du MSP430  

Commentaires sur le programme:

on fait un RESET du DDS (pin 3), on charge les données de chaque registre au travers du port SPI write_serial_port… Puis on réalise un I/O UPDATE pin 46 du DDS pour la validation et le transfert des données. Ce bout de programme permet de charger le channel 0 avec une fréquence de 80MHz et une amplitude par défaut FULL DAC.

I/O_UPDATE is synchronous to the SYNC_CLK (Pin 54) = Master clock/4. Voir figure 40 du datasheet du DDS.

Ci-dessous le sous programme d'initialisation des ports du microcontrôleur et du SPI pour le MSP430F169 : TI fourni de nombreux exemples de codes de bases pour configurer les modes SPI, I2C et utiliser la mémoire Flash: slac015p.zip

    
    #include  <msp430x16x.h>
    void DDS_quartz_oscillator_init(void)
    {
      BCSCTL1 |= XTS;               ACLK= LFXT1= HF XTAL 
      BCSCTL2 |= SELM_3;            MCLK = LFXT1 (safe) pin 8,9 du MSP430
      P1SEL = 0x00;                 P1 I/O select
      P2SEL = 0x00;                 P2 I/O select
      P3SEL = 0x00;                 P3 I/O select
      P4SEL = 0x00;                 P4 I/O select
      P5SEL = 0x0A;                 P5.1,3 SPI option select
      P6SEL = 0x00;                 P6 I/O select
      P1DIR = 0xFF;                 P1.output direction
      P2DIR = 0xFF;                 P2 output direction
      P3DIR = 0xFF;                 P3 output direction
      P4DIR = 0xFF;                 P4 output direction
      P5DIR = 0xFF;                 P5 output direction
      P6DIR = 0xFF;                 P6 output direction
      ME2 |= USPIE1;                Enable USART1 SPI
      UCTL1 |= CHAR + SYNC + MM;    8-bit SPI Master **SWRST**
      UTCTL1 = CKPH + SSEL1 + STC;  SMCLK delayed, 3-pin
      UBR01 = 0x2;                  ACLK/2 for baud rate
      UBR11 = 0x0;                  ACLK/2 for baud rate
      UMCTL1 = 0x0;                 Clear modulation
      UCTL1 &= ~SWRST;              Initialize USART state machine
    }

BCSCTL1 |= XTS; et BCSCTL2 |= SELM_3; permet d'être en mode HF XTAL le MSP430 fonctionnera à 8MHZ au lieu de 32KHz par défaut.

             MSP430F169
           -----------------
       /|\|              XIN|-
        | |                 | HF XTAL (455k - 8Mhz)
        --|RST          XOUT|-
          |                 |
          |             P5.4|-->MCLK = XTAL

D'après : M. Buccini Texas Instruments Inc. Feb 2005 Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.21A

la routine pour le chargement des données en mode SPI du MSP430F169 :

      void write_serial_port(int instruction, long data, int num_byte)
      {
       int i=0;

       TXBUF1 = instruction;
        do
       {
       TXBUF1 = data >>(num_byte-1-i)*8;
       i++;
       }
        while (i < num_byte);
      }

la routine pour le chargement des données en mode SPI de l'ARM TM4C123GH6PM :

 int i=0;
 SSI0_DR_R =  instruction; 
  while( num_byte )
   {
        while(!(SSI0_SR_R & SSI_SR_TNF)) {} // SPI0 du TM4C123GH6PM
        SSI0_DR_R =  data >>(num_byte-1-i)*8;
        num_byte--;           
   }
  
  while( !( SSI0_SR_R & SSI_SR_TNF ) )
        {
          ;
        }

La routine init (SPI) pour l'ARM TM4C123GH6PM:

  // Enable Peripheral SSI0
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //Enable GPIO port A SSI0.
  SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);
  GPIOPinConfigure(GPIO_PA2_SSI0CLK); 
  GPIOPinConfigure(GPIO_PA3_SSI0FSS);
  GPIOPinConfigure(GPIO_PA5_SSI0TX);
  GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_3 | GPIO_PIN_2);
  //GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_2);
  SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,
  SSI_MODE_MASTER, 10000000, 8);
  SSIEnable(SSI0_BASE); // Enable the SSI 

Exemple d'initialisation d'un PORT sur l'ARM TM4C123GH6PM

//void PortB_Init(void)
volatile unsigned long delay;
SYSCTL_RCGC2_R |= 0x00000002;     // 1) activate clock for Port B
delay = SYSCTL_RCGC2_R;           // allow time for clock to start
GPIO_PORTB_AMSEL_R = 0x00;        // 3) disable analog on PB
GPIO_PORTB_PCTL_R = 0x00000000;   // 4) PCTL GPIO on PB0
GPIO_PORTB_DIR_R |= 0xFF;         // 5) PB0-PB7 is out
//GPIO_PORTB_AFSEL_R &= ~0x01;      // 6) disable alt funct on PB0
GPIO_PORTB_AFSEL_R &= ~0xFF;      // 6) disable alt funct on PB0-PB7
GPIO_PORTB_DEN_R |= 0xFF;         // 7) enable digital I/O on PB0-PB7

Un schéma de base avec l'AD9959

Parce qu'un schéma vaut mieux qu'un long discours! Cette carte est générique, et grâce au port SPI sur la carte on peut connecter n'importe quel microcontrôleur disposant d'un port SPI.

La carte électronique pour l'habillage du piège RF

BEC de Rubidium

dds_ad9959_bec.pdf

Projet Habillage piège RF: On remarquera sur le PCB ci-dessus que l'on utilise des composants RF externes (minicircuits) pour chaque voie de sortie qui permettent l'adaptation d'impédance, le filtrage du signal, et l'amplification de sortie. L'horloge du DDS est externe sans le VCO présent sur l'image. Cette carte intègre le port USB et une communication série UART entre le microcontrôleur et le bus USB. Un petit programme exécutable crée sous CVI permet le chargement des données (fréquences, amplitudes, phases…)

BEC de Strontium

Projet Antenne RF: Développement récent: RF CARD 375 to 400MHz Frequency Sweep control for RF antenna. Le but est de générer des sweeps de fréquence arbitraire pour une antenne RF dans la gamme de fréquence 375 à 400 MHz. J'utilise deux DDS , l'AD9911 pour asservir un VCO ultra low noise à 1GHZ (ROS-1000-519+) minicircuits et le second l'AD9858 pour générer les fréquences arbitraires. Ce dernier est “clocké” grâce au 1GHz provenant du VCO sur la carte. J'utilise également le MSP430F169 pour piloter les deux DDS en mode SPI 2wire single bit (bus SPI commun, un master et deux slaves en utilisant le chip select (CS) de chaques DDS).Carte réalisée ci-dessous

Projet STRONTIUM antenne RF 375-400MHz

Document complet driver_rf_400mhz.pdf

Projet STRONTIUM DDS CARD sur BUS National Instrument

Le programme sous windows avec interface CVI

Une routine sous Windows CVI à été développée avec une liaison USB-Série (un pont USB). Ci-dessous le programme en C dans le microcontrôleur qui permet le transfert des données à une vitesse maximale de 1Mb

data1 => données séries venant du pont USB-serial.puce FTDI 
int UART0_send(void)
while(1)
 {
   while(i<1)
  {
    data1[j++] = UART_InChar();
    if (j > sizeof data1-1)
    {
      UART_OutChar(data1[i++]);
    }
    if (i < sizeof data1)
    UART_OutChar(data1[i++]);
  }
   i=0;
   j=0;
   return 0;
 }    

Poster sur les applications autour des DDS au laboratoire LPL. Présenté pour les rencontres des électroniciens à Toulouse en 2014. generateurs_rf_a_base_de_technologie_dds-a0.pdf

Les dernières applications DDS au LPL

DDS sur bus série SPI avec rack 6 DDS AD9858 et microcontrôleur 32-bit ARM ® Cortex™ -M4 core. Lien ci-dessous vers le service électronique du laboratoire LPL : Poster 1 & Poster 2 les applications électroniques au LPL http://www-lpl.univ-paris13.fr/FR/ Posters 2015

20151027electroniqueatomesfroidslpl1-a0.pdf

20151027electroniqueatomesfroidslpl2-a0.pdf

fr/dds.1456912024.txt.gz · Dernière modification: 2016/03/02 10:47 par fwiotte