This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AWR2243: MMWCAS-RF-EVM BPM don't work

Part Number: AWR2243
Other Parts Discussed in Thread: MMWCAS-RF-EVM

our condition: MMWCAS-RF-EVM and host cpu(ARM);

My configuration for BPM is as follows: Only one antenna channel is enabled, all receiving channels are enabled. I set two chirp, The first chirp is in the 0 phase and the second chirp is in the 180 phase.The frame configuration is:chirpStartIdx:0    chirpEndIdx:1    numloops:64.

We watched the doppler fft data.We think BPM don't work because there is a spectrum only in a specific place.

The relevant code is as follows:

bpmCfgArgs_master[0].chirpEndIdx = 0;  
bpmCfgArgs_master[0.chirpStartIdx = 0;
 bpmCfgArgs_master[0].constBpmVal =0;
bpmCfgArgs_master[0].reserved =0;

bpmCfgArgs_master[1].chirpEndIdx = 0;  
bpmCfgArgs_master[1].chirpStartIdx = 0;
 bpmCfgArgs_master[1].constBpmVal =2;
bpmCfgArgs_master[1].reserved =0;

bpmCfgArgs_slaver1[0].chirpEndIdx = 0;  
bpmCfgArgs_slaver1[0.chirpStartIdx = 0;
bpmCfgArgs_slaver1[0].constBpmVal =0;
bpmCfgArgs_slaver1[0].reserved =0;

bpmCfgArgs_slaver1[1].chirpEndIdx = 0;  
bpmCfgArgs_slaver1[1].chirpStartIdx = 0;
 bpmCfgArgs_slaver1[1].constBpmVal =0;
bpmCfgArgs_slaver1[1].reserved =0;

......

int MMWL_BPMConfig(unsigned char deviceMap)
{
    int retVal = RL_RET_CODE_OK;
    rlBpmChirpCfg_t bpmCfgArgs[30] = { 0 };
    if(deviceMap==1)
     {
           bpmnum = bpmchip1num;
     }
     if(deviceMap==2)
     {
      bpmnum = bpmchip2num;
     }
     if(deviceMap==4)
     {
      bpmnum = bpmchip3num;
     }
     if(deviceMap==8)
     {
      bpmnum = bpmchip4num;
     }
     printf("bpmnum is %d\n",bpmnum);
        if(deviceMap==1)
       {
           memcpy(&bpmCfgArgs[0],&bpmCfgArgs_master[0],bpmnum*sizeof(rlBpmChirpCfg_t));
       }
     if(deviceMap==2)
     {
         memcpy(&bpmCfgArgs[0],&bpmCfgArgs_slaver1[0],bpmnum*sizeof(rlBpmChirpCfg_t));
     }
     if(deviceMap==4)
     {
        memcpy(&bpmCfgArgs[0],&bpmCfgArgs_slaver2[0],bpmnum*sizeof(rlBpmChirpCfg_t));
     }
     if(deviceMap==8)
     {
        memcpy(&bpmCfgArgs[0],&bpmCfgArgs_slaver3[0],bpmnum*sizeof(rlBpmChirpCfg_t));
//        bpmCfgArgs_slaver3[0].constBpmVal=0;
//        bpmCfgArgs_slaver3[1].constBpmVal=32;
     }
     for(int i=0;i<bpmnum;i++)
     {
      retVal = rlSetBpmChirpConfig(deviceMap, &bpmCfgArgs[i]);
      printf("bpmCfgArgs[%d].chirpStartIdx is %d\n",i,bpmCfgArgs[i].chirpStartIdx);
            printf("bpmCfgArgs[%d].chirpEndIdx is %d\n",i,bpmCfgArgs[i].chirpEndIdx);
            printf("bpmCfgArgs[%d].constBpmVal is %d\n",i,bpmCfgArgs[i].constBpmVal);
     }
     return retVal;
}
 rlBpmCommonCfg_t data={0};
                rlBpmModeCfg_t mode={0};
                mode.b2SrcSel=0;
                data.mode=mode;
                rlSetBpmCommonConfig(RL_DEVICE_MAP_CASCADED_1,&data);
                rlSetBpmCommonConfig(RL_DEVICE_MAP_CASCADED_2,&data);
                rlSetBpmCommonConfig(RL_DEVICE_MAP_CASCADED_3,&data);
                rlSetBpmCommonConfig(RL_DEVICE_MAP_CASCADED_4,&data);
                   printf("rlSetBpmCommonConfig end\n");
        retVal = MMWL_BPMConfig(RL_DEVICE_MAP_CASCADED_1);
     retVal = MMWL_BPMConfig(RL_DEVICE_MAP_CASCADED_2);
     .......
Do you have any good ways to verify BPM that you can tell me about
Could you tell me other good ways to verify BPM or PHASE SHIFTER?THANKS
  • Configuration you are setting is slightly wrong.

    E.g. frameConfig: chirpStartIdx=0, chirpEndIdx=1, numLoop=10 (total 20*2 chirps in a frame)

    and each chirp is configured with Tx0 only 

    Then BPM Config:

    bpmCfgArgs_master[0].chirpEndIdx = 0;  
    bpmCfgArgs_master[0.chirpStartIdx = 0;
     bpmCfgArgs_master[0].constBpmVal =0;
    bpmCfgArgs_master[0].reserved =0;

    bpmCfgArgs_master[1].chirpEndIdx = 1;  
    bpmCfgArgs_master[1].chirpStartIdx = 1;
     bpmCfgArgs_master[1].constBpmVal =1; /* Tx0 ON: 180 degree */
    bpmCfgArgs_master[1].reserved =0;

    bpmCfgArgs_slaver1[0].chirpEndIdx = 0;  
    bpmCfgArgs_slaver1[0.chirpStartIdx = 0;
    bpmCfgArgs_slaver1[0].constBpmVal =0;
    bpmCfgArgs_slaver1[0].reserved =0;

    bpmCfgArgs_slaver1[1].chirpEndIdx = 1;  
    bpmCfgArgs_slaver1[1].chirpStartIdx = 1;
     bpmCfgArgs_slaver1[1].constBpmVal =1; /* Tx0 ON: 180 degree */
    bpmCfgArgs_slaver1[1].reserved =0;

     To verify you can use mmwave Studio to configure, capture then post-proc : time domain plot you could see alternate 0/180 degree amplitude.

    Here is snapshot of two chirp time-domain plot, where you can see sinosoid is changed by 180 degree.

    Regards,

    Jitendra

  • Sorry, I made a mistake in above code,it should be:

    bpmCfgArgs_master[1].chirpEndIdx = 1;  
    bpmCfgArgs_master[1].chirpStartIdx = 1;
     bpmCfgArgs_master[1].constBpmVal =2;  //tx0 turn on

    constBpmVal is defined as follows in mmWave Radar Interface Control Document Revision 2.7:

    Bit      Definition
    b0      RESERVED
    b1     CONST_BPM_VAL_TX0_TXON
           Value of Binary Phase Shift value for TX0, during
            chirp
    b2     RESERVED
    b3      CONST_BPM_VAL_TX1_TXON
            Value of Binary Phase Shift value for TX1, during
             chirp
    b4    RESERVED
    b5    CONST_BPM_VAL_TX2_TXON
            Value of Binary Phase Shift value for TX2, during
            chirp
    b15:6 RESERVED

  • I I plot time domain time , I still can't see alternate 0/180 degree amplitude. It seems BPM is still not working.

    And I I try to use advance chirp to config BPM.But  my results were the same.

  • Hello,

    I recommend using mmwave studio first to verify your usecase with BPM feature and plot using PostProc as I did in above reply.

    http://www.ti.com/tool/MMWAVE-STUDIO (mmwave Studio -2G)

    Regards,

    Jitendra