Ti Sensor controller studio TDC模块调用实例

工作环境

软件平台:Texas Instruments - Sensor Controller Studio 2.9.0.208

硬件平台:CC1312R1

一、工程创建

1.芯片选择

点击create new projects,进行工程名字,路径设置和芯片的选择,此处选择CC2672P3。

2.IO属性设置

    上图是ti提供的帮助文档的位置,点击之后我们可以找到有关io属性设置的内容,具体如下:

    也就是说当你在Task resource页面内调用IO时,Ti内部会自动生成一个代表该IO的变量。比如说,在此TDC测量的例子中,我配置了3个IO:

    一个叫EV的事件输出IO,两个待测信号输入IO signalA和signalB。那么Ti就会自动生成一个变量AUXIO_O_EV,AUXIO_I_SIGNAL_A,AUXIO_I_SIGNAL_B,这会在后面的程序中用到。
上图是Task resource页面中用到的模块,建议都勾上,不然后面代码编译时可能找不到对应资源。

3.常量变量设置

由于TDC的测量会产生对应的测量输出,因此需要在Constant and Data Strutures中添加两个output变量,并为其命名,这个变量会在后面的Execution Code中用到。

4.启动代码,执行代码和结束代码

TDC调用的一些实例和说明可以在左侧导航栏的start page--->tool documentation--->Sensor controller help 中找到,下面附上我修改后的TDC 测试代码内容。

initialization code:

// Select 2 x 48 MHz from RCOSC_HF as TDC counter clock source
tdcSetCntSource(TDC_CNTSRC_96M_RCOSC);

gpioCfgMode(AUXIO_I_SIGNAL_A,GPIO_MODE_INPUT);
gpioCfgMode(AUXIO_I_SIGNAL_B,GPIO_MODE_INPUT);
gpioCfgMode(AUXIO_O_EV,GPIO_MODE_OUTPUT);

execution code:

// Enable the TDC with:
// - Start trigger on the first rising signal edge
// - Stop trigger on the first subsequent falling signal edge
tdcSetTriggers(TDC_STARTTRIG_AUXIO_HIGH_BASE + AUXIO_I_SIGNAL_B, TDC_STOPTRIG_AUXIO_LOW_BASE + AUXIO_I_SIGNAL_B, 0);
tdcEnable();

// Start the measurement (the signal must be low at this point, and we measure the width of one high pulse)
tdcArm(TDC_START_ASYNC);

// The pulse can now occur on AUXIO_I_SIGNAL

// Wait for the TDC stop trigger for 1000 us
tdcWaitUs(1000);


//using the internal io as a event and sent it to the AUXIO_I_SIGNAL_B
gpioClearOutput(AUXIO_O_EV);
fwDelayUs(50); //system delay function

gpioSetOutput(AUXIO_O_EV);
fwDelayUs(50);

gpioClearOutput(AUXIO_O_EV);
fwDelayUs(50);


// Get the TDC counter value
tdcGetValue(output.pulseWidthH, output.pulseWidthL);

注意,执行代码中的TDC_STARTTRIG_AUXIO_HIGH_BASE,TDC_STOPTRIG_AUXIO_LOW_BASE 都是Ti内部已经定义好的变量,当你在Task resource页面中勾选了TDC模块,就会有该变量的定义。

termination code:

// Disable TDC
tdcDisable();

5.IO实际地址映射与连接


 

二、实际测量

 1.实际物理连接

将子系统的板子拆下来之后可以看到对应的DIO引脚位置,现在我们内部有个50微秒的Event从DIO5输出,并送到signalB对应的DIO15进行测量,所以我们只需要用杜邦线将DIO5和DIO15连接好,即可用TDC测量DIO5的脉冲宽度。连接好后实际效果如下图:

2.代码检验与烧录

如果代码有误,则会在code generator页面报一个红色错误,若正常则是像我上图页面一样。

到最后一步了,将板子通过usb线连接电脑(注意需要装驱动识别TI的板子),设置好Task iteration action sequence(要重复执行的东西),然后点击序号1圈起来的按键连接板子,点击序号2圈起来的以执行初始化代码,最后点击序号3圈起来的以重复执行execution codes。即可看到结果。

结果如图所示,我再执行代码中将event的波形脉宽设置为50us,由于使用96Mhz的时钟进行双沿采样,所以每一个计数对应1/96*1000=10.41ns,得到的结果几乎一致。本人后续还会更新一些FPGA产生的纳秒级的脉宽的测量。

写于2024年2月27日。

3.FPGA测试捕捉结果

使用FPGA产生了1us高电平的波形送到板子中进行测量,发现结果如上图所示,输出的测量数据大部分时候稳定在95左右,小部分时间会有波动。95*10.4ns=988.95,误差较小。

上图为600ns波形的检测结果,逻辑分析仪抓到的信号脉宽为594ns,输出结果大部分时候保持在56左右,偶尔会跳到976的错误测量数值,经计算,56*10.41=582.96ns,误差较小。

上图为160ns波形的检测结果,逻辑分析仪抓到的信号脉宽为156ns左右,TDC输出结果大部分时候保持在18,18*10.41=187.38ns,误差开始增加。TI文档中说明测量的脉宽需要≥292ns,但还是能测出160ns的脉宽,不过此时也接近了TI TDC测量的极限值。

上图为120ns波形的检测结果,逻辑分析仪抓到的信号脉宽为125ns左右,不过此时TDC的输出结果产生了非常剧烈的波动,从17,18到964之间一直不断跳变,数据完全不可用。由此可见TI CC1312R1 TDC能测量的最大精度在160ns左右。

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值