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.

[参考译文] EK-TM4C1294XL:无法通过 UART 将 ADC 值发送到 LabVIEW 软件

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/597930/ek-tm4c1294xl-not-able-to-send-adc-values-to-labview-software-via-uart

器件型号:EK-TM4C1294XL

大家好、

我正在使用 TM4C1294XL Launchpad 进行项目开发。 我想通过 UART 将 ADC 数据发送到 LabVIEW 软件。 下面是我的代码设置

  1. MCU 时钟@120MHz
  2. 借助计时器将 ADC 采样率设置为256Hz
  3. 串行传输协议为115200bps、8-N-1。
  4. 使用 UART0进行串行通信。

下面是主函数的 while (1)循环

while (1)
      {

         ADCIntClear (ADC0_BASE、1);


                  while (!ADCIntStatus (ADC0_BASE、1、false))
                  {
                  }
               ADCSequenceDataGet (ADC0_BASE、1、ui32ADC0Value);

               for (j=0;j<=255;j++)
               {
                  outputsamples1[j]= ui32ADC0Value[0];
                 outputsamples2[j]= ui32ADC0Value[1];
                  outputsamples3[j]= ui32ADC0Value[2];
                  outputsamples4[j]= ui32ADC0Value[3];

                   }

CH1DATA= outputsamples1[a];

CH2DATA= outputsamples2[A];

ch3DATA= outputsamples3[a];

CH4DATA= outputsamples4[a];


/****将12位 ADC 数据转换为8位****

                                                        AL = CH1DATA & 0xF00;
                                                                                    Al = al>>8;
                                                                                    Ah = CH1DATA & 0xFF;
                                                                                    BL = CH2DATA & 0xF00;
                                                                                    BL = BL>>8;
                                                                                    Bh = CH2DATA & 0xFF;
                                                                                    CL = CH3DATA & 0xF00;
                                                                                    CL = cl>>8;
                                                                                    CH = CH3DATA & 0xFF;
                                                                                    DL = CH4DATA & 0xF00;
                                                                                    DL = dl>>>8;
                                                                                    DH = CH4DATA & 0xFF;

            CH1D = al |(ah<8);               
                CH2D = BL |(BH<8);
                CH3D = cl |(ch<<8);
                CH4D = dl |(DH<<8);

UARTPrintf ("%d"、CH1D);

UARTPrintf ("%d"、CH2D);

UARTPrintf ("%d"、CH3D);

UARTPrintf ("%d"、CH4D);

A=a+1;

if (a==256)

A=0;

我通过发送正弦波测试代码、但在 LabVIEW 部分、波形不是 作为正弦波出现、而是一些随机噪声信号。

在将数据发送到 LabVIEW 之前、我是否需要将数据转换为字符串?如果是、那么该怎么做? 我们无法直接发送整数吗?

我还尝试了 UARTCharPut (UART0_BASE、CH1D)命令、但它没有向 PC 发送任何内容。

很好的帮助!!!

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

    [引用 user="Sumit Mourya"]在将数据发送到 LabVIEW 之前,是否需要将数据转换为字符串?

    当您执行 UARTPrintf ("%d"、CH1D)时、这正是您已经执行的操作;

    您是否尝试在 PC 的控制台程序中查看数据并检查输入内容? 尝试一些类似 FoxTerm 甚至 Putty 的方法来查看字符串。 您是否在调试器上看到 CHN 变量是否实际包含您期望的值?

    至于"我需要转换"、您需要在 LabVIEW 文档上找到答案。 这是用于发送数据的微控制器的论坛。

    [引用 user="Sumit Mourya"]我还尝试了 UARTCharPut (UART0_BASE、CH1D)命令,但它不向 PC 发送任何内容

    实际上是这样。 它将一个字符(8位)放置在发送 UART 缓冲器上并发送它。 在本例中、它将是变量上的任何内容的强制转换为 char。

    此致

    布鲁诺

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

    感谢您的回复!

    我可以使用 UARTPrintf()命令查看串行监视器/ Putty 上的值。 我还可以在 LabVIEW 上看到数值,但该图没有被绘制为正弦波。
    通过函数发生器的正弦波是 ADC 引脚上的输入。

    当我使用 UARTCharPut()命令并检查 putty 终端时,I'ma 无法看到十进制值,但我可以看到十六进制格式的数据。

    请提供一些指导!!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您可以在 PuTTY 中看到这些值、请将其中的一节复制/粘贴到电子表格中的图表中。 它们是否符合您的预期?
    您是否控制了发送到 PC 的数据速率? 我是说、您是否确定发送了足够的数据来发送参考正弦波的值? 您从何处捕获数据? 在多高的频率上? 所有这些都必须考虑在内。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Bruno,你在这里做的很好(它是“喜欢”的),但我想(再次)我们的海报有“向路边扔吻”,正在尝试一切-因此(系统地),“测试/验证的小”-和“为什么它不起作用!”

    如果寻求最佳结果、则绝对需要在这里(以及大多数地方)进行亲吻、而"疼痛/痛苦!"的数量极少。 (当亲吻"被踢到路边!"时、这种情况总是会到达!)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sumit、
    您是否注意到有另一个在线程讨论类似的应用?
    e2e.ti.com/.../2199164
    我在这里提供了一些详细信息。
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Bruno、

    感谢您的指导! 我实际上弄清楚了输出中的差异。 对代码进行了一些更改、而且我必须在函数发生器和 ADC 输入引脚之间使用钳位电路、因为 ADC 是单极的、因此它不选择正弦波的负周期!

    但是、现在的另一个问题是数据传输的速度!! 它不是根据需要出现的。 我可以获得@ 256Hz 采样率的最大速度是多少?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用命令简单地传输数据
    UARTPrintf ("a%u b%u c%u d%u"、ui32ADC0Value[0]、ui32ADC0Value[1]、ui32ADC0Value[2]、ui32ADC0Value[3])
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sumit、

    [报价用户="Sumit Mourya"]我可以获得@ 256Hz 采样率的最大速度是多少?

    这似乎不是正确的问题。 问题是:触发数据传输的是什么?

    以下是基于 TM4C129的产品中持续执行的任务列表:

    - 2300 * 4 = 9200Hz、从 SPI 传感器读取6 x 16位寄存器、并对这些传感器进行数字滤波

    -~320Hz 读取编码器传感器的可变 PWM 占空比信号、并使用数字滤波

    -通过 UART 输出100Hz 部分测量包(每个包~60字节)

    -通过 UART 中继(接收和发送)~60Hz 完整测量包(每个84字节)

    -监视和响应外部控制信息

    -各种模拟监控(电源电路和基准、温度传感器)

    -一些条件 LED 和按钮

    这些 MCU 可以做很多事情! 这一切都与如何控制程序流和触发事件有关。

    此致

    布鲁诺