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-CC1352P:ADC 输入扫描卡在 Sensor Controller Studio 中

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/826296/launchxl-cc1352p-adc-input-scanning-gets-stuck-in-sensor-controller-studio

器件型号:LAUNCHXL-CC1352P

我有一个 CC1352P-2 LaunchPad、Simplelink_cc13x2_26x2_SDK 版本3.20.0.68、Sensor Controller Studio 2.5.0.84。  

我需要几乎同时对3个 ADC 通道进行采样、方法是在通道1上采样、然后切换到通道2、然后通道3返回通道1、依此类推。 我从 ADC 数据流器示例开始、该示例反复对单个通道进行采样、并将其更改为对3个通道进行采样。

但是,当我运行它时,它总是卡在 adcReadFifo()函数中。 有人可以帮助解决这个问题吗? 似乎我应该能够在每个循环迭代上切换引脚、但它会卡住。

谢谢、

Tim

PS 在 Sensor Controller Studio 上发布的最佳论坛在哪里? 我发布在 Zigbee 论坛是因为我要创建 Zigbee 项目。

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

    您好、Tim、

    我认为您的问题与以下主题中描述和解决的问题完全相同:https://e2e.ti.com/support/wireless-connectivity/bluetooth/f/538/t/690179

    我希望这将有所帮助、

    此致、

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

    何克莱蒙特

    我看一下这个链接、但它没有解决我的问题。 该链路会反复对同一引脚进行采样、它们会调用 adcSelectGpioInput (AUXIO_A_SENSOR_OUTPUT)、永远不会选择不同的输入。

    但 i;m 使用每个循环迭代选择不同的引脚(cfg.pAuxioAAdcInput []是引脚数组)

     //选择 ADC 输入

     U16 n = state.pinNumber;

     adcSelectGpioInput (cfg.pAuxoAdcInput[n]);

    因此、有一些关于将输入引脚更改为 ADC 的信息会使情况变得混乱。 或者、事实上我是使用计时器来驱动 ADC 转换、而不是手动触发 ADC?

    其他人必须更改 ADC 输入引脚、然后进行采样。 我不能相信每个人只需一个引脚即可进行采样。

    感谢您为解决此问题提供的任何帮助。

    谢谢、

    Tim

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

    您好、Tim、

    您能否验证您的 IO 映射是否正确? (无引脚冲突、每个 ADC 引脚正确声明...)

    您能否验证您是否可以对您尝试使用的每个引脚/通道运行示例(仅使用一个 ADC)? 尝试运行添加计时器的示例时遇到相同的问题。 这将帮助我识别问题。

    此致、

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

    何克莱蒙特

    我运行了您建议的测试。 以下是测试说明和结果。

    我认为 I/O 映射正确、我使用的是 DIO23、DIO24和 DIO25 (请参阅屏幕截图)。 我在数组 cfg.pAuxoAAdcInput[]中定义了这三个引脚。

    我运行以下代码三次、使用索引变量 n 的值0、1和2 (尝试三个模拟输入中的每一个)。 请注意、我使用了 ADC 的手动触发器。 我使用了一个从3.3V 引脚到 DIO23、DIO24和 DIO25引脚的跳线、以确保我读取的是3.3V。 此代码每次都起作用。

    //选择 ADC 输入
    U16 n = 0;//此处使用值0、1和2
    adcSelectGpioInput (cfg.pAuxoAdcInput[0]);

    //启用 ADC (固定基准、2.7us 采样时间、手动触发)
    adcEnableSync (ADC_REF_FIXED、ADC_SAMPLE_TIME_2P7_US、ADC_TRIGGER_MANUAL);

    //对传感器进行采样并存储 ADC 值
    adcGenManualTrigger();
    adcReadFifo (output.pSampleArray[0]);

    //禁用 ADC
    adcDisable();

    然后我运行以下代码三次、使用索引变量 n 的值0、1和2 (尝试三个模拟输入中的每一个)。 这一次、我为 ADC 使用了一个计时器触发器。 我使用了一个从3.3V 引脚到 DIO23、DIO24和 DIO25引脚的跳线、以确保我读取的是3.3V。 此代码每次都起作用。

    //选择 ADC 输入
    U16 n = 2;
    adcSelectGpioInput (cfg.pAuxoAdcInput[n]);

    //启用 ADC (固定基准、2.7us 采样时间、计时器触发)
    AdcEnableSync (ADC_REF_FIXED、ADC_SAMPLE_TIME_2P7_US、ADC_TRIGGER_AUX_TIMER0);

    //以20kHz (50us)启动 ADC 触发计时器
    timer0Start (TIMER0_MODE_PERRACRARING、1200、0);

    adcReadFifo (output.pSampleArray[0]);

    //禁用 ADC
    adcDisable();

    希望这对您的测试有所帮助。 我将在最后继续试验、尝试解决这个问题。

    谢谢、

    Tim

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

    我忘记附加 I/O 映射屏幕截图。

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

    克莱门特

    我不知道这是否有用、但这些是 cfg.pAuxioAAdcInput[]数组中的值

    cfg.pAuxioAdcInput []

    [0]= 26

    [1]= 25

    [2]= 24

    这些是传递给 adcSelectGpioInput()的值(一次一个)。

    该阵列由传感器控制器自动创建、传感器控制器根据 I/O 映射页面中的配置将这些值放入阵列中、因此我假设这些值是正确的。

    Tim

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

    您好、Tim、

    感谢您进行的测试。

    最后、我认为问题来自 while 环路。 使用完全相同的代码而不将其包含在 while 循环中(即每次执行任务时仅对每个引脚执行一次读取)对我有效:

    //启用 ADC (固定基准、2.7us 采样时间、手动触发)
    adcEnableSync (ADC_REF_FIXED、ADC_SAMPLE_TIME_2P7_US、ADC_TRIGGER_MANUAL);
    
    对于(U16 n=0;n<4;n++){
    
    adcSelectGpioInput (cfg.pAuxoASensorOutput[n]);
    
    //对传感器进行采样并存储 ADC 值
    adcGenManualTrigger();
    adcReadFifo (output.pSamples[0]);
    }
    
    //禁用 ADC
    adcDisable(); 

    此致、

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

    Clement、

    我刚刚运行了 Sensor Controller Studio 附带的 ADC 数据流处理器示例。 它也会卡在 adcReadFifo()函数中! 这与我的代码卡住的位置相同。

    Clement、您能否尝试 使用 ADC 数据流处理器示例并告诉我您能否成功运行?

    谢谢、

    Tim

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

    您是否在 CC352P Launchpad 上未修改运行示例?  

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

    是的、我在 CC1352P-2 LaunchPad 上运行未经修改的示例。  当我在 SCS 中进行测试时,它总是会卡住 adcReadFifo()。

    但是、如果我在 CCS 中加载工程(通过打开 SCS 生成的 CCS 工程)并从 CCS 将固件下载到 Launchpad、看起来运行正常。 我可以打开 Putty 窗口并连接到 Launchpad、数据将持续显示在 Putty 窗口中。

    这是否意味着传感器控制器代码确实正常? 但为什么在 SCS 中进行测试时会卡住?

    Tim

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

    在执行任务测试时、我必须检查 ADC 数据流发生器为何失败。 该软件的开发人员大约在一周内回来、然后我将与他核实。  

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

    此示例在任务测试中崩溃的原因是 ADC FIFO 溢出(因为 ADC 输入数据的速率高于数据读出速率、因为测试不经常读取数据) 如果 FIFO 被清空、就可以继续测试。 相关文档将添加到 SCS 的后续版本中。  

    由于数据以正确的速率读取、如果您从 CCS 运行示例、这将起作用。   

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

    感谢您的回复。 我有几个问题。

    您的最后一条陈述是否表明 ADC 数据流器示例有效? 或者我是否误解了它? 因为该示例对我不起作用。 它会卡住。

     我在读取 FIFO 后立即尝试调用 adcFlushFifo (请参阅下面的代码段)、但它仍然卡住。 您说它应该起作用吗? 我应该在哪里打电话给 adcFlushFifo?

    //等待下一个 ADC 样本并将其存储

    U16 n = state.head;

    adcReadFifo (output.pSamples[n]);

    adcFlushFifo();  //我添加了这个  

    此外、如果我在 CCS 中加载工程(通过打开 SCS 生成的 CCS 工程)并从 CCS 将固件下载到 Launchpad、看起来运行正常。 我可以打开 Putty 窗口并连接到 Launchpad、数据将持续显示在 Putty 窗口中。 实际上、我已将电源连接到 DIO23。 我可以改变电源的电压、传感器控制器报告的 ADC 值也会改变、并且这些值是正确的。

    这是否意味着传感器控制器代码确实在执行正常(换句话说、它不像 SCS 中那样卡住)?  

    最后一个问题。 ADC 数据流器示例以20kHz 的频率运行计时器。 我需要更高的采样率、因此我以125kHz 的频率运行计时器。 该采样率是否起作用? 还是会使 FIFO 溢出?

    谢谢、

    Tim

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

    我的声明意味着无法对该示例执行任务测试(崩溃)。 这意味着您必须在 CCS 中运行 IF。 则无需清空 FIFO。  

    不确定这种情况下的确切速度限制是多少。 ADC 需要一段给定的时间对信号进行采样和转换、还需要一些时间来更改输入。 ADC 在设计时没有考虑多个通道、因此速度不会很快。  

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

    感谢你的帮助。 我只需尝试125kHz、看看它是否在传感器控制器中工作。 如果没有、我可能必须放弃传感器控制器、直接从主 CPU 域对 ADC 进行编程、我希望这是可能的。 我确实需要扫描三个通道、因为我们将在板上连接三个电流传感器。

    Tim