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.
我对 SDFM 有一些相关的问题:
SDFM 过去有一种奇怪的行为。 我将使用该模块来监控电流传感器、以便在发生短路时快速关闭器件。 为此、我使用内部具有低过采样率的比较器单元、并使用具有更高过采样率的 SDFM. Data 进行正常测量。
在测量时、我使用具有 Σ-Δ 调制器的独立 PCB。 由于版本不同、我使用不同的 Σ-Δ 调制器(ADS1203、ADS1202、AMC1303E)。 在首次设置期间、我意识到10MHz 调制器不能与 TMS230一起工作、因为它在其 SDMF 中仅支持8...20*t_SYSCLK。 因此、我决定将 TMS 的频率降低至180MHz、因此它还支持10MHz 调制器。
通过使用电路板、我注意到 SDFM 比较器有时毫无理由地跳闸。 这必须是由于 SDFM 同步错误造成的。
为了更深入地了解该问题、我对 FPGA 进行了编程、以输出曼彻斯特编码 Σ-Δ 流并使用参数。 为了查看 SDFM 是否失去同步、我每次有新数据可用时都会设置一个中断。
我觉得有点奇怪。 以精确的200MHz 运行 TMS 只支持9.2到15.4Mhz 的数据流。 除此之外的一切都将触发跳闸。 但将频率更改为190甚至210MHz 将使 SDFM 支持更高的频率。 将引脚的 QSEL 从异步更改为同步有时会改善行为、但并非总是如此。 具体取决于数据流的确切频率。
在图片上、您可以看到每次 TMS 有新数据可用时、通道1上的 Σ-Δ 数据流和切换输出。
我假设每次获取新值(DPX 图片上的蓝色线条)所需的时间较长时、都会得到错误的值。
由于我使用光纤电缆在应用中传输数据流、因此我还了解了高电平和低电平状态的不同时间、因为光纤电缆通常会稍微延迟上升沿。
我意识到、如果边沿的延迟在10ns 范围内、无论数据流的运行频率是多少、都会损坏数据。
那么、您是否有详细说明、SDFM 是如何工作的、以及必须满足哪些限制? 为什么它被限制为8...20*t_SYSCLK 的频率? 您只是对信号进行过采样、过采样后的算法是什么? 因为技术参考手册的真正短的限制是不够的。
我将专门讨论上升时间、保持时间、甚至是对实现的描述都非常有用。 因为像这样、我根本就不能使用 TMS。 使用 FPGA 对我来说更有意义。
Stefan、
F28377D 中提供的曼彻斯特解码方案基于 SYSCLK。 曼彻斯特解码仅在曼彻斯特位流满足 DS 中提到的最小/最大限制时有效。 仅当 GPIO 配置为异步模式时、才能使用曼彻斯特模式。 因此、您无法使用同步模式(或)实时模式。 与其他模式相比、这使得曼彻斯特模式更容易受到任何 EMI (或)振铃噪声的影响。 噪声可能会干扰解码方案并破坏滤波器结果、从而导致意外跳闸事件。 与 GPIO_QUAL (3采样模式)一起使用时的模式0可提供最佳的抗噪性能。 您在通道2信号中看到的抖动似乎表明解码方案确实会受到影响。 您可以尝试通过适当的阻抗匹配来降低振铃噪声。
SDFM 中配置的 OSR (DOSR (或) COSR)决定了滤波器的频率响应、还决定了滤波器的数据速率和稳定时间。
此致、
曼诺伊
您好、Manoj、
您回答了很多问题中的一个。
我从 GPIO 上的异步设置开始。 将其更改为其他内容只是为了消除问题。 但正如我所描述的那样,它并没有发生很大的变化。 但我将继续使用异步设置。
但现在回到根本问题:
今天、我又尝试了很多次。 我使用 PWM 和跳闸区域大致了解了正在发生的情况:
我设置了 PWM、它在 CBC 跳闸事件发生前保持开启状态。 因为您谈到了 EMI、所以我想确保能够很好地检测到这些级别。 为此、我使用了不同的 GPIO 并通过 inputXbar 将其配置为跳闸事件。 因此、每当曼彻斯特流变高时、PWM 将变低、然后再次变高、此时该流再次变低。 然后、我将 GPIO 反相以检查下降沿。 所有测试看起来都很好。 因此、我遇到的问题不应是 EMI 或误检测到的电平或边沿造成的。
为了查看错误发生时的曼彻斯特流、我配置了跳闸区域、因此每次 SDFM 比较器的输出跳闸时、它都会跳闸 PWM。
结果如下图所示。 为了进行测试、我以16.6MHz (60ns)运行曼彻斯特流、高周期30ns、低周期30ns。 曼彻斯特流具有以下位:100101101001、从重新开始。
TMS320以200MHz 运行、基于20MHz 时钟和 IMULT = 20 (* 20)、PLLSYSCLKDIV = 1;(/2)的 PLL 设置。
可以看出、SDFM 235µs 每1 μ s 都会失去同步并解码错误的值。
为了了解错误,我增加了24.7MHz。 可以看到、同步丢失的时间完全相同。 因此、问题不能是曼彻斯特编码信号中的错误、也不能是 TMS 之外的时序问题。
但是、将 PLL 设置更改为稍微不同的值、例如 IMULT = 39 (* 39)、PLLSYSCLKDIV = 2;(/4)= 195MHz、将使错误消失。 即使将其更改为205Mhz、也会使其消失。
为了完全确定不是由于信号的原因,我甚至添加了一个总线驱动程序,以使曼彻斯特编码信号看起来更好,但没有改变行为。
我首先在一个自制的电路板上检测到这种行为。 为了100%确定这不是由于我们的板、我切换到了 Launch-XL 板。 Launch-XL 板基于10MHz 晶体。 因此我决定使用以下时钟设置:IMULT = 40 (* 20)、PLLSYSCLKDIV = 1;(/2)= 200MHz。
在这里、我也会得到 Σ-Δ 数据解码的错误、但两者之间的时间为138µs μ s、因此几乎占其一半(请参阅随附的图)。
为了更好地理解、我开始用冰雾冷却晶体。 通过冷却晶体、我能够增加故障间隔时间。 散热 TMS 没有太大变化。 但也会冷却 FPGA 板晶体、这会略微改变时间。 因此、TMS 中的某些位置必须存在别名、这会导致 SDFM 的错误行为。
请告诉我 SDFM 是如何工作的。
Stefan、
您使用的是哪种调制器? 调制器是否会生成自己的时钟(或)、您是否使用 PWM 向 SD 调制器提供时钟?
[引述]
我设置了 PWM、它在 CBC 跳闸事件发生前保持开启状态。 因为您谈到了 EMI、所以我想确保能够很好地检测到这些级别。 为此、我使用了不同的 GPIO 并通过 inputXbar 将其配置为跳闸事件。 因此、每当曼彻斯特流变高时、PWM 将变低、然后再次变高、此时该流再次变低。 然后、我将 GPIO 反相以检查下降沿。 所有测试看起来都很好。 因此、我遇到的问题不应是 EMI 或误检测到的电平或边沿造成的。
[/报价]
将 GPIO 设置为跳闸事件(通过输入 XBAR)不是一个有效的实验(这意味着它不是一个同类比较)。 曼彻斯特位流以更高的速度切换、因此更容易出现振铃噪声。
[引述]
您的
为了查看错误发生时的曼彻斯特流、我配置了跳闸区域、因此每次 SDFM 比较器的输出跳闸时、它都会跳闸 PWM。
[/报价]
您的第二个实验只是在跳闸事件发生之前观察2 - 3个 SD 位流。 因此、它可能掩盖了问题。 您需要观察最多顺序的正弦滤波器 x OSR SD 时钟周期、以获得更好的效果。 最后一个 OSR SD 时钟周期非常重要。 通常、滤波器输出误差在最终跳变之前会累积误差。
不过、我很惊讶您的行程事件是非常周期性的、以及它与 SYSCLK 频率的关系。 这是一个有趣的观察结果。 我对这种行为没有适当的解释。 我以前从未见过这种情况。 在我们的实验室设置中、我们能够使模式2在10/15/20MHz 下正常工作、没有任何问题、并且我们开始看到噪声注入位流时出现问题。 此外、我们观察到的行程事件是随机的、而不是周期性的。
您的系统中是否存在会引起开关噪声并在这些频率下导致接地反弹的情况?
此外、您是否想了解曼彻斯特解码的工作原理? 不同模式下的滤波器模块工作方式相同。 不同模式之间的变化是位流的读取方式。
此致、
曼诺伊
è 您使用的是哪种调制器? 调制器是否会生成自己的时钟(或)、您是否使用 PWM 向 SD 调制器提供时钟?
我 的 SD 调制器(ADS1203、ADS1202、AMC1303E)使用内部时钟、就像我的 FPGA 一样。
è 将 GPIO 设置为跳闸事件(通过输入 XBAR)不是有效的实验(这意味着它不是同类比较)。 曼彻斯特位流以更高的速度切换、因此更容易出现振铃噪声。
我理解您的意思。 我只是想知道边沿检测的精确度。 由于我使用的是相同的电路、因此边沿和上升时间是相同的。 但当然、仍可能存在 EMI 问题。 但我认为这种情况不太可能发生。
è 您的第二个实验在跳闸事件发生前观察2 - 3个 SD 位流。 因此、它可能掩盖了问题。 您需要观察最多顺序的正弦滤波器 x OSR SD 时钟周期、以获得更好的效果。 最后一个 OSR SD 时钟周期非常重要。 通常、滤波器输出误差在最终跳变之前会累积误差。
我还检查了“较旧”位,但它们看起来都不错。 占空比或不同的边沿或 EMI 耦合没有变化。
è 您的系统中是否有会引起开关噪声的东西、从而在这些频率下导致接地反弹?
不、不客气。 我还暂停了 CPU、以确保代码不会导致此问题。 即使 CPU 暂停、也会发生错误。 我还检查了所有电源电压、但它们看起来都很好、没有纹波。
è 但是、您的跳闸事件非常周期性、并且与 SYSCLK 频率有何关系、我对此感到非常惊讶。 这是一个有趣的观察结果。 我对这种行为没有适当的解释。 我以前从未见过这种情况。 在我们的实验室设置中、我们能够使模式2在10/15/20MHz 下正常工作、没有任何问题、并且我们开始看到噪声注入位流时出现问题。 此外、我们观察到的行程事件是随机的、而不是周期性的。
我想问题是时钟速度有轻微的差异。 我的 FPGA 以400MHz 运行、并生成位流。 假设 TMS 的运行频率正好为200MHz、FPGA 的运行频率为400.01MHz、则需要100µs μ s、直到时钟移出一个周期(希望我正确计算)。 如果曼彻斯特解码器实施不好、这种移位可能会导致大量同步。 这就是我想了解曼彻斯特解码器的实现的原因。 滤波器不太感兴趣、因为它看起来工作良好、但曼彻斯特解码似乎带来了麻烦。
我检查了所有 PCB 的接地、差分接地中没有反弹。
此致、Stefan
经过另一天的调查,我更接近这个问题。
首先、让我总结一下曼彻斯特解码器的工作原理:
现在、要说明这种方法的缺点:
但这些问题与我所面临的问题没有直接关系。
为了使问题更加接近、我编写了一个小的 for (;;)循环、在这里我只读出以下寄存器:
这些寄存器我写入一个具有2000个值的数组、并由调试器读出它们。
for 循环的运行时间大约为400ns、因此我对分辨率为400ns 的800µs Ω 的所有值有一个完整视图。
Sdfm1Regs.SDCTLPARM1.bit.MS:(仅限位15至位5)
[1807] unsigned int 0000000010001000b (二进制) 0x0000D7CF@数据 [1808]无符号整型 0000000010001000b (二进制) 0x0000D7D0@数据 [1809]无符号整型 0000000010001000b (二进制) 0x0000D7D1@数据 [1810]无符号整型 0000000010001000b (二进制) 0x0000D7D2@数据 [1811]无符号整型 0000000010001000b (二进制) 0x0000D7D3@数据 [1812]无符号整型 0000000010001000b (二进制) 0x0000D7D4@数据 [1813]无符号整型 0000000010001000b (二进制) 0x0000D7D5@数据 [1814]无符号整型 000000001000b (二进制) 0x0000D7D6@数据 [1815]无符号整型 0000000010001000b (二进制) 0x0000D7D7@数据 [1816]无符号整型 0000000010001000b (二进制) 0x0000D7D8@数据 [1817]无符号整型 0000000010001000b (二进制) 0x0000D7D9@数据 [1818]无符号整型 000010011100b (二进制) 0x0000D7DA@数据 [1819]无符号整型 000010011100b (二进制) 0x0000D7DB@数据 [1820(2008)无符号整型 000010011100b (二进制) 0x0000D7DC@数据 [1821]无符号整型 000010011100b (二进制) 0x0000D7DD@数据 [1822]无符号整型 000010011100b (二进制) 0x0000D7DE@数据 [1823]无符号整型 000010011100b (二进制) 0x0000D7DF@数据 [1824]无符号整型 000010011100b (二进制) 0x0000D7E0@数据 [1825]无符号整型 000010011100b (二进制) 0x0000D7E1@数据 [1826]无符号整型 000010011100b (二进制) 0x0000D7E2@数据 [1827]无符号整型 000010011100b (二进制) 0x0000D7E3@数据 [1828]无符号整型 000010011100b (二进制) 0x0000D7E4@数据 [1829] unsigned int 000010011100b (二进制) 0x0000D7E5@数据 [1830]无符号整型 000010011100b (二进制) 0x0000D7E6@数据 [1831] unsigned int 000010011100b (二进制) 0x0000D7E7@数据 [1832]无符号整型 000010011100b (二进制) 0x0000D7E8@数据 [1833]无符号整型 000010011100b (二进制) 0x0000D7E9@数据 [1834]无符号整型 000010011100b (二进制) 0x0000D7EA@数据 [1835]无符号整型 000010011100b (二进制) 0x0000D7EB@数据 [1836]无符号整型 000010011100b (二进制) 0x0000D7EC@数据 [1837]无符号整型 000010011100b (二进制) 0x0000D7ED@数据 [1838]无符号整型 000010011100b (二进制) 0x0000D7EE@数据 [1839]无符号整型 000010011100b (二进制) 0x0000D7EF@数据 [1840]无符号整型 000010011100b (二进制) 0x0000D7F0@数据 [1841]无符号整型 000010011100b (二进制) 0x0000D7F1@数据 [1842]无符号整型 000010011100b (二进制) 0x0000D7F2@数据 [1843]无符号整型 000010011100b (二进制) 0x0000D7F3@数据 [1844]无符号整型 000010011100b (二进制) 0x0000D7F4@数据 [1845]无符号整型 000010011100b (二进制) 0x0000D7F5@数据 [1846]无符号整型 000010011100b (二进制) 0x0000D7F6@数据 [1847]无符号整型 000010011100b (二进制) 0x0000D7F7@数据 [1848]无符号整型 000010011100b (二进制) 0x0000D7F8@数据 [1849]无符号整型 0000000010011100b (二进制) 0x0000D7F9@数据 [1850]无符号整型 000010011100b (二进制) 0x0000D7FA@数据 [1851]无符号整型 000010011100b (二进制) 0x0000D7FB@数据 [1852]无符号整型 000010011100b (二进制) 0x0000D7FC@数据 [1853]无符号整型 000010011100b (二进制) 0x0000D7FD@数据 [1854]无符号整型 000010011100b (二进制) 0x0000D7FE@数据 [1855]无符号整型 000010011100b (二进制) 0x0000D7FF@数据 [1856]无符号整型 000010011100b (二进制) 0x0000D800@数据 [1857]无符号整型 000010011100b (二进制) 0x0000D801@数据 [1858]无符号整型 000010011100b (二进制) 0x0000D802@数据 [1859]无符号整型 000010011100b (二进制) 0x0000D803@数据 [1860]无符号整型 000010011100b (二进制) 0x0000D804@数据 [1861]无符号整型 000010011100b (二进制) 0x0000D805@数据 [1862]无符号整型 000010011100b (二进制) 0x0000D806@数据 [1863]无符号整型 000010011100b (二进制) 0x0000D807@数据 [1864]无符号整型 000010011100b (二进制) 0x0000D808@数据 [1865]无符号整型 000010011100b (二进制) 0x0000D809@数据 [1866]无符号整型 0000000010001000b (二进制) 0x0000D80A@数据 [1867]无符号整型 0000000010001000b (二进制) 0x0000D80B@数据 [1868]无符号整型 0000000010001000b (二进制) 0x0000D80C@数据 [1869]无符号整型 0000000010001000b (二进制) 0x0000D80D@数据 [1870]无符号整型 0000000010001000b (二进制) 0x0000D80E@数据 [1871]无符号整型 0000000010001000b (二进制) 0x0000D80F@数据 [1872]无符号整型 0000000010001000b (二进制) 0x0000D810@数据 [1873]无符号整型 000000001000b (二进制) 0x0000D811@数据 [187] unsigned int 000000001000b (二进制) 0x0000D812@数据 [1875]无符号整型 0000000010001000b (二进制) 0x0000D813@数据 [1876]无符号整型 0000000010001000b (二进制) 0x0000D814@数据 [1877]无符号整型 000000001000b (二进制) 0x0000D815@数据 [1878]无符号整型 0000000010001000b (二进制) 0x0000D816@数据 [1879] unsigned int 000000001000b (二进制) 0x0000D817@数据 [1880]无符号整型 000000001000b (二进制) 0x0000D818@数据 [1881]无符号整型 000000001000b (二进制) 0x0000D819@数据 [1882]无符号整型 0000000010001000b (二进制) 0x0000D81A@数据 [1883]无符号整型 0000000010001000b (二进制) 0x0000D81B@数据 [1884]无符号整型 0000000010001000b (二进制) 0x0000D81C@数据 [1885]无符号整型 0000000010001000b (二进制) 0x0000D81D@数据 [1886]无符号整型 0000000010001000b (二进制) 0x0000D81E@数据 [1887]无符号整型 0000000010001000b (二进制) 0x0000D81F@数据
Sdfm1Regs.SDDATA1.bit.DATA32HI:
[1807]内部 -5. 0x0000C7CF@数据
[1808]内部 -5. 0x0000C7D0@数据
[1809]内部 -5. 0x0000C7D1@数据
[1810]内部 -5. 0x0000C7D2@数据
[1811]内部 5. 0x0000C7D3@数据
[1812]内部 5. 0x0000C7D4@数据
[1813]内部 5. 0x0000C7D5@数据
[1814]内部 -5. 0x0000C7D6@数据
[1815]内部 -5. 0x0000C7D7@数据
[1816]内部 -5. 0x0000C7D8@数据
[1817]内部 5. 0x0000C7D9@数据
[1818]内部 5. 0x0000C7DA@数据
[1819]内部 5. 0x0000C7DB@数据
[1820年]内部 -5. 0x0000C7DC@数据
[1821]内部 -5. 0x0000C7DD@数据
[1822]内部 -5. 0x0000C7DE@数据
[1823]内部 5. 0x0000C7DF@数据
[1824]内部 5. 0x0000C7E0@数据
[1825]内部 5. 0x0000C7E1@数据
[1826]内部 5. 0x0000C7E2@数据
[1827]内部 -5. 0x0000C7E3@数据
[1828]内部 -5. 0x0000C7E4@数据
[1829]内部 -5. 0x0000C7E5@数据
[1830]内部 5. 0x0000C7E6@数据
[1831]内部 5. 0x0000C7E7@数据
[1832]内部 5. 0x0000C7E8@数据
[1833]内部 -5. 0x0000C7E9@数据
[1834]内部 -5. 0x0000C7EA@数据
[1835]内部 -5. 0x0000C7EB@数据
[1836]内部 127. 0x0000C7EC@数据
[1837]内部 127. 0x0000C7ED@数据
[1838]内部 127. 0x0000C7EE@数据
[1839]内部 127. 0x0000C7EF@数据
[1840]内部 327 0x0000C7F0@数据
[1841]内部 327 0x0000C7F1@数据
[1842]内部 327 0x0000C7F2@数据
[1843]内部 327 0x0000C7F3@数据
[1844]内部 579 0x0000C7F4@数据
[1845]内部 579 0x0000C7F5@数据
[1846]内部 579 0x0000C7F6@数据
[1847]内部 1169. 0x0000C7F7@数据
[1848]内部 1169. 0x0000C7F8@数据
[1849]内部 1169. 0x0000C7F9@数据
[1850]内部 1169. 0x0000C7FA@数据
[1851]内部 -2271. 0x0000C7FB@数据
[1852]内部 -2271. 0x0000C7FC@数据
[1853]内部 -2271. 0x0000C7FD@数据
[1854]内部 -2271. 0x0000C7FE@数据
[1855]内部 -3267 0x0000C7FF@数据
[1856]内部 -3267 0x0000C800@数据
[1857]内部 -3267 0x0000C801@数据
[1858]内部 -3151 0x0000C802@数据
[1859]内部 -3151 0x0000C803@数据
[1860]内部 -3151 0x0000C804@数据
[1861]内部 -3151 0x0000C805@数据
[1862]内部 -43. 0x0000C806@数据
[1863]内部 -43. 0x0000C807@数据
[1864]内部 -43. 0x0000C808@数据
[1865]内部 -3. 0x0000C809@数据
[1866]内部 5. 0x0000C80A@数据
[1867]内部 -5. 0x0000C80B@数据
[1868]内部 -5. 0x0000C80C@数据
[1869]内部 -5. 0x0000C80D@数据
[1870]内部 5. 0x0000C80E@数据
[1871]内部 5. 0x0000C80F@数据
[1872]内部 5. 0x0000C810@数据
[1873]内部 -5. 0x0000C811@数据
[187]内部 -5. 0x0000C812@数据
[1875]内部 -5. 0x0000C813@数据
[1876]内部 5. 0x0000C814@数据
[1877]内部 5. 0x0000C815@数据
[1878]内部 5. 0x0000C816@数据
[1879]内部 -5. 0x0000C817@数据
[1880]内部 -5. 0x0000C818@数据
[1881]内部 -5. 0x0000C819@数据
[1882]内部 5. 0x0000C81A@数据
[1883]内部 5. 0x0000C81B@数据
[1884]内部 5. 0x0000C81C@数据
[1885]内部 5. 0x0000C81D@数据
[1886]内部 -5. 0x0000C81E@数据
[1887]内部 -5. 0x0000C81F@数据
在此期间、Sdfm1Regs.SDCTLPARM1.bit.MS 仅保持为零。
使用我计算的时间(环路为2.5MHz、系统时钟为200MHz、同步为1024个节拍)、曼彻斯特解调器应每12个值在阵列中重新同步一次。 这些值应每3到4个周期更新一次(25MHz 曼彻斯特流、过采样率32)。 在这些值上、您几乎每4个周期就会看到一个新值。 我现在的假设是、由于曼彻斯特5.12µs 器每隔1 μ s 就会重新同步一次、因此曼彻斯特流的时钟在此期间会稍微发生变化、因此解码器会解释错误的值。 如果您看一下数组中的值1865、您会看到、这是它再次获得真实值的点。 这正是重新同步发生的时刻(请参阅 Sdfm1Regs.SDSTATUS[1865])。 由于在25MHz 曼彻斯特流时具有4的较小的过采样率以及同步后对位进行采样的技术,我看不到这方面的解决方法。
您能确认我得到了解码器的功能吗? 您能提供有关解码器的更多信息吗? 它是如何同步的、同步的频率、是否可以减少同步所需的节拍(1024)、您是否有一个使用硬件描述语言的程序、我可以模拟解码器? 您是否曾使用不同的频率测试过您的解码器? 您应该能够通过采用 Σ-Δ 调制器和 TMS 重新生成误差。 如果不是从一开始就发生这种情况、请尝试使用一些冰霜来冷却一个振荡器、使其脱离调谐状态。
我们是否可以设置电话来讨论后续步骤? 您应该拥有施密特先生的联系数据。