0

我目前正在使用一个 atmel 微控制器 EVK1104s,其中包含UC32 数据表。我们实际上已经在定制的 PCB 上植入了这个芯片,并且正在编写更多的固件。

目前,我需要告诉微控制器单元(MCU)上的 ADC 以(8k 样本/秒)进行采样。实际上,这是用于对麦克风进行采样。无论哪种方式,文档都不清楚,我正在寻找一些澄清。

我知道要更改采样率,我需要更改所谓的模式寄存器,该寄存器用于配置 ADC 以供使用(上面链接中的第 799 页)。这是允许我更改采样/保持时间/启动时间和 ADCclock 的寄存器。

EX(from pg 799): 
Sample & Hold Time = (SHTIM+3) / ADCClock
ADCClock = CLK_ADC / ( (PRESCAL+1) * 2 )

据我所知,我只需要更改 PRESCAL 以使 ADCClock 以 8Khz 运行。问题是 PRESCAL 仅限于 8 位分辨率。

例如,如果控制器设置为 12Mhz/x = 8Khz,则 x 需要为 1500。因为 x 限制为 8 位,正如我之前所说,这似乎是不可能的,因为最大值为 255。

我觉得我在这里做错了什么,或者不理解数据表想要我做什么。任何人都可以确认我刚刚谈到的内容或帮助指导我吗?

4

1 回答 1

2

您对采样率和 ADC 率感到困惑。

您在手册中引用的寄存器仅控制一个样本的采集。寄存器允许您控制对电压进行采样的时间。这可能会对您产生影响,具体取决于所涉及的电路。也就是说,您不想为您的电路采样太快。(我没有仔细查看数据表,但一些微控制器会采集几个样本并对它们进行平均。这种行为也由寄存器控制。)

但是 8 kHz 采样率是指您想要采样的频率。也就是说,这是您要触发单个样本的频率。你提到的寄存器没有解决这个问题。您需要使用时钟和中断处理程序将数据从寄存器中移出存储到某处或对其进行处理,然后触发下一个样本。还有一个中断处理程序可以在样本准备好后立即处理它。在该方案中,您使用处理程序:一个触发样本;另一个在样品准备好时处理样品。

编辑:

要详细解释为什么您不想要这么慢的 ADC 速率,请考虑 ADC 如何生成其数据。它对第一位进行采样,等待一个周期,对第二位进行采样,依此类推,持续 10 个周期。结果的准确性取决于在所有这些样本中保持稳定的信号。如果信号在变化,那么这个数字的位是没有意义的。您需要将预分频器和 ADC 时钟设置得足够快,以使信号不会改变,但要足够慢以使信号稳定下来。

所以是的,您想使用时钟和中断处理程序来读取数据然后触发下一次读取。ADC 独立于处理器运行,并在中断再次运行时准备就绪。(第一次阅读将是垃圾,但你可以设置一个标志或其他东西来防止它。)

volatile int running = false

Handler()
    if(running) do something with data
    running = true
    trigger ADC
    output compare += 1/8000 s
于 2013-04-08T19:51:31.227 回答