AnsweredAssumed Answered

ADF5355 correct programming sequence?

Question asked by Benjamin.Brammer on Jun 23, 2017
Latest reply on Aug 9, 2017 by Benjamin.Brammer

Hey Guys,

i am using for a custom evaluation board the ADF5355 as a LO for a QAM modulator/demodulator. Allthough I use the programming software there is something wrong.

I want the ADF5355 to give a LO at 8,571428GHz using RFOutB and a 20MHz reference. Here is my programming sequence. Sadly I don't see my error:

/**
* @brief          ADF5355 for 8,5714 GHz operation configuration function during power up
* @author          Benjamin Brammer
* @date          15.05.2017
*
* This function configures the ADF5355 for 8,5714 GHz operation during power up.
*
*/

void ADF5355_8_5714GHz_config_startup(void)
{
     /* asserting CE */
     ENABLE_ADF5355;

     /* configure register 12 (default value) */
     adf5355_data[0] = 1;
     adf5355_data[1] = 0x041C;

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /* configure register 11 (reserved! don't change!) */
     adf5355_data[0] = 0x0061;
     adf5355_data[1] = 0x300B;

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /* configure register 10 (ADC_CLK_DIV = 50) */
     adf5355_data[0] = 0x00C0;
     adf5355_data[1] = 0x0CBA;          //ToDo: maybe there is a mistake here!

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /* configure register 9 (VCO Band Division = 9 ;
      * ALC = 30 ; Synth lock timeout = 12 ; timeout = 34) */

     adf5355_data[0] = 0x0908;
     adf5355_data[1] = 0xBCC9;          // ToDo: maybe there is a mistake here!

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /* configure register 8 (reserved! don't change!) */
     adf5355_data[0] = 0x102D;
     adf5355_data[1] = 0x0428;

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /* configure register 7 (LE sync = 1 ; LDC = 2048 ;
      * LOL = 1 ; LDP = 12ns ; LDM = Fractional N) */

     adf5355_data[0] = 0x1200;
     adf5355_data[1] = 0x0067;          // ToDo: maybe there is a mistake here!

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /* configure register 6 (gated bleed = 0 ; negative bleed = 1 ;
      * feedback select = 1 ; divider select = 1 ; CPbc = 15µA ;
      * Mute till lock = 0 ; RFoutB = On ; RFoutA = Off ; Output Power = -4dBm) */

     adf5355_data[0] = 0x3500;
     adf5355_data[1] = 0x8036;          // ToDo: maybe Output power is too weak and Register is double buffered!

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /*DOUBLE BUFFERING!!!!!*/
     /* configure register 0 (AUTOCAL = 1 ; PrescalerValue = 1 ; INT = 214)  */
     adf5355_data[0] = 0x0030;
     adf5355_data[1] = 0x0D60;

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /* configure register 5 (reserved! don't change!) */
     adf5355_data[0] = 0x0080;
     adf5355_data[1] = 0x0025;

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /* configure register 4 (MUXOUT = Three-state ; RefDoubler = 0;
      * RDIV = 0 ; R Counter = 1 ; Doublebuffer = 0 ; CPcs = 0,9mA ;
      * RefMode = single ended ; Lvlselect = 3,3V ; PDp = 1 ; PWRDown = 0 ;
      * CPThree-state = 0 ; CounterReset = 0) */

     adf5355_data[0] = 0x3000;
     adf5355_data[1] = 0x8984;          // ToDo: maybe there is a mistake here!

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /*DOUBLE BUFFERING!!!!!*/
     /* configure register 0 (AUTOCAL = 1 ; PrescalerValue = 1 ; INT = 214)  */
     adf5355_data[0] = 0x0030;
     adf5355_data[1] = 0x0D60;

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /* configure register 3 (SDLoadReset = 0 ; PhaseResync = 0 ; PhaseAdjust = 0 ;
      * PhaseValue = 0) */

     adf5355_data[0] = 0x0000;
     adf5355_data[1] = 0x003;          // ToDo: maybe there is a mistake here!

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /*DOUBLE BUFFERING!!!!!*/
     /* configure register 0 (AUTOCAL = 1 ; PrescalerValue = 1 ; INT = 214)  */
     adf5355_data[0] = 0x0030;
     adf5355_data[1] = 0x0D60;

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /* configure register 2 (FRAC2 = 571 ; MOD2 = 2000) */
     adf5355_data[0] = 0x9C77;
     adf5355_data[1] = 0xFFF2;

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /*DOUBLE BUFFERING!!!!!*/
     /* configure register 0 (AUTOCAL = 1 ; PrescalerValue = 1 ; INT = 214)  */
     adf5355_data[0] = 0x0030;
     adf5355_data[1] = 0x0D60;

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /* configure register 1 (FRAC2 = 571 ; MOD2 = 2000) */
     adf5355_data[0] = 0x0492;
     adf5355_data[1] = 0x3A21;

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;

     /* configure register 0 (AUTOCAL = 1 ; PrescalerValue = 1 ; INT = 214) */
     adf5355_data[0] = 0x0030;
     adf5355_data[1] = 0x0D60;

     CS_ADF5355_LOW;
     HAL_SPI_Transmit_DMA(&hspi2, &adf5355_data[0], 2); //transfer
     while(HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_BUSY_TX);
     CS_ADF5355_HIGH;
}

With this sequence I get a LO at 4,71394GHz at RFOUTB . Why?

I would really appreciate some help, because I don't see my fault here..

 

best regards

 

Benbjamin

Outcomes