ti mmwave sensor是高集成度的毫米波雷达传感器soc,在开发过程中,sdk及ti demo均使用灵活的uart接口发送cli命令进行射频参数配置及相关算法参数的配置。对于研发及测试认证过程中,往往都会有对连续波点频率模式设置的要求。本文介绍一种可以把连续波模式配置增添到应用代码中的实现方式,同时支持原有串口的cli配置,仅需增加app层代码,无需修改sdk驱动层代码,即可完成fmcw chirp模式或连续波cw模式的设置,旨在给用户提供一种简洁的配置方式,方便用户对毫米波雷达模块进行rf性能、天线方向图、频带内外性能、电源可靠性等测试。本文的测试环境如下:
此方法适用器件型号:i/awr1443, i/awr1642, i/awr1843, i/awr6843
本文测试硬件平台:iwr6843isk evm
1. 使用mmwave studio工具的连续波(点频)模式配置方法
dca1000evm是一款数据采集卡,适配于德州仪器(ti)的77ghz&60ghz 毫米波雷达传感器evm高速60pin接口,采集卡主要功能是使用户能够通过dca1000板卡的以太网获得从雷达的lvds接口送出的adc数据;于此同时,dca1000evm也板载了usbspi接口,方便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软件组合的要求及优势如下:
硬件:mmwave radar sensor evm + dca1000evm + pc
软件:mmwave studio
radar硬件所需预留接口:lvds(adc数据传输) + spi(rf参数配置) + uart(固件加载)+ sop(soc启动模式配置)
优势:rf所有的配置都支持,同时可以获取点频模式下的adc数据,可以同步分析rx性能。
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波形配置,也可实现点频模式的配置,下文将要介绍了操作步骤。
连续波点频发射模式
烧写bin文件bin到板卡
修改串口号. studio_cliguimmw_cli_toolmmwaveconfig.txt
com_port_num=9 修改为application/user口(命令口),需注意,这个串口跑的是921600bps
修改cfg文件为cw模式。修改.studio_cliguimmw_cli_toolmmwaveconfig.txt
config_json_cfg_path=....profile_continuous_mode_xwr68xx.cfg #连续波模式
config_json_cfg_path=....profile_chirp_mode_xwr68xx.cfg #fmcw chirp模式
双击运行.studio_cliguimmw_cli_toolmmwave_studio_cli.exe即可按点频连续波发射。
设置为其他频点。修改.studio_cliprofile_continuous_mode_xwr68xx.cfg
contmodecfg 61 0 0 6000 0 0 30 0 1024
contmodecfg 60 0 0 6000 0 0 30 0 1024
61/60即是发射连续波时候的频点。
fmcw chirp扫频发射模式
烧写bin文件bin到板卡
修改串口号.studio_cliguimmw_cli_toolmmwaveconfig.txt
com_port_num=9 修改为application/user口(命令口),需注意,这个串口跑的是921600bps
修改cfg文件为chirp模式。修改.studio_cliguimmw_cli_toolmmwaveconfig.txt
config_json_cfg_path=....profile_continuous_mode_xwr68xx.cfg #连续波模式
config_json_cfg_path=....profile_chirp_mode_xwr68xx.cfg # fmcw chirp模式
双击运行.studio_cliguimmw_cli_toolmmwave_studio_cli.exe 即可按设定的fmcw chirp模式发射。
设置为其他频段,请修改.studio_cliprofile_chirp_mode_xwr68xx.cfg。
profilecfg 0 60.75 30.00 25.00 59.10 0 0 54.71 1 96 2950.00 2 1 36
chirpcfg 0 0 0 0 0 0 0 1
chirpcfg 1 1 0 0 0 0 0 2
chirpcfg 2 2 0 0 0 0 0 4
framecfg 0 2 96 0 26 1 0
其中framecfg中的26可以修改,比如26ms对应7%占空比。70ms对应36.66%占空比。
小结,使用dca1000+mmwave studio cli tools软件组合的软硬件要求及优势如下:
硬件:mmwave radar sensor evm + dca1000 + pc
软件:mmwave studio cli tools
radar硬件所需预留接口:lvds(adc数据传输) + uart(rf参数配置及固件加载)+ sop(soc启动模式配置,仅需配置一次)
优势:支持fmcw模式及连续波点频模式,获取adc数据则需dca1000evm数据采集卡的配合,若只需评估tx性能,可以只使用soc板卡,不需要dca1000evm。
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个usbuart桥接线缆进行调试,两个串口的默认使用情况如下:
图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的格式配置进去,即可完成连续波点频模式的配置,该配置实现代码较为简单,可作为应用程序的一部分与应用程序整合,实现代码如下:
在c 增加头文件
#include
在c 增加一条新的cli指令
clicfg.tableentry[cnt].cmd = contmode;
clicfg.tableentry[cnt].helpstring = ;
clicfg.tableentry[cnt].cmdhandlerfxn = mmwdemo_clicontmode;
cnt++;
在c 增加以下代码
#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 commandn);
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,%dn,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=%dn, retval);
return -1;
}
system_printf(debug: finished rlsetcontmodeconfign);
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]n,
mmwaveerrorcode, subsyserrorcode);
return -1;
}
cli_write (mmwave_openn);
/* configure the mmwave module: */
if (mmwave_config (gmmwmcb.ctrlhandle, &gmmwmcb.cfg.ctrlcfg, &errcode) < 0)
{
cli_write (error: mmwdemomss mmwave configuration failed [error code %d]n, errcode);
mmwave_decodeerror (errcode, &errorlevel, &mmwaveerrorcode, &subsyserrorcode);
cli_write (error: mmwdemomss mmwave configuration failed [mmwave error: %d subsys: %d]n, mmwaveerrorcode, subsyserrorcode);
return -1;
}
cli_write (mmwave_confign);
/* 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) 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的连续波(点频)模式配置的软件组合的软硬件要求及优势如下:
硬件:mmwave radar sensor evm + pc
软件:mmwave sdk out-of-box demo + 代码修改
radar硬件所需预留接口:uart(rf参数配置及固件加载)+ sop(soc启动模式配置,仅需配置一次)
优势:与应用代码整合,可以灵活的通过配置函数切换fmcw模式及点频模式,获取adc数据则用户自己完成adcbuf取数的驱动代码修改,若只用于评估tx性能,那此方法则不需要更多的修改,即可在应用代码中预留此接口,方便研发测试及产线测试。
4. 总结
本文介绍了3种连续波点频模式设置的软件工具及方法,用户可以根据实际的使用需求,在早期研发阶段,用灵活的mmwave studio软件配置rf参数,测试rf性能,在后期量产阶段,用代码固化的方式增加连续波模式的配置选项,方便测试雷达的点频性能及天线方向图等。需注意的是,在配置连续波模式后,soc的温度较高,需要做好散热措施保证芯片工作温度在数据手册允许范围内。
迪拜为了推动环保事业 电动车充电两年不收费
专用SOC安全控制架构的研究与设计
土壤水分温度电导率传感器的特点及参数
特斯拉四轮降价,在华销量却大跌,原因为何?
如何用SQLE自动审核Java应用
适用于TI mmWave sensor单芯片SOC平台的连续波点频模式设置方法
自动检测LED故障的方法介绍
GaN Charger推荐方案- HGN093N12S/SL高频应用MOSFET
VR技术何时迎来黄金时代
自诊断传感器模块提升汽车网络效率
联想Z6正式发布 首次搭载骁龙730处理器
BittWare和Achronix合作推出采用7纳米的Speedster7t FPGA
基于微功率脉冲雷达的运动传感器的电路设计
2Q19英特尔CPU缺货问题加剧 AMD公司股价借势上涨
石英晶振的原理图
人工智能、云计算对未来地面战的影响
区块链资产平台是什么?未来将如何发展?
AIGC到底需要多大的算力?
美国限制14类技术出口清单,你想买的基本都买不到了
变频调速器已广泛应用在国民经济各行业之中