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.

[参考译文] MSP430FR6047:如何使用 MSP430FR6047获取1-5米声路长度的正确 ADC 波形?

Guru**** 2382480 points
Other Parts Discussed in Thread: MSP430FR6047
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1378300/msp430fr6047-how-can-i-use-the-msp430fr6047-to-obtain-the-correct-adc-waveform-for-a-sound-path-length-of-1-5-meters

器件型号:MSP430FR6047

工具与软件:

尊敬的 Cash Hao11:

我一直在研究 MSP430FR6047芯片是否适用于1-5米范围内的开放通道流量测量、而不是官方文件中提供的管道测量。 在最近的一次实验中、我观察到了一些我将在下面描述的现象。 在该实验中、声路距离为0.8米、位置是一个室内水箱。

首先、我按照官方手册中的步骤完成了超声波传感器和开发板(MSP430FR6047)的连接、然后刷入了相应的 bin 文件。 在 USS GUI 上设置这些参数后、我打开 ADC 捕获界面、看到了一个非常奇怪的波形。 UPS 波形几乎是一条直线(与正式文件中提供的标准捕获波形相比)。

更奇怪的是,当我检查接线和重新连接时,波形幅度直接下降到20-30 (所有其他 USS 参数保持不变)。

我无法理解造成这种情况的根本原因、如果您帮助解决此 mystery.e2e.ti.com/.../Ultrasonic-Sensing-Design-Center-_2800_Water-Mode_2900_-_2D00_-C_5F005F00_Users_5F00_86186_5F00_USS_5F00_02_5F00_40_5F00_00_5F00_00_5F00_USSWorkspace_5F00_USS_5F00_Project-2024_2D00_06_2D00_20-17_2D00_11_2D00_36.mp4问题、我将不胜感激

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    可能只是 DNS 信号上接收到的一些反射噪声。  

    您可以尝试将 USS_SEQUENCE_SELECTION 更改为 USS_CAPTURE_SEQUENCE_SELECT_CH1_CH0。 它将首先发送 DNS 信号。 在本例中、根据我的理论、您应该会发现 DNS 信号是一条线。  

    此致、

    Cash Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    好的、我理解您的观点。 但是、我无法在 USS GUI 中找到您提到的参数"USS_SEQUENCE_SELECTion"。 我需要打开演示项目、修改参数、然后编译和上传代码吗? 此外、一个更基本的问题是、使用 MSP430FR6047在1-5米的开放通道中进行飞行时间测量是不可靠甚至不可能的?

    此致、

    Tiger Cui

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我是否需要打开演示项目、修改参数、然后编译并上传代码? [报价]

    有。 您需要这样做。  

    我们在使用直径为1至5米的仪表方面没有太多的经验。 您可以尝试使用此应用手册、并检查它是否可用于您的应用。  

    TIDA-01486参考设计| 德州仪器 TI.com

    此致、

    Cash Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我设置了一个新的实验环境。 在新的实验中、超声波换能器之间的距离为15cm。然后我连接 MSP430FR6047并打开 USS 实用程序。 我拍摄了以下三幅图像。 在第一张图中、已调整 ADC 波形以满足官方文件的要求。 第二幅图像显示了波形窗口、看起来有点奇数。 飞行时间差的变化是否会过大? 请帮助我识别问题。 第三幅图像显示报告的错误代码。 我不太明白错误代码135的含义。 您能为我澄清一下吗?

     ERROR CODE

    此致、

    Tiger Cui。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    对于错误代码135、您可以在 代码(例如80/100/120)中设置 USS_ALG_MAX_SAMPLE_SHIFT 一个更大的数字来避免这种错误。  

    波形页面对我来说异常。 在该图中、dTOF 结果差异很大。 您可以在什么测试条件下获得该结果?

    此致、

    Cash Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我现在知道如何避免错误代码。 我的 ADC 采样结果图像应该没问题、对吧? 下面是我实验的场景。 这可能是因为换能器底部的衬垫上有许多小孔?

    最棒的待遇

    Tiger Cui

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我不认为您的 ADC 采集对我来说都很有用。 ADC 采集数据上存在大约150个 ADC 代码的直流失调电压。 这通常是由较高的 PGA 增益设置引起的。 但我看不到您的配置、我不确定该偏移来自哪里。  

    您直接将换能器放入水中。 我不确定这是否可以。 通常情况下,换能器不是防水的。 它不能在水中工作。  

    此致、

    Cash Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    是的、回答正确。 我在实用程序中增大了"GUI Based Gain Control"参数。 如果我使用默认值、我的 ADC 振幅仅约为80。

    此致、

    Tiger Cui

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    MSP430FR6047的最快 ADC 速度为8Msps (每秒样本数)。 但数据表指出、高精度时间测量分辨率小于5ps (皮秒)。 在8Msps 的最大采样率下、采样之间的间隔为125皮秒、因此采样时间分辨率应为125ps、而不是5ps。 我是否会对某些内容产生误解或者数据表中是否存在错误? 如果手册所说的是正确的、这是如何实现的? 是通过内插采样的 ADC 波形数据进行的吗? 为1MHz 探针推荐的 ADC 采样频率为3.6MHz、该频率对应于远于5ps 的时间测量分辨率。 很难想象这仅仅是通过内插实现的;是否有额外的硬件帮助? 我期待您的答复。

    此致、

    Tiger Cui

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    通过对交叉相关数据使用插值方法提高了5ps。  

    我想您理解普通话、请观看本视频 B23.tv/iQREde1

    此致、

    Cash Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    非常感谢您的答复。 观看视频并查阅官方文档后、我在 MATLAB 进行了仿真。 我将 MATLAB 代码作为附件上传。 在仿真中、ADC 的采样频率为3.6MHz、信号频率为1MHz、持续时间设为60微秒。 在这些条件下、对交叉相关结果执行余弦内插后、精度只能达到275ns、相对于5ps 仍然存在显著的间隙。 您能解释一下为什么会出现这种情况吗? 我在仿真代码中是否犯了任何错误? 我非常感谢你的澄清。

    此致、

    Tiger Cui

    % MATLAB代码,生成两个离散信号序列,其中一个信号相较于另一个信号延迟200纳秒
    
    % 参数
    fs = 3.6e6; % 采样率,单位为赫兹
    f_signal = 1e6; % 信号频率,单位为赫兹
    delay = 200e-9; % 延迟时间,单位为秒
    duration = 60e-6; % 持续时间,单位为秒
    
    % 时间向量
    t = 0:1/fs:duration; % 时间向量,持续时间由duration决定
    
    % 生成原始信号
    signal1 = sin(2 * pi * f_signal * t);
    
    % 延迟样本数量
    delay_samples = round(delay * fs);
    
    % 生成延迟信号
    signal2 = [zeros(1, delay_samples), sin(2 * pi * f_signal * t(1:end-delay_samples))];
    
    % 绘制两个信号在同一张图中
    figure;
    plot(signal1, 'b'); % 原始信号用蓝色表示
    hold on;
    plot(signal2, 'r'); % 延迟信号用红色表示
    title('原始信号和延迟信号');
    xlabel('采样点的索引');
    ylabel('振幅');
    legend('原始信号', '延迟信号');
    grid on;
    hold off;
    
    % 提取20-40点范围内的信号
    signal1_segment = signal1(20:40);
    signal2_segment = signal2(20:40);
    
    % 计算互相关
    [cross_corr, lags] = xcorr(signal1_segment, signal2_segment);
    
    % 找到互相关的峰值索引
    [~, max_index] = max(cross_corr);
    
    % 余弦插值计算更精确的峰值点位置
    alpha = cross_corr(max_index - 1);
    beta = cross_corr(max_index);
    gamma = cross_corr(max_index + 1);
    
    omega = acos((alpha + gamma) / (2 * beta));
    phi = atan((alpha - gamma) / (2 * beta * sin(omega)));
    delta = -phi / omega;
    
    % 计算更精确的峰值点位置
    peak_lag_interp = lags(max_index) + delta;
    
    % 显示结果
    disp(['峰值索引: ', num2str(lags(max_index))]);
    disp(['插值后的峰值索引: ', num2str(peak_lag_interp)]);
    
    % 计算dTOF
    dTOF = -(lags(max_index) + delta) / fs;
    disp(['dTOF: ', num2str(dTOF), ' 秒']);
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我这边可以看出你的代码是正确的。 但是、我认为该测试代码只能证明该方法的精度、而不能证明余弦插值方法的分辨率。  关于 MCU 中余弦内插的分辨率、我认为这与它们如何定义数据格式有关。  我不知道如何在公式中计算此分辨率。 不过、根据水表应用中的 dTOF 结果。 在零流量下、dTOF 的 STD 通常约为30ps。 因此、dTOF 结果的分辨率也应具有相同的比例、甚至更小的结果。

    此致、

    Cash Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我目前正面临一些棘手的问题。 在对 USS_Water _Demo 工程进行一些修改(包括添加我设计的算法)后、我想在调试模式下观察算法参数和最终输出的变化。 因此、我需要设置断点。 问题是、在本例中、我无法连接到 USS GUI、因此无法将基本参数传输到程序中。 是否有 USS_Water _Demo 版本可以在不使用 GUI 的情况下手动修改主参数、或者可以在使用 GUI 时观察变量窗口(Debug 模式下)?

    此致、

    胡翠

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您可以使用 USS GUI 的"Generate headers"功能。 然后替换工程中的头文件。 然后在构建和下载项目后执行。 您无需再次通过 USS GUI 更新参数。  

    在调试模式下、它通常不能同时使用 GUI。  

    此致、

    Cash Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的答复。 我实现了 USS GUI 的参数传递、并通过禁用 LPM 模式观察变量值。 您的建议也会是更好的解决方案。 我现在要使用 IIC 传输 ADC 收集的波形数据。 您能否告诉我、您是否有任何使用 IIC 通过 MSP430FR6047在外部传输数据的示例代码或演示代码?

    此致、

    胡翠

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    是否希望开发自己的 GUI 而不是使用 USS GUI?  

    下面的链接中提供了一些您可以参考的代码示例。

    https://dev.ti.com/tirex/explore/node?node=A__ABziZFVjgbNp8cm.JAo1jQ__msp430ware__IOGqZri__LATEST

    此致、

    Cash Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的答复。

    在调试过程中、我遇到了几个问题、如果您能帮助解决这些问题、我将不胜感激。 第一个问题是在什么情况下定义的变量会存储在寄存器 R7中。 在我在下面上传的调试映像中、变量index_x存储在寄存器 R7中、并且从710行存储到719行、其值会发生显著变化、这显然是不预期的。

    第二个问题是、在调试期间、定义的变量delta会提示"identifier not found"。 我在函数中定义了这个变量、并在为其分配值之前将其初始化。 为什么会出现此提示? 编译器是否会由于优化级别而将该变量优化掉?

    此致、

    胡翠

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    它可能与 优化级别有关。 或您计算结果的方式。 您可以尝试使用以下方法并检查它是否对您有利。

    double alpha=0.0、beta=0.0、delta=0.0、omega=0.0、psi=0.0;

    sum1 = xx[index_x - 1];
    sum2 = xx[index_x ];
    sum3 = xx[index_x + 1];
    Omega =(双精度)(sum1+sum3)/(double)(2*sum2);
    alpha=acos (ω);
    Psi=(双倍)(Sum1-sum3)/(2*sum2*sin(alpha));
    β=atan (psi);
    delta =-β/α;

    此致、

    Cash Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    通过单步调试、我最终确定了问题。 问题在于三角函数的使用。 使用 sin ()、acos ()、atan ()等函数无法生成正确的值。 最终,我通过使用 sinl()、acosl()、atanl()解决了这个问题。 但是、在调试过程中、我发现了一些新问题。 第一个问题如下,如第一个图像所示:在变量窗口中,xx[index_x]的值是32733 ,但2*xx[index_x]的值是-70。 数组 xx 为 int 类型。 为什么会发生这种情况? 第二个问题、请参阅最后四张图片。 通过在相邻代码中设置断点、在分步调试期间捕获图像。 可以看到变量的生命周期非常短。 即使变量在同一函数和相邻代码中、为什么值变化如此之快? (如'calc'的第四个和第五个图像所示)。 这是我的两个问题、请你协助解决这些问题。

    此致、

    胡翠。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    1.关联结果值应以 int32格式保存。 在您的代码中、您似乎使用的是 int16格式。 使用 int32格式时、应该避免出现问题。

    你使用的是 sinl()而不是 sin()。 在 math.h 文件中,您需要将 long double 格式的数据输入到 sinl()函数中。 您的数据不是 long double 格式。 我认为调用 sinl()函数是不正确的。

    2.在您的代码行733之后、calc 似乎没有在行之后使用。 因此、对面积进行了优化、以保存其他数据。  

    此致、

    Cash Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的答复。 我有一些新问题。

    昨天、我能够获得信号路径长度为1m 的正确 ADC 波形、但今天、无论我做什么、都无法获得正常的 ADC 波形。 我检查了布线并使用了修改后的编译程序、而是使用官方 MSP430FR6047EVM_USS_MSP430FR6047EVM Water_Demo_LPM_02_40_00_00.txt 固件放弃了该操作。 即便如此、我仍然无法再现昨天获得的 ADC 波形。 将修改后的程序编程到电路板上后、更新参数始终会报告错误:"HSPLL 的输出频率无效。" 有时此错误会在一段时间后消失、并切换到另一个错误;否则、错误仍然存在。

    我使用网络分析器检查了变送器、它们没有问题。 为了验证 FR6047开发板是否接收到该信号、我使用信号发生器注入信号并通过 GUI 观察该信号、但没有问题。

    我渴望了解问题所在。 您能帮我澄清一下吗?

    此致、

    胡翠。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您可以尝试将 USS_DIAGNOSTIC _MODE 设置为 USS_DIAGNOSTICS_MODE_0 。 它可能会阻止大部分检查 HSPLL 频率有效功能。  

    此致、

    Cash Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    你好,在你的帮助下,我已经解决了以前的问题,我非常感谢。 现在、我遇到了一个棘手的新问题、我想问您、希望您能提供答案或建议。 我正在思考如何在 MSP430FR6047上实现 MODBUS RTU。 是否有任何相关的示例或参考代码?

    此致、

    胡翠。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我们不为任何 MSP430元件提供 MODBUS 库。 您可以参考该链接。  https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1051259/msp430fr6047-how-to-implement-modbus-rtu-with-msp430fr6047

    因为该线程已经得到解决。 我要结束它。  

    此致、

    Cash Hao