TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

[参考译文] LAUNCHXL-F28379D:通过 LAUNCHXL-F28379D Simulink 使用 SPI 接口读取5个 ADC 从器件

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/949159/launchxl-f28379d-read-5-adc-slaves-using-spi-interface-via-launchxl-f28379d-simulink

器件型号:LAUNCHXL-F28379D
大家好、
我需要使用采样时间为0.00013的 SPI 接口读取5个 ADC 芯片(5个从器件)(MCP3208)每个 ADC 有8个通道(我需要读取40个通道中的36个通道)。 我需要使用 Matlab Simulink R2017b 执行此操作。
我能够使用附加的模型在0.00013内读取8个通道(1个 ADC)。 此外、我能够读取16个通道、但采样时间会自动减少到所需时间(0.00013s)的一半(我已使用0.00013设置每个"接收块"、因此 SPI 花费0.00026s 读取16个通道)。 请参阅随附的。 请注意、即使系统正在使用16个通道、但我仍然收到此错误"目标上的内存不足、无法处理数据包: EXT_SETPARAM"(我已将"外部模式"设置的"持续时间"从1000更改为5、但仍收到相同的消息)。
那么、我的问题是
2) 2)如何在0.00013内读取5个 ADC (5个 GPIO 用于读取36个通道)?
请注意、我在何时收到以下错误
1) 1)我将"接收块"的"采样时间"设置为0.000026s (=0.00013/5)。
错误为:
"在模型'SPI_C'中固定步长(1.0E-5)的设置无效。 您的模型中的所有采样时间必须是固定步长的整数倍。
组件:Simulink |类别:模型错误
'SPI_C/子系统/SPI 接收'的采样时间周期(2.6E-5)不是为模型指定的固定步长(1.0E-5)的整数倍"
2) 2)当我选择"启用阻塞模式"时
错误为:
执行外部模式 MEX 文件'ext_comm'时发生错误:
无法连接到目标。 等待目标的连接响应时发生超时。 超时的可能原因:
a)目标未开启。
b)目标未连接到您的主机。
c)模型的应用程序未在目标上运行。 您可能已单击"停止"按钮。 如果“Run (运行)”按钮未变暗,请单击它。 否则、单击"构建"按钮、该按钮会在目标上下载并运行您的应用程序。
提前感谢您
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ashraf、

    我将需要几天的时间来咨询 MW 团队有关上述内容的意见、尤其是关于对 SPI 进行分区以读取外部 ADC 的正确方法。

    我可以评论与采样率相关的错误、我假设 MW 允许您为此输入一个免费的表单编号。  但是、SPI 将脱离主 CPU 时钟(200MHz)计时、并具有相关的预分频器等、因此您的采样率最终需要是其的整数。  我需要挖掘公式来得出这种轻松的结果。

    我还需要从 MW 团队中更好地了解阻塞模式的确切作用。

    最棒的

    Matthew

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

    您好 MatthewRate、
    感谢您的回复、我正在等待您的回答
    我只想再添加一些注释

    1) 1)我能够使用我的模型读取5个外部 ADC。 在型号上稍微更改一下后、"内存不足..." 错误消失(请参阅图1)。 在图1中、使用了4个外部 ADC。

    2)实际上,我需要运行整个系统(3个 ADC 引脚读取3个 ADC 值,Matlab 函数写入我的算法,SPI_C (仅使用1个 GPIO)发送一些值,SPI_A (使用5个 GPIO)读取5个外部 ADC),具有0.00013。 请注意、SPI_C 从"Matlab 函数"块获取其输入值、因此我在"Matlab 函数"块中设置其采样时间。 SPI_A 采用特定的值来确定我们每次需要读取哪个 ADC 通道、因此、我在"常量"块和"SPI_A 接收块"中设置其采样时间。 通过使用 SPI_A 和 SPI_B (6 GPIO)、占空比(或采样时间)(使用示波器测量)会大幅降低(大约800us)。 因此、我尝试通过使用 SPI 的"所需波特率"来提高占空比值。 我注意到、当我减小"所需波特率"值时、占空比会变得更好(接近我所需的时间0.00013)、但当它大幅减小时、从外部 ADC 读取的数据的误差百分比会变得非常高、请参阅图2和图3、 占空比从420us 降低到317us、但仍然不是我所需要的(请注意、我将所有 Simulink 块内的采样时间增加到了0.00001、从而使 Simulink 模型缓慢工作)。
    我的主要关注点是将图2和图3中的占空比设为0.00013 (130us)。

    3)在"Clocking"选项中、我认为当我将"振荡器时钟频率(OSCCLK)的值从10降低到8时、占空比会更好、但我得到了以下误差
    "执行外部模式 MEX 文件'ext_comm'时出错:
    无法连接到目标。 等待目标的连接响应时发生超时。 超时的可能原因:
    a)目标未开启。
    b)目标未连接到您的主机。
    c)模型的应用程序未在目标上运行。 您可能已单击"停止"按钮。 如果“Run (运行)”按钮未变暗,请单击它。 否则、请单击"构建"按钮、该按钮会在目标上下载并运行您的应用程序。"

    非常感谢

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

    Ashraf、

    查看您计划执行的任务、可能很难在130us 内完成。
    我建议您计算读取8个通道(1个 ADC)所需的时间,并查看所需的时间。
    请参阅以下链接、使用自定义代码块测量代码执行时间:
    https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/943879

    上面计算的时间有助于确定在当前设计的130us 内读取5个 ADC 是否可行。

    如果您认为需要任何支持、最好联系我们的支持渠道。 当我们收到支持请求时、我们的内部流程使我们能够让合适的人员参与解决此问题、我们将立即与您联系、以便更详细地了解案例。

    请通过以下地址联系我们:
    https://www.mathworks.com/support.html

    此致、
    RAM ALA。