votre temps local: :: ()
heure officielle (en France) : ::(TZ:)
Heure UTC client: :: Offset client: s - delai: ms - - timeZone: Heure UTC: ::Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
fr:dds [2016/03/02 10:44] fwiotte [Direct Digital Synthesizer] |
fr:dds [2018/03/23 14:39] (Version actuelle) fwiotte [Les dernières applications DDS au LPL] |
||
|---|---|---|---|
| Ligne 10: | Ligne 10: | ||
| [[fr: Exemple de développement autour d'un DDS l'AD9959]] | [[fr: Exemple de développement autour d'un DDS l'AD9959]] | ||
| + | [[fr: programmes en C pour communiquer avec le DDS]] | ||
| - | + | [[fr: Nouveau développement 2018-> double DDS 8 sorties pour piège RF programmation QSPI]] | |
| - | + | ===== Un schéma de base avec l'AD9959 ===== | |
| - | + | ||
| - | ======Les différents registres d'un DDS: l'AD9959====== | + | |
| - | Le premier registre à programmer est le registre CSR: table 28 du datasheet | + | |
| - | registre CSR (channel select register) | + | |
| - | One byte is assigned to this register: nombre d'octets du registre | + | |
| - | CSR serial address = 0x00; | + | |
| - | CSR defaut value = 0xF0; | + | |
| - | Ce registre active les voies de sorties et les modes SPI: | + | |
| - | Par défaut tous les voies sont activées et le mode SPI Single-bit serial 2-wire est sélectionné. | + | |
| - | Il est évidemment possible de redéfinir ce registre suivant son application. | + | |
| - | + | ||
| - | Le second registre est le registre FR1: table 28 du datasheet | + | |
| - | registre FR1 (fonction register 1) | + | |
| - | three bytes is assigned to this register: nombre d'octets du registre | + | |
| - | FR1 serial address = 0x01; | + | |
| - | FR1 defaut value = 0x00; | + | |
| - | Ce registre permet en autres de définir la PLL interne et le coefficient multiplicateur x4 à x20. | + | |
| - | Pour exemple la valeur à fournir pour activer la PLL x20 => FR1 = 0xD00000; | + | |
| - | Dans ce cas il suffit de fournir un quartz à 25MHz avec la PLL activée x20 on a 500MHz d'horloge PIN 22 et 23 du DDS. | + | |
| - | + | ||
| - | Le troisième registre est le registre CFR table 29 du datasheet | + | |
| - | registre CFR (Channel Function Register) | + | |
| - | three bytes is assigned to this register: nombre d'octets du registre | + | |
| - | CFR serial address = 0x03; | + | |
| - | CFR defaut value =0x302; | + | |
| - | Ce registre défini les différents mode de fonctionnement du DDS.Ce registre est important si vous utiliser | + | |
| - | certains modes de fonctionnement: balayage de fréquence, de phase, ou d'amplitude. | + | |
| - | Important par défaut les sortie sont en mode DAC full-scale current. | + | |
| - | + | ||
| - | Le quatrième registre est le registre CFTW0: table 29 du datasheet | + | |
| - | registre CFTW0 (Channel Frequency Tuning Word 01) | + | |
| - | four bytes is assigned to this register: nombre d'octets du registre | + | |
| - | CFTW0 serial address = 0x04; | + | |
| - | CFTW0 defaut value =0x00; | + | |
| - | Ce registre permet de rentrer la fréquence désirée suivant la relation ci-dessous: | + | |
| - | FTW0 = frequency output x 2^32 /frequency clock | + | |
| - | + | ||
| - | Le cinquième registre est le registre CPOW0 table 29 du datasheet | + | |
| - | registre CPOW0 (Channel Phase Offset Word 01) | + | |
| - | two bytes is assigned to this register: nombre d'octets du registre | + | |
| - | CPOW0 serial address = 0x05; | + | |
| - | CPOW0 defaut value =0x00; | + | |
| - | Ce registre définie la phase du signal de sortie codé sur 14 bits avec la relation ci-dessous: | + | |
| - | CPOW0 = Delta phi x 2^14 /360° | + | |
| - | + | ||
| - | Le sixième registre est le registre ACR: table 29 du datasheet | + | |
| - | registre ACR (Amplitude Control Register) | + | |
| - | two bytes is assigned to this register: nombre d'octets du registre | + | |
| - | ACR serial address = 0x06; | + | |
| - | ACR defaut value =0x00; | + | |
| - | Ce registre permet de définir l'amplitude. | + | |
| - | Par défaut l'amplitude est en mode full scale mais programmable si on modifie le registre CFR. | + | |
| - | + | ||
| - | Les autres registres sont utiles pour programmer le DDS pour des balayages de fréquences, de phases et d'amplitudes en autres. | + | |
| - | Registre FR2 (Function Register 2) | + | |
| - | Registre LSRR (Linear Sweep Ramp Rate1) | + | |
| - | Registre FDW (LSR Falling delta Word1) | + | |
| - | Registre RDW (LSR Risingdelta Word1) | + | |
| - | Registre CW1 (Channel Word 1) | + | |
| - | ... | + | |
| - | **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: {{:fr: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! | 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 | Cette carte est générique, et grâce au port SPI sur la carte on | ||
| Ligne 212: | Ligne 20: | ||
| {{:fr:carte_ad9959.png?200|}} | {{:fr:carte_ad9959.png?200|}} | ||
| - | ====== La carte électronique pour l'habillage du piège RF===== | + | ==== La carte électronique pour l'habillage du piège RF==== |
| ===== BEC de Rubidium ====== | ===== BEC de Rubidium ====== | ||
| {{:fr:dds_ad9959_bec.pdf|}} | {{:fr:dds_ad9959_bec.pdf|}} | ||
| Ligne 235: | Ligne 43: | ||
| Document complet | Document complet | ||
| {{:fr:cartes_dds_ad9858_et_ad9852_sur_carte_ni_dio_32hs.pdf|}} | {{:fr:cartes_dds_ad9858_et_ad9852_sur_carte_ni_dio_32hs.pdf|}} | ||
| - | ====== Le programme sous windows avec interface CVI ====== | + | ===== 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) | ||
| + | pour charger les données via un PC. | ||
| - | 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 | 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 | data1 => données séries venant du pont USB-serial.puce FTDI | ||
| Ligne 273: | Ligne 83: | ||
| {{:fr:20151027electroniqueatomesfroidslpl2-a0.pdf|}} | {{:fr:20151027electroniqueatomesfroidslpl2-a0.pdf|}} | ||
| + | |||
| + | {{ :fr:geneyig.pdf |}} | ||
| + | |||
| + | {{ :fr:notebusdds.pdf |}} | ||
| + | |||
| + | |||