大家好、我叫 Pierre。
在我的项目中、我将使用 PCM5142来生成低振幅信号(mV 至 µV μ V 缩放)。 DAC 连接到 STM32 MCU。 MCU 为 DAC 提供所有 I2S 时钟(因此没有 PLL)。 时钟 设置为:
| LRCK | 16kHz |
| 板 | 1024 kHz |
| SCK | 4096 kHz |
在示波器和逻辑分析仪上检查时,我发现 I2S 帧正常:频率有效,数据被发送到 DAC。
我的代码包括从 SD 卡读取数据、将其存储在缓冲区中、然后连续发送到 DAC。 DAC 以16KHz 运行、我要读取的数据长16000点(1s 周期)、存储在16位中。 我的 DAC 配置如下:
| 寄存器 | 值 | 原因 | |
| 4. | 0 | 无需 PLL、系统时钟由 MCU 提供 | |
| 14. | 0x30 | 系统时钟是 DAC 源 | |
| 40 | 0x00 | 数据宽度为16位 | |
| 43. | 0x07 | 无去加重功能的低延迟滤波器 | |
| 59. | 0x77 | 不需要自动、因此为两个通道设置最长延迟 | |
| 8. | 0x0C | GPIO 使能 | |
| 82. | 0x04 | 在 GPIO3上查找左通道的自动静音标志 | |
| 83. | 0x05 | 在 GPIO4上查找右通道的自动静音标志 | |
| 65 | 0x04 | 禁用自动静音 | |
在 MCU 中运行的代码非常值得:
有时 DAC 的输出信号是可以的:这是它看起来的样子: (很抱歉,我只有旧的模拟示波器,所以它从我的手机上发出)
但是,每次启动时,32秒后输出波形都会发生变化,并“强制为0 /静音”随机延迟(最多1个周期)。我拍了一些照片,但这里的延迟各不一样,下面是几个示例:
(时间已静音:65
(静音时间为220ms)
有时我在启动时看到"截断信号"、它变为另一个截断波形("平坦度"的不同延迟)、甚至整个波形也被截断(0V 输出)。
我打赌的是一个自动静音问题,因为这种现象每32秒出现一次(根据8.3.2.3:数据表中的零数据检测,自动静音的预期延迟为16 kHz),但我可能是错的。 当在 GPIO 上寻找自动静音标志时、我看不到任何东西(始终为0V)。当信号"平坦"时、我还尝试将信号移动1V、以查看输出是1V 还是0V。平坦时的输出值是1V、因此它可能不是自动静音问题。
对问题根源有什么看法? 它是不是错误的 DAC 配置吗? MCU 的软件问题?


