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.

MMWCAS-RF-EVM: porting MIMO from cascade EVM to custom RF board

Part Number: MMWCAS-RF-EVM

Hi TI engineer,

We developed a custom RF board, which has different elevation between 4 sensors and same elevation in 4 antennas of each sensor.

I changed some code in "chains_cascadeRadarOd.c" to adapt to the custom RF board. But I don't understand "Chains_cascadeRadarFillRowToElevIdx" function. Could you give me some hints if it needs any modification?

Thanks,

Davy

  • Hi,

    You should update the below structure based on the your Antenna array physical location on your RF board.

    /**< \brief This structure contains the Transmit antenna offsets in the elevation
     *          and azimuth direction in multiples of lambda by 2.
     */
    Chanis_RadarAntOffset gCascadeRadarTxAntArray[CHAINS_RADAR_CASCADE_NUMSENSORS][CHAINS_RADAR_CASCADE_MAX_TX_ANTENNA_PERSENSOR] =
    {
        /* Master */
        {   /* TX1, TX2, TX3 - {Azimuth offset, Elevation offset (in lambda/2)} */
            {11U, 6U}, {10U, 4U}, {9U, 1U}
        },
        /* Slave 1 */
        {   /* TX1, TX2, TX3 */
            {32U, 0U}, {28U, 0U}, {24U, 0U}
        },
        /* Slave 2 */
        {   /* TX1, TX2, TX3 */
            {20U, 0U}, {16U, 0U}, {12U, 0U}
        },
        /* Slave 1 */
        {   /* TX1, TX2, TX3 */
            {8U, 0U}, {4U, 0U}, {0U, 0U}
        }
    };

    Regards,

    Stanley

  • Hi Stanley,

    Yes, they are updated for tx antenna, and also updated the following red for rx antenna below. 

    The MIMO result is not as good as TI RF board. The object range and doppler is normal, but the object in far range(8 meter in SRR case) will not show in the point could. TI RF board could detect 12 meter object in the same scenario.

    Is there anything I am missing, maybe "Chains_cascadeRadarFillRowToElevIdx" function needs some modification?

    Thanks,

    Davy


    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    typedef struct

    {

        UInt16 sensorAzimOffs;

        UInt16 sensorRowOffs;

        UInt16 antAzimOffs[CHAINS_RADAR_CASCADE_MAX_RX_ANTENNA_PERSENSOR];

        UInt16 antElevOffs[CHAINS_RADAR_CASCADE_MAX_RX_ANTENNA_PERSENSOR];

        UInt16 antRowOffs[CHAINS_RADAR_CASCADE_MAX_RX_ANTENNA_PERSENSOR];

    } aoa_rxAntOffset_t;

     ...

        aoa_sensorRxOffset[0].sensorAzimOffs = 0;

        aoa_sensorRxOffset[1].sensorAzimOffs = 11;

        aoa_sensorRxOffset[2].sensorAzimOffs = 52;

        aoa_sensorRxOffset[3].sensorAzimOffs = 46;

        aoa_sensorRxOffset[0].sensorRowOffs = 0;

        aoa_sensorRxOffset[1].sensorRowOffs = 1;

        aoa_sensorRxOffset[2].sensorRowOffs = 1;

        aoa_sensorRxOffset[3].sensorRowOffs = 0;

     ...

                    rxAngleIndxLUT[ind] = gAoa_txAntOffset.antAzimOffs[txInd] +

                                          gAoa_sensorRxOffset[i].sensorAzimOffs +

                                          gAoa_sensorRxOffset[i].antAzimOffs[rxInd];

                    rxRowIndxLUT[ind] = gAoa_txAntOffset.antElevOffs[txInd] +

                                          gAoa_sensorRxOffset[i].sensorRowOffs +

                                        gAoa_sensorRxOffset[i].antRowOffs[rxInd];

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • Yes. They should also update the RX offset below.

    Void Chains_cascadeRadarFillRxAntennaOffsets (aoa_rxAntOffset_t *aoa_sensorRxOffset)
    {
        uint16_t antAzimOffs [] = {0, 1, 2, 3};
        uint16_t antElevOffs [] =  {0, 0, 0, 0};
        uint16_t antRowOffs [] =  {0, 0, 0, 0};
        uint16_t i = 0U;
        aoa_sensorRxOffset[0].sensorAzimOffs = 0;
        aoa_sensorRxOffset[1].sensorAzimOffs = 11;
        aoa_sensorRxOffset[2].sensorAzimOffs = 50;
        aoa_sensorRxOffset[3].sensorAzimOffs = 46;
        for (i = 0U ; i < CHAINS_RADAR_CASCADE_NUMSENSORS; i++)
        {
            memcpy(aoa_sensorRxOffset[i].antAzimOffs, antAzimOffs, sizeof(antAzimOffs));
            memcpy(aoa_sensorRxOffset[i].antElevOffs, antElevOffs, sizeof(antElevOffs));
            memcpy(aoa_sensorRxOffset[i].antRowOffs , antRowOffs , sizeof(antRowOffs ));
        }
    }
    

    In addition, did they do calibration for the custom RF board?

    This is required to get good result.

    Regards,
    Stanley

  • Hi Standley,

    Yes, they are calibrated. I am wondering if any other part of codes need to modify, like calibration/AOA? 

    Thanks,

    Davy

  • Another path is testing RF board using mmWave Studio directly and process data off-line on PC.

    mmWave Studio has much better support from Radar team to identify RF performance issue.

  • Hi Stanley,

    Thanks for the suggestion, I will try and close this ticket first.

    Thanks,

    Davy