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.
大家好、
我们希望您在以下客户咨询方面提供帮助。
我想通过 SigmaDelta 传感器测量电流(请参阅随附的文件)。
据我所知、AMC1306M05 SD 传感器需要高频时钟信号、并提供高频(未编码)比特流、其中"1"和"0"的比率为特定值。 这将提供有关电流振幅的信息。
F28379D 支持用于此位流的 SD 滤波器模块。 我为计时信号编程了一个频率为5MHz、占空比为0.5的 PWM。 这会进入 SD 传感器并直接进入 SDFM。
我的第一个问题属于以下信号:
如果"实际"电流为零(未连接任何电源)、则 SD 传感器的输出应提供与"1"完全相同的"0"值、对吧? 但如果您看到随附的照片、这似乎是违反规定的。 但这可能不是我的正确解释。
您能解释一下我在照片上看到的内容吗? 为什么有不同的比率?
我的下一个问题属于 SDFM 输出信号(我想要使用什么来控制我的器件)。
我想、SDFM 会过滤未编码的位流、并给出一个16或32位数字、表示测量的电流。
但是、如果我对 SDFM 模块的输出进行示波、这似乎也是位流? 如果您看到附加的文件、这是 SDFM 输出信号、其范围为0至2^16。
您可以看到的信号每50kHz 在 ISR 内部需要时感应一次。
是这样吗? 如果是、您能否给我一些提示、告诉我如何获得电流的"现实世界价值"?
应在何处实现 sdfm 的采样时间/ISR 是多少?
很抱歉、我这么说、但 CCS 示例对我来说并不是很有帮助、因为 Matlab 中的编程对我来说容易得多、而且省时-这就是我不理解 C 代码示例的原因。
我认为帮助我的最佳方法是概述在例程中实施 SDFM 的过程。
此致、
Danilo
您好 Danilo、
[引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020619/launchxl-f28379d-measure-a-current-via-the-sigmadelta-sensors ]\n 如果"实际"电流为零(未连接任何源)、则 SD 传感器的输出应提供与"1"完全相同的"0"、对吧? 但如果您看到随附的照片、这似乎是违反规定的。 但这可能不是我的正确解释。[/引述]我将尝试回答此问题、但可能需要将此主题推送到支持此器件的产品组、以获得更详细的响应。
您的理解是正确的。 对于该器件、0V 差分电压(对应于分流电阻器上的零电流)应产生50%的高电流。 该百分比在11%和~90%之间变化、具体取决于差分电压(有关详细信息、请参阅器件数据表数字输出部分)。
[引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020619/launchxl-f28379d-measure-a-current-via-the-sigmadelta-sensors ]您能解释一下我在照片上看到的内容吗? 为什么有不同的比率?[/引述]在这里、我们可能必须服从 Σ-Δ ADC 组。 看起来 Σ-Δ 在其输入端没有"看到"恰好为0V。 它们可能能够提供更好的方法来使该差分电压恰好为0V。
[引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020619/launchxl-f28379d-measure-a-current-via-the-sigmadelta-sensors ]我认为 SDFM 会过滤未编码的位流并给出代表测量电流的16或32位数字。就像 Σ-Δ ADC 的流输出在低百分比到高百分比之间变化一样、SDFM 滤波器的输出也会在高值和低值之间变化。 了解数字滤波器输出与 SD-ADC 输入端的差分电压之间的相关性以及差分电压与输入电流之间的相关性后、 您可以使用滤波器输出来计算滤波器电流。下面的帖子的答案中有一个很好的写法。
每次 SDFM 有一个新值时都不想中断 CPU。 这将使 CPU 过载中断。 大多数人会设置比较中断、以便他们的应用程序收到一些异常事件(例如电流超过某个阈值)的通知。 收到此类事件后、代码可以从数据滤波器单元读取更精确的数据值。 其他人只是想在开关事件后的一段时间内获得测量值、比如说 他们切换 FET (通过) PWM、并希望在一段时间后从 SDFM 获取 SDFM 读数。
您好、Gus、
感谢您的回答。 我们已收到客户的以下进一步询问、
很抱歉耽误你的回答。 首先、感谢您的全面回答。 我需要一些时间来充分了解它。
>正如 Σ-Δ ADC 的流输出在低百分比到高百分比之间变化一样,SDFM 滤波器的输出也会在高值和低值之间变化。
是的、这正是我要知道的-但需要明确的是、SDFM 的输出信号是 uint16或 uint32格式的标量、对吧? 我的意思是、如果 SD-ADC 的位流具有60%的高电平和40%的低电平、则 SDFM 的输出为2^16 (2^32)的60%、这意味着39322。 是这样吗?
>您不想在每次 SDFM 有新值时中断 CPU。
当然不是。 我的意思是、我需要 SDFM 的输出值、在一些中断的函数内。 清零-我的电流控制函数被 PWM 中断、我可以(在 Simulink 中)获取 SDFM 块、并将其嵌入到该函数块中。 到目前为止、其他外设块没有问题。 但如果是 SDFM、我不会得到任何价值。
我认为我对 SDFM 模式下的 SD-ADC 工作原理不是通过 Simulink 实现的具体方案表示了支持。 我想向大家展示我如何使用 Simulink、也许您可以看到它到底有什么问题。
首先将 ADC-SDS 输出连接到 F28379d (附件1)。
连接到引脚99、103和107的数据信号以及连接到101、105和109的时钟信号如附件2所示。
通过 Simulink 的 SDFM 配置如附件3所示。 如您所见、我可以设置 GPIO 和调制器模式(我根据您在 CS0451054中的建议选择0)。 现在我不需要 HLT 和 LLT 操作、这就是为什么两者都为零。 第一次测试 szenarios 时、我不需要 PWM 同步或中断。
附件4显示了我的电流控制功能。 在该块内部、我的 SDFM 块是嵌入式的。
5、具体 SDFM 模块的配置方式各不相同。 参见附件5。 当 PWM 向超级坐标函数块提供触发信号时、它将被每次采样。
6、至少可以看到块的 SEAT 代码。
感谢您的支持!
此致、
Danilo
SDFM 的输出范围取决于多个因素:滤波器单元(数据或比较器)、使用的滤波器和 OSR。 TRM 具有精确的范围。 此外、数据滤波器单元具有32位和16位模式。 在16位模式下、您可以移动结果。
[引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020619/launchxl-f28379d-measure-a-current-via-the-sigmadelta-sensors/3779223 #3779223]\n 我认为我低估了采用 SDFM 的 SD-ADC 的工作原理、但不是通过 Simulink 实现的具体方案。 我想向您展示我如何使用 Simulink、也许您可以看到它到底有什么问题。我对 Simulink 没有经验。 让我看看其他人是否可以在这里发表评论。
您好、Gus、
感谢您的反馈。 很抱歉、我忘记附加了客户分享的屏幕截图。 我已经发布了上面的屏幕截图。
我们将等待您的回复。
此致、
Danilo
大家好、Danilo、我们的一位在 Simulink 方面有更多经验的人今天将会看到这一点。
您好、Gus、
感谢您的更新和支持!
此致、
Danilo
达尼洛
我仍在调查/加快处理上述帖子。 我将在今天结束时提供最新信息。
最棒的
Matthew
在此对延迟回复表示歉意。 我仍然在叫我的同事来看看。
达尼洛
从我可以判断设置是否正确的角度来看、我认为有两个方面在发挥作用:
1) Simulink 块如何生成新数据;根据该设置,我相信一旦过滤器缓冲区已满,新数据就会被推出(这就是-1设置所做的操作)
2)数据的解释以及位流代表的含义。
对于#2、Simulink 中包含一个示例、可帮助显示模拟信号与 SDFM 输出之间的关系。
客户可以从命令行打开它
openExample ('texasinstrumentsc2000/UsingSigmaDeltaFilterModuleSDFMToMeasureExamples')
MW 页面位于: https://www.mathworks.com/help/supportpkg/texasinstrumentsc2000/ug/sdfmexample.html
在此示例中、MW 团队已将片上 DAC 的输出连接到 SDFM、然后将数字 DAC 值范围限定在 DAC 感应到的 SDFM 之外。 如果在客户电路板上可以做到这一点、我认为这将有助于建立这种关系。 他们还可以比较示例和他们的块的设置(我做了一个简单的介绍、对我来说一切看起来正常)。
请告诉我、我是否在正确的轨道上。
最棒的
Matthew
您好、Matthew、
感谢您的更新。 这是客户的反馈、
1) Simulink 块如何生成新数据;根据该设置,我相信一旦过滤器缓冲区已满,新数据就会被推出(这就是-1设置所做的操作)
在我使用的所有其他块以及 Simulink 仿真中、"采样时间"中的"-1"表示该块将在包含该块的例程的相同采样时间内进行采样。 在本例中为电流控制例程(20µs)。
例如:如果我使用"延迟"块来延迟、假设 ISR 中的某些电压每20µs μ V/50kHz 触发一次、则该电压将以相同的采样时间20µs μ s 延迟。
但是,>一旦过滤器缓冲区已满,数据就会被推出<这可能是一个有趣的方面:
这是什么意思? 正如您在块中看到的- sdfm 请求采样时间-但是、如果采样时间与缓冲区已满时的时间不同、该怎么办?
>对于#2,Simulink 中包含了一个示例,可帮助显示模拟信号与 SDFM 输出之间的关系。
我认为、如果 sdfm 为我提供任何输出、那么了解 SDFM 输出与实际电流之间的关系对我来说不会有任何问题。 但实际上没有任何意义(请参阅示波器_SDFM_output.png)或没有任何意义。
我的 SD-ADC 包含在: www.ti.com/.../TIDA-01606中
要运行该示例、我需要额外的 SD-ADC、但很遗憾、我目前无法获得一个。
该示例与我的方法不同、它显示不处理 ISR、也不会在不同子例程中进行进一步控制。 到目前为止、我对 MW 解决方案非常满意、但这个非常小的示例无法解决我的问题。
让我再次检查一下我的 SD-ADC 和 SDFM 工作流程、我将在几天内为您提供更新。
到目前为止、专家的回答对我来说不是很有帮助、或者我可能需要更多时间来理解。
此致、
Danilo
达尼洛
我已要求 MW 团队也查看并提供任何适用的反馈。
最棒的
Matthew
您好 、Matthew、
感谢您的支持。 我们将等待他们的反馈。
此致、
Danilo
您好 Danilo、
您的理解如下所示:
在我使用的所有其他块和 Simulink 仿真中、"采样时间"中的"-1"表示该块将在包含该块的例程的相同采样时间内进行采样。 在本例中为电流控制例程(20µs)。
现在毫无疑问:
但是,>一旦过滤器缓冲区已满,数据就会被推出<这可能是一个有趣的方面:
这是什么意思? 正如您在块中看到的- sdfm 请求采样时间-但是、如果采样时间与缓冲区已满时的时间不同、该怎么办?
如果采样时间与缓冲区满时的时间不同、那么硬件缓冲区很可能会被下一个即将到来的值覆盖。 因此、为了实现同步、最好在中断上读取数据、我认为您已经在执行此操作。 当块在中断上下文中使用时、必须将采样时间设置为-1、因为块代码将放置在 ISR 中。' -1'表示使用 块所在子系统的采样率。
对于此情况:
我认为、如果 sdfm 为我提供任何输出、那么了解 SDFM 输出与实际电流之间的关系对我来说不会有任何问题。 但实际上没有任何意义(请参阅示波器_SDFM_output.png)或没有任何意义。
您是否尝试按原样运行我们的配送示例、并首先查看其是否有效? 您对该示例有什么看法吗?
此致、
Venkatesh C
您好、Venkatesh、
我们刚刚收到了客户的反馈、
我已经完成了新的模拟和数字测量、并将为您提供设置和结果:
所有三个 SD-ADC (AMC1306M05DWVR)获得相同的时钟信号并提供三个相似的输出流、您可以在附件1 (完整)和2 (详细)中看到这些流。
时钟信号输入 F28379d 控制卡的引脚101、105和109 (GPIO 49、51、53)、数据信号输入 F28379d 控制卡的引脚99、103和107 (GPIO 48、50、52)。 这些是 SDFM 1、滤波通道1、2和3的输入引脚、在本例中代表 TIDA-01606的相1、2和3的零电流(未连接电源)。
SDFM 1设置与 MathWorks 示例'c28x7x_sdfm.slx'(预期分配的 GPIO)中的设置相同、如附件3中所示。
每个滤波器通道设置与附件4中的设置相同。
附件5显示了数字结果。 如您所见、Ch.1的输出大约为65000、接近2^16。 Ch.2和3的输出相似、接近10。
问题是、为什么 SDFM 通道的输出信号之间存在如此大的差异、尽管输入流看起来非常相似(对我来说)。
我使用了一个新的控制卡、以防止这可能是卡的硬件故障、但结果保持不变。
此致、
Danilo
您好 Danilo、
客户可以在 CCS 中对此进行调试吗? 它是否与 SDFM 滤波器数据寄存器中的值相同?
我建议从发货示例开始、并确保其按预期工作。 然后、最好从 CCS 中打开此送货示例并查看寄存器值是否与 Simulink 中所示的值相匹配。
当客户转到其设置以在 CCS 中进行调试时、这将帮助客户。
HTH、
此致、
Venkatesh C
您好、Venkatesh、
这是我们客户的回应、
我在 CCS 中进行了调试、可以在 SDFM 滤波器数据寄存器中看到与附件中相同的值。
什么确切地意味着"Data 16=0、Data32Hi =65228"(滤波器1)?
分别为:
"Data 16=0、Data32Hi =6"(滤波器2)
"Data 16=0、Data32Hi =14"(滤波器3)
是否可以选择32位输出而不是16位输出? -与附件"4_Settings_for_SD_ADC2"进行比较。
这可能是故障的第一个提示。
->我建议从发货示例开始、并确保其按预期工作。
我将尝试此方法、但必须针对 TI 的 TIDA-1606调整运输示例。 还有其他 PWM 设置、我选择了 MATLAB 来生成代码、因为与在 CCS 中编写 C 代码相比、它(理论上)容易得多、也快得多。
也许您的专家可以帮助我调整示例?
我将在下周向您提供最新信息。
此致、
Danilo
达尼洛
您可以通过读取 SDDPARMx 寄存器来计算滤波器配置。 在这里、您可以判断滤波器是否设置为32位或16位模式以及移位配置。
您好 Danilo、
您能否在当前用于 SDFM 的设置上检查并尝试以下操作?
谢谢、
Aditya
您好、Gus 和 Aditya、
以下是我们客户的回应
>您可以通过读取 SDDPARMx 寄存器来计算滤波器配置。 在这里、您可以判断滤波器是否设置为32位或16位模式以及移位配置。
感谢您的提示。 我今天或明天会检查这个问题。
>当用户在输入端看到65000、9和14时、SDFM 的输入模拟电压是多少。 用户能否使用万用表或示波器通过探测来测量和确认值?
我已经为你感应了这一点。 请参阅附件
此外、我将通过万用表测量输出信号、并在今天或明天为您提供更新。
>用户正在使用 PWM 中断定期读取数据。 但这并不意味着当我们读取数据时、SDFM 中的数据已准备就绪。 您能否使用状态端口 DFSTS = 1并检查数据是否有效? 您也可以在配置参数中配置启用数据过滤器确认中断参数。
我检查了 DFSTS 状态、所有 SDRAM 的状态均为1。
此致、
Danilo
达尼洛
[引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020619/launchxl-f28379d-measure-a-current-via-the-sigmadelta-sensors/3809711 #3809711">SDFM 的输入模拟电压是多少?当用户在输入端看到65000、9和14时、SDFM 的输入模拟电压是多少? 用户能否使用万用表或示波器通过探测来测量和确认值?Aditya Padmanabha 可以确认、但我认为问题是 AMC 器件输入端的电压。
您好、Danilo、Gus、
很抱歉、误解了、是的、我希望 在外部 AMC 器件转换为模拟 SD 信号之前将输入模拟电压输入到外部 AMC 器件、正如我们从示波器屏幕截图中看到的那样。
谢谢、
Aditya
您好、Gus 和 Aditya、
请参阅下面的客户响应。
所有 AMC 器件(引脚1)的输入电压大约为5V (通过万用表验证)。
随附的原理图、您可以看到在 TI 的 TIDA-1606中以何种方式实现 AMC。
对于所有三个器件、位流的输出电压大约为3.3V/2 = 1.65V。
位流大约为50%的1和0、正如我所感应的先前结果中所见。
控制器卡 SD-Flter 模块参数为
调制器时钟模式:0
Comperator 过滤器类型:Sinc1
Comperator 过采样率:0
Comperator 阈值上限:0
Comperator Lower treshold:0
数据过滤器类型:Sinc3
过采样率的数据滤波器:255
数据表示:16位
->这些参数与 Mathworks 示例中的参数相同>> www.mathworks.com/.../sdfmexample.html
来自 Mathworks:"对于以下(上述) SDFM 配置、输出数据范围为(-32、768至32、767)"
这告诉我、对于50%的位流、SDFM 滤波器输出应该接近于零。
我认为 C 代码中 SD 滤波器模块的实现存在一些问题
此致、
Danilo
您好 Danillo、
我认为您将引脚 AVDD 上的电压称为5V、但 AINP 和 AINN 上的差分电压是在 DOUT 产生 SD 信号的电压。 因此、我们需要测量这些电压。
谢谢、
Aditya