完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ti mmWave sensor是高集成度的毫米波雷达传感器SOC,在开发过程中,SDK及TI DEMO均使用灵活的UART接口发送CLI命令进行射频参数配置及相关算法参数的配置。对于研发及测试认证过程中,往往都会有对连续波点频率模式设置的要求。本文介绍一种可以把连续波模式配置增添到应用代码中的实现方式,同时支持原有串口的CLI配置,仅需增加APP层代码,无需修改SDK驱动层代码,即可完成FMCW chirp模式或连续波CW模式的设置,旨在给用户提供一种简洁的配置方式,方便用户对毫米波雷达模块进行RF性能、天线方向图、频带内外性能、电源可靠性等测试。本文的测试环境如下:
1. 使用mmWave studio工具的连续波(点频)模式配置方法 DCA1000EVM是一款数据采集卡,适配于德州仪器(TI)的77GHz&60GHz 毫米波雷达传感器EVM高速60PIN接口,采集卡主要功能是使用户能够通过DCA1000板卡的以太网获得从雷达的LVDS接口送出的ADC数据;于此同时,DCA1000EVM也板载了USB<->SPI接口,方便PC软件对雷达传感器芯片进行配置。 mmWave Studio是一款独立的 Windows GUI,它具有配置和控制 TI 毫米波传感器模块以及收集 ADC 数据以进行离线分析的功能。该 ADC 数据捕获旨在评估和表征射频性能,以及进行信号处理算法的 PC 开发。下图是使用DCA1000+mmWave Studio 软件进行毫米波雷达数据采集的框图,PC上使用mmWave Studio 软件,通过USBßàSPI接口对毫米波雷达芯片进行工作模式配置并采集数据。可支持包括chirping mode、advance frame mode、continuous wave mode在内的全部毫米波雷达RF配置,并且GUI集成的数据分析功能可对采集回来的数据进行初步的分析。 图1. 使用DCA1000+mmWave Studio软件进行数据采集框图 mmWave studio GUI 中连续波模式的设置界面如下图所示,用户仅需遵循mmWave studio软件的配置流程,配置毫米波雷达芯片于连续波工作模式即可,于此同时,DCA1000EVM还可以从LVDS接口获取在连续波模式下的接收通道获取的ADC数据。 图2. mmWave studio GUI 中连续波模式的设置界面示意图 小结,使用DCA1000EVM +mmWave Studio软件组合的要求及优势如下:
2. 使用mmWave Studio CLI tools工具的连续波(点频)模式配置方法 mmWave Studio CLI tools是使用命令行界面 (CLI) 控制毫米波传感器的GUI工具,可以替换mmWave Studio的基本功能,对比于完整功能的mmWave Studio,mmWave Studio CLI tools是一个轻量化的工具,它使用与OOB(SDK out-of-box demo) 相同的配置方式与命令,同时,在硬件连接的需求上,省了一个SPI接口,所以在外场测试过程中,能够简化硬件连接及操作流程。 图3. 使用DCA1000+mmWave Studio CLI tools组合的硬件连接框图 mmWave studio CLI tools的使用较为简单,直接使用TI已提供的软件包即可实现高占空比的FMCW波形配置,也可实现点频模式的配置,下文将要介绍了操作步骤。
小结,使用DCA1000+mmWave Studio CLI tools软件组合的软硬件要求及优势如下:
3. 使用mmWave SDK out-of-box demo的连续波(点频)模式配置方法 3.1. 运行mmWave SDK out-of-box demo的对外接口说明 在现有的TI mmWave SDK及TOOLBOX相关的示例代码中,均使用两个串口进行参数的配置及数据的获取,EVM板载的TM4C MCU是一个板载XDS110仿真器,仿真器自带两路串口,可以直接完成SDK DEMO中的参数配置及数据输出。在客制化产品中,可以使用外部的2个USB<->UART桥接线缆进行调试,两个串口的默认使用情况如下: 图4. 运行mmWave SDK out-of-box demo的对外接口框图 配置命令口:Application/User Uart: Configuration port 115200bps: UART_RX/TX port <-> USB-UART cable <-> PC 数据口:Auxilliary Data Port: Data port 921600bps: MSS_LOGGER-> USB-UART cable -> PC 3.2. 在mmWave SDK out-of-box demo中增加连续波CW模式配置代码 在现有的TI mmWave SDK及TOOLBOX相关的示例代码中,增加配置连续波点频的函数,完成对连续波模式的配置及单次自校准,通过原有的CLI串口调试接口,将连续波模式的CFG参数以CLI的格式配置进去,即可完成连续波点频模式的配置,该配置实现代码较为简单,可作为应用程序的一部分与应用程序整合,实现代码如下:
#include
cliCfg.tableEntry[cnt].cmd = "ContMode"; cliCfg.tableEntry[cnt].helpString = " cliCfg.tableEntry[cnt].cmdHandlerFxn = MmwDemo_CLIContMode; cnt++;
#define ROUND_TO_INT32(X) ((int32_t) (X)) //#define CONV_FREQ_GHZ_TO_CODEWORD(X) (uint32_t) ((float)X * (1e9) / 53.644)//77G device #define CONV_FREQ_GHZ_TO_CODEWORD(X) (uint32_t) ((float)X * (1e9) / 40.233)//60G device static int32_t MmwDemo_CLIContMode (int32_t argc, char* argv[]) { int32_t retVal; float nFreqCent; rlContModeCfg_t contModeCfg; rlContModeEn_t contModeEnable; if (argc != 2) { CLI_write ("Error: Invalid usage of basicCfg command "); return -1; } nFreqCent = atof(argv[1]); contModeCfg.startFreqConst = (CONV_FREQ_GHZ_TO_CODEWORD(nFreqCent)); contModeCfg.txOutPowerBackoffCode = 0; contModeCfg.txPhaseShifter = 0; contModeCfg.digOutSampleRate = 6000; contModeCfg.hpfCornerFreq1 = 0; contModeCfg.hpfCornerFreq2 = 0; contModeCfg.rxGain = 30; // b0 FORCE_VCO_SEL // 0 - Use internal VCO selection // 1 - Forced external VCO selection // b1 VCO_SEL // 0 - VCO1 (77G:76 - 78 GHz or 60G:57 - 60.75 GHz) // 1 - VCO2 (77G:77 - 81 GHz or 60G:60 - 64 GHz) // //77G device // if (nFreqCent > 78) // contModeCfg.vcoSelect = 0x2; // else // contModeCfg.vcoSelect = 0x0; //60G device contModeCfg.vcoSelect = 0x2; CLI_write ("CONT_FREQ_CONST=%X,%D ",contModeCfg.startFreqConst,contModeCfg.startFreqConst); contModeEnable.contModeEn = 1; retVal = rlSetContModeConfig(RL_DEVICE_MAP_INTERNAL_BSS, (rlContModeCfg_t*)&contModeCfg); /* Check for mmWaveLink API call status */ if(retVal != 0) { System_printf("Error: rlSetContModeConfig retVal=%d ", retVal); return -1; } System_printf("Debug: Finished rlSetContModeConfig "); int32_t errCode; MMWave_CalibrationCfg calibrationCfg; MMWave_ErrorLevel errorLevel; int16_t mmWaveErrorCode; int16_t subsysErrorCode; /* Get the open configuration from the CLI mmWave Extension */ CLI_getMMWaveExtensionOpenConfig (&gMmwMCB.cfg.openCfg); /* NO: Setup the calibration frequency: */ gMmwMCB.cfg.openCfg.freqLimitLow = 600U; gMmwMCB.cfg.openCfg.freqLimitHigh = 640U; // gMmwMssMCB.cfg.openCfg.freqLimitLow = 760U; // gMmwMssMCB.cfg.openCfg.freqLimitHigh = 810U; gMmwMCB.cfg.ctrlCfg.dfeDataOutputMode = MMWave_DFEDataOutputMode_CONTINUOUS; gMmwMCB.cfg.ctrlCfg.u.continuousModeCfg.cfg.startFreqConst = contModeCfg.startFreqConst; gMmwMCB.cfg.ctrlCfg.u.continuousModeCfg.cfg.txOutPowerBackoffCode = contModeCfg.txOutPowerBackoffCode; gMmwMCB.cfg.ctrlCfg.u.continuousModeCfg.cfg.txPhaseShifter = contModeCfg.txPhaseShifter; gMmwMCB.cfg.ctrlCfg.u.continuousModeCfg.cfg.digOutSampleRate = contModeCfg.digOutSampleRate; gMmwMCB.cfg.ctrlCfg.u.continuousModeCfg.cfg.hpfCornerFreq1 = contModeCfg.hpfCornerFreq1; gMmwMCB.cfg.ctrlCfg.u.continuousModeCfg.cfg.hpfCornerFreq2 = contModeCfg.hpfCornerFreq2; gMmwMCB.cfg.ctrlCfg.u.continuousModeCfg.cfg.rxGain = contModeCfg.rxGain; gMmwMCB.cfg.ctrlCfg.u.continuousModeCfg.cfg.vcoSelect = contModeCfg.vcoSelect; /* Disable the frame start async event so that small chirp times are supported. If this event is enabled it will break real-time for small chirp times and cause 1D processing to crash due to lack of MIPS*/ gMmwMCB.cfg.openCfg.disableFrameStartAsyncEvent = true; /* Enable frame stop async event so that we know when BSS has stopped*/ gMmwMCB.cfg.openCfg.disableFrameStopAsyncEvent = false; /* No custom calibration: */ gMmwMCB.cfg.openCfg.useCustomCalibration = false; gMmwMCB.cfg.openCfg.customCalibrationEnableMask = 0x0; /* calibration monitoring base time unit * setting it to one frame duration as the demo doesnt support any * monitoring related functionality */ gMmwMCB.cfg.openCfg.calibMonTimeUnit = 1; /* Open the mmWave module: */ if (MMWave_open (gMmwMCB.ctrlHandle, &gMmwMCB.cfg.openCfg, NULL, &errCode) < 0) { /* Error: decode and Report the error */ MMWave_decodeError (errCode, &errorLevel, &mmWaveErrorCode, &subsysErrorCode); CLI_write ("Error: mmWave Open failed [Error code: %d Subsystem: %d] ", mmWaveErrorCode, subsysErrorCode); return -1; } CLI_write ("MMWave_open "); /* Configure the mmWave module: */ if (MMWave_config (gMmwMCB.ctrlHandle, &gMmwMCB.cfg.ctrlCfg, &errCode) < 0) { CLI_write ("Error: MMWDemoMSS mmWave Configuration failed [Error code %d] ", errCode); MMWave_decodeError (errCode, &errorLevel, &mmWaveErrorCode, &subsysErrorCode); CLI_write ("Error: MMWDemoMSS mmWave Configuration failed [mmWave Error: %d Subsys: %d] ", mmWaveErrorCode, subsysErrorCode); return -1; } CLI_write ("MMWave_config "); /* Initialize the calibration configuration: */ memset ((void*)&calibrationCfg, 0, sizeof(MMWave_CalibrationCfg)); // /* Populate the calibration configuration: */ // calibrationCfg.dfeDataOutputMode = // gMmwMssMCB.cfg.ctrlCfg.dfeDataOutputMode; // calibrationCfg.u.chirpCalibrationCfg.enableCalibration = true; // calibrationCfg.u.chirpCalibrationCfg.enablePeriodicity = true; // calibrationCfg.u.chirpCalibrationCfg.periodicTimeInFrames = 10U; calibrationCfg.dfeDataOutputMode = gMmwMCB.cfg.ctrlCfg.dfeDataOutputMode; calibrationCfg.u.contCalibrationCfg.enableOneShotCalibration = true; /* Start the mmWave module: The configuration has been applied successfully. */ if (MMWave_start (gMmwMCB.ctrlHandle, &calibrationCfg, &errCode) < 0) { /* Error: Unable to start the mmWave control */ MMWave_decodeError (errCode, &errorLevel, &mmWaveErrorCode, &subsysErrorCode); CLI_write ("Error: MMWDemoMSS mmWave Start failed [Error code %x] ", errCode); CLI_write ("Error: MMWDemoMSS mmWave Stop failed [mmWave Error: %d Subsys: %d] ", mmWaveErrorCode, subsysErrorCode); return -1; } CLI_write ("Debug: MMWDemoMSS mmWave Start succeeded "); retVal = rlEnableContMode(RL_DEVICE_MAP_INTERNAL_BSS, (rlContModeEn_t*)&contModeEnable); /* Check for mmWaveLink API call status */ if(retVal != 0) { /* Error: Link reported an issue. */ CLI_write("Error: rlEnableContMode retVal=%d ", retVal); return -1; } CLI_write("Debug: Finished rlEnableContMode "); /* Package the command with given data and send it to device */ return 0; }
flushCfg dfeDataOutputMode 2 channelCfg 2 1 0 adcCfg 2 2 adcbufCfg -1 0 0 1 1 lowPower 0 0 ContMode 60 ContMode 60 3.3. 运行测试代码 将上述代码集成进测试程序后,编译成功后,将此BIN文件烧写到EVM板卡中,通过CLI串口加载配置,即可实现连续波点频模式的配置,串口打印信息如下,完成连续波点频模式的配置。 ****************************************** xWR64xx MMW Demo 03.05.00.04 ****************************************** mmwDemo:/>flushCfg Done mmwDemo:/>dfeDataOutputMode 2 Done mmwDemo:/>channelCfg 2 1 0 Done mmwDemo:/>adcCfg 2 2 Done mmwDemo:/>adcbufCfg -1 0 0 1 1 Done mmwDemo:/>lowPower 0 0 Done mmwDemo:/>ContMode 60 CONT_FREQ_CONST=58E3A1CD, Debug: Init Calibration Status = 0x1ffe MMWave_open MMWave_config Debug: MMWDemoMSS mmWave Start succeeded Debug: Finished rlEnableContMode Done 小结,使用mmWave SDK out-of-box demo的连续波(点频)模式配置的软件组合的软硬件要求及优势如下:
本文介绍了3种连续波点频模式设置的软件工具及方法,用户可以根据实际的使用需求,在早期研发阶段,用灵活的mmWave studio软件配置RF参数,测试RF性能,在后期量产阶段,用代码固化的方式增加连续波模式的配置选项,方便测试雷达的点频性能及天线方向图等。需注意的是,在配置连续波模式后,SOC的温度较高,需要做好散热措施保证芯片工作温度在数据手册允许范围内。另外,本文介绍的方式全部都使用mmWave link API实现,如客户需要修改其中的部分配置,请参考mmWave dfp内的API文档。
|
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
692 浏览 0 评论
1106 浏览 1 评论
2473 浏览 5 评论
2808 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2646 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
653浏览 9评论
649浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
781浏览 6评论
628浏览 5评论
668浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:11 , Processed in 1.189346 second(s), Total 77, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号