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.

[参考译文] CCS/TM4C123GH6PM:使用 PWM 作为时钟读取 SPI

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/922113/ccs-tm4c123gh6pm-read-spi-using-pwm-as-clock

器件型号:TM4C123GH6PM
主题中讨论的其他器件:ADS8326TM4C123ADS8319

工具/软件:Code Composer Studio

我对 SPI 时序有疑问。  我想使用运行频率为80MHz 的 TM4C123微控制器以250ksps 读取16位 ADC (ADS8326)。  随附了 ADC 的时序图。

我需要将 CS 驱动为低电平、并在收集数据之前让 MISO 引脚忽略5个时钟周期(随附的时序图)。  为此、我认为需要将时钟和 CS 引脚设置为 PWM 信号、并从 CS 计时器触发 SSIDataGet 命令。  我的问题:如何将其设置为在正确的时间读取?  我想在 ISR 中设置一个在主 while (1)循环中识别的标志。  我是否需要像下面的文本那样引入延迟、或者 MISO 是否会等待 ADC 输出将引脚驱动为低电平?

if (readFlag == true){
SysCtlDelay (readDelay);
SSIDataGet (SSI0_BASE、数据点);
}   

感谢你的帮助。

插孔

 

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

    [引用 USER="Jack Summers11">为此,我认为需要将时钟和 CS 引脚设置为 PWM 信号,并从 CS 计时器触发 SSIDataGet 命令。[/quot]当 TM4C123 SPI 模块是 SPI 主设备时,SPI 模块需要通过调用 SSIDataPut ()来生成时钟。 即,不会看到 从 CS 计时器触发 SSIDataGet ()将起作用。

    [引述 USER="Jack Summers11"] 我想使用运行频率为80MHz 的 TM4C123微控制器读取250ksps 的16位 ADC (ADS8326)。[/引述] 250 ksps 是否是连续采样序列的持续捕捉?

    250ksps 表示 DCLOCK 频率为6MHz、重复周期为:

    1. CS 高电平持续2个时钟- ADS8326"断电"
    2. 一个采样的 CS 低电平为22个时钟- ADS8326 "采样"的 CS 低电平为6个时钟、 ADS8326 "转换"的 CS 低电平为16个时钟

    当 TM4C 系统时钟为80MHz 时、由于 SPI 模块时钟只能是系统时钟的整数除法、因此无法将 SPI 时钟设置为6MHz。

    此外、由于启动 ADS8326采样的是 CS 上的下降沿、因此 CS 的生成方式会影响连续采样计时的任何"抖动"。

     您需要多久让 ADS8326采集一次样片?

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

    切斯特、您好!

    我想您说的是、80MHz 主时钟无法实现6MHz。

    ADC 读取必须与经优化可在250kHz 下运行的 CCD 阵列的输出同步。  我想如果我减慢时钟速度、CCD 性能不会受到严重影响。  如果我将 SPI 时钟减慢至4MHz 并使用24个时钟、那么我的读取频率将为167kHz、我可能可以使用该频率。

    读数与 CCD 输出同步的问题仍然存在。  CCD 当前每4us 输出一个电压(频率可改变)、直到它为每个~4600像素输出数据。  如果我减慢 CCD 时钟、我仍然需要每6us 收集一次样本。

    这将使我们返回到 SPI 时序。  我认为、当 CS 处于低电平且 TIvAware 仅设置为4、8或16时、我需要22个时钟。  据我所知、我需要至少调用两次 SSIDataPut。  然后、我需要切换 CS、这也会增加时间。  我想我可以丢弃所有非数据位、但时序将完全拧紧。

    我想我可以使用更快的 ADC。  ADS8319显示为500ksps、但乍一看、时序似乎 仍然是一个问题。

    有什么建议吗?

    谢谢、
    插孔

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

    [引用用户="Jack Summers11">我认为使用80MHz 主时钟时无法达到的频率约为6MHz。[/quot]使用具有120MHz 主时钟的 TM4C129器件、您就应该能够实现6MHz SPI 时钟。 但是 、ADS8326数据表给出 了 fDCLOCK 在5V 电源下的最大值为6MHz、在2.7V 电源下的最大值为4.8MHz。

     您的 ADS8326的工作电压是多少 VDD?

    [引用 user="Jack Summers11"]我认为,当 CS 处于低电平并且 TIvAware 仅设置为4、8或16时,我需要22个时钟。  SSIConfigSetExpClk ()的 ui32DataWidth 参数可以取4到16的值(包括4到16)。

    如果 ui32DataWidth 被设定为11、那么对 SSIDataPut()和 SSIDataGet ()的两次调用将产生22位。

    [引用 USER="Jack Summers11"]然后我需要切换 CS,这也会增加时间。  [/引用]如果 CS 切换为 GPIO、则会增加时间、并可能增加 CCD 样本在所有像素上的采集方式的变化。

    从 CCD 采集~4600像素时是否需要进行中断或任何后台处理?

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

    我不知道您可以像这样设置数据宽度。 谢谢、这很好。

    我有一个501 (c)(3)、它构建了用于教育的低成本科学工具。 该项目适用于 USB 供电的光谱仪。  我计划使用与微控制器相同的3.3伏电源运行 ADC、但我可以从 USB 获取高达5伏的电压。

    关于中断和后台处理的问题: 有一个周期性发生的中断。  周期(CCD 积分时间)由终端用户指定、通常约为2-20ms。  当这个中断发生时、所有的时钟被复位以保持所有的同步。  唯一需要进行的处理是将数据放入数组。  采集阶段完成后、数组中的数据将输出给用户。

    我想 CS 可以切换为 PWM、这可以与仪器的其余部分保持同步。  我还可以通过 PWM 中断调用 SSIDataPut 和 SSIDataGet。

    现在更改微控制器将是原型设计过程中的一个重要步骤。  我有几个工作原型副本、使用 TM4C123内部的12位 ADC 读取 CCD。  我当前的目标是构建一个可插入现有原型接头并提高分辨率的分线板。   当前原型具有分接接头位置、可访问我需要的引脚。  如果我使用当前的微控制器板对 ADC 板进行原型设计、并发现我需要更快的线路速度、我可以稍后完成该操作。  当然、最终产品应该在单个电路板上安装 ADC 和微控制器、但使用我已经拥有的产品可以节省大量时间、用于显微镜和烙铁。

    再次感谢、

    插孔

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

    [引述 USER="Jack Summers11">我想 CS 可以切换为 PWM、这可以与仪器的其余部分保持同步。  我还可以从 PWM 中断中调用 SSIDataPut 和 SSIDataGet。[/quot]我认为生成 CS 的 PWM 时序必须留出时间为中断提供服务、以确保 SSIDataPut 触发 DCLOCK 的生成以执行采样和转换、 如果其他中断需要处理、则可能会使 CS 与 SPI 时钟不同步、从而破坏捕获。

     光谱仪以固定间隔采集 CCD 样本、从而最大程度地减少时序"抖动"、这对其运行有多重要?

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

    我不知道计时抖动有多重要、 但我想,只要 CS 与 CCD 时钟保持同步,并且只要在 CCD 前进到下一个像素之前有足够的时间完成数据传输,就没有关系了。

    我相信 CCD 有一组电容器、每个电容器都保持一个电荷、阵列被顺序读取。  我想、充电稳定时间超过数据表指定的4us 间隔。  如果我要以125kHz 的频率收集数据、那么我将有8us 的时间对电压进行采样并传输数据。  以4MHz 运行 SCK 将提供6us 的数据采集和传输、并留下2us 来吸收任何抖动。

    如果电压在该周期内相当恒定、则 CS 切换和 SCK 启动之间的抖动并不重要。  重要的是 CS 与 CCD 时钟保持同步、以确保我们不会错过任何像素或对任何像素进行两次计数。

    理论上、我可以使用当前原型以250kHz 和125kHz 的频率收集数据、并比较数据集以查看是否存在延迟采集的信号丢失。 问题在于、我必须拆卸仪器才能更换固件、而且我不太可能使光学器件完全以相同的方式对齐两次。

    再次感谢您的帮助。  我认为我对它有足够的句柄、现在我可以使用固件并观察代码在范围上的执行方式。  我还将查看数据表、了解更快的 ADC、看看向这个方向对我而言是否是更好的选择。  实际上、在订购 PCB 和硬件之前、我曾尝试预测问题(我可能正在学习)!

    如果您有任何意见、我会将此主题保持打开一两天、然后我会信赖您解决我的问题。  如果您有兴趣、可以 在 smokymtsci.com/spectroscopy 上查看早期光谱仪原型的照片

    此致、

    插孔

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

    [引用用户="Jack Summers11"]重要的是 CS 与 CCD 时钟保持同步,以确保我们不会错过任何像素或将任何像素计数两次。确定, 在查看 了 TCD1304DG CCD 检测器数据表之后、我现在了解 到 ADS8319的 CS 需要与 CCD 的时钟保持同步、以便 ADC 在从线性 CCD 阵列计时时对每个像素进行采样。