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.
工具/软件:Code Composer Studio
我正在尝试使用为曼彻斯特编码配置的 AMC1306EVM Σ-Δ 模块来配置 Delfino F2837xS CPU。 我已成功接收到来自 SDFM 的16位数据,数据是一致的。 我当前的问题是我接收到的值。
当提供250mV 电压时,我从 SDFM 中只读出大约4400,这比预期的要少得多,因为它是16位有符号值,值高达32768, 由于我提供的值接近评估板支持的最大值、因此我希望输出也接近可用的最大值。 (曼彻斯特编码不是导致这里出现问题的编码;我使用 Mode_0获得了相同的结果)。 负值也是如此;我提供-250mV 电压并接收到接近-4400的负数。 结果一致;如果 I SUPPLY 电压介于-250mV 和+250mV 之间、则按比例接收-4400和+4400之间的输出。 如果输入电压超出[-250;+250]范围、则输出会以更高的不精确度成比例增长、直到我离开评估板的[-320;+320] mVolts 范围。
我已经锻造了一个简单比例、并成功地将我读入的值解释为 mVolts、它提供的读数接近实际供电电压。 但是,我从 DSP 的 SDFM 接收到的范围[-4400;+4400]过于粗略,无法进行精确的电流测量,并且 DSP 的 SDFM 输出差异很小,在解释后会导致±5mV 的误差。 换言之,对于100mV 的输入,我收到的值在高斯响铃时介于95mV 和105mV 之间。 该噪声不是输入的结果;即使输入短路且给出了严格的0、也会发生该噪声。 导线短路并检查是否存在外部干扰。 无论如何、±5mV 的差值将远高于噪声比。
对于 正输入、公式 I 锻造为 mVolts = 320.0 *(SDFM_OUTPUT - 50.0)/ 5250 (对于底片、则略有不同)。 正如我说过的、它运行相对较好、节省了±5mV 误差。
另一方面,当使用从 TI 收到的公式而不是按比例计算的公式时,以 mVolts 为单位的输出甚至不会接近实际输入。 其输出电压远远低于预期。 (正如 Σ-Δ 滤波器的输出远低于预期)。
我收到的公式为 :VIN = 320.0 *{(2 x SDFM_OUTPUT)/((256 * 256 (对于 SINC1))- 1)}
您是否会告知您可以对解释做些什么?
Alexey、
请提供以下信息
1) 1)使用的滤波器类型是什么?
2) 2)什么是 DOSR 设置?
3) 3)您是否使用 PWM 同步选项来同步滤波器?
4) 4)这是定制板(还是)您是否使用控制卡+ AMC EVM 设置?
假设您使用的滤波器类型= Sinc3且 DOSR = 256 (根据您之前的帖子)、则在施加+250mV 时、4400的数字滤波器输出(十进制)显然不正确。 您是否检查了硬件设置? 在担心数字滤波器输出解释之前、我们首先需要克服这一障碍。
此致、
曼诺伊
Manoj、
1和2)配置如下:
Sdfm_configureInputCtrl (gPeripheralNumber、filter1、mode_2);
HLT = 0x7FFF;//过值阈值设置
LLT = 0x0000;//低于值阈值设置
Sdfm_configureComparator (gPeripheralNumber、filter1、SINC3、OSR_32、 HLT、 LLT);
Sdfm_configureData_filter (gPeripheralNumber、filter1、filter_enable、SINC3、 OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
3) 3) PWM11 CMPC 用于同步滤波器。 同步工作正常、我检查了它。
4) 4)我们使用控制卡和 AMC。 我稍后将使用原理图和图片更新该主题。
谢谢、
Alexey。
Manoj、
1) 1)您说得对、我们已使用组件_with _ Manchester 编码替换了评估板上的 Σ-Δ 调制器。
这是我们正在使用的 Σ-Δ 调制器(AMC1306E25)的数据表图片。 字母"E"将其定义为能够进行曼彻斯特编码:
时钟源(10MHz)为 ECAP、未连接到 SD-C
我们已使用此组件替换了评估板库存版本中的 Σ-Δ 调制器。 但是、与 MODE_0一起使用的组件库存版本也存在同样的问题。 (实际上、将组件从 MODE_0更改为 MODE_2会产生完全相同的结果)。 当我们使用库存组件时、我们已通过物理连接(从配置为 ECAP 输出的 GPIO05到配置为 SD-时钟输入的 GPIO17)为 SD-C 输入提供时钟。
调制器可以恢复到库存版本、SD 输出仍将在4500左右的范围内;这是我们转向曼彻斯特的地方。
2) 2)我们使用控制板的3.3V 电压为评估板供电。 我没有在上面的原理图中显示电力线、这是我的故障。
3) 3)我们在 SDFM 复位和读取之间等待27.8 μ s、读取是根据"数据就绪"中断执行的。
黄色通道配置为表示 SDFM 复位。
PWM11被配置为上-下 PWM、 ePWM_TIMER_TBPRD = 2500。 黄色探针 为 PWM11通道 A、配置为 (* ePWM[gPWM_NUMBER]).cmpA.bit.cmPA = ePWM_TIMER_TBPRD - 1 (-1是使信号在示波器上更早)。 用于复位 SDFM 的 CMPC 被配置为 (* ePWM[gPWM_NUMBER])。CMPC = ePWM_TIMER_TBPRD;-因此、由于它们使用相同的计数器、"SDFM Reset"事件恰好在微小的黄色峰值的中间发生。
蓝色通道是一个在 Sigma-Delta 读取函数处切换的 GPIO、它从"数据就绪"中断调用:
_interrupt void Sdfm1_ISR (void)
{
uint32_t sdfmReadFlagRegister = 0;
Sigma_Delta_Read ();
……}
void sigma_delta_read (void){
静态无符号 int loopCounter1 = 0;
int32_t read_data;
GpioDataRegs.GPFTOGGLE.bit.GPIO161 = 1; ===这是蓝色通道的切换。
它们之间的差异为27.8 usecs、这应该足够了。
4) 4)硬件电源如下:
这是由 DSP 评估板供电的数字部件。
这是由内部 EVB 电源供电的模拟部件。
这是一个模拟输入示例、以外部直流电源(电池组)为例。 从 SDFM 读取的相应原始数据为:
获取的
void sigma_delta_read (void){ static unsigned int loopCounter1 = 0; int32_t read_data; GpioDataRegs.GPFTOGGL.bit.GPIO161 = 1; read_data = SDFM1_read_filter1_data_16BIT; filter3_result[loopCounter1]= read_data;
5) 5)我认为、如果您复制我们的设置(使用 EVM 的库存版本-包括 SD-C 时钟)并使用相同的软件来检查结果的相关性、将会很方便。
谢谢、
Alexey。
Manoj、
仅供参考、SDFM 滤波器配置为32位
Sdfm_configureData_filter (gPeripheralNumber、filter1、filter_enable、SINC3、 OSR_256、DATA_32_BIT、SHIFT_0_BITS); void sigma_delt_read (void){ static unsigned int loopCounter1 = 0; Int32_t Read_data; GpioDataRegs.gpTOGGLE.bit.GPIO161 = 1; read_data = SDFM1_read_filter1_data_result_3_ 32位 ;loopFilterdata = 32位;_reset_read_read_data_read_result_read_read_read_read_read_int
—输入为180mV (如上图所示使用万用表进行验证),我在 Filter3_Result 中收到以下数据[]:
谢谢、
Alexey。
Manoj、
好的、我移到了 SINC1、并将 OSR 减小到了32。
Sdfm_configureData_filter (gPeripheralNumber、filter1、filter_enable、SINC1、 OSR_32、DATA_16_BIT、SHIFT_0_Bits);
我不应收到任何不正确的样片。 但是、我在复位后手动跳过3个样本、方法是引入一个全局变量、该变量在 PWM 中断(SDFM 复位)处设置为值3、并降低其在 SDFM 中断处理程序中的值或调用 sigma_delta_read ()
int skip_samples = 3; __interrupt void Sdfm1_ISR (void) { uint32_t sdfmReadFlagRegister = 0; 如果(skip_samples=0) { Sigma_Delta_Read (); } 其他 { skip_samples-; } 。 。 。 .} _interrupt void PWM11_Comparator_C_UP_DOWN_ISR (void) { SKIP_SAples = 3; 。 。 。 .}
这就是示波器现在的样子:
输入值为180mV:
但是、我从 SDFM 获取的读数非常低且噪声很大(请注意、值从16.0到20.0):
您是否会就调试的下一步提出建议?
谢谢、
Alexey。
Manoj、
我们不能承受77 us 的延迟。 我们严格要求总时间为50 μ s、包括至少2次电压测量。 50us 后、电压发生变化、我们必须重置 SD 滤波器、以丢弃在前一个周期中读取的旧数据。 因此、我们只能在高达50us 的范围内运行。 在这段时间内、我们必须测量电压两次、这样 SD 的稳定时间就更短了。 我们甚至考虑将工作周期从50us 减少到25us 或更少、在这种情况下、我认为 Σ-Δ 不会是理想的电压测量解决方案。
我知道 Sinc1是有噪声的、但即使在嘈杂的环境中、我读取的值也不是太低? 输入为180mV、输出为16-20、中值为18、这难道不是该输入的输出过低?
谢谢、
Alexey。
Manoj、
您是对的、在复位和输入为+250mV 的读数之间等待81.6 μ s、SD 滤波器的输出为25577-25581。
谢谢、
Alexey。
Alexey、
很高兴知道这个。 这可以确认您的硬件设置正确、观察到的数字滤波器输出与理论预期输出有良好的相关性。
现在、就应用要求而言、正如 Tom 建议的、您需要将 SD-CX 频率提高到20MHz、这有两个方面:1)与10MHz 相比、它可以为相同的滤波器类型/ OSR 设置提供更好的 ENOB 性能。 2)减少了 Sinc 滤波器的数据速率和延迟。
如果您计划使用 PWM 同步功能每50us 重置一次 SDFM 滤波器通道、并且希望在使用 Sinc3滤波器且 OSR = 240时读取正确的2个滤波器数据
SDCLK = 20MHz
OSR = 240
Sinc1 / Sinc2 / SincFast / Sinc3滤波器的数据速率=(240/ 20MHz)= 12.0us
Sinc1滤波器的延迟= (240/20MHz)= 12.0us
Sinc2滤波器的延迟= 2*(240/20MHz)= 24.0us、其中2是正弦滤波器的阶数
Sinc3滤波器的延迟= 3*(240/20MHz)= 36.0us、其中3是正弦滤波器的阶数
Sincfast 滤波器的延迟= 3*(240/20MHz)= 36.0us、其中3是正弦滤波器的阶数
在50us 窗口内、当使用 Sinc3和 OSR = 240时、您应该能够读取2个正确的滤波器数据。 我添加了250ns 以计入5个 SD-CX 周期。
此致、
曼诺伊
Manoj、
我们设法将 SD 时钟增加到~18MHz、从而减少了更多等待时间。 遗憾的是、在当前设置中、我们无法将 SD 时钟增加到20MHz、因为我们将在 PWM 模式下使用 eCAP 来生成时钟、它在18MHz 后生成的下一个值大约为22MHz、这超出了硬件支持的限制。 不过、我们正在考虑为此目的使用外部振荡器。
感谢您的支持!
Alexey。
Alexey、
很高兴知道您的问题已解决。
我要关闭此主题。 如果您有新问题、请打开新主题。
此致、
曼诺伊