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.
工具与软件:
我想测量分别来自 LaunchPad 上同一 ADC 通道的红色点和绿色点。 信号频率是固定的、始终为1kHz、占空比从10%到90%变化。
理想情况下、所有红色样本都分组在一个阵列中、所有绿色信号都分组在一个阵列中。 在本例中、我会每100个周期(在本例中为100ms)对它们进行一次处理、然后找出过去100个周期的平均正振幅和平均负振幅。
如何在最少 CPU 干预的情况下使用 MSPM0G3507执行此操作? 我可以对 x20进行过采样 、或许能够获得准确的结果以满足我的需要、但这会严重中断 CPU。
如果使用一个 DMA 信号、则同一阵列中会出现红色和绿色光、而不会对正向和负向一起进行良好的滤波、因为可能会引入噪声、从而导致此逻辑出现故障。
尊敬的 Predrag:
引脚上的信号是否会随每个脉冲变化的高/低电压、还是二进制3.3V 和0V?
我之所以提出这个问题、是因为您好像只是在尝试测量方波输入的占空比、在这种情况下、您可以利用捕捉模式下的计时器外设来测量每个上升沿和下降沿之间的时间。 这样就可以节省功耗、并且能够非常轻松地测量高电平时间与低电平时间。 如果是这种情况、我建议您查看我们 SDK 中的捕获占空比示例、该 示例位于[SDK 安装路径]\examples\nortos\LP_MSPM0G3507\driverlib\timx_timer_mode_capture_duty_and_period
如果高低电平发生变化、您可以设置 ADC 来持续对信号进行采样、并利用窗口比较器模式来指示采样是高于还是低于设定的阈值。 您可以使用这些中断来填充存储器缓冲区。 您还可以考虑使用 DMA 将数据传输到缓冲区以减少 CPU 活动。 为此、我建议从 ADC 中的窗口比较器模式开始-可在 [SDK 安装路径]\examples\nortos\LP_MSPM0G3507\driverlib\ADC12_window_comparator 中找到
您好、Dylan。
首先感谢您提供快速反馈。
我来进一步说明一下、高电平和低电平在振幅方面正在发生变化、 而仍然是具有调制振幅的 PWM 信号。
它们可以是3.3-0-3.3-0、也可以是3.1-0-3.1-0或3.3-0.5-3.3-0.5、因此高电平和低电平电压值都可能会发生变化。
我们可以假设0.5*3.3V 是比较器的安全阈值,因为没有高振幅会低于0.5*3.3V ,低电平振幅也不会高于0.5*3.3V。
不确定窗口比较器 ADC 模式的含义。 以下是 M0G 系列上的 ADC 方框图:
ADC 将生成 DATAOUT、后者将更新其中一个 MEMRES、而窗口比较器可以将该结果与阈值进行比较、 那么该结果是什么?
我无法触发 DMA、如果为 HIGH、我可以使用 GEN_EVENT 开始采样并向 array1生成 DMA 传输(假设图中包含高值、红点)、如果为低电平、则更改 DMA 地址(我需要为此使用 CPU?) 要将低值存储到 array2中(图中包含低值、绿点)?
尊敬的 Predrag:
有关 ADC 窗口比较器模式的信息、请参阅 G 系列 TRM 中的第12.2.12.2节"窗口比较器"。
您可能还需要查看 器件数据表第7.10节中的 IO 特性、特别是高电平和低电平输入电压阈值(分别为0.7* VDD 和0.3* VDD)下的 IO 特性。 考虑到这一点、连同上述可能的电压、您可能根本不需要 ADC 或比较器即可获取所提及的信息。
只需使用计时器每 x 微秒对 GPIO 引脚的输入进行一次采样以计算占空比、即可实现此目的。
我仍然认为最简单的方法是调整计时器占空比和周期示例、以保存一系列占空比、对其求平均值、然后使用该值。 考虑到上述的预期输入电压和高/低阈值、我认为此操作应该可行、并且允许您将器件置于低功耗模式、但唤醒除外、它可以保存占空比、还可以将触发器更改为上升沿/下降沿。
如果信号波形将介于0.3*ADC VDD 和0.7*ADC 之间、则需要使用 VDD 窗口比较器模式。 在这种情况下、您可以根据需要设置窗口比较器的高低阈值、然后使用该中断将每个高或低样本保存到缓冲器。 您可能会使用两个 DMA 通道将这些通道保存到缓冲区中、同时保持睡眠状态、然后在1000个样本后唤醒器件以计算占空比、执行一些操作、然后重复。 当给定 ADC 通道样本高于或低于窗口比较器阈值时、您可以生成事件(并可以在 SysConfig 中轻松配置此项)、因此应该不会太困难。 这无论如何都可能是优选选项、因为该选项支持器件在多个输入信号周期内保持睡眠状态、并在需要一段时间或多个周期后唤醒。 另一种使用计时器的方法要求您在每个周期短暂唤醒。
可能还有更多的选项、包括使用比较器、但上面列出的两个并不难实现、并且可以让 CPU 在大部分操作期间保持非活动状态。
您好、Dylan
您可能误解了、但根本没有测量占空比的要求。 我需要知道每个半个周期中的 Voltage 值。
到目前为止,在进一步挖掘后,这里是我一直在想的,所以也许你可以帮助和交叉检查。
PWM 信号输出将由 TIMA0在中心对齐模式下生成、允许 在 ADC 上触发同一源-在这种情况下、负载事件是正半周期的中心点、零事件是负半周期中的中心点。 然后、我将设置均值计算模式来采样 N 次、然后相应地右移以获得正确的平均值。 这样、我可以在每个周期收集2个样本、并可以使用 DMA 将其传输到存储器块。 可以将目标块的大小设置为2*50*16位、填充完成后、将中断处理器处理结果、并告诉我在过去50个周期中的平均正半周期振幅和平均负半周期振幅。 正如我说过的、这里无需测量任何周期/占空比、我只关心振幅、因为这是信息所在的位置。
是的、我第一次误解了。 感谢您的澄清。
您在此处提出的解决方案似乎能够很好地解决问题。 我唯一想要指出的是、硬件均值计算将使用平均值填充 ADC MEMRES、因此您不需要手动采样然后右移、您可以设置采样率+硬件均值计算模式、然后 ADC 找到的结果将是平均值。
当然、您也可以手动执行提到的取平均值操作。
很高兴您在这里找到了合适的过程、如果您遇到实施问题、请随时创建新线程。